diff options
-rwxr-xr-x | fullpkg | 185 | ||||
-rwxr-xr-x | is_built | 7 | ||||
-rwxr-xr-x | mipsrelease | 17 |
3 files changed, 209 insertions, 0 deletions
@@ -0,0 +1,185 @@ +#!/bin/bash +# TODO +# * Do version checking +# * Detect circular builds +# * Detect pkgnames by provides, replaces, etc. instead of dir tree + + +tmp_dir=$(mktemp -d) +queue_file=$(mktemp) +[[ ! -w $queue_file ]] && exit 1 + +source /etc/makepkg.conf +source /etc/abs.conf +source /etc/libretools.conf + +[[ -r ~/.config/libretools/libretools.conf ]] && \ + source ~/.config/libretools/libretools.conf + +# Queue Management +# * Always get the queue list from the server +# * Add/Remove from queue +# * Check if a package is listed + +# TODO +# * Check for concurrence + +# Get the queue list from the server +get_queue() { + rsync -e ssh -aq $PARABOLAHOST:mips64el/queue $queue_file >/dev/null 2>&1 || { + echo ":: Failed to retrieve queue list" + return 1 + } +} + +# Put the queue list on the server +put_queue() { + rsync -e ssh -aq $queue_file $PARABOLAHOST:mips64el/queue >/dev/null 2>&1 || { + echo ":: Failed to put queue list" + return 1 + } +} + +# Add packages to the queue +update_queue() { + get_queue || return $? + + basename $PWD | sed "s/$/:$PACKAGER/" >> $queue_file || return 2 + + put_queue || return $? +} + +# Remove a package from the queue +remove_queue() { + get_queue || return $? + + grep -vw "^$(basename $PWD)" $queue_file > $queue_file.2 + cat $queue_file.2 > $queue_file + + put_queue || return $? +} + +# Checks if a package is listed +check_queue() { + get_queue || return $? + + packager=$(grep -w "$(basename $PWD)" ${queue_file} | cut -d ':' -f2) + + [[ ! -z $packager ]] && [[ "$packager" != "$PACKAGER" ]] && { + echo ":: $(basename $PWD) is being packaged by $packager. Please wait." + return 1 + } + + return 0 +} + + +# TODO keep track of spawned fullpkgs +quit() { + remove_queue + + exit 1 +} + +source PKGBUILD +echo ":: Building ${pkgbase} ${pkgname[@]}" + +trap "quit" SIGTERM SIGKILL + +check_queue || exit 1 + +failed=() +missing=() + +# Gets the dependency list from the package_* functions +#pkgdeps=($(cat PKGBUILD | \ +# tr -d "\n" | \ +# sed -n "s/depends=(\([^)]\+\))/\n::\1\n/pg" | \ +# grep --color=never "^::" | \ +# tr -d [:\'\"] | \ +# tr " " "\n" | \ +# sort -u)) + +# Clean version checking +deps=$(echo "${depends[@]} ${makedepends[@]} ${pkgdeps[@]}" | \ + sed "s/[=<>]\+[^ ]\+//g" | \ + tr ' ' "\n" | \ + sort -u) + +echo $_deps + +sudo pacman -Sy + +for _dep in ${deps[@]}; do + is_built $_dep && continue + + for _repo in ${REPOS[@]}; do + # TODO find split packages + [[ -e "$ABSROOT/${_repo}/$_dep/PKGBUILD" ]] && { + cp -r "$ABSROOT/$_repo/$_dep" $tmp_dir/ || { + echo "Can't copy $_dep to the work dir." + exit 1 + } + + # Enter the work dir and run this command in it + pushd $tmp_dir/$_dep >/dev/null + $0 + + [[ $? -eq 1 ]] && { + failed=(${failed[@]} $_dep) + } + + popd >/dev/null + + break +# } || { +# The package can't be found +# This can happen if: +# * The package is built inside a split package +# * The package is provided by some other package (ie by *-libre packages) +# echo "==> Missing package $_dep" +# missing=(${missing[@]} $_dep) + } + done +done + +# TODO probably not elegant enough +#[[ ${#failed[@]} -gt 0 ]] || [[ ${#missing[@]} -gt 0 ]] && { + [[ ${#failed[@]} -gt 0 ]] && { + echo ":: This packages failed to build: ${failed[@]}" + } + +# [[ ${#missing[@]} -gt 0 ]] && { +# echo ":: This packages are missing: ${missing[@]}" +# } + +# exit 1 +#} + +# Let everybody know we're building this +update_queue || { + echo ":: Couldn't update the queue, let your partners know about this." +} + +cp -r ../$(basename $PWD) $tmp_dir/ +pushd $tmp_dir/$(basename $PWD) >/dev/null + +sudo pacman -Sy +makepkg --noconfirm -sLcr ; r=$? +case $r in + 0) + echo "==> The build was succesful." + mipsrelease *.pkg.tar.* + ;; + 1) + echo "==> The build failed." + ;; + 2) + echo "==> The build failed." + ;; +esac + +# Remove from queue +remove_queue + +exit $r diff --git a/is_built b/is_built new file mode 100755 index 0000000..9dc5d1c --- /dev/null +++ b/is_built @@ -0,0 +1,7 @@ +#!/bin/bash +# Detect is a package is installed or in a database + +pacman -Qqi $1 >/dev/null 2>&1 || \ +pacman -Sqi $1 >/dev/null 2>&1 + +exit $? diff --git a/mipsrelease b/mipsrelease new file mode 100755 index 0000000..82cd51f --- /dev/null +++ b/mipsrelease @@ -0,0 +1,17 @@ +#!/bin/bash +# Temporary script for uploading mips64el packages to the server + +source /etc/makepkg.conf +source /etc/libretools.conf + +for pkg in $@; do + scp $pkg ${PARABOLAHOST}:mips64el/stage3/ +done + +scp ${PARABOLAHOST}:mips64el/stage3/stage3.db.tar.gz ${SRCDEST}/ && \ +repo-add ${SRCDEST}/stage3.db.tar.gz $@ && \ +scp ${SRCDEST}/stage3.db.tar.gz ${PARABOLAHOST}:mips64el/stage3/ + +#ssh parabola bash -c "cd /home/parabolavnx/mips64el/stage3/ ; repo-add stage3.db.tar.gz $@" + +exit $? |