diff --git a/desktop/.github/workflows/desktop-draft-release.yml b/desktop/.github/workflows/desktop-draft-release.yml deleted file mode 100644 index 8c0652dfc..000000000 --- a/desktop/.github/workflows/desktop-draft-release.yml +++ /dev/null @@ -1,70 +0,0 @@ -name: "Draft release" - -# Build the desktop/draft-release branch and update the existing draft release -# with the resultant artifacts. -# -# This is meant for doing tests that require the app to be signed and packaged. -# Such releases should not be published to end users. -# -# Workflow: -# -# 1. Push your changes to the "desktop/draft-release" branch on -# https://github.com/ente-io/ente. -# -# 2. Create a draft release with tag equal to the version in the `package.json`. -# -# 3. Trigger this workflow. You can trigger it multiple times, each time it'll -# just update the artifacts attached to the same draft. -# -# 4. Once testing is done delete the draft. - -on: - # Trigger manually or `gh workflow run desktop-draft-release.yml`. - workflow_dispatch: - -jobs: - release: - runs-on: macos-latest - - defaults: - run: - working-directory: desktop - - steps: - - name: Checkout code - uses: actions/checkout@v4 - with: - repository: ente-io/ente - ref: desktop/draft-release - submodules: recursive - - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version: 20 - - - name: Install dependencies - run: yarn install - - - name: Build - uses: ente-io/action-electron-builder@v1.0.0 - with: - package_root: desktop - - # GitHub token, automatically provided to the action - # (No need to define this secret in the repo settings) - github_token: ${{ secrets.GITHUB_TOKEN }} - - # If the commit is tagged with a version (e.g. "v1.0.0"), - # release the app after building. - release: ${{ startsWith(github.ref, 'refs/tags/v') }} - - mac_certs: ${{ secrets.MAC_CERTS }} - mac_certs_password: ${{ secrets.MAC_CERTS_PASSWORD }} - env: - # macOS notarization credentials key details - APPLE_ID: ${{ secrets.APPLE_ID }} - APPLE_APP_SPECIFIC_PASSWORD: - ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} - APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} - USE_HARD_LINKS: false diff --git a/desktop/.github/workflows/desktop-release.yml b/desktop/.github/workflows/desktop-release.yml index 2fa382376..7f6c4b9f5 100644 --- a/desktop/.github/workflows/desktop-release.yml +++ b/desktop/.github/workflows/desktop-release.yml @@ -1,20 +1,12 @@ name: "Release" -# This will create a new draft release with public artifacts. +# Build the ente-io/ente's desktop/rc branch and create/update a draft release. # -# Note that a release will only get created if there is an associated tag -# (GitHub releases need a corresponding tag). -# -# The canonical source for this action is in the repository where we keep the -# source code for the Ente Photos desktop app: https://github.com/ente-io/ente -# -# However, it actually lives and runs in the repository that we use for making -# releases: https://github.com/ente-io/photos-desktop -# -# We need two repositories because Electron updater currently doesn't work well -# with monorepos. For more details, see `docs/release.md`. +# For more details, see `docs/release.md` in ente-io/ente. on: + # Trigger manually or `gh workflow run desktop-release.yml`. + workflow_dispatch: push: # Run when a tag matching the pattern "v*"" is pushed. # @@ -38,11 +30,9 @@ jobs: - name: Checkout code uses: actions/checkout@v4 with: - # Checkout the tag photosd-v1.x.x from the source code - # repository when we're invoked for tag v1.x.x on the releases - # repository. + # Checkout the desktop/rc branch from the source repository. repository: ente-io/ente - ref: photosd-${{ github.ref_name }} + ref: desktop/rc submodules: recursive - name: Setup node @@ -69,7 +59,8 @@ jobs: github_token: ${{ secrets.GITHUB_TOKEN }} # If the commit is tagged with a version (e.g. "v1.0.0"), - # release the app after building. + # create a (draft) release after building. Otherwise upload + # assets to the existing draft named after the version. release: ${{ startsWith(github.ref, 'refs/tags/v') }} mac_certs: ${{ secrets.MAC_CERTS }} diff --git a/desktop/docs/release.md b/desktop/docs/release.md index b55c96326..c745482ea 100644 --- a/desktop/docs/release.md +++ b/desktop/docs/release.md @@ -1,46 +1,64 @@ ## Releases -Conceptually, the release is straightforward: We push a tag, a GitHub workflow -gets triggered that creates a draft release with artifacts built from that tag. -We then publish that release. The download links on our website, and existing -apps already know how to check for the latest GitHub release and update -accordingly. +Conceptually, the release is straightforward: We trigger a GitHub workflow that +creates a draft release with artifacts built. When ready, we publish that +release. The download links on our website, and existing apps already check the +latest GitHub release and update accordingly. -The complication comes by the fact that Electron Updater (the mechanism that we -use for auto updates) doesn't work well with monorepos. So we need to keep a -separate (non-mono) repository just for doing releases. +The complication comes by the fact that electron-builder's auto updaterr (the +mechanism that we use for auto updates) doesn't work with monorepos. So we need +to keep a separate (non-mono) repository just for doing releases. - Source code lives here, in [ente-io/ente](https://github.com/ente-io/ente). - Releases are done from [ente-io/photos-desktop](https://github.com/ente-io/photos-desktop). -## Workflow +## Workflow - Release Candidates -The workflow is: +Leading up to the release, we can make one or more draft releases that are not +intended to be published, but serve as test release candidates. -1. Finalize the changes in the source repo. +The workflow for making such "rc" builds is: - - Update the CHANGELOG. - - Update the version in `package.json` - - `git commit -m "[photosd] Release v1.2.3"` - - Open PR, merge into main. +1. Update `package.json` in the source repo to use version `1.x.x-rc`. Create a + new draft release in the release repo with tag `v1.x.x-rc`. -2. Tag the merge commit with a tag matching the pattern `photosd-v1.2.3`, where - `1.2.3` is the version in `package.json` +2. Push code to the `desktop/rc` branch in the source repo. + +3. Trigger the GitHub action in the release repo ```sh - git tag photosd-v1.x.x - git push origin photosd-v1.x.x + gh workflow run desktop-release.yml ``` +We can do steps 2 and 3 multiple times; each time it'll just update the +artifacts attached to the same draft. -3. Head over to the releases repository and run the trigger script, passing it - the tag _without_ the `photosd-` prefix. +## Workflow - Release + +1. Update `package.json` in the source repo to use version `1.x.x`. Create a + new draft release in the release repo with tag `v1.x.x`. + +2. Push code to the `desktop/rc` branch in the source repo. Remember to update + update the CHANGELOG. + +3. In the release repo ```sh ./.github/trigger-release.sh v1.x.x ``` +4. If the build is successful, tag `desktop/rc` and merge it into main: + + ```sh + # Assuming we're on desktop/rc that just got build + + git tag photosd-v1.x.x + git push origin photosd-v1.x.x + + # Now open a PR to merge it into main + ``` + ## Post build The GitHub Action runs on Windows, Linux and macOS. It produces the artifacts