Release process
-
In your working shell set the following variables
VERSION="X.Y.Z" RADICLE_DESKTOP_DIR="$(pwd)" # absolute path to this repo # User-specific — adjust these to your environment FULL_NAME="Rūdolfs Ošiņš" EMAIL="rudolfs@osins.org" USERNAME="rudolfs" SSH_KEY="$HOME/.ssh/id_ed25519" SIGNING_KEY="$HOME/.ssh/rudolfs-apt-signing-key" FILES_HOST="files.radicle.dev" -
Create a new release branch
rad sync && git fetch git checkout -b release/v${VERSION} -
Update the version in
crates/radicle-tauri/tauri.conf.json. -
Update
CHANGELOG.md— only include changes relevant to users. Add a shoutout to any external contributors. -
Commit the changes
git commit -a -m "Release v${VERSION}". This commit is the Release Commit. -
In your working shell, set the release commit SHA
RELEASE_SHA="$(git rev-parse HEAD)" -
Update Arch Linux package info
-
Update
pkgverinarch/radicle-desktop/PKGBUILDto match the release version -
Update
_commitinarch/radicle-desktop/PKGBUILDto the release commit created above. -
Regenerate
.SRCINFOwithcd arch && ./generate-srcinfo.sh -
Commit the changes (from the repo root):
git add arch/radicle-desktop/.SRCINFO git add arch/radicle-desktop/PKGBUILD git commit -m "Update arch package to v${VERSION}"
-
-
Create a Release Patch with
git push rad HEAD:refs/patches -
Wait for CI of the Release Patch to pass
-
Wait for approval of the Release Patch and merge it into
main -
Build all release artifacts
scripts/releaseThis builds the macOS DMG, Linux amd64 deb and AppImage. Artifacts are written to
releases/v${VERSION}/.To build a single artifact, pass the corresponding flag:
scripts/release --only-dmg # macOS aarch64 DMG scripts/release --only-deb # Linux amd64 deb scripts/release --only-appimage # Linux amd64 AppImageThe macOS DMG is built natively. The Linux builds run in an ARM64 Podman container (
Dockerfile.release) that cross-compiles Rust to x86_64. The AppImage additionally requires x86_64 emulation via binfmt_misc + QEMU to run linuxdeploy inside the ARM64 container — seescripts/appimage-buildfor details.The Linux builds cache Rust artifacts in named Podman volumes across runs. To start fully from scratch:
scripts/release --clean && scripts/release--cleanwipestarget-release/,node_modules/, all Linux build volumes, and the container image. To only rebuild the container image while keeping the cached volumes (e.g. after updatingDockerfile.release):scripts/release --rebuild-imageAfter the build, install the macOS DMG and start the app to verify that it works.
-
Sign the Debian package from
radicle-apt-repocd radicle-apt-repo rad sync && git fetch cp "$RADICLE_DESKTOP_DIR/releases/v${VERSION}/radicle-desktop_${VERSION}_amd64.deb" . docker build -t radicle-apt scripts docker run --rm -it \ -v "$(pwd):/src/apt" \ -v "$SIGNING_KEY:/src/keys/signing-key" \ -e SIGNING_KEY=/src/keys/signing-key \ -e DEBEMAIL="$EMAIL" \ -e DEBFULLNAME="$FULL_NAME" \ -e SSH_USER="$USERNAME" \ -v "$SSH_KEY:/root/.ssh/id_ed25519:ro" \ radicle-aptInside the container, run:
RADICLE_APT_SIGNING_KEY=/src/keys/signing-key ./import-deb radicle-desktop_${VERSION}_amd64.debThen from the host:
git checkout -b release-v${VERSION} git add db/ dists/ pool/ git commit -m "Update radicle-desktop to ${VERSION}" git push rad HEAD:refs/patches # Once you get peer approval, merge the patch git checkout main git merge --ff-only release-v${VERSION} git push -
Publish the Debian package to the APT repository from
radicle-apt-repomake publish -
Publish release files from
radicle-desktopcd radicle-desktop scp -i "$(rad path)/keys/radicle" releases/v${VERSION}/* "${USERNAME}@${FILES_HOST}:/var/www/${FILES_HOST}/releases/radicle-desktop/latest" -
Publish the Arch package by pushing changes to the Arch User Repository (You need to be a maintainer of the AUR package to push)
cd arch && ./publish.sh "Release v${VERSION}" -
Verify the Arch package version on the AUR
-
Resolve the previous release topic on Zulip
-
Announce the release on Zulip, following the previous announcement format
# Release process
- In your working shell set the following variables
```bash
VERSION="X.Y.Z"
RADICLE_DESKTOP_DIR="$(pwd)" # absolute path to this repo
# User-specific — adjust these to your environment
FULL_NAME="Rūdolfs Ošiņš"
EMAIL="rudolfs@osins.org"
USERNAME="rudolfs"
SSH_KEY="$HOME/.ssh/id_ed25519"
SIGNING_KEY="$HOME/.ssh/rudolfs-apt-signing-key"
FILES_HOST="files.radicle.dev"
```
- Create a new release branch
```bash
rad sync && git fetch
git checkout -b release/v${VERSION}
```
- Update the version in `crates/radicle-tauri/tauri.conf.json`.
- Update `CHANGELOG.md` — only include changes relevant to users. Add a shoutout
to any external contributors.
- Commit the changes `git commit -a -m "Release v${VERSION}"`. This commit is the
_Release Commit_.
- In your working shell, set the release commit SHA
```bash
RELEASE_SHA="$(git rev-parse HEAD)"
```
- Update Arch Linux package info
- Update `pkgver` in `arch/radicle-desktop/PKGBUILD` to match the release version
- Update `_commit` in `arch/radicle-desktop/PKGBUILD` to the release commit
created above.
- Regenerate `.SRCINFO` with
```bash
cd arch && ./generate-srcinfo.sh
```
- Commit the changes (from the repo root):
```bash
git add arch/radicle-desktop/.SRCINFO
git add arch/radicle-desktop/PKGBUILD
git commit -m "Update arch package to v${VERSION}"
```
- Create a _Release Patch_ with `git push rad HEAD:refs/patches`
- Wait for CI of the Release Patch to pass
- Wait for approval of the Release Patch and merge it into `main`
- Build all release artifacts
```bash
scripts/release
```
This builds the macOS DMG, Linux amd64 deb and AppImage.
Artifacts are written to `releases/v${VERSION}/`.
To build a single artifact, pass the corresponding flag:
```bash
scripts/release --only-dmg # macOS aarch64 DMG
scripts/release --only-deb # Linux amd64 deb
scripts/release --only-appimage # Linux amd64 AppImage
```
The macOS DMG is built natively. The Linux builds run in an ARM64
Podman container (`Dockerfile.release`) that cross-compiles Rust to
x86_64. The AppImage additionally requires x86_64 emulation via
binfmt_misc + QEMU to run linuxdeploy inside the ARM64 container — see
`scripts/appimage-build` for details.
The Linux builds cache Rust artifacts in named Podman volumes across
runs. To start fully from scratch:
```bash
scripts/release --clean && scripts/release
```
`--clean` wipes `target-release/`, `node_modules/`, all Linux build
volumes, and the container image. To only rebuild the container image
while keeping the cached volumes (e.g. after updating
`Dockerfile.release`):
```bash
scripts/release --rebuild-image
```
After the build, install the macOS DMG and start the app to verify that it works.
- Sign the Debian package from `radicle-apt-repo`
```bash
cd radicle-apt-repo
rad sync && git fetch
cp "$RADICLE_DESKTOP_DIR/releases/v${VERSION}/radicle-desktop_${VERSION}_amd64.deb" .
docker build -t radicle-apt scripts
docker run --rm -it \
-v "$(pwd):/src/apt" \
-v "$SIGNING_KEY:/src/keys/signing-key" \
-e SIGNING_KEY=/src/keys/signing-key \
-e DEBEMAIL="$EMAIL" \
-e DEBFULLNAME="$FULL_NAME" \
-e SSH_USER="$USERNAME" \
-v "$SSH_KEY:/root/.ssh/id_ed25519:ro" \
radicle-apt
```
Inside the container, run:
```bash
RADICLE_APT_SIGNING_KEY=/src/keys/signing-key ./import-deb radicle-desktop_${VERSION}_amd64.deb
```
Then from the host:
```bash
git checkout -b release-v${VERSION}
git add db/ dists/ pool/
git commit -m "Update radicle-desktop to ${VERSION}"
git push rad HEAD:refs/patches
# Once you get peer approval, merge the patch
git checkout main
git merge --ff-only release-v${VERSION}
git push
```
- Publish the Debian package to the APT repository from `radicle-apt-repo`
```bash
make publish
```
- Publish release files from `radicle-desktop`
```bash
cd radicle-desktop
scp -i "$(rad path)/keys/radicle" releases/v${VERSION}/* "${USERNAME}@${FILES_HOST}:/var/www/${FILES_HOST}/releases/radicle-desktop/latest"
```
- Publish the Arch package by pushing changes to the [Arch User Repository][1]
(You need to be a maintainer of the AUR package to push)
```bash
cd arch && ./publish.sh "Release v${VERSION}"
```
- Verify the Arch package version on the [AUR](https://aur.archlinux.org/packages/radicle-desktop)
- Resolve the previous release topic on Zulip
- Announce the release on Zulip, following the [previous announcement format][2]
[1]: https://aur.archlinux.org/packages/radicle-desktop
[2]: https://radicle.zulipchat.com/#narrow/channel/409174-announcements/topic/radicle-desktop.20v0.2E2.2E0.20.28early.20preview.29/with/514356912