Radish alpha
r
rad:z4D5UCArafTzTQpDZNQRuqswh3ury
Radicle desktop app
Radicle
Git
Improve release process
Thomas Scholtes committed 9 months ago
commit 2bbe4fd88fec7ce359da8f44e750fdb042759429
parent fda0638
3 files changed +90 -30
modified .gitignore
@@ -1,5 +1,6 @@
/build/
/target/
+
/release-artifacts
node_modules/

# Tauri
modified .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
modified 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<version_number>`.
-
- 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