Provide 'successful' message if upload succeeds GA-12
[git-tools-moved-to-github.git] / id-deb-build / id-pbuild.sh
index c04e2d7..a8206a1 100755 (executable)
@@ -10,6 +10,7 @@ Usage: id-pbuild.sh [OPTIONS]
 Options:
        [--debian=distros]
        [--ubuntu=distros]
+       [--centos=distros]
        [--upload]
        [--concurrency=N]
        [--product=X]
@@ -21,6 +22,7 @@ EOF
 upload=false
 do_help=false
 concurrency=4
+ARCHS="i386 amd64"
 
 if test -f IDMETA; then
     . ./IDMETA
@@ -30,13 +32,15 @@ while test $# -gt 0; do
        -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
        *) optarg= ;;
     esac
-    
     case $1 in
        --debian=*)
-           DEBIAN_DIST=$optarg
+           DEBIAN_DIST_A=$optarg
            ;;
        --ubuntu=*)
-           UBUNTU_DIST=$optarg
+           UBUNTU_DIST_A=$optarg
+           ;;
+       --centos=*)
+           CENTOS_DIST_A=$optarg
            ;;
         --upload)
            upload=true
@@ -54,10 +58,22 @@ while test $# -gt 0; do
     shift
 done
 
+if test "$DEBIAN_DIST_A" -o "$UBUNTU_DIST_A" -o "$CENTOS_DIST_A"; then
+    DEBIAN_DIST=$DEBIAN_DIST_A
+    UBUNTU_DIST=$UBUNTU_DIST_A
+    CENTOS_DIST=$CENTOS_DIST_A
+fi
+
 if test "$do_help" = "yes"; then
     usage 1 1>&2
 fi
 
+if test "$DEBIAN_DIST" -o "$UBUNTU_DIST"; then
+    debian=true
+else
+    debian=false
+fi
+
 D0=`dirname $0`
 ID_DEB_BUILD=`cd $D0; pwd`
 PBUILDROOT=${ID_DEB_BUILD}/id-pbuild-root.sh
@@ -72,85 +88,159 @@ if test ! -x $MKDEBSRC; then
     exit 1
 fi
 
-if $upload; then
-    cd deb-src
-else
-    if test "${SUDO_USER}"; then
-       if test ! -d deb-src; then
+if ! $upload; then
+    if $debian; then
+       if test "${SUDO_USER}"; then
+           if test ! -d deb-src; then
+               $MKDEBSRC
+           fi
+       else
+           if test -d deb-src; then
+               rm -f deb-src/*.gz
+               if test $? -ne 0; then
+                   echo "deb-src could not be removed. Remove deb-src manually"
+                   exit 1
+               fi
+           fi
            $MKDEBSRC
        fi
     else
-       if test -d deb-src; then
-           rm -rf deb-src
-           if test $? -ne 0; then
-               echo "deb-src could not be removed. Remove deb-src manually"
-               exit 1
-           fi
-       fi
-       $MKDEBSRC
+       mkdir -p deb-src
     fi
-    cd deb-src
 fi
 
-for f in *.dsc; do
-    if test -f "$f"; then
-       PKG=$f
+cd deb-src
+
+if $debian; then
+    for f in *.dsc; do
+       if test -f "$f"; then
+           PKG=$f
+       fi
+    done
+    if test -z "$PKG"; then
+       echo "Specify .dsc file"
+       exit 1
+    fi
+    if test ! -e "$PKG"; then
+       echo "${PKG} does not exist"
+       exit 1
+    fi
+    if grep "Architecture: all" $PKG >/dev/null; then
+       USE_ARCHS=i386
+    else
+       USE_ARCHS=$ARCHS
     fi
-done
-if test -z "$PKG"; then
-    echo "Specify .dsc file"
-    exit 1
-fi
-if test ! -e "$PKG"; then
-    echo "${PKG} does not exist"
-    exit 1
 fi
+
 if test -z "$PRODUCT"; then
-    PRODUCT=`echo *.dsc|sed 's/_.*//g'`
+    PRODUCT=$NAME
 fi
-ARCHS="i386 amd64"
-if grep "Architecture: all" $PKG >/dev/null; then
-    USE_ARCHS=i386
-else
-    USE_ARCHS=$ARCHS
+if test -z "$PRODUCT"; then
+    if $debian; then
+       PRODUCT=`echo *.dsc|sed 's/_.*//g'`
+    else
+       PRODUCT=`cd ..;rpm -q --specfile *.spec --queryformat "%{NAME};" | cut -d ";" -f1`
+    fi
 fi
 echo "Dsc $PKG . Product $PRODUCT"
 echo "Ubuntu distros: $UBUNTU_DIST"
 echo "Debian distros: $DEBIAN_DIST"
-if test "${SUDO_USER}"; then
-    echo "Running as sudo."
-    echo "Tip: You can avoid it by adding the following in /etc/sudoers"
-    echo "${SUDO_USER} ALL=NOPASSWD: ${ID_DEB_BUILD}/id-pbuild-root.sh"
-    HOME_EXPORT=/home/${SUDO_USER}
-else
-    sudo -k
-    HOME_EXPORT=$HOME
-fi
-if test ! -f ${HOME_EXPORT}/.pbuilderrc; then
-    echo "${HOME_EXPORT}/.pbuilderrc missing"
-    exit 1
+echo "Centos distros: $CENTOS_DIST"
+
+if $debian; then
+    if test "${SUDO_USER}"; then
+       echo "Running as sudo."
+       echo "Tip: You can avoid it by adding the following in /etc/sudoers"
+       echo "${SUDO_USER} ALL=NOPASSWD: ${ID_DEB_BUILD}/id-pbuild-root.sh"
+       HOME_EXPORT=/home/${SUDO_USER}
+    else
+       sudo -k
+       HOME_EXPORT=$HOME
+    fi
+    if test ! -f ${HOME_EXPORT}/.pbuilderrc; then
+       echo "${HOME_EXPORT}/.pbuilderrc missing"
+       exit 1
+    fi
 fi
 
 if $upload; then
+    for dist in ${CENTOS_DIST}; do
+       arch=amd64
+       prodver=${PRODUCT}-${VERSION}
+       if ! scp ${ID_DEB_BUILD}/../id-rpm-build/upload-rpms.sh ${dist}:rpmbuild/SOURCES/${prodver}/; then
+           echo "Copy of upload-rpms.sh to $dist failed"
+           exit 1
+       fi
+       if ssh $dist "cd rpmbuild/SOURCES/${prodver} && chmod +x upload-rpms.sh && ./upload-rpms.sh ${PRODUCT}.spec"; then
+           :
+       else
+           echo "Upload failed for $dist"
+           exit 1
+       fi
+    done
     for dist in ${UBUNTU_DIST}; do
-       scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/ubuntu/${dist}
+       ssh ftp.indexdata.dk "mkdir -p /home/ftp/pub/${PRODUCT}/ubuntu/${dist}"
+       if ! scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/ubuntu/${dist}; then
+            echo "Upload failed for $dist"
+            exit 1
+        fi
     done
     for dist in ${DEBIAN_DIST}; do
-       scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/debian/${dist}
+       ssh ftp.indexdata.dk "mkdir -p /home/ftp/pub/${PRODUCT}/debian/${dist}"
+       if ! scp ${dist}-*/* ftp.indexdata.dk:/home/ftp/pub/${PRODUCT}/debian/${dist}; then
+            echo "Upload failed for $dist"
+           exit 1
+        fi
     done
-    echo ""
-    echo "===================================================="
-    echo "Remember to update APT on ftp.indexdata.dk !!!"
-    echo ""
-    echo "ssh ftp.indexdata.dk"
-    echo "cd ~/proj/git-tools/update-archive"
-    echo "sudo su"
-    echo "./update-archive.sh"
-    echo "===================================================="
+    if test "${CENTOS_DIST}"; then
+       if ! ssh ftp.indexdata.dk "sudo -n /home/indexdata/proj/git-tools/update-archive/update-yum-archive.sh"; then
+            echo "update-yum-archive.sh failed"
+            exit 1
+        fi
+    fi
+    if test "${UBUNTU_DIST}" -o "${DEBIAN_DIST}"; then
+       if ! ssh ftp.indexdata.dk "sudo -n /home/indexdata/proj/git-tools/update-archive/update-archive.sh --ubuntu=\"${UBUNTU_DIST}\" --debian=\"${DEBIAN_DIST}\""; then
+            echo "update-archive.sh failed"
+            exit 1
+        fi
+    fi
+    echo "Upload successful - we hope"
     exit 0
 fi
+
 rm -f *.log
 
+# copy tars to centos build hosts
+for dist in ${CENTOS_DIST}; do
+    arch=amd64
+    prodver=${PRODUCT}-${VERSION}
+    tarname=${prodver}.tar.gz
+    if test ! -f ../${tarname}; then
+       echo "$tarname: missing"
+       exit 1
+    fi
+
+    if ssh $dist "test -f .rpmmacros && test -d rpmbuild/SOURCES && test -d rpmbuild/RPMS && test -d rpmbuild/SRPMS"; then
+       :
+    else
+       echo "Host $dist does not seem to be prepared with rpmbuild directories"
+       exit 1
+    fi
+
+    if scp ../${tarname} $dist:rpmbuild/SOURCES/ ; then
+       :
+    else
+       echo "Could not copy $tarname to $dist"
+       exit 1
+    fi
+    if ssh $dist "cd rpmbuild/SOURCES && rm -fr $prodver && tar zxf $tarname && cd ${prodver} && rpmbuild -ba ${PRODUCT}.spec" >${dist}-${arch}.log 2>&1; then
+       :
+    else
+       echo "FAILED: See ${dist}-${arch}.log"
+       exit 1
+    fi
+done
+
 # call our privileged wrapper to clean the directories, no --dsc option
 for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
     for arch in ${USE_ARCHS}; do
@@ -195,6 +285,7 @@ for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
        fi
     done
 done
+
 date
 echo "Done"
 # Local Variables: