ci: release with sem instead of legacy semantic-release - #19
Merged
Conversation
Every other repo that cuts releases this way runs tishlang/sem; deck was the odd one out, still on semantic-release with the whole prerelease flow written by hand. Same git workflow either way — green main cuts a prerelease carrying the tarballs, promoting it fires npm-release.yml and crates-release.yml — but the machinery is now the shared one. What that deletes is most of the point. The release job had been hand-rolling a `release/vX` branch, a `git log` changelog, and raw curl calls to the releases API with a 422-means-it-exists retry path and separate asset uploads. `@sem/github` does all of it, so ~190 lines of workflow become a plugin config. Two things carried over from chuggie-engine's setup because they are not obvious: - git identity is configured before sem runs. A tag is a commit-shaped object and actions/checkout sets no identity, so sem dies on "Committer identity unknown". That failure is why chuggie-engine had zero releases for months. - `issues: write`, because @sem/github opens an issue when a release throws. Without it the real error is buried under a 403 from the issues API. Also added the licence gate from that repo, since this is the repo whose two mispublished versions it was written about — it now refuses to build an artifact unless both LICENSE files are present. .releaserc.json becomes .semrc.json, and the semantic-release toolchain leaves devDependencies entirely: the action carries its own, so npm ci drops ~500 transitive packages.
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.
Every other repo that cuts releases this way runs tishlang/sem;
deckwas the odd one out, still onsemantic-releasewith the whole prerelease flow written by hand.The git workflow is unchanged — a green
maincuts a prerelease carrying the tarballs, and promoting it firesnpm-release.ymlandcrates-release.yml. Only the machinery moves.What this deletes
Most of the value. The old
releasejob hand-rolled:release/vXbranch, force-pushed each rungit logagainst the last tagcurlcalls to the releases API, including a "422 means it already exists, go fetch its id and PATCH it" retry pathcurls to upload the tarballs as assets@sem/githubdoes all of that, so ~190 lines of workflow collapse into plugin config. Net: 288 lines changed inci.yml, andpackage-lock.jsonsheds ~6,300 lines as the semantic-release toolchain leavesdevDependencies(the action carries its own).Two things carried over from
chuggie-engine, because they aren't obviousactions/checkoutsets none, so sem fails withCommitter identity unknown. That exact failure is whychuggie-enginehad zero releases for months despite green builds.issues: write—@sem/githubopens an issue when a release throws, and without the permission the real error is buried under a 403 from the issues API.Licence gate
I also brought over that repo's licence gate — which was written about this repo:
It now refuses to build an artifact unless both
LICENSEandpackages/player/LICENSEare present. The second of those only started existing in #18 — before that the player tarball asserted a licence it didn't ship.Config
.releaserc.json→.semrc.json,@semantic-release/*→@sem/*. The two-package lockstep packing is unchanged: same version on both, player's dependency stamped to^<version>before packing.Verification
npm cifrom a cleannode_modulessucceeds without the semantic-release packages, andnpm testis green (100% coverage, 13 conformance cases, 14 example blocks, Tish VM suite, JS smoke). Both inline sem configs and the workflow itself parse as YAML, withreleasestill gated on[test, rust_crate, release_check].The release path itself can only really be exercised on a
mainpush — worth watching the first run after merge.