Files
computer-playbook/scripts/github/cancel/deleted_branch_runs.sh
T
kevinveenbirkenbachandClaude Opus 4.7 f9147e4486 refactor(scripts/github): split helpers into responsibility subfolders
Group the shell helpers under scripts/github/ into five subfolders
that match how the workflow files consume them:

  runner/   host-runner hygiene (disk, swap, Docker daemon, diagnostics)
  cancel/   run cancellation on PR-close and branch-delete events
  resolve/  derivation of workflow inputs and outputs from repo state
  update/   scheduled Update: Versions pipeline
  release/  release-time gates

Drop the now-redundant subfolder prefix from each filename, e.g.
dump_runner_state.sh becomes dump_state.sh and cancel_pull_request_runs.sh
becomes pull_request_runs.sh. Each subfolder carries a README that
describes its scope per documentation.md rules; the top-level README
points at the subfolders without inventorying files.

Propagate the new paths through ten workflow files, three docs
(workflow.md, pipeline.md, secrets.md), and two tests. Fix a real
runtime bug in enlarge_swap.sh, which still referenced the
pre-rename dump_runner_state.sh path. Extend the inline-block-size
lint hint to describe the new subfolder convention.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 00:50:26 +02:00

62 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
: "${BRANCH:?Missing BRANCH}"
: "${GH_TOKEN:?Missing GH_TOKEN}"
: "${REPOSITORY:?Missing REPOSITORY}"
if ! command -v gh >/dev/null 2>&1; then
echo "ERROR: gh CLI not found." >&2
exit 1
fi
if ! command -v jq >/dev/null 2>&1; then
echo "ERROR: jq not found." >&2
exit 1
fi
echo "Searching active workflow runs for deleted branch: ${BRANCH}"
cancel_runs_by_status() {
local status="$1"
local run_ids
run_ids="$(
gh api --paginate \
-H "Accept: application/vnd.github+json" \
"/repos/${REPOSITORY}/actions/runs?status=${status}&per_page=100" |
jq -r --arg branch "${BRANCH}" '
.workflow_runs[]
| select(
.head_branch == $branch
or any(.pull_requests[]?; (.head.ref // "") == $branch)
)
| .id
' |
sort -u
)"
if [[ -z "${run_ids}" ]]; then
echo "No ${status} runs found for ${BRANCH}"
return 0
fi
while read -r run_id; do
[[ -n "${run_id}" ]] || continue
echo "Cancelling ${status} run ${run_id}"
if ! gh api \
-X POST \
-H "Accept: application/vnd.github+json" \
"/repos/${REPOSITORY}/actions/runs/${run_id}/cancel" \
>/dev/null; then
echo "Run ${run_id} could not be cancelled, likely because it already completed"
fi
done <<<"${run_ids}"
}
cancel_runs_by_status requested
cancel_runs_by_status pending
cancel_runs_by_status waiting
cancel_runs_by_status queued
cancel_runs_by_status in_progress