Skip to content

main-estate-audit.yml startup-dies from any caller: actions.lock is stale relative to its own uses: refs #9

Description

@hyperpolymath

Symptom

Calling the reusable estate audit from a metadatastician org repo produces a run that
never starts a job:

conclusion = failure     jobs.total_count = 0
run.name == run.path == .github/workflows/main-estate-audit.yml

It does not appear in the calling PR's check rollup, so it fails silently rather than
red
— the workflow looks configured while never running.

Reproduced from metadatastician/large-language-michelangelo (PR #1 there), calling
main-estate-audit.yml@31b5b45a — a ref that resolves, at a commit where the file exists
and declares workflow_call.

Cause

The workflow_call contract is fine. The problem is inside the job. At 31b5b45a,
.github/workflows/main-estate-audit.yml contains 27 uses: refs, 26 of them unpinned
branch refs
:

uses: hyperpolymath/cicd-suite/actions/required-files-check@main
uses: hyperpolymath/cicd-suite/actions/code-hygiene-check@main
uses: hyperpolymath/cicd-suite/actions/manifest-check@main
uses: hyperpolymath/cicd-suite/actions/idris2-abi-check@main
uses: hyperpolymath/cicd-suite/actions/zig-hexadeca-check@main
... 21 more

Only actions/checkout is SHA-pinned.

The org enforces sha_pinning_required. Under that policy a non-SHA ref is a startup
failure at 0s, which reports as no check rather than a failing one.

So the audit cannot run in any org repo that adopts it.

Why this one matters more than a normal pin problem

This is the workflow whose job is to audit the estate's compliance. As written it is itself
non-compliant with the estate's own pinning policy, and the failure mode is invisible: a repo
adopting it gets a workflow file, a green-looking PR, and no audit.

Suggested fix

Pin the 26 internal action refs to full commit SHAs.

Two cautions from experience elsewhere in the estate:

  1. Pin to commit SHAs, not blob SHAs. A file's blob hash is also 40 hex characters and
    satisfies a naive pin gate while being unresolvable. Verify each with
    gh api repos/<owner>/<repo>/commits/<sha>.
  2. The in-repo comment says these are @main deliberately, to test the actions from the
    current revision rather than older implementations on main. That intent is reasonable —
    but it is incompatible with sha_pinning_required for external callers. It may need
    splitting: a self-test workflow that uses ./actions/... local paths (which need no pin),
    and a separate published reusable that is fully SHA-pinned for callers.

Option 2 is likely the real fix, since local ./actions/... refs give the
test-this-revision behaviour without any pin at all.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions