summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
Diffstat (limited to 'bin')
l---------bin/itzks-build+upload-all-packages1
l---------bin/itzks-build+upload-package1
-rwxr-xr-xbin/itzks-build-all-packages60
-rwxr-xr-xbin/itzks-build-package238
-rwxr-xr-xbin/itzks-gitcreate15
-rwxr-xr-xbin/itzks-gitrevno28
-rwxr-xr-xbin/itzks-pkgneedsbuild47
-rwxr-xr-xbin/itzks-tarballrelease43
-rwxr-xr-xbin/itzks-updatebuildmain34
l---------bin/itzks-upload-all-packages1
l---------bin/itzks-upload-package1
11 files changed, 469 insertions, 0 deletions
diff --git a/bin/itzks-build+upload-all-packages b/bin/itzks-build+upload-all-packages
new file mode 120000
index 0000000..32133c5
--- /dev/null
+++ b/bin/itzks-build+upload-all-packages
@@ -0,0 +1 @@
+itzks-build-all-packages \ No newline at end of file
diff --git a/bin/itzks-build+upload-package b/bin/itzks-build+upload-package
new file mode 120000
index 0000000..64ea9b4
--- /dev/null
+++ b/bin/itzks-build+upload-package
@@ -0,0 +1 @@
+itzks-build-package \ No newline at end of file
diff --git a/bin/itzks-build-all-packages b/bin/itzks-build-all-packages
new file mode 100755
index 0000000..6342dce
--- /dev/null
+++ b/bin/itzks-build-all-packages
@@ -0,0 +1,60 @@
+#!/bin/bash
+
+# Copyright (C) 2011 by Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+#
+# This 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 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.
+
+LIB_PACKAGES_NIGHTLY="\
+itzks-keyring nightly master\n
+"
+LIB_PACKAGES_MAIN="\
+itzks-keyring main build-main\n
+"
+
+APP_PACKAGES_HEULER="\
+scratch nightly master\n
+"
+APP_PACKAGES_MAIN="\
+scratch main build-main\n
+"
+
+COMPONENT=${1:-""}
+
+# build the newest code... (nightly-builds)
+[ "x$COMPONENT" = "xnightly" ] || [ -z $COMPONENT ] && {
+ echo -e $LIB_PACKAGES_HEULER $APP_PACKAGES_HEULER | while read pkg comp checkout; do
+ if [ "x$(basename $0)" = "xitzks-build-all-packages" ]; then
+ itzks-build-package $pkg $comp $checkout
+ elif [ "x$(basename $0)" = "xitzks-upload-all-packages" ]; then
+ itzks-upload-package $pkg $comp $checkout
+ elif [ "x$(basename $0)" = "xitzks-build+upload-all-packages" ]; then
+ itzks-build-package $pkg $comp $checkout && itzks-upload-package $pkg $comp $checkout
+ fi
+ done
+}
+
+# build all packages tagged as build-main
+[ "x$COMPONENT" = "xmain" ] || [ -z $COMPONENT ] && {
+ echo -e $LIB_PACKAGES_MAIN $APP_PACKAGES_MAIN | while read pkg comp checkout; do
+ if [ "x$(basename $0)" = "xitzks-build-all-packages" ]; then
+ itzks-build-package $pkg $comp $checkout
+ elif [ "x$(basename $0)" = "xitzks-upload-all-packages" ]; then
+ itzks-upload-package $pkg $comp $checkout
+ elif [ "x$(basename $0)" = "xitzks-build+upload-all-packages" ]; then
+ itzks-build-package $pkg $comp $checkout && itzks-upload-package $pkg $comp $checkout
+ fi
+ done
+}
diff --git a/bin/itzks-build-package b/bin/itzks-build-package
new file mode 100755
index 0000000..de429b3
--- /dev/null
+++ b/bin/itzks-build-package
@@ -0,0 +1,238 @@
+#!/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.
+
+test -z $1 && { echo "usage: <itzks-git-project> {main,main/<codename>,heuler,heuler/<codename>} [<git-checkout>]"; exit -1; }
+
+set -ex
+
+set_vars() {
+ USE_SUDO="yes"
+ PDEBUILD="pdebuild --pbuilder qemubuilder"
+ TEMP_BASE="$HOME/tmp/"
+
+ # first argv is the name of the Git project
+ PROJECT=$1
+
+ # 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:-heuler}}
+ CODENAMES=${ARGV2_CODENAME:-${CODENAMES}}
+ [ -n "$ARGV2_CODENAME" ] && FORCE_BUILD=0 || FORCE_BUILD=-1
+ if [ "x$COMPONENT" = "xmain" ]; then
+ CHECKOUT=${3:-build-main}
+ elif [ "x$COMPONENT" = "xnightly" ]; then
+ CHECKOUT=${3:-master}
+ DATE="~${DATE:-$(date +%Y%m%d)}"
+ else
+ echo "error: no such package component area for ITZKS packages. 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
+ DIST_SUPPORTED="debian ubuntu"
+ 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
+}
+
+clear_pkgdist() {
+
+ # pkgdist directory cleanup
+ cat BUILDS_FOR | egrep -v '(^$|^#.*$)' | while read line; do
+ l_DIST=$(echo $line | cut -d":" -f1 | tr [A-Z] [a-z])
+ CODENAMES=${CODENAMES:-$(echo $line | cut -d":" -f2- | tr [A-Z] [a#-z])}
+ echo "$DIST_SUPPORTED" | grep $l_DIST >/dev/null && {
+ for l_CODENAME in $CODENAMES; do
+ if [ "x$EXTRA_ARCHS_ONLY" = "x" ]; then
+ for l_ARCH in amd64 i386; do
+ mkdir -p $PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH
+ 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/$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
+}
+
+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
+ # and again, get the $CHECKOUT refspec in pure state
+ git reset --hard
+ else
+ cd $(dirname $PROJECT_DIR)
+ git clone git://code.das-netzwerkteam.de/itzks/$PROJECT.git
+ cd $PROJECT
+ git checkout --force $CHECKOUT || git checkout --force -b $CHECKOUT;
+ fi
+ cd $PROJECT_DIR
+
+ # by default we build for all current debian versions
+ test -f BUILDS_FOR || cat > BUILDS_FOR <<EOF
+debian: squeeze wheezy sid
+#ubuntu: lucid maverick natty
+EOF
+ return 0
+}
+
+build_packages() {
+ # use pbuilder for building all variants of this package
+ cat BUILDS_FOR | egrep -v '(^$|^#.*$)' | while read line; do
+ l_DIST=$(echo $line | cut -d":" -f1 | tr [A-Z] [a-z])
+ CODENAMES=${CODENAMES:-$(echo $line | cut -d":" -f2- | tr [A-Z] [a#-z])}
+ echo "$DIST_SUPPORTED" | grep $l_DIST >/dev/null && {
+ for l_CODENAME in $CODENAMES; do
+ TEMP_DIR="$(mktemp -d --tmpdir=$TEMP_BASE)"
+ mkdir -p $TEMP_DIR/$PROJECT
+ git clone --local $PROJECT_DIR $TEMP_DIR/$PROJECT/
+ cd $TEMP_DIR/$PROJECT
+ git checkout $CHECKOUT || git checkout master
+ GITREV=$(itzks-gitrevno)
+ # translate the version name for Debian releases
+ [ "x$l_CODENAME" = "xsid" ] && VERSION=unstable
+ [ "x$l_CODENAME" = "xwheezy" ] && VERSION=testing
+ [ "x$l_CODENAME" = "xsqueeze" ] && VERSION=stable
+ [ "x$l_CODENAME" = "xlenny" ] && 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
+ DEBEMAIL=git-admin@das-netzwerkteam.de DEBFULLNAME="NWT Git Administrator" dch --distribution $VERSION --force-distribution -l "+$l_CODENAME~$COMPONENT$DATE~$GITREV~build" "Auto-built $l_DIST $l_CODENAME package for packages.it-zukunft-schule.de repository."
+ mkdir -p $PKGDIST/$l_DIST/$l_CODENAME/{amd64,i386}
+ OTHERMIRROR="deb http://packages.it-zukunft-schule.de/debian $l_CODENAME $COMPONENT"
+ [ "x$USE_SUDO" != "xyes" ] && {
+ [ "x$EXTRA_ARCHS_ONLY" = "x" ] && {
+ cat debian/control | egrep 'Architecture.*(all|any|amd64)' >/dev/null && {
+ DIST=$l_DIST CODENAME=$l_CODENAME ARCH=amd64 $PDEBUILD --auto-debsign --debsign-k F4A7678C9C6B0B2B --buildresult $PKGDIST/$l_DIST/$l_CODENAME/amd64
+ }
+ cat debian/control | egrep 'Architecture.*(any|i386)' >/dev/null && {
+ DIST=$l_DIST CODENAME=$l_CODENAME ARCH=i386 $PDEBUILD --auto-debsign --debsign-k F4A7678C9C6B0B2B --buildresult $PKGDIST/$l_DIST/$l_CODENAME/i386 -- --binary-arch
+ }
+ }
+ 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 F4A7678C9C6B0B2B --buildresult $PKGDIST/$l_DIST/$l_CODENAME/$extra_arch -- --binary-arch
+ }
+ done
+ }
+ [ "x$USE_SUDO" = "xyes" ] && {
+ [ "x$EXTRA_ARCHS_ONLY" = "x" ] && {
+ cat debian/control | egrep 'Architecture.*(all|any|amd64)' >/dev/null && {
+ sudo DIST=$l_DIST CODENAME=$l_CODENAME ARCH=amd64 OTHERMIRROR="$OTHERMIRROR" $PDEBUILD --auto-debsign --debsign-k F4A7678C9C6B0B2B --buildresult $PKGDIST/$l_DIST/$l_CODENAME/amd64
+ }
+ cat debian/control | egrep 'Architecture.*(any|i386)' >/dev/null && {
+ sudo DIST=$l_DIST CODENAME=$l_CODENAME ARCH=i386 OTHERMIRROR="$OTHERMIRROR" $PDEBUILD --auto-debsign --debsign-k F4A7678C9C6B0B2B --buildresult $PKGDIST/$l_DIST/$l_CODENAME/i386 -- --binary-arch
+ }
+ }
+ 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 DIST=$l_DIST CODENAME=$l_CODENAME ARCH=$extra_arch OTHERMIRROR="$OTHERMIRROR" $PDEBUILD --auto-debsign --debsign-k F4A7678C9C6B0B2B --buildresult $PKGDIST/$l_DIST/$l_CODENAME/$extra_arch -- --binary-arch
+ }
+ done
+ }
+ cd -
+ rm -Rf $TEMP_DIR
+ done
+ echo
+ }
+ echo
+ done
+ return 0
+}
+
+upload_packages() {
+ # dupload the new packages to the reprepro repository
+ cd $PKGDIST
+ cat $PROJECT_DIR/BUILDS_FOR | egrep -v '(^$|^#.*$)' | while read line; do
+ l_DIST=$(echo $line | cut -d":" -f1 | tr [A-Z] [a-z])
+ CODENAMES=${CODENAMES:-$(echo $line | cut -d":" -f2- | tr [A-Z] [a#-z])}
+ for l_CODENAME in $CODENAMES; do
+ if [ "x$EXTRA_ARCHS_ONLY" = "x" ]; then
+ for l_ARCH in amd64 i386; do
+ cd $PKGDIST/$l_DIST/$l_CODENAME/$l_ARCH
+ ls $PROJECT_*.changes &>/dev/null && dupload --to itzks-$l_DIST-$l_CODENAME $PROJECT_*.changes
+ cd -
+ done
+ fi
+ for l_EXTRA_ARCH in $EXTRA_ARCHS; do
+ cd $PKGDIST/$l_DIST/$l_CODENAME/$l_EXTRA_ARCH
+ ls $PROJECT_*.changes &>/dev/null && dupload --to itzks-$l_DIST-$l_CODENAME $PROJECT_*.changes
+ cd -
+ done
+ done
+ done
+ cd -
+ return 0
+}
+
+### MAIN ###
+set_vars $@ && {
+ if [ "x$(basename $0)" = "xitzks-build-package" ] || [ "x$(basename $0)" = "xitzks-build+upload-package" ]; then
+ cd $PROJECT_DIR && itzks-pkgneedsbuild $CHECKOUT || [ "$FORCE_BUILD" -eq 0 ] && {
+ clear_pkgdist
+ prepare_workspace && {
+ build_packages
+ }
+ }
+ fi
+ if [ "x$(basename $0)" = "xitzks-upload-package" ] || [ "x$(basename $0)" = "xitzks-build+upload-package" ]; then
+ upload_packages
+ fi
+}
diff --git a/bin/itzks-gitcreate b/bin/itzks-gitcreate
new file mode 100755
index 0000000..e64424d
--- /dev/null
+++ b/bin/itzks-gitcreate
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+set -e
+
+for pkg in "$@"; do
+ ssh -lnwt code.das-netzwerkteam.de "cd /srv/git/code.das-netzwerkteam.de && ./setup-repository $pkg '$pkg upstream project'"
+ ssh -lnwt code.das-netzwerkteam.de "cd /srv/git/code.das-netzwerkteam.de && ./update-repository-posixacls $pkg"
+ cd "$pkg"
+ echo "$pkg: MASTER BRANCH" && git push ssh://nwt@code.das-netzwerkteam.de:32032/srv/git/code.das-netzwerkteam.de/$pkg master
+ git branch | grep upstream &>/dev/null && echo "$pkg: RELEASE BRANCH" && git push ssh://nwt@code.das-netzwerkteam.de:32032/srv/git/code.das-netzwerkteam.de/$pkg upstream
+ git branch | grep pristine-tar &>/dev/null && echo "$pkg: PRISTINE-TAR" && git push ssh://nwt@code.das-netzwerkteam.de:32032/srv/git/code.das-netzwerkteam.de/$pkg pristine-tar
+ echo "$pkg: PUSHING TAGS" && git push --tags ssh://nwt@code.das-netzwerkteam.de:32032/srv/git/code.das-netzwerkteam.de/$pkg
+ ssh -lnwt code.das-netzwerkteam.de "cd /srv/git/code.das-netzwerkteam.de && mv $pkg.git itzks"
+ cd ..
+done
diff --git a/bin/itzks-gitrevno b/bin/itzks-gitrevno
new file mode 100755
index 0000000..2f121ff
--- /dev/null
+++ b/bin/itzks-gitrevno
@@ -0,0 +1,28 @@
+#!/usr/bin/python
+
+# Copyright (C) 2010-2011 by Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+#
+# This 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 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
+
+import subprocess
+_proc = subprocess.Popen('git log --no-color --date=iso',
+ shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+try:
+ GIT_REVISION_DATE = str(len([ x for x in _proc.communicate()[0].splitlines() if x.startswith('Date:')]))
+except IndexError:
+ GIT_REVISION_DATE = 'unknown'
+
+print GIT_REVISION_DATE
diff --git a/bin/itzks-pkgneedsbuild b/bin/itzks-pkgneedsbuild
new file mode 100755
index 0000000..2a192eb
--- /dev/null
+++ b/bin/itzks-pkgneedsbuild
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+# Copyright (C) 2010-2011 by Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+#
+# This 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 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
+
+set -xe
+
+CHECKOUT=${1:-master}
+
+[ -d .git ] && {
+
+ TIMESTAMP=$(date +%s)
+ CURRENT_BRANCH=$(git branch | grep "*" | awk '{print $2}')
+
+ # switch to branch given as $CHECKOUT, if it does not exist locally, create it...
+ git checkout $CHECKOUT &>/dev/null || git checkout -b $CHECKOUT >/dev/null
+
+ # switch to a tmp branch...
+ git checkout -b tmp-$TIMESTAMP &>/dev/null
+
+ # pull $CHECKOUT from origin into the tmp branch
+ LANG=en_US.UTF-8 git pull origin $CHECKOUT 2>/dev/null | egrep "^Already up-to-date.$" &>/dev/null && {
+ # drop the tmp branch
+ git checkout $CURRENT_BRANCH &>/dev/null
+ git branch -D tmp-$TIMESTAMP >/dev/null
+ exit 1
+ } || {
+ # drop the tmp branch
+ git checkout $CURRENT_BRANCH &>/dev/null
+ git branch -D tmp-$TIMESTAMP >/dev/null
+ exit 0
+ }
+} || exit 0
diff --git a/bin/itzks-tarballrelease b/bin/itzks-tarballrelease
new file mode 100755
index 0000000..1b58077
--- /dev/null
+++ b/bin/itzks-tarballrelease
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+# Copyright (C) 2011 by Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+#
+# This is free software; you can redistribute it and/or modify
+# it under the tBerms 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 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.
+
+# Thanks to Jonas Smedegaard <dr@jones.dk> for inspiration...
+
+set -e
+
+RELEASE="$1"
+test -n "$RELEASE" || { echo "usage: $(basename "$0") <release-version> [<checkout>]"; exit 1; }
+
+CHECKOUT="${2:-master}"
+
+PROJECT="$(basename $PWD)"
+TARGETDIR=".."
+
+MANIFEST="$(mktemp)"
+TEMP_DIR="$(mktemp -d)"
+
+echo $MANIFEST
+
+trap "rm -f \"${MANIFEST}\"; rm -rf \"${TEMP_DIR}\"" 0
+git clone . "$TEMP_DIR/${PROJECT}_$RELEASE"
+( set -e; cd "$TEMP_DIR/${PROJECT}_$RELEASE/" && git checkout ${CHECKOUT} 2>/dev/null || true )
+( set -e; cd "$TEMP_DIR" && rm -Rf "${PROJECT}_$RELEASE/.git"* )
+( set -e; cd "$TEMP_DIR" && find "${PROJECT}_$RELEASE" -type f | sed 's/^\.*\/*//' | sort > "$MANIFEST" )
+mkdir -p "$TARGETDIR/_releases_/source/${PROJECT}/"
+tar c -C "$TEMP_DIR" --owner 0 --group 0 --numeric-owner --no-recursion --files-from "$MANIFEST" | gzip -n > "$TARGETDIR/_releases_/source/${PROJECT}/${PROJECT}_$RELEASE.tar.gz"
diff --git a/bin/itzks-updatebuildmain b/bin/itzks-updatebuildmain
new file mode 100755
index 0000000..f4f4917
--- /dev/null
+++ b/bin/itzks-updatebuildmain
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+# Copyright (C) 2010-2011 by Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+#
+# This 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 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
+
+set -e
+
+GITPROJECT=$(basename $(pwd))
+REF=$1
+
+# we need to be within a working copy (base folder) and we need a <REF>!!!
+test -z $1 || test -d ./.git || {
+ echo "usage: $(basename $0) <REF>"
+ echo "Call this command from within the base folder of a Git project's working copy..."
+ exit -1
+}
+
+# update the build-main branch with our newest blessed reference
+git branch build-main &>/dev/null || true
+git push origin $REF:build-main
diff --git a/bin/itzks-upload-all-packages b/bin/itzks-upload-all-packages
new file mode 120000
index 0000000..32133c5
--- /dev/null
+++ b/bin/itzks-upload-all-packages
@@ -0,0 +1 @@
+itzks-build-all-packages \ No newline at end of file
diff --git a/bin/itzks-upload-package b/bin/itzks-upload-package
new file mode 120000
index 0000000..64ea9b4
--- /dev/null
+++ b/bin/itzks-upload-package
@@ -0,0 +1 @@
+itzks-build-package \ No newline at end of file