Skip to content

CD workflows: pin GitHub Actions to @v4 instead of @master #124

Description

@thehabes

Summary

Our CD workflows pin GitHub Actions to the moving @master branch instead of a stable major-version tag like @v4. Every workflow run silently picks up whatever HEAD of actions/checkout, actions/setup-node, and actions/cache happens to be — there is no diff in this repo when those upstream branches change, so a green PR yesterday can fail today for reasons we cannot see.

Affected workflows

  • .github/workflows/cd_dev.yaml — 5 occurrences (3× actions/checkout@master, 1× actions/setup-node@master, 1× actions/cache@master)
  • .github/workflows/cd_prod.yaml — 2 occurrences of actions/checkout@master

Our newer workflows (tests.yaml, shared_openapi_sync.yaml) already pin actions/checkout@v4 and actions/setup-node@v4, so the inconsistency is internal to this repo too.

Why this matters

  • Reproducibility — same YAML produces different behavior over time.
  • Supply-chain surface — a malicious or accidental commit to actions/checkout's master branch propagates to every run immediately.
  • Breaking changes — when actions/checkout@v5 ships, @master consumers get the breakage at the next run with no warning.
  • GitHub's own guidance explicitly recommends pinning to a major version tag or a SHA. Major-version tags (@v4) still receive patch/security updates automatically.

Cross-repo alignment

Proposed fix

Normalize the two CD workflows to:

  • actions/checkout@v4
  • actions/setup-node@v4
  • actions/cache@v4

Small, contained sweep; no behavior changes expected (these are the same versions the existing tests.yaml and shared_openapi_sync.yaml already run on).

Acceptance criteria

  • No @master references remain in .github/workflows/.
  • All actions/checkout, actions/setup-node, actions/cache references in CD workflows pin to @v4.
  • CI passes on the sweep PR.

Out of scope

  • Pinning to commit SHAs — first-party actions/* major-version tags are sufficient.
  • TPEN-services and TinyPEN cleanups — separate issues.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions