old mode 100644
new mode 100755
| | |
| | | #!/bin/bash |
| | | #A basic bash script to automate the building of arch packages |
| | | # Usage: main.sh init|add|build_all [-f force] |
| | | |
| | | REPODIR=/repo/x86_64 |
| | | BUILDDIR=/repo/build |
| | | REPONAME= |
| | | UPDATE=N |
| | | CLEAN=N |
| | | SIGN=N |
| | | KEY="" |
| | | NUM_OLD=5 |
| | | export PACKAGER="John Doe <jd@change.me>" |
| | | EMAIL="" |
| | | source vars.sh |
| | | |
| | | ERRORS="" |
| | | |
| | | #Helper for finding newest and oldest files |
| | | #Sourced from stack overflow |
| | | # Usage: newold_matching_file [n/o] [filename] |
| | | function newold_matching_file |
| | | { |
| | | # Use ${1-} instead of $1 in case 'nounset' is set |
| | |
| | | } |
| | | |
| | | #Build latest version of a package |
| | | # Usage: build_pkg [package name] [new?] [-f force] |
| | | function build_pkg { |
| | | #check if PKGBUILD has updated, don't rebuild if hasn't changed |
| | | #rebuild if git is in filename (git tree may change without PKGBUILD) |
| | | #rebuild if forced |
| | | if [[ ! -z $(git pull | grep "Already up to date.") && -z $(echo $1 | grep git) && -z $2 ]]; then |
| | | return 2 |
| | | fi |
| | | |
| | | #remove old versions before build |
| | | 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=$(printf '%s %s' "$ERRORS" "$1") |
| | | ERRORS="$ERRORS $1" |
| | | return 1 |
| | | fi |
| | | |
| | | #copy package to repo directory |
| | | latest="$(newold_matching_file n '*.pkg.tar.xz')" |
| | | cp $latest $REPODIR/$latest |
| | | repo-add $([ "$SIGN" == "Y" ] && echo "--sign --key $KEY") $REPODIR/$REPONAME.db.tar.xz $REPODIR/$latest |
| | | #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 |
| | | |
| | | #Remove old versions of packages |
| | | while [ $NUM_OLD \< $(find . -name '*.pkg.tar.xz' | wc -l) ] |
| | | do |
| | | old=$(newold_matching_file o '*.pkg.tar.xz') |
| | | rm $REPODIR/$old $old |
| | | done |
| | | #TODO: Want to be able to keep multiple versions of old packages, future work |
| | | #Currently old package versions stay in the repodir indefinately |
| | | # while [ $NUM_OLD \< $(find . -name '*.pkg.tar.xz' | wc -l) ] |
| | | # do |
| | | # old=$(newold_matching_file o '*.pkg.tar.xz') |
| | | # rm $REPODIR/$old $old |
| | | # done |
| | | return 0 |
| | | } |
| | | |
| | | #Update packages in BUILDDIR |
| | | # Usage: build_all [-f force] |
| | | function build_all { |
| | | #system update |
| | | 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 |
| | |
| | | } |
| | | |
| | | #Add a new package to be built |
| | | #There is no name checking so be sure to put in the name correctly |
| | | # Usage: add [package name] |
| | | function add { |
| | | cd $BUILDDIR |
| | | git clone https://aur.archlinux.org/$1.git |
| | |
| | | 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 |
| | | #Set variables before usage |
| | | # Usage: init |
| | | function init { |
| | | #check for configuration here |
| | | [ -z $REPODIR ] && echo "Enter REPODIR" && return 1 |
| | |
| | | echo "All packages built successfully" |
| | | fi |
| | | ;; |
| | | "remove") |
| | | remove $2;; |
| | | *) |
| | | printf "Invalid usage\nUsage: $0 init|add|build_all\n";; |
| | | esac |