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