This commit is contained in:
Kat Inskip 2024-07-13 16:58:48 -07:00
parent 025a7dd039
commit b4b8f5988f
Signed by: kat
GPG key ID: 465E64DECEA8CF0F
2 changed files with 81 additions and 79 deletions

View file

@ -36,7 +36,7 @@ in {
step.${name} = { step.${name} = {
name = "build system closure for ${name}"; name = "build system closure for ${name}";
order = 500; order = 500;
run = "nix run .#nf-build-system -- nixosConfigurations.${name}.config.system.build.topLevel ${name} NixOS"; run = "nix run .#nf-build-system -- nixosConfigurations.${name}.config.system.build.toplevel ${name} NixOS";
env = { env = {
CACHIX_SIGNING_KEY = "\${{ secrets.CACHIX_SIGNING_KEY }}"; CACHIX_SIGNING_KEY = "\${{ secrets.CACHIX_SIGNING_KEY }}";
DISCORD_WEBHOOK_LINK = "\${{ secrets.DISCORD_WEBHOOK_LINK }}"; DISCORD_WEBHOOK_LINK = "\${{ secrets.DISCORD_WEBHOOK_LINK }}";

View file

@ -1,113 +1,115 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -eu set -euo pipefail
DISCORD_WEBHOOK_LINK=${DISCORD_WEBHOOK_LINK:-""} DISCORD_WEBHOOK_LINK=${DISCORD_WEBHOOK_LINK:-""}
SYSTEM_LINK=$1 SYSTEM_LINK=${1:-""}
ALIAS=$2 ALIAS=${2:-""}
SYSTEM_TYPE=$3 SYSTEM_TYPE=${3:-""}
# Helper functions # Helper functions
send_discord_message() { send_discord_message() {
local message="$1" local message="$1"
local escaped_message=$(printf '%s' "$message" | jq -R -s '.') if [[ -n "$DISCORD_WEBHOOK_LINK" ]]; then
curl -s -H "Accept: application/json" -H "Content-Type: application/json" \ local escaped_message=$(printf '%s' "$message" | jq -R -s '.')
-X POST --data "{\"content\": $escaped_message}" "$DISCORD_WEBHOOK_LINK" curl -s -H "Accept: application/json" -H "Content-Type: application/json" \
-X POST --data "{\"content\": $escaped_message}" "$DISCORD_WEBHOOK_LINK"
else
echo "Discord message (not sent): $message"
fi
} }
send_discord_message "Starting ${SYSTEM_TYPE} system build for ${ALIAS}" init_nfargs() {
local nflinksuffix="-L"
nfargs=(
"${NIX_BUILD_ARGS[@]}"
)
if [[ -n "${NF_ACTIONS_TEST_OUTLINK-}" || -n "${NF_UPDATE_CACHIX_PUSH-}" ]]; then
nfargs+=(
-o "${NF_ACTIONS_TEST_OUTLINK-result}$nflinksuffix"
)
else
nfargs+=(
--no-link
)
fi
}
nfgc() {
if [[ -n ${NF_ACTIONS_TEST_GC-} ]]; then
if [[ -n ${NF_UPDATE_CACHIX_PUSH-} ]]; then
send_discord_message "Cachix pushing ${SYSTEM_TYPE} system build for ${ALIAS}"
cachix push kittywitch "./${NF_ACTIONS_TEST_OUTLINK-result}$nflinksuffix"*/
rm -f "./${NF_ACTIONS_TEST_OUTLINK-result}$nflinksuffix"*
fi
nix-collect-garbage -d
fi
}
# Main script
if [[ -z "$SYSTEM_LINK" || -z "$ALIAS" || -z "$SYSTEM_TYPE" ]]; then
echo "Usage: $0 <SYSTEM_LINK> <ALIAS> <SYSTEM_TYPE>" >&2
exit 1
fi
send_discord_message "Starting ${SYSTEM_TYPE} system build for ${ALIAS}"
if [[ -n ${CACHIX_SIGNING_KEY-} ]]; then if [[ -n ${CACHIX_SIGNING_KEY-} ]]; then
export NF_UPDATE_CACHIX_PUSH=1 export NF_UPDATE_CACHIX_PUSH=1
fi fi
cd "$NF_CONFIG_ROOT" cd "$NF_CONFIG_ROOT"
if [[ -n ${NF_UPDATE_CACHIX_PUSH-} ]]; then if [[ -n ${NF_UPDATE_CACHIX_PUSH-} ]]; then
export NF_ACTIONS_TEST_OUTLINK=${NF_ACTIONS_TEST_OUTLINK-result} export NF_ACTIONS_TEST_OUTLINK=${NF_ACTIONS_TEST_OUTLINK-result}
fi fi
if [[ ${GITHUB_ACTIONS-} = true && ${RUNNER_NAME-} = "Github Actions"* ]]; then if [[ ${GITHUB_ACTIONS-} = true && ${RUNNER_NAME-} = "Github Actions"* ]]; then
# low disk space available on public runners... echo "Enabled GC between builds due to restricted disk space..." >&2
echo "enabled GC between builds due to restricted disk space..." >&2 export NF_ACTIONS_TEST_GC=1
export NF_ACTIONS_TEST_GC=1
fi fi
NIX_BUILD_ARGS=( NIX_BUILD_ARGS=(
--show-trace --show-trace
) )
NIX_BUILD_ARGS_ASYNC=() NIX_BUILD_ARGS_ASYNC=()
init_nfargs() {
nflinksuffix="-L"
shift
nfargs=(
"${NIX_BUILD_ARGS[@]}"
)
if [[ -n "${NF_ACTIONS_TEST_OUTLINK-}" || -n "${NF_UPDATE_CACHIX_PUSH-}" ]]; then
nfargs+=(
-o "${NF_ACTIONS_TEST_OUTLINK-result}$nflinksuffix"
)
else
nfargs+=(
--no-link
)
fi
}
nfgc() {
if [[ -n ${NF_ACTIONS_TEST_GC-} ]]; then
if [[ -n ${NF_UPDATE_CACHIX_PUSH-} ]]; then
send_discord_message "Cachix pushing ${SYSTEM_TYPE} system build for ${ALIAS}"
cachix push kittywitch "./${NF_ACTIONS_TEST_OUTLINK-result}$nflinksuffix"*/
rm -f "./${NF_ACTIONS_TEST_OUTLINK-result}$nflinksuffix"*
fi
nix-collect-garbage -d
fi
}
nfsystem=$ALIAS nfsystem=$ALIAS
nfinstallable="${NF_CONFIG_ROOT}#${SYSTEM_LINK}" nfinstallable="${NF_CONFIG_ROOT}#${SYSTEM_LINK}"
init_nfargs "-$nfsystem" init_nfargs
nfwarn= nfwarn=
if [[ " ${NF_NIX_SYSTEMS_WARN[*]} " = *" $nfsystem "* ]]; then if [[ -n "${NF_NIX_SYSTEMS_WARN-}" && " ${NF_NIX_SYSTEMS_WARN[*]} " = *" $nfsystem "* ]]; then
nfwarn=1 nfwarn=1
fi fi
if [[ -n ${NF_ACTIONS_TEST_ASYNC-} && -z $nfwarn ]]; then if [[ -n ${NF_ACTIONS_TEST_ASYNC-} && -z $nfwarn ]]; then
NIX_BUILD_ARGS_ASYNC+=("$nfinstallable") NIX_BUILD_ARGS_ASYNC+=("$nfinstallable")
continue else
echo "Building ${nfsystem}..." >&2
echo >&2
if ! nix build "$nfinstallable" "${nfargs[@]}"; then
if [[ -n $nfwarn ]]; then
send_discord_message "Build failure allowed for ${nfsystem}, ignoring..."
echo "Build failure allowed for ${nfsystem}, ignoring..." >&2
else
send_discord_message "Build failure for ${nfsystem}, problem!"
exit 1
fi
else
send_discord_message "${SYSTEM_TYPE} system build of ${ALIAS} succeeded!"
nfgc
fi
fi fi
echo "building ${nfsystem}..." >&2
echo >&2
nfbuildexit=0
nix build "$nfinstallable" \
"${nfargs[@]}" \
"$@" || nfbuildexit=$?
if [[ $nfbuildexit -ne 0 ]]; then
if [[ -n $nfwarn ]]; then
send_discord_message "build failure allowed for ${nfsystem}, ignoring..."
echo "build failure allowed for ${nfsystem}, ignoring..." >&2
continue
fi
send_discord_message "build failure for ${nfsystem}, problem!"
exit $nfbuildexit
fi
send_discord_message "${SYSTEM_TYPE} system build of ${ALIAS} succeeded!"
nfgc
if [[ -n ${NF_ACTIONS_TEST_ASYNC-} ]]; then if [[ -n ${NF_ACTIONS_TEST_ASYNC-} ]]; then
init_nfargs "" init_nfargs
nix build \ if nix build "${nfargs[@]}" "${NIX_BUILD_ARGS_ASYNC[@]}"; then
"${nfargs[@]}" \ nfgc
"${NIX_BUILD_ARGS_ASYNC[@]}" \ else
"$@" send_discord_message "Async build failure for ${nfsystem}, problem!"
exit 1
nfgc fi
fi fi