Skip to main content
ISSUE-707CriticalThird-party actions

Pinned SHA does not exist in upstream repository

Control: Pinned Upstream Actions must existยท Config key: actionRefsMustExistUpstream

๐Ÿ“‹ What is this?

A workflow pins an action to a SHA that does not exist in the upstream repository's commit history (or in any of its branches/tags).

โš ๏ธ Impact

A typo (the runner silently falls back to the default branch) or a commit that was removed or never pushed upstream, so the pin resolves nowhere. Fires only when the API confirms the commit is absent from a repo Plumber can read; a SHA it cannot verify (private repo, rate limit, network) is left alone, so a valid pin is never mislabeled. It does not detect a fork-network impostor commit (one pushed to a fork of the upstream repo), which GitHub serves as present from the parent.

๐Ÿ”ง How to fix

Resolve the action's current latest release upstream, copy its real SHA, and update the uses: line accordingly.

โœ— BeforeThe pinned SHA does not exist in the upstream repository's history.
# .github/workflows/test.yml: โŒ SHA missing upstream
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: owner/repo@deadbeefdeadbeefdeadbeefdeadbeefdeadbeef
# ^ not present in owner/repo's history
โœ“ AfterSHA matches a real tagged commit upstream.
# .github/workflows/test.yml: โœ… SHA resolves upstream
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: owner/repo@a1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4 # v2.1.0

๐Ÿ’ก Tips

  • Get the right SHA with gh api repos/OWNER/REPO/git/refs/tags/vX.Y.Z.
  • This rule needs upstream lookup: running offline or against a private upstream where the token has no access will report partialControls (abstain).

โš™๏ธ Configuration

This control is configured in .plumber.yaml under the github section:

github:
  controls:
    actionRefsMustExistUpstream:
      enabled: true

See the CLI documentation for the full configuration reference.