Support local repository for external dependencies, default for jenkins on emain...
authorFrantišek Dvořák <valtri@civ.zcu.cz>
Tue, 23 Apr 2013 10:26:17 +0000 (12:26 +0200)
committerFrantišek Dvořák <valtri@civ.zcu.cz>
Tue, 23 Apr 2013 11:40:21 +0000 (13:40 +0200)
mock.sh

diff --git a/mock.sh b/mock.sh
index 717eced..40a326c 100755 (executable)
--- a/mock.sh
+++ b/mock.sh
 # pbuilder --create --distribution squeeze
 #
 # cat > /root/.pbuilderrc <<EOF
-# OTHERMIRROR='deb http://scientific.zcu.cz/repos/EMI3-external/debian/ stable/|deb file:///home/valtri/debian/ stable/'
-# BINDMOUNTS="/home/valtri/debian"
+# OTHERMIRROR='deb http://scientific.zcu.cz/repos/EMI3-external/debian/ stable/|deb file:///home/jenkins/debian-deps/ stable/|deb file:///home/jenkins/debian/ stable/'
+# BINDMOUNTS="/home/jenkins/debian-deps /home/jenkins/debian"
 # EOF
-# cp /root/.pbuilderrc /home/valtri/.pbuilderrc
-# chown valtri:users /home/valtri/.pbuilderrc
+# cp /root/.pbuilderrc ~jenkins/.pbuilderrc
+# chown jenkins:jenkins ~jenkins/.pbuilderrc
 #
 
-KEY_ID=${KEY_ID:-'7157882F'}
+KEY_ID=${KEY_ID:-'64FA8786'}
 top_srcdir=${top_srcdir}
-DEBREPO=${DEBREPO:-~/debian}
+DEBREPO_MAIN=${DEBREPO_MAIN:-~/debian}
+DEBREPO_DEPS=${DEBREPO_DEPS:-~/debian-external}
 DEBDISTRO=stable
 #PBUILDER_OPTS='--debbuildopts "-j8"'
 
 OS=`cat /etc/issue | head -n 1`
 ARCH=`uname -i`
 
+was_build=
+was_external=
+
 #CONF=sl-5-x86_64
 #CONF=sl-5-i386
 #CONF=sl-6-x86_64
@@ -56,18 +60,22 @@ LAUNCHDIR=`(cd $LAUNCHDIR; pwd)`
 REPORTS=results/reports
 CMD="mock --configdir=mock -r $CONF --resultdir `pwd`/$REPORTS"
 
-mkdir -p $REPORTS  2>/dev/null || :
-if test "$CONF" != "pbuilder"; then
-       mkdir mock 2>/dev/null || :
-       ln -s /etc/mock/logging.ini mock/ 2>/dev/null || :
-       if ! test -f mock/site-defaults.cfg; then
-               touch mock/site-defaults.cfg
-       fi
-       if test ! -s mock/$CONF.cfg -o $LAUNCHDIR/$CONF.cfg.template -nt mock/$CONF.cfg; then
-               sed -e "s,@PWD@,`pwd`," -e "s,@REPO@,results," $LAUNCHDIR/$CONF.cfg.template > mock/$CONF.cfg
-       fi
+if test "$1" != "clean"; then
+       mkdir -p $REPORTS 2>/dev/null || :
+       mkdir externals 2>/dev/null || :
+       if test "$CONF" != "pbuilder"; then
+               mkdir mock 2>/dev/null || :
+               ln -s /etc/mock/logging.ini mock/ 2>/dev/null || :
+               if ! test -f mock/site-defaults.cfg; then
+                       touch mock/site-defaults.cfg
+               fi
+               if test ! -s mock/$CONF.cfg -o $LAUNCHDIR/$CONF.cfg.template -nt mock/$CONF.cfg; then
+                       sed -e "s,@PWD@,`pwd`," -e "s,@REPO@,results," $LAUNCHDIR/$CONF.cfg.template > mock/$CONF.cfg
+               fi
 
-       createrepo results
+               createrepo results
+               createrepo externals
+       fi
 fi
 
 mock_build() {
@@ -90,6 +98,7 @@ mock_build() {
        rm -f $REPORTS/fail.$BASENAME
        echo $BASENAME >> $REPORTS/success.log
        echo "==== Done $BASENAME ===="
+       was_build=1
 }
 
 pbuilder_build() {
@@ -107,14 +116,15 @@ pbuilder_build() {
        (cd $SUBDIR; pdebuild --buildresult $BASEDIR/results/pbuilder --auto-debsign --debsign-k $KEY_ID -- --hookdir $LAUNCHDIR/pbuilder $PBUILDER_OPTS)
        mv $DIR/*.build results/reports
        CHANGES=`find results/pbuilder -type f -name ${BASENAME}_\*.changes | head -n 1`
-       # upload invalide the gpg sign
-       rm -f $DEBREPO/$DEBDISTRO/Release.gpg
+       # upload invalides the gpg sign
+       rm -f $DEBREPO_MAIN/$DEBDISTRO/Release.gpg
        # buggy mini-dinstall?
-       rm -f $DEBREPO/*.db
+       rm -f $DEBREPO_MAIN/*.db
        dput -U local $CHANGES
        rm -f $REPORTS/fail.$BASENAME
        echo $BASENAME >> $REPORTS/success.log
        echo "==== Done $BASENAME ===="
+       was_build=1
 }
 
 package() {
@@ -133,9 +143,38 @@ package() {
        fi
 }
 
+add() {
+       local FILE=$1
+       local BASENAME=`basename "$FILE" | sed -e 's/_[0-9]\+.*//'`
+
+       echo "==== Adding external $BASENAME ===="
+       if test "$CONF" = "pbuilder"; then
+               # upload invalides the gpg sign
+               rm -f $DEBREPO_DEPS/$DEBDISTRO/Release.gpg
+               # buggy mini-dinstall?
+               rm -f $DEBREPO_DEPS/*.db
+               dput -U local_deps $FILE
+       else
+               cp -p $FILE externals/
+               createrepo externals
+       fi
+       rm -f $REPORTS/fail.$BASENAME
+       echo $BASENAME >> $REPORTS/success.log
+       was_external=1
+       echo "==== Done external $BASENAME ===="
+}
+
 release_sign() {
        if test "$CONF" = "pbuilder"; then
-               (cd $DEBREPO/$DEBDISTRO; rm -f Release.gpg; gpg -abs -o Release.gpg Release)
+               [ -z "$was_build" ] || (cd $DEBREPO_MAIN/$DEBDISTRO; rm -f Release.gpg; gpg -abs -o Release.gpg Release)
+               [ -z "$was_external" ] || (cd $DEBREPO_DEPS/$DEBDISTRO; rm -f Release.gpg; gpg -abs -o Release.gpg Release)
+       else
+               [ -z "$was_build" ] || files="$files `ls -1 results/*.rpm`"
+               [ -z "$was_external" ] || files="$files `ls -1 externals/*.rpm`"
+               if test -n "$was_build" -o "$was_external"; then
+                       echo rpmsign --addsign $files
+                       rpmsign --addsign $files
+               fi
        fi
 }
 
@@ -144,12 +183,19 @@ while test -n "$1"; do
        case "$1" in
        clean)
                [ -d results ] && (rm -rfv results || sudo rm -rfv results)
+               [ -d externals ] && (rm -rfv externals || sudo rm -rfv externals)
                if test "$CONF" = "pbuilder"; then
-                       rm -rfv $DEBREPO/stable $DEBREPO/unstable $DEBREPO/$DEBDISTRO $DEBREPO/*.db
-                       mkdir -p $DEBREPO/$DEBDISTRO
+                       rm -rfv $DEBREPO_MAIN/stable $DEBREPO_MAIN/unstable $DEBREPO_MAIN/$DEBDISTRO $DEBREPO_MAIN/*.db
+                       mkdir -p $DEBREPO_MAIN/$DEBDISTRO
+                       # fragile mini-dinstall
+                       mkdir -p $DEBREPO_MAIN/mini-dinstall/incoming
+                       touch $DEBREPO_MAIN/$DEBDISTRO/Packages
+
+                       rm -rfv $DEBREPO_DEPS/stable $DEBREPO_DEPS/unstable $DEBREPO_DEPS/$DEBDISTRO $DEBREPO_DEPS/*.db
+                       mkdir -p $DEBREPO_DEPS/$DEBDISTRO
                        # fragile mini-dinstall
-                       mkdir -p $DEBREPO/mini-dinstall/incoming
-                       touch $DEBREPO/$DEBDISTRO/Packages
+                       mkdir -p $DEBREPO_DEPS/mini-dinstall/incoming
+                       touch $DEBREPO_DEPS/$DEBDISTRO/Packages
                fi
                exit 0
                ;;
@@ -227,7 +273,7 @@ while test -n "$1"; do
 
                if test "$CONF" = "pbuilder"; then
                        (cd $repo; ls -1 | grep '\.changes$' | sort) > old
-                       (cd $DEBREPO/$DEBDISTRO; ls -1 | grep '\.changes$' | sort) > new
+                       (cd $DEBREPO_MAIN/$DEBDISTRO; ls -1 | grep '\.changes$' | sort) > new
                        diff -U0 old new | tail -n +3 | grep -v ^@ | grep '^+' | cut -c2- > changes
                        echo "New packages:"
                        cat changes
@@ -235,18 +281,29 @@ while test -n "$1"; do
 
                        echo "Commands:"
                        cat << EOF
-rm -rf $DEBREPO/$DEBDISTRO.allnew
-mv $DEBREPO/$DEBDISTRO $DEBREPO/$DEBDISTRO.allnew
-mkdir $DEBREPO
-cp -rp $repo $DEBREPO/$DEBDISTRO
-(cd $DEBREPO/$DEBDISTRO/; rm -rv Sources* Packages* Release*; touch Packages); rm -fv $DEBREPO/*.db
+rm -rf $DEBREPO_MAIN/$DEBDISTRO.allnew
+mv $DEBREPO_MAIN/$DEBDISTRO $DEBREPO_MAIN/$DEBDISTRO.allnew
+mkdir $DEBREPO_MAIN
+cp -rp $repo $DEBREPO_MAIN/$DEBDISTRO
+(cd $DEBREPO_MAIN/$DEBDISTRO/; rm -rv Sources* Packages* Release*; touch Packages); rm -fv $DEBREPO_MAIN/*.db
 (cd results/pbuilder; dput -U local `cat changes | tr '\n' ' '`)
-(cd $DEBREPO/$DEBDISTRO; gpg -abs -o Release.gpg Release)
+(cd $DEBREPO_MAIN/$DEBDISTRO; gpg -abs -o Release.gpg Release)
 EOF
                fi
 
                ;;
 
+       add)
+               shift
+               FILES=$@
+               if test -z "$FILES"; then
+                       echo "Usage: $0 push { FILE.rpm... | FILE.changes... }"
+                       exit 1
+               fi
+
+               for file in $FILES; do add $file; shift; done
+               ;;
+
        *)
                if test "$CONF" = "pbuilder"; then
                        pbuilder_build "$1"
@@ -259,12 +316,18 @@ EOF
        shift
 done
 
-if test "$CONF" = "pbuilder"; then
-       release_sign
-       sudo rm -rfv results/pbuilder
-       mkdir results/debian/
-       cp -rp $DEBREPO/$DEBDISTRO results/debian/
-else
-       rpmsign --addsign results/*.rpm
-       createrepo results
+release_sign
+if test -n "$was_build"; then
+       if test "$CONF" = "pbuilder"; then
+               sudo rm -rfv results/pbuilder
+               mkdir results/debian/
+               cp -rp $DEBREPO_MAIN/$DEBDISTRO results/debian/
+       else
+               createrepo results
+       fi
+fi
+if test -n "$was_external"; then
+       if test "$CONF" != "pbuilder"; then
+               createrepo externals
+       fi
 fi