#Release notes source
- GitHub Release notes come from
CHANGELOG.mdfor the matching version section (## X.Y.Z - YYYY-MM-DD). - Keep the unreleased section at the top. During a release train it may be
versioned, for example ## 0.8.0 - Unreleased; before tagging, change it to ## X.Y.Z - YYYY-MM-DD.
#Steps
- Update
CHANGELOG.mdand version
- Move entries from
Unreleasedinto a new## X.Y.Z - YYYY-MM-DDsection, - Credit contributors (e.g.
thanks @user). - Update
version.envtoX.Y.Z. - Run
scripts/generate-version.sh(also refreshesSources/imsg/Resources/Info.plist).
or date the existing ## X.Y.Z - Unreleased section.
- Ensure CI is green on
main
make lintmake test- GitHub Actions
linux-read-core make format(optional, if formatting changes are expected)
- Build, sign, and notarize
- Requires
APP_STORE_CONNECT_API_KEY_P8,APP_STORE_CONNECT_KEY_ID,APP_STORE_CONNECT_ISSUER_ID. scripts/sign-and-notarize.sh(outputs/tmp/imsg-macos.zipby default)- Linux release archives are built by
.github/workflows/release.ymlwith - Verify the zip contains
imsg-bridge-helper.dyliband required SwiftPM - Verify entitlements/signing:
unzip -q /tmp/imsg-macos.zip -d /tmp/imsg-checkcodesign -d --entitlements :- /tmp/imsg-check/imsgcodesign --verify --strict --verbose=4 /tmp/imsg-check/imsg-bridge-helper.dylibspctl -a -t exec -vv /tmp/imsg-check/imsg
scripts/build-linux.sh and uploaded as imsg-linux-x86_64.tar.gz.
bundles (e.g. PhoneNumberKit_PhoneNumberKit.bundle).
- Tag, push, and publish
git tag -a vX.Y.Z -m "vX.Y.Z"git push origin vX.Y.Zgh release create vX.Y.Z /tmp/imsg-macos.zip -t "vX.Y.Z" -F /tmp/release-notes.txt- Run
.github/workflows/release.ymlfor the tag to upload the Linux archive gh release edit vX.Y.Z --notes-file /tmp/release-notes.txt(if needed)
(imsg-linux-x86_64.tar.gz). Leave include_macos off unless you intentionally want a manual macOS rebuild.
- Update Homebrew tap
- Run
scripts/update-homebrew.sh vX.Y.Zto trigger the centralized formula updater. - Requires a GitHub token with workflow dispatch access to
steipete/homebrew-tap.
#What happens in CI
- Release signing + notarization are done locally via
scripts/sign-and-notarize.sh. .github/workflows/release.ymlis only for manual rebuilds, not the primary release path.
#Linux support schedule
- 0.8.0 is the Linux read-only preview release. It may include an experimental
- Linux support is staged as a read-only core pass: SwiftPM build, Linux-only
- Do not document Linux send/watch/Contacts/IMCore support unless those features
Linux x86_64 archive, but docs must keep describing Linux as read-only support for existing copied Messages databases.
tests, release archive generation, and CI coverage for reading copied Messages database fixtures.
are implemented and proven on Linux. They currently depend on macOS frameworks or Messages.app automation.