2023-02-15 13:46:36 +01:00
name : "Build system config"
on :
pull_request :
2023-07-23 17:48:40 +02:00
workflow_dispatch :
2023-02-15 13:46:36 +01:00
push :
2023-07-23 17:48:40 +02:00
branches : [ main ]
2023-02-15 13:46:36 +01:00
jobs :
build :
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v3
2023-07-23 17:48:40 +02:00
with :
fetch-depth : 0
2023-04-12 14:10:55 +02:00
- uses : cachix/install-nix-action@v20
2023-02-15 13:46:36 +01:00
with :
github_access_token : ${{ secrets.GITHUB_TOKEN }}
- name : nix flake check
run : |
nix flake check --no-build
echo "## \`nix flake check\` succeeded" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
- name : Discover nixosConfigurations
run : |
echo Discovered the following system configs
nix flake show . --json | jq ".nixosConfigurations|keys[]" -r
- name : Build systems
run : |
echo "## Builds succeeded" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "| Host | Out path |" >> $GITHUB_STEP_SUMMARY
echo "| ---- | -------- |" >> $GITHUB_STEP_SUMMARY
for host in $(nix flake show . --json | jq ".nixosConfigurations|keys[]" -r); do
echo "::group::Building ${host}"
drv=".#nixosConfigurations.$host.config.system.build.toplevel"
build_cmd="nix build ${drv}"
2023-04-12 14:18:19 +02:00
#cachix watch-exec chaos-jetzt-nixfiles -- $build_cmd
$build_cmd
2023-02-15 13:46:36 +01:00
echo "::endgroup::"
out_path=$($build_cmd --print-out-paths)
echo -e "\x1b[32;1mSuccessfully built .#nixosConfigurations.${host}\x1b[0m"
echo "| ${host} | \`${out_path}\` |" >> $GITHUB_STEP_SUMMARY
done
2023-07-23 17:48:40 +02:00
- name : Diff closures
# Since this is only triggered by pushes to main, no need to compare to main for pushes
if : github.event_name != 'push'
run : |
# Compare to pull_request_target or, if this has no PR-Target, main
target_ref="${GITHUB_BASE_REF-main}"
target_ref="origin/${target_ref/#refs\/heads\//}"
if [[ $GITHUB_REF == "target/refs/main" ]]; then
# If triggered on main, compare with the previous commit
target_ref="$(git log HEAD~1 -1 --format=format:"%H")"
fi
echo -e "## Closure differences\n" >> $GITHUB_STEP_SUMMARY
echo "_Comparing current $(git rev-parse --abbrev-ref HEAD) ($(git rev-parse --verify HEAD)) to ${target_ref} ($(git rev-parse $target_ref))_" | tee -a $GITHUB_STEP_SUMMARY
for host in $(nix flake show . --json | jq ".nixosConfigurations|keys[]" -r); do
echo "::group::Diff-closures for ${host}"
drv="nixosConfigurations.$host.config.system.build.toplevel"
diff_cmd="nix store diff-closures git+file:.?ref=${target_ref}#${drv} .#${drv}"
# Get the nice and colorfull output for the logs, running twice won't (significantly) prolong the runtime
$diff_cmd
echo -e "<details>\n<summary>Diff for ${host}</summary>\n" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
# Strip color codes so that the summary stays readable
$diff_cmd | sed -e 's/\x1b\[[0-9;]*m//g' >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY
echo -e "\n</details>" >> $GITHUB_STEP_SUMMARY
echo "::endgroup::"
done