diff options
Diffstat (limited to 'bin/build-package')
| -rwxr-xr-x | bin/build-package | 322 |
1 files changed, 0 insertions, 322 deletions
diff --git a/bin/build-package b/bin/build-package deleted file mode 100755 index 4d73daf..0000000 --- a/bin/build-package +++ /dev/null @@ -1,322 +0,0 @@ -#!/bin/bash - -# Copyright (C) 2011 by Mike Gabriel <mike.gabriel@das-netzwerkteam.de> -# -# This programme is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 3 of the License, or -# (at your option) any later version. -# -# This programme is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc., -# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. - -GIT_USER="gituser" -GIT_HOSTNAME="git.mydomain.org" - -DEBEMAIL="firstname.lastname@mydomain.org" -DEBFULLNAME="Firstname Lastname" -GPG_KEY= -DISTS_SUPPORTED="debian ubuntu" -DEBIAN_DISTROS="lenny squeeze wheezy jessie sid" -UBUNTU_DISTROS="lucid maverick natty oneiric precise" -BUILDS_FOR="\ -debian: squeeze wheezy jessie sid\n\ -ubuntu: lucid precise\n\ -" - -COMPONENT_MAIN="main" -COMPONENT_NIGHTLY="nightly" -COMPONENT_BUNDLES="bundle-release1 bundle-release2" -REPOS_SERVER="packages.mydomain.org" -PACKAGES_WITHOUT_OTHERMIRROR="keyring" -GNUPGHOME=$HOME/.gnupg - -test -z $1 && { echo "usage: $(basename $0) [<subpath>/]<git-project> {main,main/<codename>,nightly,nightly/<codename>} [<git-checkout>]"; exit -1; } - -PREFIX=$(echo `basename $0` | cut -d"-" -f1) -test -f ~/.buildscripts/$PREFIX.conf && . ~/.buildscripts/$PREFIX.conf || { echo "$0 has no valid context prefix..."; exit -1; } - -set -ex - -set_vars() { - USE_SUDO="yes" - PDEBUILD="pdebuild --pbuilder qemubuilder" - TEMP_BASE="$HOME/tmp/" - mkdir -p "$TEMP_BASE" - chmod 2770 "$TEMP_BASE" - - # first argv is the name of the Git project - PROJECT_PATH="$1" - PROJECT_PATH=${PROJECT_PATH/%.git/} - PROJECT="$(basename $PROJECT_PATH)" - - # grab repository component area from command line (2nd argv) or guess it - ARGV2_COMPONENT="$(echo "$2/" | cut -d"/" -f1)" - ARGV2_CODENAME="$(echo "$2/" | cut -d"/" -f2)" - COMPONENT="${ARGV2_COMPONENT:-${COMPONENT:-$COMPONENT_NIGHTLY}}" - CODENAMES="${ARGV2_CODENAME:-${CODENAMES}}" - [ -n "$ARGV2_CODENAME" ] && FORCE_BUILD=0 || FORCE_BUILD=-1 - if [ "x$COMPONENT" = "x$COMPONENT_MAIN" ]; then - CHECKOUT="${3:-build-main}" - elif echo "$COMPONENT_RELEASES" | grep "$COMPONENT" >/dev/null; then - CHECKOUT="${3:-build-$COMPONENT}" - elif [ "x$COMPONENT" = "x$COMPONENT_NIGHTLY" ]; then - CHECKOUT="${3:-master}" - DATE="~${DATE:-$(date +%Y%m%d)}" - else - echo "error: no such package component area for this Git project. Aborting..." - exit -1 - fi - # the DATE might be given as ,,today'' from the command line - [ "x$DATE" = "xtoday" ] && DATE="~$(date +%Y%m%d)" - - # setting paths - PROJECT_DIR="$HOME/build/$COMPONENT/$PROJECT" - PKGDIST="$HOME/pkg-dist/$COMPONENT/$PROJECT" - - # build for other architectures than amd64/i386 - EXTRA_ARCHS="${EXTRA_ARCHS:-}" - EXTRA_ARCHS_ONLY="${EXTRA_ARCHS_ONLY:-}" - - # creating paths - mkdir -p "$TEMP_BASE" - mkdir -p "$PROJECT_DIR" - mkdir -p "$PKGDIST" - - return 0 -} - -prepare_workspace() { - # in any case remove the BUILDS_FOR file - rm -f "$PROJECT_DIR/BUILDS_FOR" - - # make sure our local working copy is up to date... - - if [ -d "$PROJECT_DIR/.git" ]; then - cd "$PROJECT_DIR" && git reset --hard - git checkout --force $CHECKOUT || git checkout --force -b $CHECKOUT - git pull origin $CHECKOUT - git fetch origin upstream:upstream || true - git fetch origin pristine-tar:pristine-tar || true - # and again, get the $CHECKOUT refspec in pure state - git reset --hard - git clean -df - else - cd "$(dirname $PROJECT_DIR)" - git clone git://$GIT_HOSTNAME/$PROJECT_PATH.git - cd "$PROJECT" - git checkout --force $CHECKOUT || git checkout --force -b $CHECKOUT; - git fetch origin upstream:upstream - git fetch origin pristine-tar:pristine-tar || true - git clean -df - fi - cd "$PROJECT_DIR" - - # by default we build for all current debian versions - if test -z $ARGV2_CODENAME; then - test -f BUILDS_FOR || echo -e "$BUILDS_FOR" > BUILDS_FOR - elif echo "$DEBIAN_DISTROS" | grep $ARGV2_CODENAME >/dev/null; then - echo "debian: $ARGV2_CODENAME" > BUILDS_FOR - elif echo "$UBUNUT_DISTROS" | grep $ARGV2_CODENAME >/dev/null; then - echo "ubuntu: $ARGV2_CODENAME" >/dev/null - fi - return 0 -} - -clear_pkgdist() { - # pkgdist directory cleanup - cat "$PROJECT_DIR/BUILDS_FOR" | egrep -v '(^$|^#.*$)' | while read line; do - l_DIST="$(echo ${line/: /:} | cut -d":" -f1 | tr [:upper:] [:lower:])" - l_CODENAMES="${CODENAMES:-$(echo ${line/: /:} | cut -d":" -f2- | tr [:upper:] [:lower:])}" - echo "$DISTS_SUPPORTED" | grep $l_DIST >/dev/null && { - for l_CODENAME in $l_CODENAMES; do - - # in case we build a special CODENAME (squeeze, wheezy, lucid, ...) do skip - # the wrong distribution here... - test -z $CODENAMES || echo $line | grep $CODENAMES || break - - if [ "x$EXTRA_ARCHS_ONLY" = "x" ]; then - for l_ARCH in amd64 i386; do - [ "x$SKIP_ARCH" != "x$l_ARCH" ] && { - mkdir -p "$PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH" - rm -f "$PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/dupload.conf" - rm -f "$PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/$PROJECT_"*.changes - rm -f "$PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/$PROJECT_"*.upload - rm -f "$PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/$PROJECT_"*.build - rm -f "$PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/$PROJECT_"*.dsc - rm -f "$PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/$PROJECT_"*.tar.gz - rm -f "$PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH/"*.deb - } - done - fi - for l_EXTRA_ARCH in $EXTRA_ARCHS; do - mkdir -p "$PKGDIST/$l_DIST/$l_CODENAME/$l_EXTRA_ARCH" - rm -f "$PKGDIST/$l_DIST/$l_CODENAME/$l_EXTRA_ARCH/dupload.conf" - rm -f "$PKGDIST/$l_DIST/$l_CODENAME/$l_EXTRA_ARCH/$PROJECT_"*.changes - rm -f "$PKGDIST/$l_DIST/$l_CODENAME/$l_EXTRA_ARCH/$PROJECT_"*.upload - rm -f "$PKGDIST/$l_DIST/$l_CODENAME/$l_EXTRA_ARCH/$PROJECT_"*.build - rm -f "$PKGDIST/$l_DIST/$l_CODENAME/$l_EXTRA_ARCH/$PROJECT_"*.dsc - rm -f "$PKGDIST/$l_DIST/$l_CODENAME/$l_EXTRA_ARCH/$PROJECT_"*.tar.gz - rm -f "$PKGDIST/$l_DIST/$l_CODENAME/$l_EXTRA_ARCH/"*.deb - done - done - } - done - return 0 -} - -build_packages() { - # use pbuilder for building all variants of this package - cat "$PROJECT_DIR/BUILDS_FOR" | egrep -v '(^$|^#.*$)' | while read line; do - l_DIST="$(echo ${line/: /:} | cut -d":" -f1 | tr [:upper:] [:lower:])" - l_CODENAMES="${CODENAMES:-$(echo ${line/: /:} | cut -d":" -f2- | tr [:upper:] [:lower:])}" - echo "$DISTS_SUPPORTED" | grep $l_DIST >/dev/null && { - for l_CODENAME in $l_CODENAMES; do - - # in case we build a special CODENAME (squeeze, wheezy, lucid, ...) do skip - # the wrong distribution here... - test -z $CODENAMES || echo $line | grep $CODENAMES || break - - TEMP_DIR="$(mktemp -d --tmpdir=$TEMP_BASE)" - mkdir -p "$TEMP_DIR/$PROJECT" - chmod 2770 "$TEMP_DIR" -Rf - - cd "$PROJECT_DIR" - git clone --local "$PROJECT_DIR" "$TEMP_DIR/$PROJECT/" - cd "$TEMP_DIR/$PROJECT" - git checkout $CHECKOUT || git checkout master - find $PROJECT_DIR/../ -type f -maxdepth 0 -mindepth 0 | grep $PROJECT_*.orig.tar.gz &>/dev/null && cp $PROJECT_DIR/../$PROJECT_*.orig.tar.gz .. - GITREV=$(gitrevno) - - # we always build native packages for our repos - SA_OPTION="" - - # we always build native packages for our repos - SA_OPTION="" - test -f debian/source/format && cat debian/source/format | egrep '^3.0.*\(quilt\)$' >/dev/null && { - git fetch origin upstream:upstream - UPSTREAM_VERSION=$(dpkg-parsechangelog | grep Version: | cut -d " " -f2 | sed -e 's/-.*//' -e 's/^.*://') - REVISION=$(dpkg-parsechangelog | grep Version: | cut -d " " -f2 | sed -e 's/.*-//') - git archive --prefix=${PROJECT}-${UPSTREAM_VERSION}/ -o ../${PROJECT}_${UPSTREAM_VERSION}.orig.tar.gz upstream/${UPSTREAM_VERSION} && { - SA_OPTION="--debbuildopts=-sa" - } || echo "1.0" > debian/source/format - } - - # for Ubuntu version is the codename of the distribution release - VERSION=$l_CODENAME - - # translate the version name for Debian releases - [ "x$l_CODENAME" = "xsid" ] && VERSION=unstable - #[ "x$l_CODENAME" = "xjessie" ] && VERSION=testing - #[ "x$l_CODENAME" = "xwheezy" ] && VERSION=stable - #[ "x$l_CODENAME" = "xoldstable" ] && VERSION=oldstable - - # modify the section for non-main package builds - [ "x$COMPONENT" != "xmain" ] && { - mv debian/control debian/control.tmp - cat debian/control.tmp | sed "s#Section:[\ ]*\(.*\)#Section: $COMPONENT/\1#g" > debian/control - } - - # modify changelog for this build - dch --distribution $VERSION --force-distribution -l "+$l_CODENAME~$COMPONENT$DATE~$GITREV~build" "Auto-built $l_DIST $l_CODENAME package for $REPOS_SERVER repository." - mkdir -p $PKGDIST/$l_DIST/$l_CODENAME/{amd64,i386} - OTHERMIRROR="" - if [ "x$COMPONENT" = "x$COMPONENT_NIGHTLY" ]; then - echo $PACKAGE_WITHOUT_OTHERMIRROR | grep $PROJECT >/dev/null || OTHERMIRROR="deb http://$REPOS_SERVER/$l_DIST $l_CODENAME $COMPONENT_MAIN $COMPONENT" - else - echo $PACKAGE_WITHOUT_OTHERMIRROR | grep $PROJECT >/dev/null || OTHERMIRROR="deb http://$REPOS_SERVER/$l_DIST $l_CODENAME $COMPONENT" - fi - if [ $PROJECT = "x2gomatebindings" ]; then - OTHERMIRROR="deb http://packages.mate-desktop.org/repo/debian $l_CODENAME main" - fi - - [ "x$USE_SUDO" != "xyes" ] && { - [ "x$EXTRA_ARCHS_ONLY" = "x" ] && { - [ "x$SKIP_ARCH" != "xamd64" ] && cat debian/control | egrep 'Architecture.*(all|any|amd64)' >/dev/null && { - DIST=$l_DIST CODENAME=$l_CODENAME ARCH=amd64 $PDEBUILD --auto-debsign --debsign-k $GPG_KEY --buildresult "$PKGDIST/$l_DIST/$l_CODENAME/amd64" -- --allow-untrusted $SA_OPTION 0<&- - } - [ "x$SKIP_ARCH" != "xi386" ] && cat debian/control | egrep 'Architecture.*(any|i386)' >/dev/null && { - DIST=$l_DIST CODENAME=$l_CODENAME ARCH=i386 $PDEBUILD --auto-debsign --debsign-k $GPG_KEY --buildresult "$PKGDIST/$l_DIST/$l_CODENAME/i386" -- --binary-arch --allow-untrusted $SA_OPTION 0<&- - } - } - for extra_arch in $EXTRA_ARCHS; do - mkdir -p "$PKGDIST/$l_DIST/$l_CODENAME/$extra_arch" - cat debian/control | egrep "Architecture.*(any|$extra_arch)" >/dev/null && { - DIST=$l_DIST CODENAME=$l_CODENAME ARCH=$extra_arch $PDEBUILD --auto-debsign --debsign-k $GPG_KEY --buildresult "$PKGDIST/$l_DIST/$l_CODENAME/$extra_arch" -- --binary-arch --allow-untrusted $SA_OPTION 0<&- - } - done - } - [ "x$USE_SUDO" = "xyes" ] && { - [ "x$EXTRA_ARCHS_ONLY" = "x" ] && { - [ "x$SKIP_ARCH" != "xamd64" ] && cat debian/control | egrep 'Architecture.*(all|any|amd64)' >/dev/null && { - sudo GNUPGHOME=$GNUPGHOME DIST=$l_DIST CODENAME=$l_CODENAME ARCH=amd64 OTHERMIRROR="$OTHERMIRROR" $PDEBUILD --auto-debsign --debsign-k $GPG_KEY --buildresult $PKGDIST/$l_DIST/$l_CODENAME/amd64 -- --allow-untrusted $SA_OPTION 0<&- - } - [ "x$SKIP_ARCH" != "xi386" ] && cat debian/control | egrep 'Architecture.*(any|i386)' >/dev/null && { - sudo GNUPGHOME=$GNUPGHOME DIST=$l_DIST CODENAME=$l_CODENAME ARCH=i386 OTHERMIRROR="$OTHERMIRROR" $PDEBUILD --auto-debsign --debsign-k $GPG_KEY --buildresult $PKGDIST/$l_DIST/$l_CODENAME/i386 -- --binary-arch --allow-untrusted $SA_OPTION 0<&- - } - } - for extra_arch in $EXTRA_ARCHS; do - mkdir -p "$PKGDIST/$l_DIST/$l_CODENAME/$extra_arch" - cat debian/control | egrep "Architecture.*(any|$extra_arch)" >/dev/null && { - sudo GNUPGHOME=$GNUPGHOME DIST=$l_DIST CODENAME=$l_CODENAME ARCH=$extra_arch OTHERMIRROR="$OTHERMIRROR" $PDEBUILD --auto-debsign --debsign-k $GPG_KEY --buildresult "$PKGDIST/$l_DIST/$l_CODENAME/$extra_arch" -- --binary-arch --allow-untrusted $SA_OPTION 0<&- - } - done - } - rm -Rf "$TEMP_DIR" - done - } - done - return 0 -} - -upload_packages() { - # dupload the new packages to the reprepro repository - cat "$PROJECT_DIR/BUILDS_FOR" | egrep -v '(^$|^#.*$)' | while read line; do - l_DIST=$(echo ${line/: /:} | cut -d":" -f1 | tr [:upper:] [:lower:]) - l_CODENAMES=${CODENAMES:-$(echo ${line/: /:} | cut -d":" -f2- | tr [:upper:] [:lower:])} - for l_CODENAME in $l_CODENAMES; do - - # in case we build a special CODENAME (squeeze, wheezy, lucid, ...) do skip - # the wrong distribution here... - test -z $CODENAMES || echo $line | grep $CODENAMES || break - - if [ "x$EXTRA_ARCHS_ONLY" = "x" ]; then - for l_ARCH in amd64 i386; do - [ "x$SKIP_ARCH" != "x$l_ARCH" ] && { - cd "$PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH" - test -f ./dupload.conf || ln -s ~/.dupload.conf.$PREFIX ./dupload.conf - ls $PROJECT_*.changes &>/dev/null && dupload -c --to $PREFIX-$l_DIST-$l_CODENAME $PROJECT_*.changes 0<&- - } - done - fi - for l_EXTRA_ARCH in $EXTRA_ARCHS; do - cd "$PKGDIST/$l_DIST/$l_CODENAME/$l_EXTRA_ARCH" - test -f ./dupload.conf || ln -s ~/.dupload.conf.$PREFIX ./dupload.conf - ls $PROJECT_*.changes &>/dev/null && dupload -c --to $PREFIX-$l_DIST-$l_CODENAME $PROJECT_*.changes 0<&- - done - done - done - return 0 -} - -### MAIN ### -set_vars $@ && { - if [ "x$(basename $0)" = "x$PREFIX-build-package" ] || [ "x$(basename $0)" = "x$PREFIX-build+upload-package" ]; then - cd $PROJECT_DIR && pkgneedsbuild $CHECKOUT || [ "$FORCE_BUILD" -eq 0 ] && { - prepare_workspace && { - clear_pkgdist - build_packages - } - } - fi - if [ "x$(basename $0)" = "x$PREFIX-upload-package" ] || [ "x$(basename $0)" = "x$PREFIX-build+upload-package" ]; then - upload_packages - fi -} |
