build: SHA-pin GitHub Actions for supply-chain security#151
build: SHA-pin GitHub Actions for supply-chain security#151
Conversation
Pin external action references to exact commit SHAs instead of branch or major-version tags to prevent supply-chain attacks. Signed-off-by: jimisola <jimisola@jimisola.com>
| jobs: | ||
| check: | ||
| uses: reqstool/.github/.github/workflows/check-semantic-pr.yml@main | ||
| uses: reqstool/.github/.github/workflows/check-semantic-pr.yml@33502e31f66fb7e982f48f50e3c6c29b0410a017 # main 2026-03-07 |
Check warning
Code scanning / CodeQL
Workflow does not contain permissions Medium
Show autofix suggestion
Hide autofix suggestion
Copilot Autofix
AI 9 days ago
To fix the problem, add an explicit permissions block that grants only the minimal privileges needed for this workflow. Since this workflow only delegates to a reusable workflow that checks PR titles (a read-only operation in most setups), the conservative and generally correct choice is to set contents: read at the workflow root so it applies to all jobs, including the check job. This follows GitHub’s recommendation for least-privilege defaults and satisfies CodeQL’s requirement that permissions be explicit.
Concretely, in .github/workflows/check-semantic-pr.yml, insert a permissions: section after the on: block (for example after line 6–7) with contents: read. This will ensure GITHUB_TOKEN is limited to read-only access to repository contents for this workflow. No imports or additional methods are required, as this is purely a YAML configuration change. Existing functionality (reusing the external workflow) will continue to work, as such semantic checks typically do not need write permissions.
| @@ -5,6 +5,9 @@ | ||
| pull_request_target: | ||
| types: [opened, edited, synchronize, reopened] | ||
|
|
||
| permissions: | ||
| contents: read | ||
|
|
||
| jobs: | ||
| check: | ||
| uses: reqstool/.github/.github/workflows/check-semantic-pr.yml@33502e31f66fb7e982f48f50e3c6c29b0410a017 # main 2026-03-07 |
Summary
Pin GitHub Actions to exact commit SHAs instead of floating branch/tag references:
reqstool/.github/...@main→ SHA-pinned to current main commit🤖 Generated with Claude Code