update-libsignal
Update libsignal native library version. Use when checking for updates, upgrading libsignal, bumping version, or updating native dependencies.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Update libsignal native library version. Use when checking for updates, upgrading libsignal, bumping version, or updating native dependencies.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Release 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).
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.
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.
| name | update-libsignal |
| description | Update libsignal native library version. Use when checking for updates, upgrading libsignal, bumping version, or updating native dependencies. |
Guide for updating the libsignal native library version in this project.
When the CI creates an automated PR for libsignal update, follow these steps:
Release notes are often terse or incomplete. Always examine what actually
changed between the two tags. vOLD is the version being replaced (see the
PR title/diff), vNEW is the new one.
1a. Release notes (starting point, not the whole story):
gh api repos/signalapp/libsignal/releases/tags/vNEW --jq '.body'
1b. Full commit list between the tags:
gh api "repos/signalapp/libsignal/compare/vOLD...vNEW" --paginate \
--jq '.commits[].commit.message | split("\n")[0]'
1c. Which files changed, scoped to the crates we bind:
gh api "repos/signalapp/libsignal/compare/vOLD...vNEW" --paginate --jq '.files[].filename' \
| grep -E 'libsignal-protocol|libsignal-core|signal-crypto'
For large ranges the compare API truncates files — fall back to a shallow clone:
git clone --filter=blob:none https://github.com/signalapp/libsignal /tmp/upstream
git -C /tmp/upstream diff vOLD..vNEW --stat -- <crate dirs>
1d. Check the public API surface we actually bind. List the upstream
types/functions referenced in rust/src/api/*.rs, then look for them in the
diff:
git -C /tmp/upstream diff vOLD..vNEW -- <crate>/src | grep -E '^[-+].*(pub fn|pub struct|pub enum|pub trait)'
1e. Upstream Cargo.toml deltas — MSRV bumps, new/removed features,
dependency updates with security advisories.
Summarize findings as:
rust/src/api/# Check if Rust code compiles
make rust-check
Common issues:
Ord for PublicKey)If make rust-check fails, fix the errors in rust/src/api/:
make codegen
make test
make analyze
Verify the AI-generated entry against YOUR findings from Step 1 — the AI only sees the release notes and commit subjects, not the diffs:
libsignal_frb version in Highlights matches rust/Cargo.tomlThe automated update bumps the version in rust/Cargo.toml in two stages:
a deterministic bump mirroring the upstream SemVer delta, then an AI severity
check (from the release notes and commit list) that can raise it — e.g. to
major when a 0.x upstream ships breaking changes in a minor release.
bump-unverified label (or the ⚠️ warning in the
PR body), the AI check did not run — classify the update yourself using
your Step 1 findings and fix the version if needed.rust/src/api/:version = "X.Y.Z"
make rust-check
git add rust/Cargo.toml rust/Cargo.lock rust/src/api/ lib/src/rust/ CHANGELOG.md
git commit -m "fix: adapt for libsignal vX.Y.Z breaking changes"
rust/src/api/make codegen — regenerate FRB bindingsmake test — all tests passmake analyze — no issuesrust/Cargo.toml — libsignal_frb version bumped (automatic; verify)make rust-check — sync Cargo.lock# Check for updates
make check-new-libsignal-version
# Check and apply updates automatically
make check-new-libsignal-version ARGS="--update"
This will:
rust/Cargo.toml with new libsignal dependency tagsCheck rust/Cargo.toml:
[dependencies]
libsignal-protocol = { git = "https://github.com/signalapp/libsignal", tag = "v0.87.1" }
Edit rust/Cargo.toml and update the tag for all three libsignal crates:
libsignal-protocollibsignal-coresignal-cryptomake rust-update
make codegen
make test
git add rust/Cargo.toml rust/Cargo.lock
git commit -m "chore(deps): update libsignal to vX.Y.Z"
git push
# Just check (no changes)
make check-new-libsignal-version
# Check and update
make check-new-libsignal-version ARGS="--update"
# Update to specific version
make check-new-libsignal-version ARGS="--update --version v0.87.0"
# Force update even if versions match
make check-new-libsignal-version ARGS="--update --force"
# JSON output for CI
make check-new-libsignal-version ARGS="--json"
Files automatically updated by make check-new-libsignal-version ARGS="--update":
| File | What | Description |
|---|---|---|
rust/Cargo.toml | libsignal-* tags | Native library dependency version |
rust/Cargo.toml | version | libsignal_frb bump mirroring upstream SemVer delta (adjust manually if wrapper API changed differently) |
README.md | Badge | Version badge in header |
CLAUDE.md | Example | Code example in documentation |
Files that need manual update:
| File | What | Description |
|---|---|---|
rust/Cargo.lock | Dependencies | Run make rust-update after changing Cargo.toml |
CHANGELOG.md | Entry | AI-generated in CI; verify against the upstream diff |
After updating, if API changed, run:
make codegen
Then check for:
rust/src/api/ filesrust/src/api/