Repository navigation
ci: publish the built DAR as a pinnable release asset - #155
Merged
Merged
Conversation
…r-smoke test: prove the built DAR is consumable on its own
… the package flags
…claim this wave introduced
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
Closes #143, #144, #145, #146, #147.
A downstream repository cannot depend on this project without reproducing the whole Splice vendoring flow, because the token-standard package ids have to match exactly or the DARs do not link. Publishing the built DAR removes that requirement: the artifact already bundles the six
splice-api-token-*interface packages at the ids it was compiled with, so a consumer inherits them from the file instead of from a toolchain.This branch builds everything publishing needs. Pushing the tag is #133 and stays open.
Changes
consumer-smoke/: a package whose only dependency is a copy of the built DAR, driven byscripts/consumer-smoke.shandnpm run smoke. It stands in for a consumer with no build tree of ours to point at, and converts to all seven interface instances, so dropping an implementation breaks this build rather than a downstream onescripts/release-notes.sh: generates the release body from that same package, so the published instructions are extracted from a file that has to compile rather than transcribed. It refuses an untagged or dirty tree, adeps/whose vendoring stamp does not matchversions.env, and a snippet that disagrees with the DAR's own dalfs.github/workflows/release.yml: on av[0-9]*tag push it refuses a tagmaindoes not reach, asserts the pins, runs the suite, verifies the DAR is byte-reproducible from a re-vendored tree, runs the smoke test and publishes the DAR it verified.workflow_dispatchruns every step but the on-main refusal and the publish, so it cannot publish.github/actions/install-dpm: the download, its pinned digest and the SDK sweep, shared by both workflows so the digest has one homeci.yml: runs the smoke test and the release-body generator on pull requests, and adds three ungated comparisons that run whatever the change touches: template ids, the README consumer snippet against the smoke package, and every trackeddaml.yamlagainst the SDK and LF pinsAcceptance criteria
--packagelines fails with exactly six hidden-package errors. Diverged: the copy is the version-freevendor/canton-token-forge.dar, so no version string sits in the consumer's config. Strengthened during review: it converts to all seven interface instances, since a type outlives theinterface instancethat mentions itdaml.yamlat run time and records the sha256, the main package-id, the SDK,SPLICE_TAGand the vendored Splice commit, all read from the files that hold them. Added during review:ALLOW_UNTAGGED=1andSKIP_BUILD=1, both documented, and a two-directional check that the published flagsmatch the DAR's own dalfs
maindoes not reach, asserts the pins, runs the suite, proves byte-reproducibility, runs the smoke test, generates the body and publishes on av[0-9]*tag push only.contents: writeis confined to it and the checkout does not persist its token--packageline, or that drops a bundled interface out of the DAR, fails thedamlcheck. Diverged: criterion 2 said the step goes inside the existing scope gate, but that gate listed none of the paths criterion 3 names, so the gate was widened toconsumer-smoke/andscripts/consumer-smoke.sh. Criterion 4 was already satisfied by the ungated SDK-pin sweepTest plan
Automated tests
The smoke package is itself the new test:
npm run smokebuilds the DAR and compiles a consumer against it.npm run build,npm test(80 scenarios) andnpm run smokeare green on this branch, and CI runs the smoke step, the release-body generator and the three ungated comparisons on every scoped-in pull request (daml1m49s on the last head).Manual verification
Every guard was driven red before it was written, locally and in throwaway clones: a reordered
daml.yamlblock, a deleted--packageline, a flag the DAR does not bundle, a bundled package the snippet stopped naming, a dirty tree, a tag that names another commit, a tagmaindoes not reach, a second--targetentry, a manifest with no version, a DAR carrying two package-ids, a README snippet with its block header renamed, andghargv shims over all four publish paths. Each documented command was run verbatim from the directory its doc names, including its failure mode. The release workflow itself has never executed: the dispatched dry run is the first step of #133.Breaking changes
None.
Checklist
Screenshots
None.