More release shenanigans

This commit is contained in:
Manav Rathi 2024-05-08 10:01:26 +05:30
parent 8eac3d701f
commit 0d1ad8b8e1
No known key found for this signature in database
3 changed files with 47 additions and 108 deletions

View file

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

View file

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

View file

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