Git-buildpackage

From Wikitech
(Difference between revisions)
Jump to: navigation, search
(Steps)
Line 23: Line 23:
 
* Make commits or amended commits
 
* Make commits or amended commits
 
* Build snapshot builds for testing with:
 
* Build snapshot builds for testing with:
  $  
+
  $ git-dch --snapshot
 +
$ git-buildpackage --git-ignore-new --git-export-dir=/var/tmp/build-area/''packagename''
 +
(or via a source build and pbuilder)
  
 
=== Pushing the repository into Gerrit ===
 
=== Pushing the repository into Gerrit ===

Revision as of 16:18, 15 March 2012

(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

  • Make changes to the package files
  • Make commits or amended commits
  • Build snapshot builds for testing with:
$ git-dch --snapshot
$ git-buildpackage --git-ignore-new --git-export-dir=/var/tmp/build-area/packagename

(or via a source build and pbuilder)

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.

External links

Personal tools
Namespaces

Variants
Actions
Navigation
Ops documentation
Wiki
Toolbox