mika / jenkins-debian-glue

Scripts for Debian package/repository handling inside Jenkins
MIT License
131 stars 91 forks source link

generate-git-snapshot: explicitly set git-export-dir when building with enabled overlay option #231

Open mika opened 4 years ago

mika commented 4 years ago

If debian/gbp.conf contains something like:

| [buildpackage] | overlay = True | export-dir = ../build-area

then invoking gbp with our default $GBP_OPTS then it will fail with:

| gbp:error: Overlay must be used with --git-export-dir.

To avoid running into this, let's check for the overlay option, and if it's enabled then explicitly set --git-export-dir= to '--git-export-dir=../' to generate the orig.tar.* files at the expected place.

JFTR, we are not setting --git-export-dir=../ by default, as this involves some further operations going on, which might be unexpected in existing installations where the overlay feature isn't present/enabled. See e.g.:

| % gbp buildpackage -nc --git-force-create --git-ignore-new --git-ignore-branch -S -us -uc --git-verbose --git-builder=/bin/true --git-cleaner=/bin/true --git-export-dir= | gbp:debug: ['git', 'rev-parse', '--show-cdup'] | gbp:debug: ['git', 'rev-parse', '--is-bare-repository'] | gbp:debug: /bin/true [] [] | gbp:debug: ['git', 'symbolic-ref', 'HEAD'] | gbp:debug: ['git', 'show-ref', 'refs/heads/debian'] | gbp:debug: ['git', 'show-ref', 'refs/heads/pristine-tar'] | gbp:debug: ['git', 'ls-tree', 'upstream/5.8'] | gbp:info: zsh_5.8.orig.tar.gz does not exist, creating from 'upstream/5.8' | gbp:debug: Building upstream tarball with compression 'gzip -9' | gbp:debug: /bin/true ['-nc', '-S', '-us', '-uc'] []

vs:

| % gbp buildpackage -nc --git-force-create --git-ignore-new --git-ignore-branch -S -us -uc --git-verbose --git-builder=/bin/true --git-cleaner=/bin/true --git-export-dir=../ | gbp:debug: ['git', 'rev-parse', '--show-cdup'] | gbp:debug: ['git', 'rev-parse', '--is-bare-repository'] | gbp:debug: /bin/true [] [] | gbp:debug: ['git', 'symbolic-ref', 'HEAD'] | gbp:debug: ['git', 'show-ref', 'refs/heads/debian'] | gbp:debug: ['git', 'ls-tree', 'HEAD'] | gbp:debug: ['git', 'show', '--pretty=medium', 'HEAD:debian/source/format'] | gbp:debug: ['git', 'show', '--pretty=medium', 'HEAD:debian/changelog'] | gbp:debug: ['git', 'show-ref', 'refs/heads/pristine-tar'] | gbp:debug: ['git', 'ls-tree', 'upstream/5.8'] | gbp:info: zsh_5.8.orig.tar.gz does not exist, creating from 'upstream/5.8' | gbp:debug: Building upstream tarball with compression 'gzip -9' | gbp:info: Exporting 'HEAD' to '/home/buildd/zsh-tmp' | gbp:debug: ['git', 'show', '--pretty=medium', 'HEAD:debian/source/format'] | gbp:info: Moving '/home/buildd/zsh-tmp' to '/home/buildd/zsh-5.8' | gbp:debug: ['git', 'show', '--pretty=medium', 'HEAD:debian/source/format'] | gbp:debug: /bin/true ['-nc', '-S', '-us', '-uc'] [] | gbp:debug: rm ['-rf', '/home/buildd/zsh-5.8'] []

Thanks: Guido Günther for feedback Closes: https://github.com/mika/jenkins-debian-glue/issues/230

andrewharle commented 4 years ago

The package that I built from source to perform a test was skalibs (https://salsa.debian.org/zhsj/skalibs.git)

The source build appears to produce the goods, and a successful binary build follows, although I have some doubts. The logs are being spammed with warnings dpkg-source: warning: ignoring deletion of file .... See attached.

I suspect that this is because only the debian directory is present when dpkg-source is called i.e. the overlay is not active. This means that patches cannot be applied/unapplied by dpkg-source, since the upstream source isn't present. AFAIK the build directory with the overlay is deleted after the orig.tar.gz has been created by gbp buildpackage.

I can think of two ways that that might resolve this: