Repository navigation
chore(publish): simplify publish path to project and tag - #15
Merged
Merged
Conversation
Drop the typed confirmation phrases, the wired-in empty-staging recovery input, the duplicate unprivileged source proof, the dispatch-payload python validator, and hardcoded URL/prefix literals. The protected environments, explicit apply checkboxes, registry validation, remote verification, no-op replay, and clean-install checks remain the gates. Relocate the tools image out of the disposable spike directory. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Second cleanup PR (follows #14). The publish path keeps its real gates — protected
staging/productionenvironments, registry validation, digest/attestation verification, remote byte verification, no-op replay, and clean-install smoke tests — and sheds the ceremony:phase5-publish.sh→publish.shand drop its hardcodedpkgs.meigma.devURL and_staging/literals; the environment-scopedR2_PREFIX/PUBLIC_BASE_URLvars are now the single source of truth. Staging requires a non-empty prefix, production an empty one plus--production-root, as before.phase5-source.shand its moon task: it duplicated the full fetch→rebuild→install cycle the staging job repeats minutes later, and its inline assertions hardcoded exactly 5 assets / 4 packages / the amd64+arm64 shape — the same hardcoding class that recently blocked a release.publish <project> <tag> to production,empty _staging only). The phrase was duplicated in four places and only ever confirmed values the operator had already typed. Manual production publishes still require explicitly checkingapply_production(default false) and a successful staging run first; trusted dispatch is unchanged (always staging → production).empty_stagingrecovery input: apply-sync already converges from any bad or empty staging state (deletions last, verification before completion), so recovery is just another staging publish.validate_publish_event.py+ test: extra dispatch-payload fields are inert, andvalidate-requestalready validatesproject/tagagainst the registry.spikes/phase0/Dockerfile.tools→docker/tools.Dockerfile(it was load-bearing despite living in a "disposable" spike), drop its shellcheck install and fixture-builder script, and deletespikes/entirely.validate-requestonly; workflow renamedPublish; manualproject/taginputs no longer default to a specific release.Consumer dispatch contract (
publish-packagewith{project, tag}) is unchanged.Testing
actionlint+shellcheckpass on the new workflow and scripts;go build/go testanddocs:buildpass locally.apply_staging=true,apply_production=false) ofincus-gh-runner v1.1.0frommainto prove the reworked path end to end before it's needed for a real release.🤖 Generated with Claude Code