Multi-Arch Hint Fixes

The Debian Janitor applies hints generated by the Multi-Arch Hinter 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 hint). 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).


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 (

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.

Why does lintian show warnings now that multi-arch hints have been added?

In some cases, lintian will issue a dependency-is-not-multi-archified warning for new multi-arch values added by the janitor based on suggestions from the multi-arch hinter.

There are two properties of multiarch annotations: Correctness and usefulness. The hinter emits correct annotations. Lintian complains about useless annotations. The intersection of correct and useless is non-empty, but a useless annotation can become useful later by changing a dependency. In order to move forward as fast as possible, the hinter emits all correct hints regardless of whether they're useful.

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:

E.g. for gunicorn, the URL would be

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.

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 apply multi-arch fixes locally?

To apply multi-arch fixes locally, simply run apply-multiarch-hints:

$ apt install lintian-brush
$ apply-multiarch-hints

This will download the hints from hinter, apply them and automatically commit the changes to the local repository.

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.

What technologies are used?

The Multi-Arch Hinter is responsible for finding the issues in packages.

UDD is used to find package VCS URLs.

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

Lintian-brush's apply-multiarch-hints command is responsible for actually making changes to the packages.

Silver-Platter ties this all together and downloads packaging branches, invokes apply-multiarch-hints and pushes back or creates merge proposals.