Fediversity/.forgejo/workflows/nix-flake-check.sh
2025-11-04 12:13:36 +01:00

52 lines
1.1 KiB
Bash
Executable file

#! /usr/bin/env sh
# shellcheck shell=bash
# generate CI checks or verify they are up to date
set -euC
cd "$(dirname "$0")" || exit 3
nix_eval () { nix eval --impure --raw --expr "with builtins; $1"; }
system=$(nix_eval "currentSystem")
checks=$(nix_eval "toJSON (attrNames (getFlake (toString ../..)).checks.$system)")
for check in $(echo "$checks" | jq -r .[]); do
output=$(mktemp)
{
cat <<EOF
name: $check
on:
pull_request:
types:
- opened
- synchronize
- reopened
push:
branches:
- main
concurrency:
cancel-in-progress: true
group: \${{ forgejo.workflow }}-\${{ forgejo.event.pull_request.number || forgejo.ref }}
jobs:
$check:
runs-on: native
steps:
- uses: actions/checkout@v4
- run: nix build .#checks.$system.$check -vL
EOF
} >| "$output"
target="${check}.yaml"
if [ $# -eq 1 ] && [ "$1" = "check" ]; then
if ! diff_output=$(diff --color=always "$target" "$output"); then
printf >&2 'Changes detected (\e[31m< current\e[0m | \e[32m> generated\e[0m):\n%s\n' "$diff_output"
exit 1
fi
else
mv "$output" "$target"
fi
done