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 | 83 +++++++++++++++++++++++++++++++++-------- 1 files changed, 67 insertions(+), 16 deletions(-) diff --git a/main.sh b/main.sh old mode 100644 new mode 100755 index 66cc83e..587648e --- 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,22 +50,49 @@ 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')" - for f in '$1*.pkg.tar.xz' - do - cp $f $REPODIR/$f - repo-add $([ "$SIGN" == "Y" ] && echo "--sign --key $KEY") $REPODIR/$REPONAME.db.tar.xz $REPODIR/$f + 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 @@ -86,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 -not -path '*/\.*' -type d) + 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 } @@ -103,8 +132,16 @@ cd $BUILDDIR git clone https://aur.archlinux.org/$1.git cd $1 - build_pkg $1 new + build_pkg $1 new -f return 0 +} + +#Remove a package from the build list and repository +# Usage remove [package name] +function remove { + rm -rf $BUILDDIR/$1* + repo-remove $REPODIR/$REPONAME.db.tar.xz $1 + rm $REPODIR/$1* } #Check config and create build folders @@ -150,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;; @@ -157,15 +204,19 @@ 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" fi ;; + "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