From e6f0af8c329f8f66410b99015445ac58ae669475 Mon Sep 17 00:00:00 2001 From: Chizi123 <build@jsrv.com> Date: Mon, 21 Sep 2020 11:38:19 +0000 Subject: [PATCH] Added building packages in parallel --- main.sh | 74 ++++++++++++++++++++++++++++-------- 1 files changed, 57 insertions(+), 17 deletions(-) diff --git a/main.sh b/main.sh index d222d14..587648e 100755 --- a/main.sh +++ b/main.sh @@ -2,7 +2,7 @@ #A basic bash script to automate the building of arch packages # Usage: main.sh init|add|build_all [-f force] -source vars.sh +source $(dirname "$(realpath $0)")/vars.sh ERRORS="" @@ -50,24 +50,50 @@ fi #remove old versions before build - rm $1*.pkg.tar.xz + rm *$1*.pkg.tar.xz* #make and force rebuild if is git package makepkg -s --noconfirm $([ $CLEAN == "Y" ] && echo "-c") $([ $SIGN == "Y" ] && echo "--sign --key $KEY") $([ "$2" == "-f" ] && echo -f) if [ $? != 0 ]; then #Register error - ERRORS="$ERRORS $1" + echo $1 >> $REPODIR/.errors return 1 fi - #copy package to repo directory - #latest="$(newold_matching_file n '*.pkg.tar.xz')" - #or f in $(find g.tar.xz' - #o - rm $REPODIR/$1*.pkg.tar.xz - cp $1*.pkg.tar.xz $REPODIR/ - repo-add $([ "$SIGN" == "Y" ] && echo "--sign --key $KEY") $REPODIR/$REPONAME.db.tar.xz $REPODIR/$1*.pkg.tar.xz - #one + rm $REPODIR/*$1*.pkg.tar.xz* + cp *$1*.pkg.tar.xz $REPODIR/ + [ "$SIGN" == "Y" ] && cp *$1*.pkg.tar.xz.sig $REPODIR + while [ 1 ]; do + if [ $(cat $REPODIR/.waitlist.lck) == 1 ]; then + sleep 1 + else + echo 1 > $REPODIR/.waitlist.lck + echo $1 >> $REPODIR/.waitlist + echo 0 > $REPODIR/.waitlist.lck + break + fi + done + while [ 1 ]; do + if [ "$(head -n1 $REPODIR/.waitlist)" == "$1" ]; then + + repo-add $([ "$SIGN" == "Y" ] && echo "--sign --key $KEY") $REPODIR/$REPONAME.db.tar.xz $REPODIR/*$1*.pkg.tar.xz + while [ 1 ]; do + if [ $(cat $REPODIR/.waitlist.lck) == 1 ]; then + sleep 1 + else + echo 1 > $REPODIR/.waitlist.lck + tail -n +2 $REPODIR/.waitlist > $REPODIR/.waitlist.tmp + cat $REPODIR/.waitlist.tmp > $REPODIR/.waitlist + rm $REPODIR/.waitlist.tmp + echo 0 > $REPODIR/.waitlist.lck + break + fi + done + break + else + sleep 10 + fi + done #Remove old versions of packages #TODO: Want to be able to keep multiple versions of old packages, future work @@ -87,12 +113,14 @@ if [ $UPDATE == "Y" ]; then sudo pacman -Syu --noconfirm fi + #update every package currently stored for d in $(find $BUILDDIR -maxdepth 1 -mindepth 1 -type d) do cd $d - build_pkg $(echo $d | rev | cut -d'/' -f1 | rev) $1 + build_pkg $(echo $d | rev | cut -d'/' -f1 | rev) $1 > /dev/null & done + wait return 0 } @@ -104,7 +132,7 @@ cd $BUILDDIR git clone https://aur.archlinux.org/$1.git cd $1 - build_pkg $1 new + build_pkg $1 new -f return 0 } @@ -159,6 +187,16 @@ return 0 } +function send_email { + ( + echo "From: build@localhost" + echo "To: $EMAIL" + echo "Subject: Build errors" + echo "There were build errors for the build of $REPONAME at $(date), please address them soon." + echo "The errors were: $1" + ) | sendmail -t +} + case $1 in "init") init;; @@ -166,10 +204,12 @@ add $2;; "build-all") build_all $([ "$2" == "-f" ] && echo "-f") - if [ "$ERRORS" != "" ]; then - echo "Errors in packages $ERRORS" + if [ -f $REPODIR/.errors ]; then + ERRORS=$(cat $REPODIR/.errors | tr '\n' ' ') + rm $REPODIR/.errors + echo "Errors in packages: $ERRORS" if [ "$EMAIL" != "" ]; then - printf "Build for $(date)\nErrors found in $ERRORS\nPlease address these soon" | sendmail $EMAIL + send_email $ERRORS fi else echo "All packages built successfully" @@ -178,5 +218,5 @@ "remove") remove $2;; *) - printf "Invalid usage\nUsage: $0 init|add|build_all\n";; + printf "Invalid usage\nUsage: $0 init|add|build-all\n";; esac -- Gitblit v1.9.3