Skip to content

Commit d4e62a8

Browse files
committed
security: standardize secret scanning on TruffleHog
1 parent 3acb345 commit d4e62a8

14 files changed

Lines changed: 43 additions & 251 deletions

.github/workflows/casket-pages.yml

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,33 @@
11
# SPDX-License-Identifier: MPL-2.0
22
name: GitHub Pages
3-
43
on:
54
push:
65
branches: [main, master]
76
workflow_dispatch:
8-
97
permissions:
108
contents: read
119
pages: write
1210
id-token: write
13-
1411
concurrency:
1512
group: "pages"
1613
cancel-in-progress: false
17-
1814
jobs:
1915
build:
2016
runs-on: ubuntu-latest
2117
timeout-minutes: 15
2218
steps:
2319
- name: Checkout
2420
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
25-
2621
- name: Checkout casket-ssg
2722
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
2823
with:
2924
repository: hyperpolymath/casket-ssg
3025
path: .casket-ssg
31-
3226
- name: Setup GHCup
3327
uses: haskell-actions/setup@ec49483bfc012387b227434aba94f59a6ecd0900 # v2
3428
with:
3529
ghc-version: '9.8.2'
3630
cabal-version: '3.10'
37-
3831
- name: Cache Cabal
3932
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
4033
with:
@@ -43,11 +36,9 @@ jobs:
4336
~/.cabal/store
4437
.casket-ssg/dist-newstyle
4538
key: ${{ runner.os }}-casket-${{ hashFiles('.casket-ssg/casket-ssg.cabal') }}
46-
4739
- name: Build casket-ssg
4840
working-directory: .casket-ssg
4941
run: cabal build
50-
5142
- name: Prepare site source
5243
shell: bash
5344
run: |
@@ -90,21 +81,17 @@ jobs:
9081
echo "Project-specific site content can be added later under site/."
9182
} > .site-src/index.md
9283
fi
93-
9484
- name: Build site
9585
run: |
9686
mkdir -p _site
9787
cd .casket-ssg && cabal run casket-ssg -- build ../.site-src ../_site
9888
touch ../_site/.nojekyll
99-
10089
- name: Setup Pages
10190
uses: actions/configure-pages@983d7736d9b0ae728b81ab479565c72886d7745b # v5
102-
10391
- name: Upload artifact
10492
uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3
10593
with:
10694
path: '_site'
107-
10895
deploy:
10996
environment:
11097
name: github-pages

.github/workflows/ci.yml

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,14 @@
22
name: CI
33
permissions:
44
contents: read
5-
65
on:
76
push:
87
branches: [main]
98
pull_request:
109
branches: [main]
11-
1210
concurrency:
1311
group: ${{ github.workflow }}-${{ github.ref }}
1412
cancel-in-progress: true
15-
1613
jobs:
1714
test:
1815
name: Julia ${{ matrix.julia-version }} - ${{ matrix.os }}
@@ -26,15 +23,11 @@ jobs:
2623
include:
2724
- julia-version: '1.11'
2825
os: macos-latest
29-
3026
steps:
3127
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
32-
3328
- uses: julia-actions/setup-julia@4c0cb0fce8556fdb04a90347310e5db8b1f98fb9 # v2
3429
with:
3530
version: ${{ matrix.julia-version }}
36-
3731
- uses: julia-actions/cache@e33b4bfa0ea7cd9caedd7cb82b0e36956ef40285 # v2
38-
3932
- name: Install, build, test
4033
run: julia --project=. -e 'using Pkg; Pkg.instantiate(); Pkg.build(); Pkg.test()'

.github/workflows/codeql.yml

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,21 @@
11
# SPDX-License-Identifier: MPL-2.0
22
name: CodeQL Security Analysis
3-
43
on:
54
push:
65
branches: [main, master]
76
pull_request:
87
branches: [main, master]
98
schedule:
109
- cron: '0 6 * * 1'
11-
1210
# Estate guardrail: cancel superseded runs so re-pushes / rebased PR
1311
# updates do not pile up queued runs against the shared account-wide
1412
# Actions concurrency pool. Applied only to read-only check workflows
1513
# (no publish/mutation), so cancelling a superseded run is always safe.
1614
concurrency:
1715
group: ${{ github.workflow }}-${{ github.ref }}
1816
cancel-in-progress: true
19-
2017
permissions:
2118
contents: read
22-
2319
jobs:
2420
analyze:
2521
runs-on: ubuntu-latest
@@ -33,17 +29,14 @@ jobs:
3329
include:
3430
- language: javascript-typescript
3531
build-mode: none
36-
3732
steps:
3833
- name: Checkout
3934
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
40-
4135
- name: Initialize CodeQL
4236
uses: github/codeql-action/init@c6f931105cb2c34c8f901cc885ba1e2e259cf745 # v3
4337
with:
4438
languages: ${{ matrix.language }}
4539
build-mode: ${{ matrix.build-mode }}
46-
4740
- name: Perform CodeQL Analysis
4841
uses: github/codeql-action/analyze@c6f931105cb2c34c8f901cc885ba1e2e259cf745 # v3
4942
with:

.github/workflows/dependabot-automerge.yml

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,30 +35,25 @@
3535
# bumps for dependabot/fetch-metadata flow through the same path.
3636

3737
name: Dependabot Auto-Merge
38-
3938
on:
4039
pull_request:
4140
types: [opened, reopened, synchronize]
42-
4341
permissions:
44-
contents: write # needed to enable auto-merge
45-
pull-requests: write # needed to approve
42+
contents: write # needed to enable auto-merge
43+
pull-requests: write # needed to approve
4644
# NB: keep narrow — do NOT add secrets: read or id-token: write here.
47-
4845
jobs:
4946
automerge:
5047
# Only run for PRs actually authored by Dependabot.
5148
if: github.actor == 'dependabot[bot]' && github.event.pull_request.user.login == 'dependabot[bot]'
5249
runs-on: ubuntu-latest
5350
timeout-minutes: 15
54-
5551
steps:
5652
- name: Fetch Dependabot metadata
5753
id: meta
5854
uses: dependabot/fetch-metadata@dbb049abf0d677abbd7f7eee0375145b417fdd34 # v2.2.0
5955
with:
6056
github-token: ${{ secrets.GITHUB_TOKEN }}
61-
6257
# --- Policy gate -------------------------------------------------------
6358
# Outputs from fetch-metadata we care about:
6459
# update-type → version-update:semver-{patch,minor,major}
@@ -107,7 +102,6 @@ jobs:
107102
echo "security=$is_security" >> "$GITHUB_OUTPUT"
108103
echo "update_type=$UPDATE_TYPE" >> "$GITHUB_OUTPUT"
109104
echo "ghsa=$GHSA_ID" >> "$GITHUB_OUTPUT"
110-
111105
- name: Approve PR (if policy allows)
112106
if: steps.policy.outputs.action == 'automerge'
113107
env:
@@ -116,15 +110,13 @@ jobs:
116110
run: |
117111
gh pr review --approve "$PR_URL" \
118112
--body "Auto-approving Dependabot security update (${{ steps.policy.outputs.ghsa }}, ${{ steps.policy.outputs.update_type }}). Policy: low/moderate security patches/minors only."
119-
120113
- name: Enable auto-merge (if policy allows)
121114
if: steps.policy.outputs.action == 'automerge'
122115
env:
123116
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
124117
PR_URL: ${{ github.event.pull_request.html_url }}
125118
run: |
126119
gh pr merge --auto --squash "$PR_URL"
127-
128120
- name: Write decision to step summary
129121
env:
130122
ACTION: ${{ steps.policy.outputs.action }}

.github/workflows/dogfood-gate.yml

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,13 @@
55
# Validates that the repo uses hyperpolymath's own formats and tools.
66
# Companion to static-analysis-gate.yml (security) — this is for format compliance.
77
name: Dogfood Gate
8-
98
on:
109
pull_request:
1110
branches: ['**']
1211
push:
1312
branches: [main, master]
14-
1513
permissions:
1614
contents: read
17-
1815
jobs:
1916
# ---------------------------------------------------------------------------
2017
# Job 1: A2ML manifest validation
@@ -23,11 +20,9 @@ jobs:
2320
name: Validate A2ML manifests
2421
runs-on: ubuntu-latest
2522
timeout-minutes: 15
26-
2723
steps:
2824
- name: Checkout repository
2925
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
30-
3126
- name: Check for A2ML files
3227
id: detect
3328
run: |
@@ -36,14 +31,12 @@ jobs:
3631
if [ "$COUNT" -eq 0 ]; then
3732
echo "::warning::No .a2ml manifest files found. Every RSR repo should have 0-AI-MANIFEST.a2ml"
3833
fi
39-
4034
- name: Validate A2ML manifests
4135
if: steps.detect.outputs.count > 0
4236
uses: hyperpolymath/a2ml-validate-action@59145c7d1039fa3059b3ecacdb50ee23d7505898 # main
4337
with:
4438
path: '.'
4539
strict: 'false'
46-
4740
- name: Write summary
4841
run: |
4942
A2ML_COUNT="${{ steps.detect.outputs.count }}"
@@ -60,19 +53,16 @@ jobs:
6053
echo "" >> "$GITHUB_STEP_SUMMARY"
6154
echo "Scanned **${A2ML_COUNT}** .a2ml file(s). See step output for details." >> "$GITHUB_STEP_SUMMARY"
6255
fi
63-
6456
# ---------------------------------------------------------------------------
6557
# Job 2: K9 contract validation
6658
# ---------------------------------------------------------------------------
6759
k9-validate:
6860
name: Validate K9 contracts
6961
runs-on: ubuntu-latest
7062
timeout-minutes: 15
71-
7263
steps:
7364
- name: Checkout repository
7465
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
75-
7666
- name: Check for K9 files
7767
id: detect
7868
run: |
@@ -85,14 +75,12 @@ jobs:
8575
if [ "$COUNT" -eq 0 ] && [ "$CONFIG_COUNT" -gt 0 ]; then
8676
echo "::warning::Found $CONFIG_COUNT config files but no K9 contracts. Run k9iser to generate contracts."
8777
fi
88-
8978
- name: Validate K9 contracts
9079
if: steps.detect.outputs.k9_count > 0
9180
uses: hyperpolymath/k9-validate-action@2d96f43c538964b097d159ed3a56ba5b5ceca227 # main
9281
with:
9382
path: '.'
9483
strict: 'false'
95-
9684
- name: Write summary
9785
run: |
9886
K9_COUNT="${{ steps.detect.outputs.k9_count }}"
@@ -110,19 +98,16 @@ jobs:
11098
echo "" >> "$GITHUB_STEP_SUMMARY"
11199
echo "Validated **${K9_COUNT}** K9 contract(s) against **${CFG_COUNT}** config file(s)." >> "$GITHUB_STEP_SUMMARY"
112100
fi
113-
114101
# ---------------------------------------------------------------------------
115102
# Job 3: Empty-linter — invisible character detection
116103
# ---------------------------------------------------------------------------
117104
empty-lint:
118105
name: Empty-linter (invisible characters)
119106
runs-on: ubuntu-latest
120107
timeout-minutes: 15
121-
122108
steps:
123109
- name: Checkout repository
124110
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
125-
126111
- name: Scan for invisible characters
127112
id: lint
128113
run: |
@@ -156,7 +141,6 @@ jobs:
156141
REL_PATH="${filepath#$GITHUB_WORKSPACE/}"
157142
echo "::warning file=${REL_PATH}::Invisible Unicode characters detected (zero-width space, BOM, NBSP, etc.)"
158143
done < /tmp/empty-lint-results.txt
159-
160144
- name: Write summary
161145
run: |
162146
if [ "${{ steps.lint.outputs.ready }}" = "true" ]; then
@@ -175,19 +159,16 @@ jobs:
175159
echo "" >> "$GITHUB_STEP_SUMMARY"
176160
echo "Skipped: empty-linter not available." >> "$GITHUB_STEP_SUMMARY"
177161
fi
178-
179162
# ---------------------------------------------------------------------------
180163
# Job 4: Groove manifest check (for repos that should expose services)
181164
# ---------------------------------------------------------------------------
182165
groove-check:
183166
name: Groove manifest check
184167
runs-on: ubuntu-latest
185168
timeout-minutes: 15
186-
187169
steps:
188170
- name: Checkout repository
189171
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
190-
191172
- name: Check for Groove manifest
192173
id: groove
193174
run: |
@@ -224,7 +205,6 @@ jobs:
224205
if [ "$HAS_SERVER" = "true" ] && [ "$HAS_MANIFEST" = "false" ] && [ "$HAS_GROOVE_CODE" = "false" ]; then
225206
echo "::warning::This repo has server code but no Groove endpoint. Add .well-known/groove/manifest.json for service discovery."
226207
fi
227-
228208
- name: Write summary
229209
run: |
230210
echo "## Groove Protocol Check" >> "$GITHUB_STEP_SUMMARY"
@@ -234,7 +214,6 @@ jobs:
234214
echo "| Static manifest (.well-known/groove/manifest.json) | ${{ steps.groove.outputs.has_manifest }} |" >> "$GITHUB_STEP_SUMMARY"
235215
echo "| Groove endpoint in code | ${{ steps.groove.outputs.has_groove_code }} |" >> "$GITHUB_STEP_SUMMARY"
236216
echo "| Has HTTP server code | ${{ steps.groove.outputs.has_server }} |" >> "$GITHUB_STEP_SUMMARY"
237-
238217
# ---------------------------------------------------------------------------
239218
# Job 5: Dogfooding summary
240219
# ---------------------------------------------------------------------------
@@ -244,11 +223,9 @@ jobs:
244223
timeout-minutes: 15
245224
needs: [a2ml-validate, k9-validate, empty-lint, groove-check]
246225
if: always()
247-
248226
steps:
249227
- name: Checkout repository
250228
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
251-
252229
- name: Generate dogfooding scorecard
253230
run: |
254231
SCORE=0
@@ -311,4 +288,3 @@ jobs:
311288
*Generated by the [Dogfood Gate](https://github.com/hyperpolymath/rsr-template-repo) workflow.*
312289
*Dogfooding is guinea pig fooding — we test our tools on ourselves.*
313290
EOF
314-

.github/workflows/governance.yml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,20 @@
1111
# (rust-ci, codeql, dependabot, release, scan/mirror/pages plumbing).
1212

1313
name: Governance
14-
1514
on:
1615
push:
1716
branches: [main, master]
1817
pull_request:
1918
workflow_dispatch:
20-
2119
# Estate guardrail: cancel superseded runs so re-pushes / rebased PR
2220
# updates do not pile up queued runs against the shared account-wide
2321
# Actions concurrency pool. Applied only to read-only check workflows
2422
# (no publish/mutation), so cancelling a superseded run is always safe.
2523
concurrency:
2624
group: ${{ github.workflow }}-${{ github.ref }}
2725
cancel-in-progress: true
28-
2926
permissions:
3027
contents: read
31-
3228
jobs:
3329
governance:
3430
uses: hyperpolymath/standards/.github/workflows/governance-reusable.yml@861b5e911d9e5dcfb3c0ab3dd2a9a3c8fd0a1613

0 commit comments

Comments
 (0)