Git-buildpackage
From Wikitech
(To be written up once experimentation is done.)
Contents |
Steps
(extracted from #Experiments below.)
Initially cloning the git repository from Upstream
- Clone the repository from upstream if it doesn't already exist in Gerrit, e.g. from git.debian.org:
$ cd ~/git/debs/ $ git clone git://git.debian.org/git/pkg-puppet/repo.git
- Set git username/email
$ git config --global user.name "Your Name" $ git config --global user.email you@example.com
- Set up the local branches upstream and pristine-tar from the remote branches (but don't switch to them):
$ git branch upstream origin/upstream $ git branch pristine-tar origin/pristine-tar
- Build a source package:
$ git-buildpackage --git-ignore-new --git-export-dir=/var/tmp/build-area/packagename -S
- Build the binary packages with Pbuilder:
# pbuilder --basetgz /var/cache/pbuilder/lucid.tgz /var/tmp/build-area/packagename/packagename_version.dsc
Making changes and testing snapshot builds
- Make changes to the package files
- Make commits or amended commits (uncommitted changes are not exported to the build directory)
- Build snapshot builds for testing with:
$ git-dch --snapshot $ git-buildpackage --git-ignore-new --git-export-dir=/var/tmp/build-area/packagename -S # pbuilder --build --basetgz /var/cache/pbuilder/lucid.tgz /var/tmp/build-area/packagename/packagename_version.dsc
Doing a release
When a package is ready to be released, use the following steps:
$ git-dch -R -N version
- Commit the debian/changelog file (or amend a previous commit)
- Build the final source package with --git-tag:
$ git-buildpackage --git-ignore-new --git-tag --git-export-dir=/var/tmp/build-area/varnish -S
- Build the binaries with Pbuilder as usual
Pushing changes into Gerrit
Push changes for each of the three branches (if applicable): $ git push gerrit master:refs/for/master $ git push gerrit upstream:refs/for/upstream $ git push gerrit pristine-tar:refs/for/pristine-tar
Pushing the repository into Gerrit
You should push any repository with local changes into Gerrit.
- Create a new repository, operations/debs/packagename using the following Gerrit command:
$ ssh username@gerrit.wikimedia.org -p 29418 'gerrit create-project -d "Package packagename" -n operations/debs/packagename -o ops -p operations/debs'
- Create a new remote called gerrit:
$ git remote add gerrit ssh://username@gerrit.wikimedia.org:29418/operations/debs/packagename
- Push the three local branches (master, upstream and pristine-tar) into the fresh remote repository:
$ git push gerrit --all
Experiments
Mark is experimenting with building puppet using git-buildpackage, in labs.
On i-00000080:
- The debian puppet package git repository was cloned into ~/git/debs/puppet:
$ cd ~/git/debs/ $ git clone git://git.debian.org/git/pkg-puppet/puppet.git
- Package build was attempted with git-buildpackage --git-ignore-new --git-pristine-tar
- Signing the package failed, as the Debian maintainer's secret key is not available.
- Package build was attempted without signing:
$ git-buildpackage --git-ignore-new --git-pristine-tar -us -uc
- This worked. We ended up with built packages in ~/git/debs, and a dirty git working dir.
- The git working directory was made clean again, and another build was attempted using
$ git-buildpackage --git-ignore-new --git-pristine-tar -us -uc --git-export-dir=/var/tmp/build-area/puppet
- This worked as well. Packages were being built, and the git working dir remained clean. Packages ended up in the build dir.
- The debian git dir only had version 2.7.6, but we want 2.7.7rc2. So I tried importing the dev release with
$ git-import-orig /tmp/puppet-2.7.7rc2.tar.gz
- This failed, as there was no local upstream branch in the cloned git repository yet. Ok, so let's create it from origin/upstream:
$ git branch upstream origin/upstream
- Now the import worked. But commits were made, with the default git name/mail address. Do set it:
$ git config --global user.name "Your Name" $ git config --global user.email you@example.com
- Try another build.
$ git-buildpackage --git-ignore-new --git-pristine-tar -us -uc --git-export-dir=/var/tmp/build-area/puppet
- Oops. This used version 2.7.6. But, the git-buildpackage manual says changing the changelog itself all the time isn't a good idea. Let's try git-dch:
$ git-dch --snapshot Changelog has been prepared for snapshot #1 at 48473567008ad82cdb0d0a5654dffe7c868fad91
$ git diff diff --git a/debian/changelog b/debian/changelog index 796b61e..f6da810 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +puppet (2.7.6-1ubuntu1~1.gbp484735) UNRELEASED; urgency=low + + ** SNAPSHOT build @48473567008ad82cdb0d0a5654dffe7c868fad91 ** + + * Imported Upstream version 2.7.7rc2 + + -- Mark Bergsma <mark@i-00000080.pmtpa.wmflabs> Wed, 23 Nov 2011 14:06:45 +0000 +
- Cool, but not quite what I need. There was no commit, so let's simply revert that, and try again after reading the git-dch manual:
$ git checkout debian/changelog $ git-dch --snapshot -N 2.7.6+2.7.7rc2 --git-author
$ git diff diff --git a/debian/changelog b/debian/changelog index 796b61e..06a9cac 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +puppet (2.7.6+2.7.7rc2~1.gbp484735) UNRELEASED; urgency=low + + ** SNAPSHOT build @48473567008ad82cdb0d0a5654dffe7c868fad91 ** + + * Imported Upstream version 2.7.7rc2 + + -- Mark Bergsma <mark@wikimedia.org> Wed, 23 Nov 2011 14:23:22 +0000 +
- Now let's try a new build:
$ git-buildpackage --git-ignore-new --git-pristine-tar -us -uc --git-export-dir=/var/tmp/build-area/puppet
- Whoops. It built 2.7.6 instead. Probably because it exported HEAD into the build area. Let's see what it does within the git repository.
$ git-buildpackage --git-ignore-new --git-pristine-tar -us -uc
- So that worked. Hmm, inconsistent. :( I guess we could choose not to care about version numbers for snapshots, and only care about them for releases.