Skip to content

ci(repo): support a second publishable package released in lockstep - #54

Draft
VelikovPetar wants to merge 1 commit into
mainfrom
ci/lockstep-release
Draft

VelikovPetar wants to merge 1 commit into
mainfrom
ci/lockstep-release

Conversation

@VelikovPetar

Copy link
Copy Markdown
Contributor

Prepares CI and the release tooling for a second publishable package, stream_chat_flutter_ai_ondevice, released in lockstep with stream_chat_flutter_ai: both packages share one version:, one v<X.Y.Z> tag publishes both, and the ondevice package depends on stream_chat_flutter_ai: ^<X.Y.Z>.

Everything iterates over the publishable packages under packages/ (a pubspec without publish_to: none), so this works on main today, before the ondevice package exists.

Changes

  • pr_title.yml — adds the ondevice scope; an ondevice PR must update packages/stream_chat_flutter_ai_ondevice/CHANGELOG.md.
  • scripts/verify-release-versions.sh (new) — fails a release when any publishable package's version: differs from the tag, or when a dependency on another publishable package isn't ^X.Y.Z. Used by both release workflows.
  • release_tag.yml / release_publish.yml — "Verify Tag" calls the script; the dry run now covers every publishable package (melos exec --no-private --order-dependents).
  • release:pub — fails fast, and retries a failed upload once after 60s: orderDependents publishes the core package first, but pub.dev may need a moment before a dependent can upload against the new version. A workflow re-run still skips packages already published.
  • package_analysis action (legacy / beta Flutter) — analyzes and tests each package under packages/, not only the core one.
  • release-pr skill / CLAUDE.md — describe lockstep releases: bump both versions and the constraint (root bootstrap list), promote ## Upcoming in both CHANGELOGs, update all install snippets.

Only verifiable on a real tag push

  • pub.dev accepting the dependent upload right after the core one, and whether the retry is ever needed.
  • OIDC publishing of two packages. Automated publishing can only be enabled on an existing package, so the ondevice package's first version has to be uploaded by hand before its pub.dev admin page offers the setting.

Testing

  • melos run analyze / melos run format pass.
  • The verify script passes for v0.1.0 on main and with the ondevice package present, and reports each mismatch for a wrong tag or a stale constraint.
  • The new dry-run command passes locally.

🤖 Generated with Claude Code

Prepare CI and release tooling for stream_chat_flutter_ai_ondevice, which
ships with the same version as stream_chat_flutter_ai from one v<X.Y.Z> tag.
Everything iterates over the publishable packages under packages/, so it
works before the ondevice package lands.

- pr_title: add the `ondevice` scope, mapped to its CHANGELOG.
- release_tag / release_publish: verify every publishable pubspec matches
  the tag, and that lockstep constraints are ^X.Y.Z (new
  verify-release-versions.sh); dry-run every publishable package.
- release:pub: fail fast and retry each upload once after a minute, since
  a dependent needs its sibling's new version on pub.dev.
- package_analysis: analyze and test each package under packages/.
- release-pr skill and CLAUDE.md: describe lockstep releases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant