#!/bin/sh set -eu export PATH=${PATH}:/usr/local/bin branches="main stable/14 releng/14.0" srctree="/home/bapt/src.git" worktrees="/home/bapt/worktrees" lastrun="/home/bapt/lastrun" objdir="/home/bapt/obj" #git --git-dir=$srctree fetch -q # for the cleanup of manually remove worktrees #git --git-dir=$srctree worktree prune nproc=$(nproc) for b in $branches; do work="${worktrees}/$b" repodir=/home/bapt/repositories/$b mkdir -p $repodir if [ ! -d "${work}" ]; then git clone https://git.freebsd.org/src.git -q -b $b ${work} cd "${work}" else cd "${work}" git pull -qr fi latest=$(git rev-parse HEAD) targets=$(make -C $work targets | awk '$1 ~ /\// { print $1 }') case $b in main) export DEFKERNCONF="GENERIC GENERIC-NODEBUG" ;; *) export DEFKERNCONF="GENERIC" ;; esac for tuple in $targets; do revd=$lastrun/$b/$tuple mkdir -p "$revd" rev=${revd}/rev case $tuple in amd64/*) export KERNCONF="$DEFKERNCONF MINIMAL GENERIC-MMCCAM" ;; arm/*|arm64/*) export KERNCONF="$DEFKERNCONF GENERIC-MMCCAM" ;; i386/*) export KERNCONF="$DEFKERNCONF MINIMAL";; *powerpc64le*) export KERNCONF="GENERIC64LE" ;; *powerpc64*) export KERNCONF="GENERIC64" ;; *) export KERNCONF="$DEFKERNCONF" ;; esac if [ -f ${rev} ]; then prev=$(cat ${rev}) if [ "$latest" = "$prev" ]; then continue fi fi clean=0 osversion=$(awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $3 }' $work/sys/sys/param.h) export TARGET=$(echo $tuple | awk -F\/ '{ print $1 }') export TARGET_ARCH=$(echo $tuple | awk -F\/ '{ print $2 }') export PKG_REPO_SIGNING_KEY="signing_command: ssh pkg-sign" export MAKEOBJDIRPREFIX="${objdir}" export OSVERSION=${osversion} for tgt in buildworld buildkernel update-packages; do logs=$revd/$tgt.log clean=0 if ! make -C $work -j ${nproc} $tgt WITH_REPRODUCIBLE_BUILD=1 WITHOUT_CLEAN=1 PKG_FORMAT=tzst __MAKE_CONF=/dev/null SRCCONF=/dev/null SRC_ENV_CONF=/dev/null REPODIR="$repodir" >$logs 2>&1 ; then echo "Fail to build packages for '$b' arch '$tuple' rev '$latest'" | mail -s "[PKGBASE] Build fail $b/$tuple" bapt@FreeBSD.org break fi clean=1 done if [ "$clean" = "1" ]; then echo $latest > $rev fi cd - done done sh /home/bapt/cleanrepo.sh