#!/usr/bin/env bash # SPDX-License-Identifier: LicenseRef-Starship-1.0 # Copyright (c) 2023-2026 Robert A. James # test_acceptance_signing.sh -- #174: the PR gate into master refuses an unsigned build. The step # ".gitea/workflows/acceptance.yml: The capsule-signing key" is taken from the workflow as CI runs # it, and run here with and without CAPSULE_SIGN_KEY. # # Prints PASS:/FAIL: per check and RESULT:; exits 0 only if every check passes. set -uo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" T=$(mktemp -d) trap 'rm -rf "$T"' EXIT ok=1 python3 - "$ROOT/.gitea/workflows/acceptance.yml" "$T/step.sh" <<'EOF' || { echo "FAIL: no 'The capsule-signing key' step in acceptance.yml"; exit 1; } import sys, yaml steps = yaml.safe_load(open(sys.argv[1]))["jobs"]["acceptance"]["steps"] run = [s["run"] for s in steps if s.get("name") == "The capsule-signing key"] assert len(run) == 1 open(sys.argv[2], "w").write(run[0]) EOF run_step() { # run_step : the step's exit status; GITHUB_ENV and RUNNER_TEMP in $T : > "$T/env" KEY="$1" GITHUB_ENV="$T/env" RUNNER_TEMP="$T" bash -e "$T/step.sh" > "$T/out" 2>&1 } if run_step ""; then echo "FAIL: #174 no CAPSULE_SIGN_KEY: the step passed -- an unsigned build would be accepted"; ok=0 else echo "PASS: #174 no CAPSULE_SIGN_KEY: the step fails, the gate refuses the unsigned build"; fi grep -q "::error::" "$T/out" && echo "PASS: #174 and says so as an error" || { echo "FAIL: #174 no ::error:: line"; ok=0; } if run_step "-----BEGIN PRIVATE KEY----- test -----END PRIVATE KEY-----" && grep -q "^SIGN_KEY=$T/capsule-signing.key$" "$T/env" && [ -s "$T/capsule-signing.key" ]; then echo "PASS: with a key: the step passes and hands it to the build (SIGN_KEY)" else echo "FAIL: with a key: the step did not pass, or did not set SIGN_KEY"; ok=0; fi echo "RESULT: $([ $ok = 1 ] && echo PASS || echo FAIL)" [ $ok = 1 ]