Repository navigation
v0.131.0
Releases build against the release checkout's own committed go.work, and every release gets a private RLSBL_RELEASE_BIN directory for its own builds of tools
Context
The release checkout sits inside the live repository, so Go found the working tree's uncommitted go.work from there and selfdoc's release failed. Releases now pin GOWORK to the checkout, the dep-locks check stops its go.work.sum search at the repository root, and a hook can build an unreleased tool into RLSBL_RELEASE_BIN without installing it for every other session.
Breaking
- In a workspace,
batch_limits.exclusionsin a member's own.rlsbl/config.jsonis now a hard error. Exclusions name lines of the releasable's changelog, so they belong in the releasable's.rlsbl-monorepo/releasables/<name>/config.json, wherechangelog add --allow-batchwrites them and the release removes stale ones. A member list silently replaced the releasable's and was never cleaned at release. Move the entries to the releasable's config and delete the member'sexclusionskey. - The strictcli schema dump moved to
.strictmetadata/.cli-schema/schema.json. The release writes a strictcli program'shelp --jsondocument there instead of.strictcli/schema.json, andrlsbl rewrite go-module-pathrewrites theproject_idof dumps at the new location only; a dump left at.strictcli/schema.jsonis no longer read or rewritten. Move it withselfdoc layout migrate(run--dry-runfirst). rlsbl's own test coverage now follows strictcli's source-tree root layout,.strictmetadata/.cli-test-coverage/. - Only the go, npm, pypi, and spec release targets remain. The dart, deno, docker, flutter, hex, maven, native-android, native-ios, pgdesign, plain, swift, swift-apple, and zig targets are removed, along with their scaffold templates, the deno, hex, maven, maven-central, and docker pipeline types, the
maven-central-metadataandmirror-requiredchecks and their options, and the Dart and JVM import analysis. Atargetsentry in.rlsbl/config.jsonor in a releasable's config that names a target rlsbl does not register is now a hard error naming the config file and the supported targets, where it used to print a warning while the release went on without it: delete the entry or name a supported target, and delete the pipeline entries of a removed type. The Flutter delivery mode is removed with flutter, so a release file's[targets.<name>]table and a changelog line'srelease_typefield now fail validation as unknown keys: delete the table or the field.
Features
- A release can run its own unreleased build of a tool. Every release gets a private, empty directory for binaries, named to every hook as
RLSBL_RELEASE_BINand placed first onPATHfor the hooks and every step rlsbl runs. Apre-checks.shthat builds a tool there (GOBIN="$RLSBL_RELEASE_BIN" go install .) has the selfdoc steps and later hooks run that build, without installing it for every other session on the machine.
Fixes
- The npm lockfile step in
rlsbl scaffoldnext steps now says to commit package-lock.json before releasing, not before pushing: releases are the only push. rlsbl scaffoldno longer crashes withunresolved template variables: goreleaserMain, brewsSectionon an npm+go project whose first registry is npm: every scaffolded file now renders with its own target's values, whichever registry is primary.- A release no longer builds against the working tree's uncommitted
go.work. The release checkout sits inside the live repository, so Go found the working tree's gitignoredgo.workfrom there: a hook'sgo install .failed with "main module does not contain package", and where it did not fail the release built against unreleased local modules. Every process a release starts now runs with the checkout's own committedgo.workwhen the repository root tracks one, and withGOWORK=offotherwise. - The
dep-lockscheck no longer accepts sums from ago.work.sumoutside the repository. Its search for a Go workspace's sums now stops at the repository root, so in the release checkout the working tree's uncommittedgo.work.sumcan no longer vouch for a module whose owngo.sumis missing entries. rlsbl changelog add --allow-batchin a workspace now names the releasable's config.json it writes the batch exclusion to (.rlsbl-monorepo/releasables/<name>/config.json), in both the dry-run and the write message, instead of claiming.rlsbl/config.json.dead-modulesno longer reports Go test helpers andgo runprograms as dead. An internal package imported by another package's_test.gofiles (a test helper such asinternal/cli/clitest) now counts as used, and an internalpackage maindirectory is treated as an entry point. A package's own tests and files undertestdata/still never keep it alive.- Every
batch_limitsmessage (thechangelog addrefusal over the commit limit, thechangelog-batch-commitshint, and the invalidbatch_limitserrors) now names the config file the setting was actually read from. In a workspace that is the releasable's.rlsbl-monorepo/releasables/<name>/config.jsonunless the member's own.rlsbl/config.jsondeclares the setting; before, every message named.rlsbl/config.json. rlsbl changelog add --allow-batchno longer crashes with FileNotFoundError in a workspace whose releasable has noconfig.jsonof its own; it creates the file with the exclusion.releasable-residueno longer fails on rlsbl scaffold's own output in Go members. The stub.rlsbl/go.modscaffold writes into a Go member is accepted while its content is the stub's; any othergo.modthere is still reported.- The
rlsbl changelog addrefusal for an entry overmax_commits_per_entryno longer suggests adding an exclusion by hand, which never cleared it; it names the fixes that work: split the entry, or re-run with--allow-batch, which records the exclusion in the config file it names. - At a workspace root,
changelog-batch-commitsandchangelog-batch-entriesnow check each releasable's changelog against that releasable's ownbatch_limitsinstead of the root's. releasable-residueno longer promises thatrlsbl monorepo cleanupremoves every per-package finding: each finding says whether cleanup removes it or it needs removing by hand, and the summary counts both.- A release no longer runs the npm package's own install scripts when it refreshes
package-lock.json. A wrapper package whosepostinstalldownloads the release asset of the version being released failed the release before its candidate was pushed. The refresh, and thedep-locksfix it names, are nownpm install --package-lock-only --ignore-scripts. - rlsbl now requires strictcli 0.46.0 or later. Its command definitions declare their source-tree root to strictcli, which older strictcli versions refuse with a TypeError when rlsbl is imported.
- The release workflow page, the README, and the check reference no longer say the release writes the project's new version to
.rlsbl/versionor thatversion-consistencycompares it: the file names the rlsbl that last scaffolded or released the project.