name: Release on: push: tags: - 'v*' permissions: contents: write jobs: version-check: name: Version consistency runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 - name: Verify tag matches package.json / Cargo.toml / tauri.conf.json run: | TAG="${GITHUB_REF_NAME}" chmod +x scripts/check-version.sh ./scripts/check-version.sh "$TAG" build: name: Build (${{ matrix.platform }}) needs: version-check strategy: fail-fast: false matrix: include: - platform: ubuntu-latest args: --bundles deb,appimage,rpm - platform: macos-latest args: --bundles app,dmg - platform: windows-latest args: --bundles msi runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 cache: 'npm' - name: Install npm dependencies run: npm ci - uses: dtolnay/rust-toolchain@stable with: cache: true - name: Install Linux build dependencies if: matrix.platform == 'ubuntu-latest' run: | sudo apt-get update sudo apt-get install -y \ libwebkit2gtk-4.1-dev \ librsvg2-dev \ patchelf \ build-essential \ curl \ wget \ file \ libssl-dev \ libgtk-3-dev \ libayatana-appindicator3-dev - name: Compose release body id: notes shell: bash run: | FILE="release-notes-${{ github.ref_name }}.md" { echo 'body<> "$GITHUB_OUTPUT" - name: Build and upload release uses: tauri-apps/tauri-action@v0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tagName: ${{ github.ref_name }} releaseName: ${{ github.ref_name }} releaseBody: ${{ steps.notes.outputs.body }} prerelease: ${{ contains(github.ref_name, '-rc') || contains(github.ref_name, '-beta') || contains(github.ref_name, '-alpha') }} overwrite: true args: ${{ matrix.args }} upload-macos-script: name: Attach macOS install script needs: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Upload install-macos.sh to release env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: gh release upload "${{ github.ref_name }}" scripts/install-macos.sh --clobber