#!/usr/bin/env bash # Builds every template in srcpkgs/ with xbps-src into the local repository # out/hostdir/binpkgs. Runs inside the builder container, see scripts/builder.sh. # # xbps-src needs the whole void-packages tree (build styles, shared hooks), so our # templates are overlaid onto a shallow clone of it in out/void-packages. set -euo pipefail vp=/work/out/void-packages hostdir=/work/out/hostdir # xbps-src refuses to run as root. Like Void's own CI, build as an unprivileged # member of xbuilder (allowed to use xbps-uchroot); the host's UID keeps out/ owned by the user. useradd --uid "$HOST_UID" --groups xbuilder --no-create-home builder as_builder() { sudo --preserve-env=HOME -u builder "$@" } export HOME=/tmp mkdir -p "$hostdir" chown "$HOST_UID:$HOST_GID" /work/out "$hostdir" if [[ -d $vp/.git ]]; then echo "==> Updating void-packages" as_builder git -C "$vp" fetch --quiet --depth 1 origin master as_builder git -C "$vp" reset --quiet --hard FETCH_HEAD as_builder git -C "$vp" clean --quiet -fd srcpkgs else echo "==> Cloning void-packages" as_builder git clone --quiet --depth 1 https://github.com/void-linux/void-packages "$vp" fi cat > "$vp/etc/conf" </dev/null; then echo "warning: $name is now in void-packages, consider dropping our template" >&2 fi rm -rf "$vp/srcpkgs/$name" # A subpackage is a link to its source package's directory and is built with it if [[ -L ${dir%/} ]]; then as_builder ln -s "$(readlink "${dir%/}")" "$vp/srcpkgs/$name" continue fi as_builder cp -rL "$dir" "$vp/srcpkgs/$name" names+=("$name") done cd "$vp" # The bootstrapped masterdir stays in out/void-packages, so later builds skip this step if [[ ! -f masterdir-x86_64/.xbps_chroot_init ]]; then as_builder ./xbps-src -H "$hostdir" binary-bootstrap fi # A failed build leaves its destdir behind, and the next build of that package # (also as a dependency of another one) would package the stale files rm -rf masterdir-x86_64/destdir/* for name in "${names[@]}"; do echo "==> Building $name" as_builder ./xbps-src -H "$hostdir" -f pkg "$name" done echo "==> Repository: $hostdir/binpkgs" ls -1 "$hostdir"/binpkgs/*.xbps