name: Desktop Release on: push: tags: - 'v*' - 'desktop-v*' workflow_dispatch: inputs: tag: description: 'Existing tag to build (e.g. v0.1.0)' required: true type: string concurrency: group: desktop-release-${{ github.ref }} cancel-in-progress: false jobs: publish-tauri: permissions: contents: write packages: read runs-on: macos-latest env: RELEASE_TAG: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag || github.ref_name }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 ref: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag || github.ref }} - name: Setup Node uses: actions/setup-node@v4 with: node-version: '22' cache: 'npm' registry-url: 'https://npm.pkg.github.com' scope: '@boudra' - name: Install Rust stable uses: dtolnay/rust-toolchain@stable with: targets: aarch64-apple-darwin - name: Install JS dependencies run: npm ci env: NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Build web app for Tauri run: npm run build:web --workspace=@getpaseo/app - name: Set desktop version from tag shell: bash run: | node <<'NODE' const fs = require('node:fs'); const path = require('node:path'); const rawTag = process.env.RELEASE_TAG; if (!rawTag) throw new Error('RELEASE_TAG env var is missing'); const version = rawTag.replace(/^desktop-/, '').replace(/^v/, ''); console.log(`Using desktop version ${version} from tag ${rawTag}`); const tauriConfPath = path.join('packages', 'desktop', 'src-tauri', 'tauri.conf.json'); const tauriConfText = fs.readFileSync(tauriConfPath, 'utf8'); const tauriRe = /("version"\s*:\s*")([^"]+)(")/; if (!tauriRe.test(tauriConfText)) { throw new Error(`Failed to find version field in ${tauriConfPath}`); } fs.writeFileSync(tauriConfPath, tauriConfText.replace(tauriRe, `$1${version}$3`)); const cargoTomlPath = path.join('packages', 'desktop', 'src-tauri', 'Cargo.toml'); const cargoLines = fs.readFileSync(cargoTomlPath, 'utf8').split(/\r?\n/); let inPackage = false; let updated = false; const nextLines = cargoLines.map((line) => { if (/^\[package\]\s*$/.test(line)) inPackage = true; else if (inPackage && /^\[/.test(line)) inPackage = false; if (inPackage && /^version\s*=\s*".*"\s*$/.test(line)) { updated = true; return `version = "${version}"`; } return line; }); if (!updated) throw new Error(`Failed to update Cargo package version in ${cargoTomlPath}`); fs.writeFileSync(cargoTomlPath, `${nextLines.join('\n')}\n`); NODE - name: Build and publish Tauri release uses: tauri-apps/tauri-action@v0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: projectPath: packages/desktop tagName: ${{ env.RELEASE_TAG }} releaseName: Paseo Desktop ${{ env.RELEASE_TAG }} releaseBody: See the assets to download and install this version. releaseDraft: false prerelease: false args: --target aarch64-apple-darwin