Skip to content

Release

Release #225

name: "Release"
# Build the desktop app with code from ente-io/ente and create/update a release.
#
# For more details, see `docs/release.md` in ente-io/ente.
on:
# Trigger manually or `gh workflow run desktop-release.yml --source=foo`.
workflow_dispatch:
inputs:
source:
description: "Branch (ente-io/ente) to build"
type: string
schedule:
# Run everyday at ~8:00 AM IST (except Sundays).
# See: [Note: Run workflow every 24 hours]
#
- cron: "45 2 * * 1-6"
push:
# Run when a tag matching the pattern "vd.d.d" is pushed. In particular,
# this excludes the "-beta" tags.
tags:
- "v[0-9]+.[0-9]+.[0-9]+"
jobs:
release:
runs-on: ${{ matrix.os }}
defaults:
run:
working-directory: desktop
strategy:
matrix:
os: [macos-latest, ubuntu-latest, windows-latest]
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
# If triggered by a tag, checkout photosd-$tag from the source
# repository. Otherwise checkout $source (default: "main").
repository: ente-io/ente
ref:
"${{ startsWith(github.ref, 'refs/tags/v') &&
format('photosd-{0}', github.ref_name) || ( inputs.source
|| 'main' ) }}"
submodules: recursive
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Increase yarn timeout
# `yarn install` times out sometimes on the Windows runner,
# resulting in flaky builds.
run: yarn config set network-timeout 900000 -g
- name: Install dependencies
run: yarn install
- name: Create universal ffmpeg binaries for macOS
if: startsWith(matrix.os, 'macos')
# Currently, the ffmpeg-static binaries are not universal (Not
# their fault, we thank them for their useful package, the issue
# is that there don't seem to be well known upstream sources that
# provide a universal binary).
#
# As a workaround, we invoke ffmpeg-static twice to download both
# the Intel and ARM binaries, and combine them into a single
# universal binary using lipo.
#
# Note that the yarn install will run again, as part of the
# "build:ci" step, so we're relying on ffmpeg-static install.js's
# behaviour of not overwriting the existing file named `ffmpeg`.
run: |
rm -f node_modules/ffmpeg-static/ffmpeg
npm_config_arch=arm64 yarn add --check-files ffmpeg-static
mv node_modules/ffmpeg-static/ffmpeg ffmpeg-arm64
npm_config_arch=x64 yarn add --check-files ffmpeg-static
mv node_modules/ffmpeg-static/ffmpeg ffmpeg-x64
lipo -create ffmpeg-arm64 ffmpeg-x64 -output node_modules/ffmpeg-static/ffmpeg
rm ffmpeg-arm64 ffmpeg-x64
file node_modules/ffmpeg-static/ffmpeg # print what we ended up with
- name: Install libarchive-tools for pacman build
if: startsWith(matrix.os, 'ubuntu')
# See:
# https://github.com/electron-userland/electron-builder/issues/4181
run: sudo apt-get update && sudo apt-get install libarchive-tools
- name: Build
uses: ente-io/action-electron-builder@eff78a1d33bdab4c54ede0e5cdc71e0c2cf803e2
with:
package_root: desktop
build_script_name: build:ci
# GitHub token, automatically provided to the action
# (No need to define this secret in the repo settings)
github_token: ${{ secrets.GITHUB_TOKEN }}
# Passes `--publish always` to electron-builder
release: true
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 }}
# Default is "draft", but since our nightly builds update
# existing pre-releases, set this to "prerelease".
EP_PRE_RELEASE: true
# By default, electron-builder does not update releases that
# were more than 2 hours ago. Override this to allow us to
# continually update our nightly pre-releases.
EP_GH_IGNORE_TIME: true
# Workaround recommended in
# https://github.com/electron-userland/electron-builder/issues/3179
USE_HARD_LINKS: false