From a784b129627283c6bb313c480c14360da473af8a Mon Sep 17 00:00:00 2001 From: Jermeiah S Date: Fri, 20 Jun 2025 13:54:11 -0400 Subject: [PATCH] added tool for checking deployment requirement --- .forgejo/workflows/needs-deploy.sh | 44 ++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100755 .forgejo/workflows/needs-deploy.sh diff --git a/.forgejo/workflows/needs-deploy.sh b/.forgejo/workflows/needs-deploy.sh new file mode 100755 index 0000000..e61eed5 --- /dev/null +++ b/.forgejo/workflows/needs-deploy.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Check for hostname argument +if [[ $# -ne 1 ]]; then + echo "Usage: $0 " + exit 1 +fi + +HOST="$1" +REPO_PATH="git+file://$PWD" + +CURRENT_COMMIT=$(git rev-parse HEAD) +PREV_COMMIT=$(git rev-parse HEAD^) + +# Check if the host exists at the current commit +if ! nix eval --quiet --expr " + let + flake = builtins.getFlake \"${REPO_PATH}?rev=${CURRENT_COMMIT}\"; + in + builtins.hasAttr \"${HOST}\" flake.nixosConfigurations +"; then + echo "Error: Host '${HOST}' not found in nixosConfigurations at HEAD." + exit 1 +fi + +# Now check for derivation change +RESULT=$(nix eval --raw --expr " + let + flake = builtins.getFlake; + prev = flake \"${REPO_PATH}?rev=${PREV_COMMIT}\"; + curr = flake \"${REPO_PATH}?rev=${CURRENT_COMMIT}\"; + in + if prev.nixosConfigurations.\"${HOST}\".config.system.build.toplevel != + curr.nixosConfigurations.\"${HOST}\".config.system.build.toplevel + then \"changed\" else \"unchanged\" +") + +# Output result +if [[ $RESULT == "changed" ]]; then + echo "System derivation changed for host '${HOST}' — deploy!" +else + echo "No change for host '${HOST}' — skip deployment." +fi