release-package
Prepare a new version of libsignal 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 libsignal 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 页面并帮你完成安装。
基于 SOC 职业分类
| name | release-package |
| description | Prepare a new version of libsignal 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 libsignal 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
libsignal_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
libsignal_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).libsignal_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.version: in pubspec.yaml.## [Unreleased] to ## [X.Y.Z] - <today>, opens a fresh empty ## [Unreleased], and updates the bottom
compare links ([Unreleased] → vX.Y.Z...HEAD and a new [X.Y.Z] →
vPREV...vX.Y.Z).make publish-dry-run (reverts the file
changes and aborts if it reports errors).--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 libsignal_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 libsignal_frb crate version and
of upstream libsignal'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
libsignal_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`
# - add a fresh empty `## [Unreleased]` above it
# - rewrite `[Unreleased]: .../compare/vX.Y.Z...HEAD` and add
# `[X.Y.Z]: .../compare/vPREV...vX.Y.Z` at the bottom
# 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 FlowRelease a new libsignal_frb native crate version (stage 1 of the two-stage release). Use when the user wants to build/publish new native binaries after libsignal dependency updates, bump the libsignal_frb crate, or push a libsignal_frb-* tag. NOT for the Dart pub.dev release (that is release-package).
Update libsignal native library version. Use when checking for updates, upgrading libsignal, bumping version, or updating native dependencies.
Implement Signal Protocol stores for libsignal_dart. Use when implementing SessionStore, IdentityKeyStore, PreKeyStore, SignedPreKeyStore, KyberPreKeyStore, or SenderKeyStore for production use.
Build libsignal native libraries for different platforms. Use when user asks about building, compiling, or creating native libraries for iOS, Android, macOS, Linux, or Windows.
Flutter Rust Bridge patterns and best practices for libsignal. Use when writing Rust API code, adding new bindings, implementing DartFn callbacks, or troubleshooting FRB issues.
Update copier template version. Use when checking for template updates, running copier update, or applying template changes to the project structure.