fix(ci): deduplicate the mcp-publisher version pin into one composite action - #140
Conversation
… action ci.yml and Release.yaml each pinned mcp-publisher (version + sha256) independently and had already drifted apart: v1.7.9 in ci.yml vs v1.8.1 in Release.yaml, two different checksums, no indication either pin knew the other existed. Add .github/actions/install-mcp-publisher, a composite action whose `version`/`sha256` inputs default to the pin -- callers do not pass them, so the pin lives in exactly one file and a future bump is one edit that reaches every workflow. Both workflows now install mcp-publisher through this action. v1.8.1 (Release.yaml's existing pin) is kept as the value: confirmed via the registry's GitHub Releases API as the current latest release, and its sha256 independently re-derived locally from the published asset (a06c9096dcb9727c13555b6be26c7effa707b01f06a4c561ba7a3635443cf2cc, matches the existing pin exactly) rather than trusted blindly. ci.yml's stale v1.7.9 is the one that moves. Verified: YAML parses, actionlint clean on both workflows, and the version string now appears in exactly one place under .github/ (the action's input defaults) -- grep confirms neither workflow caller passes version/sha256 anymore. Co-Authored-By: Claude <noreply@anthropic.com>
|
ZETETIC-REVIEW: APPROVE One binary, two independent pins in one repository, already diverged: The version was chosen, not defaulted. The duplication is fixed at its cause, not aligned. The stacking judgement is the part worth crediting. The report says plainly that the two defects are not fully independent: making the CI check offline removes
Merging. #141 retargets to |
Defect
ci.ymlpinnedmcp-publisherat v1.7.9 (with its checksum);Release.yamlindependently pinned v1.8.1 (different checksum). Two pins of the same
binary in one repo, already drifted apart — whoever bumps one has no way
to know the other exists.
Fix
.github/actions/install-mcp-publisher/action.yml— a composite actionwhose
version/sha256inputs are defaulted, not passed by callers.That means the pin lives in exactly one file; a future bump is one edit
that reaches every workflow that uses the action. Both
ci.ymlandRelease.yamlnow installmcp-publisherthrough it, with nowith:override for version/checksum.
Which version, and why
v1.8.1 — Release.yaml's existing value, confirmed as the registry's
current
releases/latestvia its GitHub API, and its sha256independently re-derived locally from the published release asset
(
a06c9096dcb9727c13555b6be26c7effa707b01f06a4c561ba7a3635443cf2cc,matches exactly — not trusted blindly). ci.yml's stale v1.7.9 is the one
that moves.
Verification
python3 -c "import yaml; ..."— both workflows + the action parse.actionlint .github/workflows/ci.yml .github/workflows/Release.yaml—clean.
grep -rn "version:\|sha256:" .github/workflows/*.ymlreturnsnothing — neither workflow caller passes the pin anymore; it exists only
as the two
default:lines in the composite action.Scope
This PR only deduplicates the pin. It does not touch what
ci.yml'svalidate step does — that's the separate, stacked
agent/ci-offline-registry-validate(targets this branch), which removesthe live-network dependency from the check itself.
Co-Authored-By: Claude noreply@anthropic.com