name: Publish Release on: push: tags: - 'v*' branches: '*' workflow_dispatch: env: APP_NAME: "Sample Desktop App" jobs: changelog: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Build changelog id: build_changelog run: | # NOTE: if commits subjects are standardized, you can filter the git log based on feat: and fix: # and then replace "feat:" with "New: " and "fix:" with "Fixed " # when AI gets good, we can also summarized commits into a bullet point list PREV_TAG=$(git tag --list v* | tail -n2 | head -n1) echo "changelog=$(git log $PREV_TAG...${{ github.ref_name }} --pretty=format:"- %s")" >> $GITHUB_OUTPUT outputs: changelog: ${{ steps.build_changelog.outputs.changelog }} release: strategy: fail-fast: false matrix: include: - platform: 'macos-latest' # for Arm based macs (M1 and above). args: '--target aarch64-apple-darwin' - platform: 'macos-latest' # for Intel based macs. args: '--target x86_64-apple-darwin' - platform: 'ubuntu-latest' args: '' - platform: 'windows-latest' args: '' runs-on: ${{ matrix.platform }} needs: [changelog] steps: - name: Checkout repository uses: actions/checkout@v4 # build the changelog based on the commit messages between the versioned tags - name: Install pnpm uses: pnpm/action-setup@v4 with: version: 9 - name: Setup Node.js uses: actions/setup-node@v4 # NOTE: enterprise developers may hard code a version with: node-version: 'lts/*' cache: pnpm # node-version-file: '.nvmrc' - name: Install Rust stable uses: dtolnay/rust-toolchain@stable # Set this to dtolnay/rust-toolchain@nightly with: # Those targets are only used on macos runners so it's in an `if` to slightly speed up windows and linux builds. targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }} - name: Rust cache uses: swatinem/rust-cache@v2 with: workspaces: './src-tauri -> target' - name: Install Ubuntu dependencies if: matrix.platform == 'ubuntu-latest' run: | sudo apt update xargs sudo apt install -y < environment/apt_packages.txt - name: Install frontend dependencies run: | pnpm install - name: CI Build if: ${{ github.ref_type == 'branch' }} run: | pnpm rls - name: CI upload Windows if: ${{ github.ref_type == 'branch' && matrix.platform == 'windows-latest' }} uses: actions/upload-artifact@v4 with: name: 'Windows Installers' path: | src-tauri/release/bundle/msi/*.msi src-tauri/release/bundle/nsis/*.exe - name: CI upload macOS if: ${{ github.ref_type == 'branch' && matrix.platform == 'macos-latest' }} uses: actions/upload-artifact@v4 with: name: 'macOS Installer' path: | src-tauri/release/bundle/dmg/*.dmg - name: CI upload Linux if: ${{ github.ref_type == 'branch' && matrix.platform == 'ubuntu-latest' }} uses: actions/upload-artifact@v4 with: name: 'Linux Distributions' path: | src-tauri/target/release/bundle/deb/*.deb src-tauri/target/release/bundle/AppImage/*.AppImage # TODO: https://tauri.app/v1/guides/building/linux#cross-compiling-tauri-applications-for-arm-based-devices - name: Build Tauri app uses: tauri-apps/tauri-action@v0 if: ${{ github.ref_type == 'tag' }} # if u get Error: Resource not accessible by integration # go to repository Settings => Action => General => Workflow permissions => Switch to Read and Write permisions env: CI: true 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: # tauri-action replaces \_\_VERSION\_\_ with the app version tagName: ${{ github.ref_name }} releaseName: "${{ env.APP_NAME }} v__VERSION__" releaseBody: | ${{needs.changelog.outputs.changelog}} See the assets to download this version and install. releaseDraft: true prerelease: false args: ${{ matrix.args }}