Przeglądaj źródła

More release shenanigans

Manav Rathi 1 rok temu
rodzic
commit
0d1ad8b8e1

+ 0 - 70
desktop/.github/workflows/desktop-draft-release.yml

@@ -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

+ 8 - 17
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 }}

+ 39 - 21
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.
+
+## Workflow - Release
 
-3.  Head over to the releases repository and run the trigger script, passing it
-    the tag _without_ the `photosd-` prefix.
+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