summarum/.github/workflows/release.yml
2026-08-14 13:39:09 +03:00

115 lines
4 KiB
YAML

name: Release
on:
push:
tags:
- "v*.*.*"
permissions:
contents: write
jobs:
build:
strategy:
fail-fast: false
# tauri-action's find-or-create-release check races across parallel
# matrix jobs and can create two separate release objects for the
# same tag, each missing the other's assets — force serial builds.
# Every platform added below shares that release object, so they all
# have to stay in this one serialized matrix.
max-parallel: 1
matrix:
include:
- os: windows-latest
target: x86_64-pc-windows-msvc
arch: x64
- os: windows-latest
target: aarch64-pc-windows-msvc
arch: arm64
# 22.04 is the oldest runner with webkit2gtk-4.1 (what Tauri 2
# needs); building on it keeps the glibc floor as low as possible
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
arch: x64
- os: macos-latest
target: aarch64-apple-darwin
arch: arm64
- os: macos-latest
target: x86_64-apple-darwin
arch: x64
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y build-essential curl wget file \
libwebkit2gtk-4.1-dev librsvg2-dev libssl-dev libxdo-dev \
libayatana-appindicator3-dev patchelf
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
- uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- uses: Swatinem/rust-cache@v2
with:
workspaces: src-tauri
key: ${{ matrix.target }}
- run: npm ci
# TAURI_SIGNING_* below is the updater's minisign keypair, not OS code
# signing — there is no Apple certificate, so macOS builds are only
# ad-hoc signed (bundle.macOS.signingIdentity "-") and Gatekeeper still
# asks the user to allow them on first launch.
- uses: tauri-apps/tauri-action@v0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
with:
tagName: ${{ github.ref_name }}
releaseName: "Summarum ${{ github.ref_name }}"
releaseDraft: true
prerelease: false
args: --target ${{ matrix.target }}
notes:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
prev=$(git tag --sort=-v:refname | grep -v "^${{ github.ref_name }}$" | head -1)
# release-checklist version bumps (bump version to X / bump cargo
# version to X / update tauri.conf version to X / sync Cargo.lock
# or package-lock.json with X) are internal bookkeeping, not
# user-facing changes — never worth a changelog line.
noise='^- (bump( cargo)? version to|update tauri\.conf version to|sync (Cargo\.lock|package-lock\.json) with) [0-9]+\.[0-9]+\.[0-9]+$'
filter() {
grep -vE "$noise" \
| sed -E 's/ \(#[0-9]+\)$//' \
| perl -CSD -pe 's/^- \p{Emoji_Presentation}\x{FE0F}?\s*/- /'
}
{
echo "## What's new"
if [ -n "$prev" ]; then
git log "$prev..${{ github.ref_name }}" --pretty=format:"- %s" --no-merges | filter
echo ""
echo "**Full Changelog**: https://github.com/${{ github.repository }}/compare/$prev...${{ github.ref_name }}"
else
git log "${{ github.ref_name }}" --pretty=format:"- %s" --no-merges | filter
fi
} > notes.md
gh release edit "${{ github.ref_name }}" --notes-file notes.md --draft=false