release-package
Prepare a new version of openmls for publication to pub.dev. Use when user wants to release, publish, or tag a new version of the package.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Prepare a new version of openmls for publication to pub.dev. Use when user wants to release, publish, or tag a new version of the package.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Release a new openmls_frb native crate version (stage 1 of the two-stage release). Use when the user wants to build/publish new native binaries after openmls dependency updates, bump the openmls_frb crate, or push a openmls_frb-* tag. NOT for the Dart pub.dev release (that is release-package).
Build openmls native libraries for different platforms. Use when user asks about building, compiling, or creating native libraries for iOS, Android, macOS, Linux, or Windows.
Update openmls native library version. Use when checking for updates, upgrading openmls, bumping version, or updating native dependencies.
Review openmls Dart code for security issues. Use when reviewing code changes, checking for proper API usage, verifying secure patterns, or auditing cryptographic code.
Add a new database migration to EncryptedDb. Use when changing storage schema, data format, or serialization in the native library.
Flutter Rust Bridge patterns and best practices for this project. Use when writing Rust API code, adding new bindings, implementing MlsEngine methods, or troubleshooting FRB issues.
| name | release-package |
| description | Prepare a new version of openmls for publication to pub.dev. Use when user wants to release, publish, or tag a new version of the package. |
Guide for publishing a new version of the openmls Dart package to pub.dev.
Stage 2 of 2. Releasing this project has two stages. This skill covers stage 2 (publishing the Dart package to pub.dev). It does not release the native
openmls_frbcrate — that is stage 1, handled by the release-frb-crate skill /make release-frb.Run stage 1 first and let its native build finish. The published package's build hook downloads the precompiled
openmls_frb-<crate>binary, so that binary must already exist before you tag the pub.dev release.make releaseverifies this automatically (see below).
# From a clean, up-to-date main, after the stage-1 native build has finished:
make release ARGS="--version 6.1.0"
make release (scripts/release.dart) does the whole stage-2 release in one
command:
main, up to date with
origin/main, the version is greater than the current pubspec.yaml version,
and the vX.Y.Z tag does not already exist (local or remote).openmls_frb-<version in rust/Cargo.toml> is published (via gh).
Fails closed if it is missing or can't be verified — the published build hook
downloads it, so releasing without it would break consumers.make publish-dry-run on the clean, pre-bump
tree, aborting if it reports errors. (Runs before the bump because
dart pub publish --dry-run exits non-zero on any warning, and dry-running a
bumped-but-uncommitted tree would warn about the modified files.)version: in pubspec.yaml.## [Unreleased] to ## [X.Y.Z] - <today> in place (no empty ## [Unreleased] is left behind — the next
unreleased change recreates it), and updates the bottom compare links
([Unreleased] → vX.Y.Z...HEAD, retained, and a new [X.Y.Z] →
vPREV...vX.Y.Z).--yes).vX.Y.Z.main and the tag (skip with --no-push), which triggers
publish.yml → pub.dev.The commit, tag, and push run with an inherited terminal, so you enter your
signing passphrase interactively during the command — there is no separate
manual commit/tag step. Run it from a terminal (not an IDE task runner) so both
the passphrase prompt and the pre-commit hook (make format-check + rust-check
analyze) work.--version <X.Y.Z> — new package version (required)--no-push — commit and tag locally only (push later yourself)--yes, -y — skip the confirmation prompt--skip-frb-check — skip the stage-1 native-binary existence check (only if
you have verified the openmls_frb-<crate> release exists manually)--date <Y-M-D> — CHANGELOG date to stamp (default: today)The pub.dev package version follows Semantic Versioning
for the public Dart API, independent of the openmls_frb crate version and
of upstream openmls's version.
| Change Type | Version Bump | Examples |
|---|---|---|
| Breaking API changes | MAJOR | Removed/renamed public APIs, changed function signatures |
| New features | MINOR | New public APIs, new platform support |
| Bug fixes | PATCH | Bug fixes, dependency updates, documentation |
The CHANGELOG ([Unreleased] section) is the source of truth for what changed —
review it and pick the bump that matches. See the changelog format in
CLAUDE.md → Changelog Format.
make release checks this for you, but to confirm manually: make version shows
the crate version from rust/Cargo.toml, and a GitHub Release named
openmls_frb-<that version> must be published. If it is not, run stage 1
first:
make release-frb ARGS="--version <crate X.Y.Z>" # then let the build finish
This project uses tag-triggered CI for publishing — you do NOT run dart pub publish manually:
make release pushes a git tag matching vX.Y.Z.publish.yml workflow triggers automatically on the tag.pubspec.yaml, runs tests, and publishes to
pub.dev via OIDC (gated by the pub.dev environment's required reviewers).If you cannot use make release (e.g. make/gh unavailable, or you are not an
Admin and must land the version bump through a PR instead of pushing to main):
# 1. Quality checks
make analyze && make test && make format-check && make rust-check && make rust-audit
# 2. Bump pubspec.yaml `version:` and finalize CHANGELOG.md:
# - rename `## [Unreleased]` to `## [X.Y.Z] - YYYY-MM-DD` in place
# (do NOT add a fresh empty `## [Unreleased]` — the next unreleased
# change recreates it)
# - rewrite `[Unreleased]: .../compare/vX.Y.Z...HEAD` (kept at the bottom)
# and add `[X.Y.Z]: .../compare/vPREV...vX.Y.Z`
# 3. Validate
make publish-dry-run
# 4. Commit (signed), tag (signed, annotated), push
git commit -am "chore: prepare release vX.Y.Z"
git tag -s vX.Y.Z -m "Release vX.Y.Z"
git push origin main && git push origin vX.Y.Z
Non-admins: open a PR for the bump commit, merge it, then push the vX.Y.Z tag
(tag creation is not gated by the pull-request rule).
Fix the issue, then delete and re-create the tag:
git tag -d vX.Y.Z
git push origin :refs/tags/vX.Y.Z
# fix + commit on main, then re-run:
make release ARGS="--version X.Y.Z"
.github/workflows/publish.ymlscripts/release.dart (logic in scripts/src/release.dart)make release-frbCLAUDE.md → Release Flow