Skip to content

Commit 82cb057

Browse files
committed
Fix Claude Write permissions and update Node.js 20 actions
Two issues fixed: 1. Claude Write permission only covers the workspace directory, but the prompt directed it to write to /tmp/issues/ -- an absolute path outside the workspace. This caused 5-7 permission denials per run, preventing issue reports from being created. Changed to a CWD-relative .claude-issues/ directory and added it to .gitignore. 2. Updated all GitHub Actions in container-scan.yml to Node.js 24 versions ahead of the June 2, 2026 forced migration: - actions/checkout v4 -> v5 - docker/login-action v3 -> v4 - github/codeql-action v3 -> v4 - actions/upload-artifact v4 -> v6 - google-github-actions/auth v2 -> v3
1 parent 7be7d08 commit 82cb057

2 files changed

Lines changed: 17 additions & 14 deletions

File tree

.github/workflows/container-scan.yml

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@ jobs:
3333
id-token: write # for OIDC token to GCP via WIF
3434
steps:
3535
- name: Checkout repository
36-
uses: actions/checkout@v4
36+
uses: actions/checkout@v5
3737
with:
3838
# Full history so the Claude analysis step can `git log --grep` and `git show`
3939
# precedent CVE-fix commits (e.g., to mirror past mitigation patterns exactly).
4040
fetch-depth: 0
4141

4242
- name: Log in to GHCR
43-
uses: docker/login-action@v3
43+
uses: docker/login-action@v4
4444
with:
4545
registry: ghcr.io
4646
username: ${{ github.actor }}
@@ -81,14 +81,14 @@ jobs:
8181
8282
- name: Upload Trivy scan results to GitHub Security tab
8383
if: always()
84-
uses: github/codeql-action/upload-sarif@v3
84+
uses: github/codeql-action/upload-sarif@v4
8585
with:
8686
sarif_file: 'trivy-results.sarif'
8787
category: 'container-mega-scheduled'
8888

8989
- name: Upload Trivy JSON results
9090
if: always()
91-
uses: actions/upload-artifact@v4
91+
uses: actions/upload-artifact@v6
9292
with:
9393
name: trivy-mega-scheduled
9494
path: trivy-results.json
@@ -163,7 +163,7 @@ jobs:
163163
164164
- name: Authenticate to GCP via Workload Identity Federation
165165
if: steps.triage.outputs.cve_ids != ''
166-
uses: google-github-actions/auth@v2
166+
uses: google-github-actions/auth@v3
167167
with:
168168
workload_identity_provider: ${{ vars.GCP_WIP_PROVIDER }}
169169
service_account: ${{ vars.GCP_SA_EMAIL }}
@@ -217,7 +217,7 @@ jobs:
217217
218218
## Your task
219219
220-
For each CVE ID listed below, write a triage report to `/tmp/issues/<CVE-ID>.md`.
220+
For each CVE ID listed below, write a triage report to `.claude-issues/<CVE-ID>.md`.
221221
The reports will be filed verbatim as GitHub issues by the next workflow step.
222222
223223
**CVE IDs to analyze:** ${{ steps.triage.outputs.cve_ids }}
@@ -269,7 +269,7 @@ jobs:
269269
270270
## Required structure for each report
271271
272-
File path: `/tmp/issues/<CVE-ID>.md` (filename MUST match the CVE ID exactly).
272+
File path: `.claude-issues/<CVE-ID>.md` (filename MUST match the CVE ID exactly).
273273
**First line MUST be a single H1 used as the issue title:**
274274
`# [CVE-YYYY-NNNN] <package>: <one-line description>`
275275
@@ -299,7 +299,7 @@ jobs:
299299
300300
## Constraints
301301
302-
- `mkdir -p /tmp/issues` first.
302+
- `mkdir -p .claude-issues` first.
303303
- One file per CVE.
304304
- Be concise. Each report should be readable in 1–2 minutes (target: 300–600 words).
305305
- Do NOT hallucinate package versions, file paths, or commit SHAs. Verify with
@@ -308,10 +308,10 @@ jobs:
308308
309309
- name: Upload Claude analysis as artifact
310310
if: steps.triage.outputs.cve_ids != '' && always()
311-
uses: actions/upload-artifact@v4
311+
uses: actions/upload-artifact@v6
312312
with:
313313
name: claude-cve-analysis
314-
path: /tmp/issues/
314+
path: .claude-issues/
315315
if-no-files-found: warn
316316

317317
- name: File GitHub issues
@@ -323,14 +323,14 @@ jobs:
323323
set -uo pipefail
324324
shopt -s nullglob
325325
326-
if [ ! -d /tmp/issues ]; then
327-
echo "::error::/tmp/issues does not exist — Claude analysis step likely failed"
326+
if [ ! -d .claude-issues ]; then
327+
echo "::error::.claude-issues does not exist — Claude analysis step likely failed"
328328
exit 1
329329
fi
330330
331-
md_files=(/tmp/issues/*.md)
331+
md_files=(.claude-issues/*.md)
332332
if [ ${#md_files[@]} -eq 0 ]; then
333-
echo "::error::No .md analysis files in /tmp/issues — Claude may have failed silently"
333+
echo "::error::No .md analysis files in .claude-issues — Claude may have failed silently"
334334
exit 1
335335
fi
336336

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,6 @@ tools/conda-tools/
8282

8383
.vscode/
8484
vulnerability-mitigation-status.md
85+
86+
# CI CVE triage output (written by Claude in container-scan.yml)
87+
.claude-issues/

0 commit comments

Comments
 (0)