Skip to content

Pin GitHub Actions with a workflow lockfile - #87

Merged
hatstand merged 2 commits into
mainfrom
claude/project-thread-5uzh5s
Nov 12, 2026
Merged

hatstand merged 2 commits into
mainfrom
claude/project-thread-5uzh5s

Conversation

@hatstand

Copy link
Copy Markdown
Contributor

Requested by John · project thread

Pins every GitHub Action this repository's workflows use with a workflow lockfile. .github/workflows/actions.lock records the commit each uses: ref resolved to, including the actions those actions use in turn, and GitHub runs those commits. A tag that's moved upstream, by a compromised maintainer account for example, can't change what our workflows run.

Changes

  • .github/workflows/actions.lock, generated by gh actions-lock v0.4.1. It also narrows partial version refs in the workflows (@v3) to the full tag they were locked at, so that the workflows say what runs.
  • .github/workflows/actions-lock.yml runs gh actions-lock --verify on pull requests, on pushes to the default branch and weekly, so a uses: change without a lockfile update, or a locked tag moved upstream, fails. When it fails, its log ends with the patch that fixes the lockfile, also kept as the actions-lock-fix artifact.

To change a workflow's uses: from now on:

gh extension install github/gh-actions-lock
gh actions-lock

and commit .github/workflows/actions.lock with the change.

Not covered: reusable workflows from other repositories, and container images (container:), which the lockfile doesn't pin.

Enforcing the lockfile (the Require lockfile policy, which blocks workflows that aren't in it) is a repository or organization setting, not part of this change.


Generated by Claude Code

Add a check that .github/workflows/actions.lock pins every action the
workflows use to a verified commit, so that a tag moved upstream can't
change what runs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R2bAq4pAVP2pbkPzbdLTn9
@hatstand hatstand self-assigned this Nov 12, 2026
The patch the new check printed on its first run, which also narrows
partial version refs to the full tags they were locked at.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R2bAq4pAVP2pbkPzbdLTn9
@hatstand
hatstand enabled auto-merge (rebase) November 12, 2026 01:45
@hatstand
hatstand merged commit eb284ed into main Nov 12, 2026
6 checks passed
@hatstand
hatstand deleted the claude/project-thread-5uzh5s branch November 12, 2026 01:55
@github-actions

Copy link
Copy Markdown

Screenshots

From run 43135066656, against a real Clementine. Left: main. Right: this pull request, light and dark.

Screen main This PR This PR, dark
01_connect
02_queue
03_player
04_connection
05_settings
06_library
07_library_album
08_search
09_outputs
10_internet
11_internet_radio
fold_outer_player –

Screens at a failure

dark_failure

failure

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.

2 participants