Hi!

On Thu, 8 Jan 2026 at 08:15, Ian Jackson
<[email protected]> wrote:
> Simon Josefsson writes ("Re: Include git commit id and git tree id in 
> *.changes files when uploading?"):
> > Right.  I use 'gbp import-orig --uscan' to import new upstreams.
>
> You should perhaps consider switching to gbp import-ref.  Thanks to
> Gioele Barabucci for the tip.  AIUI golang packages are primarily in
> git almost by definition.

I think Gioele wanted to point out that git-buildpackage has this
feature. It should not be construed as a suggestion to import new
upstream versions with it. Let me explain.

If a package is using git-buildpackage in the first place, the best
and really only sensible command to import new upstream versions is
`gbp import-orig --uscan` as Simon is already doing, and without any
additional parameters.

This is important for two reasons:

1) Debian uses uscan and upstreams needs to be fetchable with debian/watch info

The whole Debian infrastructure (currently) expects all non-native
packages to have a debian/watch file, and that uscan will download the
upstream source package accordingly. Tools like vcswatch and the new
debaudit run uscan to fetch new and old versions. The package
maintainer should also be using this and not bypassing getting new
upstream versions with some other manual way. With this also anyone
auditing a potential backdoor can reproduce the import and (directly)
see it came from upstream and not from the maintainer in Debian.

2) Git-buildpackage settings should be in debian/gbp.conf for consistency

While I suggest everyone to do upstream imports using `gbp import-orig
--uscan`, it does not mean all packages need to have the same settings
or git layout and so forth. I just consider it a major source of
problems if each maintainer runs the command and passes their own
extra parameters to it, as whoever later works on the package has no
way of knowing what those extra parameters were. By always using the
same generic command to do the import AND by having the settings
specific for that package in debian/gbp.conf we can ensure that
imports are consistent (and also anyone auditing what happened can
reproduce the import).

Why does `gbp import-ref` exist then? That command is used when the
upstream import has already been done once into the git repository and
you want to import the same version to another branch. For example
when there is a new MariaDB version I run in branch `debian/latest`
the command `gbp import-orig --uscan` and eventually upload to
unstable. Later when I backport to Trixie I run in the branch
`debian/13-trixie` the command `gbp import-ref
--upstream-version=11.8.5` and git-buildpackage will automatically use
the upstream sources and tarball already in the git repository.

Does this seem complicated? Yes, there are a lot of moving parts and
most Debian maintainers who want to focus on just packaging and not
learn all possible workflows and git layouts surely feel overwhelmed,
and we need to simplify this going forward.

But for now most maintainers (meaning the subset who use
git-buildpackage) will get things correct by asking for each new
package these 3 questions:

1. Does upstream release tarballs? If so, enforce pristine-tar = True.
2. Does upstream sign the tarballs? If so, configure explicit
signature checking with upstream-signatures = on.
3. Does upstream have a Git repository, and does it have release Git
tags? If so, configure the release Git tag format, e.g.
upstream-vcs-tag = %(version%~%.)s.

The above is a quote from
https://optimizedbyotto.com/post/debian-packaging-from-git/ for those
who want to read a longer explanation with "screenshots" and diagrams.

The above post is using the Entr package in Debian as a real example,
and as you can see on the new debaudit pages it passes all green:

https://debaudit.debian.net/orig-check/result/262f24ff0aa2ef9da6d40118294c404074c93753998db692b852b978dddf6a98
https://debaudit.debian.net/git2dsc/result/262f24ff0aa2ef9da6d40118294c404074c93753998db692b852b978dddf6a98


Simon: In your Go packages the vast majority should have
`upstream-vcs-tag = %v(version%~%.)s` (note the 'v' which is very
common for Go upstreams) and you should continue to always run `gbp
import-orig --uscan` as you do. The dh-make-golang will have this in
new gbp.conf files as soon as the PR that updates the template gets
merged.

We should not stop using uscan. Maybe in the future if there are
better end-to-end workflows that everyone is happy with, but
prematurely abandoning relevant parts of the traditional workflow will
create a hard to manage mess, and potentially even large gaps in
software provenance and auditability.

Hope this helps and clarifies things,

Otto

Reply via email to