Skip to content

v0.119.0

Choose a tag to compare

@smm-h smm-h released this 03 Sep 00:22
· 2042 commits to main since this release

The post-campaign rulings batch: the release file becomes the only way to state release intent (--bump/--description/--preid deleted), monorepo release init --packages becomes --releasables, monorepo add creates the releasable it names, unpublished-refs checks GitHub Release presence, Flutter joins import analysis, releasable state-dir commits attribute to their releasable, and unreadable Gradle dependency lines fail closed in CI filter derivation with a workable depends_on remedy.

Context

After the conversion/ownership/ledger campaign shipped, its closing review
put the remaining open design questions to the operator one by one; this
release implements the accepted rulings as one batch. The two breaking
changes both enforce the file-driven-over-flag-driven design rule; the
rest close coverage the campaign left open (Release presence had no
standing check, Flutter was pinned out of import analysis as migration
caution, a releasable's own release machinery fell outside its changelog
scope, and an unrecognized Gradle dependency line could silently narrow a
member's CI filter).

Breaking

  • monorepo release init --packages is now --releasables. The flag has selected releasable names ever since implicit mode was removed; it now spells what it selects. The old spelling is gone outright -- --packages is an unknown flag, with no alias.
  • release run no longer takes --bump, --description or --preid. The three flags skipped .rlsbl/releases/unreleased.toml entirely, which contradicts the file-driven design the rest of the release flow enforces -- the release file is what makes you state a release's intent in a reviewable committed artifact before executing it. The release file is now the only intent source; its own preid key still selects the pre-release channel.

Features

  • Flutter projects are now in scope for import analysis. deps-unused, deps-undeclared, deps-runtime-test-only, deps-dev-in-lib, dead-modules, dead-modules-stale and circular-deps now run for Flutter targets, using the same Dart source scanners the dart target uses.
  • unpublished-refs now checks GitHub Release presence. A released version whose tag is on origin but which has no GitHub Release is reported as an error naming rlsbl release reconcile as the remedy, over every archived version, from one listing.
  • monorepo add creates the releasable it names. An --releasable naming a group [[releasables]] does not declare yet is created as a singleton entry, with its tag_format written out explicitly and derived from the member's primary target scheme -- the same derivation monorepo absorb uses, including its refusal when a member's targets span both schemes. The new --tag-format states the format directly.

Fixes

  • Corrected two monorepo help texts that described behavior the commands do not have. monorepo extract said it refuses a mirrored releasable; it extracts one by promotion instead, cloning the mirror so the destination adopts the standalone history consumers already resolve. monorepo release init described [packages.<name>] sections; the batch release file it scaffolds carries [releasables.<name>], which is also the only shape the reader accepts.
  • Releasable state-dir commits are no longer orphaned. A commit touching only a releasable's own release state (its archived release file, its finalized changelog) now counts as inside that releasable's changelog scope, instead of falling outside every scope and making its changelog entry report as out of range and stale.
  • A Gradle dependency line the scanner cannot read no longer narrows a member's CI filter. A build.gradle declaring a dependency through a variable, a helper function, or a catalog alias with no catalog behind it used to warn on stderr and carry on, costing the dependent an edge -- so its router paths filter stopped covering a dependency it really has, and the freshness check agreed the narrowed router was fresh. Router derivation (monorepo sync, the router-filters-fresh check, the release-time window simulation) now refuses, naming the file, the line, and declaring the edge in depends_on as the remedy. monorepo graph and monorepo impact still warn and carry on.