Lintian Fixes

The Debian Janitor regularly runs lintian-brush over all packages in the archive that are maintained in Git.

The resulting changes can be accessed on this site, or the Janitor can automatically propose them as merge requests on supported hosting sites (Salsa, GitHub, GitLab, Launchpad).

For a current list of open requests, see merge-proposals. For a list of generated changes that ready to be proposed or pushed, see ready (or grouped by lintian tag). For a list of packages that are candidates for fixes, see candidates.

At the moment, the Janitor's merge proposal are still triggered by a human (after manual review).

FAQ

How do I opt in?

Propose a change to the policy that adds an entry for the relevant maintainer or package.

Alternatively, you can send me an e-mail (jelmer@debian.org).

I don’t find this useful. How do I stop it?

If you ignore or close the first merge proposal, there won't be any more for the same maintainer.

You can also just comment on the merge proposal that you don't want any automated merge proposals.

It would be great if you can also give us an idea of what specifically you don’t appreciate about these merge proposals, and if there’s anything that can be done to improve them.

Alternatively, propose a change to the policy on Salsa.

How do I download the diff for a package?

There is a well-formed URL that can be used to download the diff for a specific package, if a diff has been generated:

https://janitor.debian.net/api/lintian-fixes/pkg/PACKAGE/diff

E.g. for gunicorn, the URL would be https://janitor.debian.net/api/lintian-fixes/pkg/gunicorn/diff.

Why does or doesn't the bot update debian/changelog?

Some maintainers generate their debian/changelog files from commit messages in Git using e.g. gbp dch. The janitor attempts to autodetect whether or not the changelog file should be updated along with any changes, by looking at the packages commit history and whether or not it has a [dch] section in debian/gbp.conf.

If this autodetection does not work correctly, then you can force it to not update the changelog by adding a [dch] section to your debian/gbp.conf or get it to (not) update the changelog by setting the update-changelog = False|True flag in debian/lintian-brush.conf.

Bug reports about broken autodetect would also be most welcome.

This is great. How do I get it to automatically push improvements to my repository?

Simply give the bot commit access to your repository, and it will push fixes rather than proposing them.

The bot will need permision to push to the relevant branches. For repositories on a GitLab instances (such as salsa) this means that it will need developer permissions if the relevant branch is unprotected, and maintainer permissions if the relevant branch is protected. See the GitLab permissions guide for details.

How are repositories located?

The bot uses the Vcs-Git and Vcs-Bzr fields in source packages in unstable to locate repositories.

What repositories are supported?

Repositories on the following hosting platforms are supported:

Work is under way to also support Mercurial. Subversion support may also be an option, though I have yet to work out what the equivalent of pull requests in Subversion would be.

What kind of changes are made?

The janitor currently proposes changes that can be made by the lintian-brush tool. This includes fixes for the following issues flagged by lintian:

How do I prevent the janitor from making certain changes?

You can tweak the behaviour of the janitor for a package by editing the configuration file (debian/lintian-brush.conf) in the package. For example, to prevent any changes that are incompatible with oldstable, add the following contents:

compat-release = oldstable

(the default compat-release is stable)

For a full list of supported options, see the lintian-brush.conf(5) manual page.

These configuration options can also be set on a per-maintainer basis; please send me a message if you'd like me to do that.

Won’t this mean I get a pull request for each bit of trailing whitespace?

Some lintian tags are considered to be “add-on only”. Fixes for these lintian tags are only included in a pull request if there were other fixes as well.

Tags currently considered add-on only are:

The bot is proposing an incorrect change. Where do I report this?

For issues with a fix that the bot has proposed, please just follow up on the merge proposal.

What do I do with out-of-date merge proposals?

The Janitor will automatically reschedule processing of packages with a conflicted merge proposal. Once a conflict appears, it may take a couple of hours before the merge proposal is updated.

It will also regularly rebase merge proposals on the packaging branch. It can take several days before this happens, since there is no mechanism to notify the janitor of new commits. You can manually trigger a rerun from the package-specific page linked from the merge proposal.

How do I run the fixers locally?

To run the collection of fixer scripts on a locally checked out package, simply run lintian-brush:

$ apt install lintian-brush
$ lintian-brush

This will report the fixers that were run and automatically commit the changes to the local repository.

How can I contribute more fixer scripts?

You can contribute scripts to the lintian-brush repository at https://salsa.debian.org/jelmer/lintian-brush. See the lintian-brush README file for details.

Consider also adding relevant lintian tags to lintian upstream. This allows silver-platter’s infrastructure to recognize which repositories it needs to process.

How can I automate interactions with the Janitor?

There is an JSON API that can be used to retrieve information about packages, to reschedule runs and trigger creation of merge proposals.

Would it be possible to run the Debian Janitor on the Ubuntu archive?

The Debian Janitor already supports creating merge proposals for Ubuntu packaging branches on Launchpad. However, there is currently no easy mechanism for these merge proposals to be merged from the web UI and they do not yet appear on the Sponsoring Overview page.

What technologies are used?

Lintian is responsible for finding the issues in packages.

UDD is used to find package VCS URLs and to retrieve the lintian results.

Breezy provides abstractions over the version control system (Git, Bazaar, Mercurial, Subversion) and the supported hosting platforms (GitHub, GitLab, Launchpad).

Lintian-brush is responsible for actually making changes to the packages.

Silver-Platter ties this all together; it trawls UDD to find packages that are affected by lintian tags that lintian-brush knows how to fix, clones the packaging branches, invokes lintian-brush and pushes back or creates merge proposals.