Repository navigation
ci: build and deploy Pages on free GitHub-hosted runners - #40
Conversation
This public repo used blacksmith-4vcpu-ubuntu-2404, a billed third-party runner. Standard GitHub-hosted runners are free for public repositories, so the Pages verify, build and deploy jobs now use ubuntu-24.04. Adds a runner guard that fails CI if any workflow selects a runner that can bill (larger -N-cores/-arm runners, Blacksmith) or an unapproved self-hosted runner, so a later edit cannot reintroduce charges. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🟢 CodeDig PR Analysis — PASSED; analysis max severity: medium; shown blockers: 0 (none); budget: 1.7699999999999998/100 points consumed, 98.23 points remaining (green)Budget status does not override the recorded gate verdict. 🤖 SummaryThis PR is low risk (1 findings, 1 files changed). Summary
Coverage data: not available.
✅ Recommendations
🧪 Test Coverage Delta (no data)Coverage data not available for this repo — enable via Settings → Coverage Detailed Findings[medium] High complexity in .github/scripts/runner_guard.pyCyclomatic complexity spike detected: .github/scripts/runner_guard.py (complexity: 15, delta: +15) Powered by CodeDig |
1 similar comment
🟢 CodeDig PR Analysis — PASSED; analysis max severity: medium; shown blockers: 0 (none); budget: 1.7699999999999998/100 points consumed, 98.23 points remaining (green)Budget status does not override the recorded gate verdict. 🤖 SummaryThis PR is low risk (1 findings, 1 files changed). Summary
Coverage data: not available.
✅ Recommendations
🧪 Test Coverage Delta (no data)Coverage data not available for this repo — enable via Settings → Coverage Detailed Findings[medium] High complexity in .github/scripts/runner_guard.pyCyclomatic complexity spike detected: .github/scripts/runner_guard.py (complexity: 15, delta: +15) Powered by CodeDig |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🔴 CodeDig PR Analysis — FAILED; analysis max severity: high; shown blockers: 1 (high); budget: 3.2699999999999996/100 points consumed, 96.73 points remaining (green)The gate failed with blocking findings marked below. Budget status does not override the recorded gate verdict. 🤖 SummaryThis PR is high risk (1 findings, 1 files changed). Summary
Coverage data: not available.
✅ Recommendations
🧪 Test Coverage Delta (no data)Coverage data not available for this repo — enable via Settings → Coverage Detailed Findings[high] High complexity in .github/scripts/runner_guard.pyCyclomatic complexity spike detected: .github/scripts/runner_guard.py (complexity: 20, delta: +20) Powered by CodeDig |
1 similar comment
🔴 CodeDig PR Analysis — FAILED; analysis max severity: high; shown blockers: 1 (high); budget: 3.2699999999999996/100 points consumed, 96.73 points remaining (green)The gate failed with blocking findings marked below. Budget status does not override the recorded gate verdict. 🤖 SummaryThis PR is high risk (1 findings, 1 files changed). Summary
Coverage data: not available.
✅ Recommendations
🧪 Test Coverage Delta (no data)Coverage data not available for this repo — enable via Settings → Coverage Detailed Findings[high] High complexity in .github/scripts/runner_guard.pyCyclomatic complexity spike detected: .github/scripts/runner_guard.py (complexity: 20, delta: +20) Powered by CodeDig |
A security review showed runs-on: ${{ vars.RUNNER || 'ubuntu-latest' }}
passed because only quoted labels were checked, letting a billed runner
through. The guard now accepts only literal free labels or
${{ matrix.<key> }} over a literal label list, and rejects every other
expression, expression-built matrices, runner groups and mappings, and
reusable workflows from other repositories.
Checked against eight bypass cases (vars fallback, expression matrix,
larger runner in matrix include, runner group, remote reusable workflow,
Blacksmith, -arm, unapproved self-hosted): all rejected.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🔴 CodeDig PR Analysis — FAILED; analysis max severity: high; shown blockers: 1 (high); budget: 4.18/100 points consumed, 95.82 points remaining (green)The gate failed with blocking findings marked below. Budget status does not override the recorded gate verdict. 🤖 SummaryThis PR is high risk (1 findings, 1 files changed). Summary
Coverage data: not available.
✅ Recommendations
🧪 Test Coverage Delta (no data)Coverage data not available for this repo — enable via Settings → Coverage Detailed Findings[high] High complexity in .github/scripts/runner_guard.pyCyclomatic complexity spike detected: .github/scripts/runner_guard.py (complexity: 27, delta: +27) Powered by CodeDig |
1 similar comment
🔴 CodeDig PR Analysis — FAILED; analysis max severity: high; shown blockers: 1 (high); budget: 4.18/100 points consumed, 95.82 points remaining (green)The gate failed with blocking findings marked below. Budget status does not override the recorded gate verdict. 🤖 SummaryThis PR is high risk (1 findings, 1 files changed). Summary
Coverage data: not available.
✅ Recommendations
🧪 Test Coverage Delta (no data)Coverage data not available for this repo — enable via Settings → Coverage Detailed Findings[high] High complexity in .github/scripts/runner_guard.pyCyclomatic complexity spike detected: .github/scripts/runner_guard.py (complexity: 27, delta: +27) Powered by CodeDig |
Malformed or expression-based runs-on now raises and is rejected, halving cyclomatic complexity (radon 35 -> 18) with the same fail-closed result: rejects 12/12 bypass cases, accepts 4/4 legitimate patterns. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
🟢 CodeDig PR Analysis — PASSED; analysis max severity: medium; shown blockers: 0 (none); budget: 2.2249999999999996/100 points consumed, 97.775 points remaining (green)Budget status does not override the recorded gate verdict. 🤖 SummaryThis PR is low risk (1 findings, 1 files changed). Summary
Coverage data: not available.
✅ Recommendations
🧪 Test Coverage Delta (no data)Coverage data not available for this repo — enable via Settings → Coverage Detailed Findings[medium] High complexity in .github/scripts/runner_guard.pyCyclomatic complexity spike detected: .github/scripts/runner_guard.py (complexity: 16, delta: +16) Powered by CodeDig |
1 similar comment
🟢 CodeDig PR Analysis — PASSED; analysis max severity: medium; shown blockers: 0 (none); budget: 2.2249999999999996/100 points consumed, 97.775 points remaining (green)Budget status does not override the recorded gate verdict. 🤖 SummaryThis PR is low risk (1 findings, 1 files changed). Summary
Coverage data: not available.
✅ Recommendations
🧪 Test Coverage Delta (no data)Coverage data not available for this repo — enable via Settings → Coverage Detailed Findings[medium] High complexity in .github/scripts/runner_guard.pyCyclomatic complexity spike detected: .github/scripts/runner_guard.py (complexity: 16, delta: +16) Powered by CodeDig |
This public repo used blacksmith-4vcpu-ubuntu-2404, a billed third-party
runner. Standard GitHub-hosted runners are free for public repositories,
so the Pages verify, build and deploy jobs now use ubuntu-24.04.
Adds a runner guard that fails CI if any workflow selects a runner that can
bill (larger -N-cores/-arm runners, Blacksmith) or an unapproved
self-hosted runner, so a later edit cannot reintroduce charges.
Verified: actionlint clean; the guard passes on this branch and fails on the previous workflows (flags all three Blacksmith jobs).
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.