Action is hosted in an archived repository
Control: Actions must not reference archived repositories · Config key: actionsMustNotBeArchived
📋 What is this?
A workflow step uses a third-party action (uses: owner/repo@ref) whose upstream repository is archived on GitHub. Plumber scans committed .github/workflows/*.{yml,yaml} only, queries GET /repos/{owner}/{repo} for the archived flag, and caches one result per owner/repo (not per ref). Requires gh auth login or GH_TOKEN; without authentication the control abstains and emits no finding.
⚠️ Impact
Archived repositories don't receive security fixes. Any vulnerability discovered after the archive date stays open forever — but the action keeps running inside your workflow with whatever permissions you grant it. Pinning by SHA does not save the caller either: the last maintainer (or whoever later acquires the namespace) can still push new code under the same repository name.
🔧 How to fix
Replace the archived action with a maintained alternative, fork it and patch it yourself, or vendor the action's source into your repository under .github/actions/. If the action is small enough to read in one sitting, inlining the equivalent shell logic removes the supply-chain dependency entirely.
# .github/workflows/release.yml — ❌ Archived upstreamjobs: release: runs-on: ubuntu-latest steps: - uses: archived-org/release-action@v1 # repo archived 2023# .github/workflows/release.yml — ✅ Maintained alternativejobs: release: runs-on: ubuntu-latest steps: - uses: softprops/action-gh-release@01570a1f39cb168c169c802c3bceb9e93fb10974 # v2
# .plumber.yamlgithub: controls: actionsMustNotBeArchived: enabled: true💡 Tips
- Scope is step-level
uses:in your workflow files only. Job-level reusable-workflowuses:lines, local./.github/actions/*, anddocker://steps are out of scope. - Without
gh/GH_TOKEN, the rule abstains on every ref (degraded contract, no false positives). This is not a clean pass. - Does not fetch callee reusable-workflow YAML from other repositories; only what is committed under
.github/workflows/in the analyzed ref. - The PBOM tags each archived include with
archived: true(JSON) /plumber:archived(CycloneDX) so dashboards can dedupe across multiple callers of the same abandoned action.
⚙️ Configuration
This control is configured in .plumber.yaml under the github section:
github:
controls:
actionsMustNotBeArchived:
enabled: trueSee the CLI documentation for the full configuration reference.