diff --git a/.gitignore b/.gitignore index f958fb5c8..20dc34c2b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ /build/ /target/ +/release-artifacts node_modules/ # Tauri diff --git a/.woodpecker/build.yaml b/.woodpecker/build.yaml index 03c6871c0..36f8a9e8e 100644 --- a/.woodpecker/build.yaml +++ b/.woodpecker/build.yaml @@ -68,7 +68,6 @@ steps: # Update latest build artifacts for upload cp target/release/bundle/deb/*.deb "$LATEST_DIR/deb" cp target/release/bundle/appimage/*.AppImage "$LATEST_DIR/appimage" - echo "{\"sha\": \"$(git rev-parse HEAD)\", \"version\": \"$VERSION\"}" > "$LATEST_DIR/latest.json" upload-artifacts: image: woodpeckerci/plugin-s3 @@ -82,19 +81,3 @@ steps: from_secret: minio_access_key secret_key: from_secret: minio_secret_key - - release: - image: woodpeckerci/plugin-s3 - when: - - evaluate: 'CI_PIPELINE_EVENT == "push" && CI_COMMIT_BRANCH == CI_REPO_DEFAULT_BRANCH && CI_COMMIT_MESSAGE startsWith "Release"' - settings: - endpoint: https://minio-api.radworks.garden - bucket: radworks-releases - source: radicle-desktop/latest/*/*.{deb,json,AppImage} - target: "" - overwrite: true - path_style: true - access_key: - from_secret: minio_access_key - secret_key: - from_secret: minio_secret_key diff --git a/RELEASE.md b/RELEASE.md index 8dc45c282..ff586cbed 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,15 +1,77 @@ -### Release Checklist +# Release process **Note:** We release every second Thursday, before the end of the cycle. -- Bump the minor version in `crates/radicle-tauri/tauri.conf.json`. +- In your working shell set the following variable + + ```bash + VERSION="X.Y.Z" + ``` + +- Create a new release branch + + ```bash + rad sync && git fetch + git checkout -b release/v${VERSION} rad/main` + ``` + +- Update the version in `crates/radicle-tauri/tauri.conf.json`. - Update `CHANGELOG.md` — only include changes relevant to users. -- Create a version bump patch, push to CI, and request a review. - - The commit message should start with `Release` followed by `v`. -- Wait for CI to pass and get peer approval. -- Build the macOS app locally: `npm run tauri build`. - - Make sure to clean any transient dependencies with `cargo clean && rm -rf node_modules` before building. -- Upload the macOS build to [MinIO][0] in the same folder as the latest Linux build. +- Commit the changes `git commit -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)" + SHORT_RELEASE_SHA="$(git rev-parse --short HEAD)" + ``` + +- Create a _Release Patch_ with `git push rad HEAD:refs/patches` +- Build the macOS app locally + + ```bash + cargo clean + rm -rf node_modules + npm install + npm exec -- tauri build --bundle dmg + ``` + + This creates a file `target/release/bundle/dmg/Radicle_X.Y.Z_aarch64.dmg`. + +- Install the build macOS DMG and start the app to verify that it works. +- Wait for CI of the Release Commit in the Release Patch to pass + +- Collect release artifacts + + ```bash + rm -rf release-artifacts && mkdir release-artifacts + curl -fL \ + "https://minio-api.radworks.garden/radworks-releases/radicle-desktop/pre-release/${VERSION}_${SHORT_RELEASE_SHA}/radicle-desktop_${VERSION}_amd64.AppImage" \ + --output release-artifacts/radicle-desktop-amd64.AppImage + cp -a "target/release/bundle/dmg/Radicle_${VERSION}_aarch64.dmg" \ + release-artifacts/radicle-desktop-aarch64.dmg + echo -n "{\"sha\": \"${RELEASE_SHA}\", \"version\": \"${VERSION}\"}" \ + > release-artifacts/latest.json + ``` + + The content of `release-artifacts` should look like this: + + ```plain + release-artifacts + latest.json + radicle-desktop-aarch64.dmg + radicle-desktop-amd64.AppImage + ``` + +- Sign the Debian package + + ```bash + curl -fLO \ + https://minio-api.radworks.garden/radworks-releases/radicle-desktop/pre-release/${VERSION}_${SHORT_RELEASE_SHA}/radicle_desktop_${VERSION}_amd64.deb + ``` + + TODO: complete this + - 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 @@ -20,20 +82,34 @@ cd arch && ./generate-srcinfo.sh ``` - - Create a patch with the changes and wait for CI to pass + - Commit and push the changes to `arch/radicle-desktop/PKGBUILD` and + `arch/radicle-desktop/.SRCINFO`: + ```bash + git commit -m "Update arch package to v${VERSION}" + git push rad + ``` + +- Wait for CI of the Release Patch to pass. +- Wait for approval of the Release Patch and merge it into `main`. +- Publish release files + + ```bash + scp -i "$(rad path)/keys/radicle" \ + release-artifacts/* "release@files.radicle.xyz:/mnt/radicle/files/releases/radicle-desktop/latest/" + ``` + +- Publish the Debian package to the APT repository (TODO) - Publish the Arch package by pushing changes to the [Arch User Repository][4]: ```bash - cd arch && ./publish.sh "Release vX.Y.Z" + cd arch && ./publish.sh "Release v${VERSION}" ``` - You’ll get a chance to review the changes. You need to be a maintainer of the - AUR package to push. + You need to be a maintainer of the AUR package to push. - Verify the Arch package version on the [AUR](https://aur.archlinux.org/packages/radicle-desktop). - Announce the release on Zulip, following the [previous announcement format][3]. - Resolve the previous release topic on Zulip. -[0]: https://minio.radworks.garden/browser/radworks-releases/radicle-desktop%2F [3]: https://radicle.zulipchat.com/#narrow/channel/409174-announcements/topic/radicle-desktop.20v0.2E2.2E0.20.28early.20preview.29/with/514356912 [4]: https://aur.archlinux.org/packages/radicle-desktop