Skip to content

ci: remove the enable-caller-pin flag once the SHA-pin guard is provenΒ #864

Description

@devantler

πŸ€– Generated by the Agentic Engineer

Filed when the flag was born, per AGENTS.md β†’ Shipping a new capability behind an opt-in flag
step 3 ("no permanent dead inputs").

Context

#858 added a guard to publish-app.yaml and publish-manifests.yaml that
refuses to run unless the caller pinned the workflow to a 40-character commit SHA β€” the property the
cluster's cosign trust rules depend on. It ships behind enable-caller-pin, default false, so
merging changes nothing for existing callers.

The flag is a release flag, not a kill switch: its whole purpose is to be removed.

Why it cannot simply default to true today

The guard runs only on a real publish. CI exercises both workflows with dry-run: true, which skips
the publish job entirely β€” so no CI job can ever execute the guard. The first real evidence comes
from an actual release. That is also why the flag exists rather than the change going straight in:
the first version of this guard read github.job_workflow_ref from the expression context, which is
always empty, and would have broken every publish while passing CI.

The rollout

Measured on 2026-08-02, every caller already satisfies the guard (7 of 7 pin by 40-hex SHA), so each
opt-in should be a no-op:

  • wedding-app β€” publish-app
  • ascoachingogvaner β€” publish-app
  • gitops-tenant-template β€” publish-app
  • doggy-countdown β€” publish-app
  • .github β€” publish-manifests
  • aws β€” publish-manifests

Then:

  • Flip enable-caller-pin's default to true once at least one real release has published with
    it on.
  • Remove the input and the if: guards, making the check unconditional.
  • Drop the flag assertions from .github/tests/test-publish-caller-pin.sh in the same change,
    keeping the guard's own behavioural matrix.

Acceptance criteria

  • No enable-caller-pin input remains in either workflow.
  • Both workflows run the guard unconditionally, and the test still proves it discriminates
    (a 40-hex SHA accepted; branch, tag, PR-merge and near-miss refs rejected).
  • At least one real publish is recorded as having run with the guard active before the default
    flips.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    Status
    πŸ“₯ Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions