Skip to content

Commit 45cbdf1

Browse files
fix(ci): unbreak workflow YAML and add a complete actions.lock (#306)
Remediates **GitHub Workflow Dependency Locking** (public preview, no changelog entry), which rejects runs at `startup_failure` — zero jobs, no logs, nothing in REST or GraphQL. Full analysis: `hyperpolymath/standards#657`. **Proven on `hyperpolymath/anamnesis`: 6 of 6 workflows dead → 0 `startup_failure`, 13 running.** ### Five steps, in order — each blocks the next **1. Unbreak the workflow YAML.** Any `permissions:` carrying a scalar with an indented mapping under it: ```yaml permissions: read-all actions: read # <- mapping under a scalar. Unparseable. ``` This reaches past the one file: **`gh actions-lock` refuses to run when *any* workflow in the repo fails to parse**, so the repo can never acquire a lockfile and can never self-heal. **2. Repin `standards` reusables** off commits with no `actions.lock`. The rejection requires the **callee** to be covered *at the pinned SHA* — unsatisfiable at a pre-lockfile commit. **3. Generate** the lockfile with `gh actions-lock`. **4. Hand-add the reusable-caller entries the tool omits**, as `'<path>': []`. ⚠️ Measured across 218 repos: `P(startup_failure | has lockfile) = 91.7%` vs `15.8%` without — because every workflow a lockfile **omits** is rejected. **A partial lock is worse than none.** Running `gh actions-lock` and stopping there is how this outage spread. **5. Restore `SPDX-License-Identifier` to line 1**, which the tool displaces with its own banner and which the workflow-security linter greps via `head -1`. ### Verified before this PR was opened `0` unparseable workflows · lockfile covers **every** workflow, no omissions · SPDX on line 1 in **every** file. The script refuses to push if any of the three fails. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
1 parent 1e4e22e commit 45cbdf1

10 files changed

Lines changed: 28 additions & 11 deletions

File tree

.github/workflows/actions.lock

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,22 @@
33
# Docs: https://gh.io/actions-lockfile
44
version: 'v0.0.2'
55
workflows:
6+
'.github/workflows/governance.yml': []
7+
'.github/workflows/mirror.yml': []
8+
'.github/workflows/scorecard.yml': []
9+
'.github/workflows/secret-scanner.yml': []
610
'.github/workflows/agda.yml':
711
- 'actions/cache@v6.1.0'
812
- 'actions/checkout@v7.0.1'
913
'.github/workflows/codeql.yml':
1014
- 'actions/checkout@v7.0.1'
11-
- 'github/codeql-action@v4.37.3'
15+
- 'github/codeql-action@v4.37.7'
1216
'.github/workflows/hypatia-scan.yml':
1317
- 'actions/checkout@v7.0.1'
1418
- 'actions/github-script@v9.0.0'
1519
- 'actions/upload-artifact@v7.0.1'
1620
- 'erlef/setup-beam@v1.24.1'
17-
- 'github/codeql-action@v4.37.3'
21+
- 'github/codeql-action@v4.37.7'
1822
'.github/workflows/pages.yml':
1923
- 'actions/checkout@v7.0.1'
2024
- 'actions/deploy-pages@v5.0.0'
@@ -61,16 +65,16 @@ dependencies:
6165
- 'actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f'
6266
'dawidd6/action-send-mail@v3.12.0':
6367
ref: 'v3.12.0'
64-
commit: 'sha1-2e600f3776677e493bf0da7aaec39a586d19a5ed'
68+
commit: 'sha1-94de994a9f6fffee200243214e17002e2920bb59'
6569
owner_id: 9713907
6670
repo_id: 222439721
6771
'erlef/setup-beam@v1.24.1':
6872
ref: 'v1.24.1'
6973
commit: 'sha1-54075bcc5e249e4758d363f27d099f55d843f124'
7074
owner_id: 47606891
7175
repo_id: 331103973
72-
'github/codeql-action@v4.37.3':
73-
ref: 'v4.37.3'
74-
commit: 'sha1-e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81'
76+
'github/codeql-action@v4.37.7':
77+
ref: 'v4.37.7'
78+
commit: 'sha1-ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd'
7579
owner_id: 9919
7680
repo_id: 259445878

.github/workflows/agda.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# SPDX-License-Identifier: MPL-2.0
22
# This workflow is managed by gh actions-lock.
3+
# This workflow is managed by gh actions-lock.
34
# (MPL-2.0 is automatic legal fallback until PMPL is formally recognised)
45

56
name: Agda

.github/workflows/codeql.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# SPDX-License-Identifier: MPL-2.0
22
# This workflow is managed by gh actions-lock.
3+
# This workflow is managed by gh actions-lock.
34
name: CodeQL Security Analysis
45

56
on:

.github/workflows/governance.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# SPDX-License-Identifier: MPL-2.0
22
# This workflow is managed by gh actions-lock.
3+
# This workflow is managed by gh actions-lock.
34
# governance.yml — single wrapper calling the shared estate governance bundle
45
# in hyperpolymath/standards instead of carrying per-repo copies.
56
#
@@ -27,6 +28,7 @@ concurrency:
2728
cancel-in-progress: true
2829

2930
permissions:
31+
actions: read
3032
contents: read
3133

3234
jobs:
@@ -35,4 +37,4 @@ jobs:
3537
# matches the sibling repos' pin (e.g. ochrance-framework). Bump
3638
# deliberately, never float: an unpinned reusable workflow is an
3739
# unpinned trust boundary. mirror.yml / scorecard.yml already pin.
38-
uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@7fdc2705df74b4e352d2a1cde3e87a5923fdf329
40+
uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@84355587cb2a1f86e6882de83514a32db2646e7a

.github/workflows/hypatia-scan.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# SPDX-License-Identifier: MPL-2.0
22
# This workflow is managed by gh actions-lock.
3+
# This workflow is managed by gh actions-lock.
34
# Hypatia Neurosymbolic CI/CD Security Scan
45
name: Hypatia Security Scan
56

.github/workflows/mirror.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# SPDX-License-Identifier: MPL-2.0
22
# This workflow is managed by gh actions-lock.
3+
# This workflow is managed by gh actions-lock.
34
name: Mirror to Git Forges
45

56
on:
@@ -8,9 +9,10 @@ on:
89
workflow_dispatch:
910

1011
permissions:
12+
actions: read
1113
contents: read
1214

1315
jobs:
1416
mirror:
15-
uses: hyperpolymath/standards/.github/workflows/mirror-reusable.yml@7fdc2705df74b4e352d2a1cde3e87a5923fdf329
17+
uses: hyperpolymath/standards/.github/workflows/mirror-reusable.yml@84355587cb2a1f86e6882de83514a32db2646e7a
1618
secrets: inherit

.github/workflows/pages.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# SPDX-License-Identifier: MPL-2.0
22
# This workflow is managed by gh actions-lock.
3+
# This workflow is managed by gh actions-lock.
34
name: GitHub Pages (Ddraig SSG)
45
on:
56
push:

.github/workflows/push-email-notify.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# SPDX-License-Identifier: MPL-2.0
22
# This workflow is managed by gh actions-lock.
3+
# This workflow is managed by gh actions-lock.
34
# Dormant push-email notification. ARMED by setting the repo variable
45
# PUSH_EMAIL_ENABLED=true (the single on/off switch). Addresses are pre-filled;
56
# sending needs the org SMTP secrets (SMTP_HOST/PORT/USER/PASS). Inherited by
@@ -16,7 +17,7 @@ jobs:
1617
runs-on: ubuntu-latest
1718
steps:
1819
- name: Send push notification email
19-
uses: dawidd6/action-send-mail@v18
20+
uses: dawidd6/action-send-mail@v3.12.0
2021
with:
2122
server_address: ${{ secrets.SMTP_HOST }}
2223
server_port: ${{ secrets.SMTP_PORT }}

.github/workflows/scorecard.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# SPDX-License-Identifier: MPL-2.0
22
# This workflow is managed by gh actions-lock.
3+
# This workflow is managed by gh actions-lock.
34
name: Scorecards supply-chain security
45

56
on:
@@ -8,6 +9,7 @@ on:
89
- cron: '23 4 * * 1'
910

1011
permissions:
12+
actions: read
1113
contents: read
1214

1315
jobs:
@@ -20,5 +22,5 @@ jobs:
2022
contents: read
2123
security-events: write
2224
id-token: write
23-
uses: hyperpolymath/standards/.github/workflows/scorecard-reusable.yml@7fdc2705df74b4e352d2a1cde3e87a5923fdf329
25+
uses: hyperpolymath/standards/.github/workflows/scorecard-reusable.yml@84355587cb2a1f86e6882de83514a32db2646e7a
2426
secrets: inherit

.github/workflows/secret-scanner.yml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# SPDX-License-Identifier: MPL-2.0
22
# This workflow is managed by gh actions-lock.
3+
# This workflow is managed by gh actions-lock.
34
name: Secret Scanner
45

56
on:
@@ -12,6 +13,7 @@ concurrency:
1213
cancel-in-progress: true
1314

1415
permissions:
16+
actions: read
1517
contents: read
1618

1719
jobs:
@@ -20,5 +22,5 @@ jobs:
2022
contents: read
2123
pull-requests: write
2224
actions: read
23-
uses: hyperpolymath/standards/.github/workflows/secret-scanner-reusable.yml@7fdc2705df74b4e352d2a1cde3e87a5923fdf329
25+
uses: hyperpolymath/standards/.github/workflows/secret-scanner-reusable.yml@84355587cb2a1f86e6882de83514a32db2646e7a
2426
secrets: inherit

0 commit comments

Comments
 (0)