SPACE.LA
◀ music select
tish / company / shipped

sem

Semantic release with conventional commits built in tish

BPM
174
GRADE
SS
LEVEL
7
RELEASES
1
YEARS
2026–2026

The Releaser Releases Itself

After five months of tagging tish releases I knew what I wanted from a release tool, and it wasn't semantic-release with its dependency tree. So on August 10, 2026 I wrote sem: conventional commits, semver, and the full nine-step plugin pipeline from verifyConditions through to fail, written in tish.

My favorite detail: the first npm publish of @tishlang/sem was done by sem itself. It ran its own dist/cli.js with the npm plugin set to publish and shipped itself.

It runs three ways from day one: under tish directly from source, under Node as npx @tishlang/sem, and as a GitHub Action with uses: tishlang/sem@v1, all built from the same two tish files. That's what I wanted tish to do all year, one source compiling to wherever it needs to run.

The features came from things that bugged me: soft-skip on non-release branches so CI stays green, a force flag for recoveries, and auto-republish when a tag exists but the package never went out. The first tagged release fixed skipping the npm publish while the GitHub release is still a draft, which I'd run into more than once.

before this

history

  1. v1.3.3
  2. 1.3.3