summaryrefslogtreecommitdiff
path: root/bin/build-package
diff options
context:
space:
mode:
Diffstat (limited to 'bin/build-package')
-rwxr-xr-xbin/build-package322
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
-}