Add new tool: offload-build
This tool is useful for running makechrootpkg on a remote build server, and is by default hooked up to send a PKGBUILD and initiate a build on our shiny new build server "dragon". Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
This commit is contained in:
parent
ad4b66830a
commit
25b4ef2799
1
Makefile
1
Makefile
|
@ -20,6 +20,7 @@ IN_PROGS = \
|
||||||
|
|
||||||
BINPROGS = \
|
BINPROGS = \
|
||||||
$(IN_PROGS) \
|
$(IN_PROGS) \
|
||||||
|
offload-build \
|
||||||
sogrep
|
sogrep
|
||||||
|
|
||||||
CONFIGFILES = \
|
CONFIGFILES = \
|
||||||
|
|
|
@ -0,0 +1,107 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# offload-build - build a PKGBUILD on a remote server using makechrootpkg.
|
||||||
|
#
|
||||||
|
# Copyright (c) 2019 by Eli Schwartz <eschwartz@archlinux.org>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 2 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
# global defaults suitable for use by Arch staff
|
||||||
|
repo=extra
|
||||||
|
arch=x86_64
|
||||||
|
server=dragon.archlinux.org
|
||||||
|
|
||||||
|
die() { printf "error: $1\n" "${@:2}"; exit 1; }
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<- _EOF_
|
||||||
|
Usage: ${BASH_SOURCE[0]##*/} [--repo REPO] [--arch ARCHITECTURE] [--server SERVER] -- [ARCHBUILD_ARGS]
|
||||||
|
|
||||||
|
Build a PKGBUILD on a remote server using makechrootpkg. Requires a remote user
|
||||||
|
that can run archbuild without password auth. Options passed after a -- are
|
||||||
|
passed on to archbuild, and eventually to makechrootpkg.
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
-r, --repo Build against a specific repository (current: $repo)
|
||||||
|
-a, --arch Build against a specific architecture (current: $arch)
|
||||||
|
-s, --server Offload to a specific build server (current: $server)
|
||||||
|
-h, --help Show this help text
|
||||||
|
_EOF_
|
||||||
|
}
|
||||||
|
|
||||||
|
# option checking
|
||||||
|
while (( $# )); do
|
||||||
|
case $1 in
|
||||||
|
-h|--help)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
-r|--repo)
|
||||||
|
repo=$2
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-a|--arch)
|
||||||
|
arch=$2
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-s|--server)
|
||||||
|
server=$2
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
die "invalid argument: %s" "$1"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# multilib must be handled specially
|
||||||
|
if [[ $repo = multilib* ]]; then
|
||||||
|
arch=
|
||||||
|
fi
|
||||||
|
|
||||||
|
archbuild_cmd=("${repo}${arch:+-$arch}-build" "$@")
|
||||||
|
|
||||||
|
trap 'rm -rf $SRCPKGDEST' EXIT
|
||||||
|
|
||||||
|
# Use a source-only tarball as an intermediate to transfer files. This
|
||||||
|
# guarantees the checksums are okay, and guarantees that all needed files are
|
||||||
|
# transferred, including local sources, install scripts, and changelogs.
|
||||||
|
export SRCPKGDEST=$(mktemp -d)
|
||||||
|
makepkg --source || die "unable to make source package"
|
||||||
|
|
||||||
|
mapfile -t files < <(
|
||||||
|
# This is sort of bash golfing but it allows running a mildly complex
|
||||||
|
# command over ssh with a single connection.
|
||||||
|
cat "$SRCPKGDEST"/*.src.tar.gz |
|
||||||
|
ssh $server '
|
||||||
|
temp="${XDG_CACHE_HOME:-$HOME/.cache}/offload-build" &&
|
||||||
|
mkdir -p "$temp" &&
|
||||||
|
temp=$(mktemp -d -p "$temp") &&
|
||||||
|
cd "$temp" &&
|
||||||
|
{
|
||||||
|
bsdtar --strip-components 1 -xvf - &&
|
||||||
|
script -qefc "'"${archbuild_cmd[@]@Q}"'" /dev/null &&
|
||||||
|
printf "%s\n" "" "-> build complete" &&
|
||||||
|
printf "\t%s\n" "$temp"/*
|
||||||
|
} >&2 &&
|
||||||
|
makepkg --packagelist
|
||||||
|
')
|
||||||
|
|
||||||
|
(( ${#files[@]} )) && printf '%s\n' '' '-> copying files...' && scp "${files[@]/#/$server:}" .
|
Loading…
Reference in New Issue