Skip to content

Harden CI permissions and pin actions; add Dependabot config - #1

Merged
bitWarrior merged 1 commit into
mainfrom
hardening/ci-supply-chain
Sep 1, 2026
Merged

Harden CI permissions and pin actions; add Dependabot config#1
bitWarrior merged 1 commit into
mainfrom
hardening/ci-supply-chain

Conversation

@bitWarrior

Copy link
Copy Markdown
Owner

Supply-chain hardening ahead of open-sourcing.

Workflow permissions are now deny-by-default: permissions: {} at the
workflow level, with the test job granting only contents: read. The
repository default was already read-only, but stating it in the file means a
later job cannot silently inherit a wider scope.

Actions are pinned to full commit SHAs rather than the v7 tags. A tag is a
mutable ref; whoever can move it can run arbitrary code in this workflow with
whatever the job holds. Both pins are the current tips of v7.0.1 and v7.0.0
respectively, so this is behaviorally a no-op today. checkout also gets
persist-credentials: false so the job token is not left in .git/config for
later steps to reuse.

Pinning to a SHA means an action never receives an upstream security fix on
its own, so .github/dependabot.yml is what makes the pins maintainable: weekly
grouped updates for github-actions, and for pip to cover the optional [tools]
and [dev] extras (the runtime dependency list is empty).

Dependabot alerts and security updates are enabled on the repository. Secret
scanning and push protection are not available on a private repository; they
are free once this goes public and should be turned on at that point.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_0114gUUe4CxYr8W8oC95ffmD

Supply-chain hardening ahead of open-sourcing.

Workflow permissions are now deny-by-default: `permissions: {}` at the
workflow level, with the test job granting only `contents: read`. The
repository default was already read-only, but stating it in the file means a
later job cannot silently inherit a wider scope.

Actions are pinned to full commit SHAs rather than the `v7` tags. A tag is a
mutable ref; whoever can move it can run arbitrary code in this workflow with
whatever the job holds. Both pins are the current tips of v7.0.1 and v7.0.0
respectively, so this is behaviorally a no-op today. checkout also gets
`persist-credentials: false` so the job token is not left in .git/config for
later steps to reuse.

Pinning to a SHA means an action never receives an upstream security fix on
its own, so .github/dependabot.yml is what makes the pins maintainable: weekly
grouped updates for github-actions, and for pip to cover the optional [tools]
and [dev] extras (the runtime dependency list is empty).

Dependabot alerts and security updates are enabled on the repository. Secret
scanning and push protection are not available on a private repository; they
are free once this goes public and should be turned on at that point.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0114gUUe4CxYr8W8oC95ffmD
@bitWarrior
bitWarrior merged commit ecaa2fe into main Sep 1, 2026
4 checks passed
@bitWarrior
bitWarrior deleted the hardening/ci-supply-chain branch September 1, 2026 19:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant