Skip to content

Commit b904e7e

Browse files
committed
ci: add scorecard/mirror/secret-scanner; timeout-minutes on casket-pages
Addresses the Hypatia workflow-audit findings on PR #23 (all pre-existing; none introduced by the docs pass). (b) Add the three missing estate-standard workflows, copied from the canonical sibling form (SHA-pinned standards reusables): - mirror.yml (mirror-reusable @e6b2884) - secret-scanner.yml (secret-scanner-reusable @3e4bd4c) - scorecard.yml (scorecard-reusable @e036864; workflow-level contents:read + job-level security-events/id-token writes — the known-good form that avoids the estate-wide read-all startup_failure) (a) Add timeout-minutes: 10 to casket-pages.yml build + deploy jobs. The remaining missing_timeout_minutes findings (governance/hypatia-scan/ rust-ci) are NOT fixable here: those jobs call reusables via `uses:`, where timeout-minutes is not a legal job key — it must live in the standards reusables (out of scope). Recorded in agent_instructions/debt.a2ml, along with the intentionally-left unpinned governance@main. https://claude.ai/code/session_01JNCDaWMB8NV6nAPrvmTg4w
1 parent 3cc6967 commit b904e7e

5 files changed

Lines changed: 76 additions & 0 deletions

File tree

.github/workflows/casket-pages.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ concurrency:
1818
jobs:
1919
build:
2020
runs-on: ubuntu-latest
21+
timeout-minutes: 10
2122
steps:
2223
- name: Checkout
2324
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v4
@@ -36,6 +37,7 @@ jobs:
3637
url: ${{ steps.deployment.outputs.page_url }}
3738
runs-on: ubuntu-latest
3839
needs: build
40+
timeout-minutes: 10
3941
steps:
4042
- name: Deploy to GitHub Pages
4143
id: deployment

.github/workflows/mirror.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
name: Mirror to Git Forges
3+
4+
on:
5+
push:
6+
branches: [main]
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: read
11+
12+
jobs:
13+
mirror:
14+
uses: hyperpolymath/standards/.github/workflows/mirror-reusable.yml@e6b2884722350515934d443daf23442f2195796f
15+
secrets: inherit

.github/workflows/scorecard.yml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
name: Scorecards supply-chain security
3+
4+
on:
5+
branch_protection_rule:
6+
schedule:
7+
- cron: '23 4 * * 1'
8+
push:
9+
branches: [main]
10+
11+
# Workflow-level permissions are read-only. The job that calls the reusable
12+
# upgrades to the writes `ossf/scorecard-action` requires. Job-level
13+
# permissions REPLACE workflow-level for that job, so `contents: read` here
14+
# plus the writes below yields the correct effective set and avoids the
15+
# `read-all` startup_failure seen estate-wide. Matches the canonical caller in
16+
# hyperpolymath/standards/.github/workflows/scorecard-reusable.yml.
17+
permissions:
18+
contents: read
19+
20+
jobs:
21+
analysis:
22+
permissions:
23+
security-events: write
24+
id-token: write
25+
uses: hyperpolymath/standards/.github/workflows/scorecard-reusable.yml@e03686486e11b662834d7090dffae54c3e96fd59
26+
secrets: inherit
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# SPDX-License-Identifier: MPL-2.0
2+
name: Secret Scanner
3+
4+
on:
5+
pull_request:
6+
push:
7+
branches: [main]
8+
9+
concurrency:
10+
group: ${{ github.workflow }}-${{ github.ref }}
11+
cancel-in-progress: true
12+
13+
permissions:
14+
contents: read
15+
16+
jobs:
17+
scan:
18+
uses: hyperpolymath/standards/.github/workflows/secret-scanner-reusable.yml@3e4bd4c93911750727e2e4c66dff859e00079da0
19+
secrets: inherit

.machine_readable/agent_instructions/debt.a2ml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,3 +77,17 @@ issue = "DUST section references contractiles/dust/Dustfile.a2ml which does not
7777
effort = "easy"
7878
impact = "low"
7979
discovered = "2026-06-03"
80+
81+
[[debt.could]]
82+
component = ".github/workflows (reusable-caller wrappers)"
83+
issue = "Hypatia flags missing_timeout_minutes on governance.yml/hypatia-scan.yml/rust-ci.yml, but these are reusable-callers (uses:) where timeout-minutes is not a legal job key — the timeout must be set inside the hyperpolymath/standards reusables (out of this repo's scope). casket-pages.yml (real steps) was fixed in PR #23."
84+
effort = "medium"
85+
impact = "low"
86+
discovered = "2026-06-03"
87+
88+
[[debt.could]]
89+
component = "governance.yml"
90+
issue = "Hypatia flags unpinned_action: governance-reusable.yml@main is floated on @main not a SHA. Left intentionally (maintainer: estate may want first-party reusables to auto-update); revisit if the estate standardises on SHA-pinned reusables."
91+
effort = "easy"
92+
impact = "low"
93+
discovered = "2026-06-03"

0 commit comments

Comments
 (0)