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 }} build-arm: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup ARM build environment run: | rustup target add aarch64-unknown-linux-gnu sudo apt install gcc-aarch64-linux-gnu sudo dpkg --add-architecture arm64 . /etc/os-release echo "using Ubuntu with codename $VERSION_CODENAME" echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME main restricted" | sudo tee -a /etc/apt/sources.list echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME-updates main restricted" | sudo tee -a /etc/apt/sources.list echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME universe" | sudo tee -a /etc/apt/sources.list echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME-updates universe" | sudo tee -a /etc/apt/sources.list echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME multiverse" | sudo tee -a /etc/apt/sources.list echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME-updates multiverse" | sudo tee -a /etc/apt/sources.list echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME-backports main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME-security main restricted" | sudo tee -a /etc/apt/sources.list echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME-security universe" | sudo tee -a /etc/apt/sources.list echo "deb [arch=armhf,arm64] http://ports.ubuntu.com/ubuntu-ports $VERSION_CODENAME-security multiverse" | sudo tee -a /etc/apt/sources.list sudo apt update sudo apt upgrade -y sudo apt install libwebkit2gtk-4.0-dev:arm64 -y sudo apt install libssl-dev:arm64 -y export PKG_CONFIG_SYSROOT_DIR=/usr/aarch64-linux-gnu/ pnpm install pnpm rls --target aarch64-unknown-linux-gnu - name: Upload deb bundle uses: actions/upload-artifact@v4 with: name: ARM Debian File path: src-tauri/target/release/bundle/deb/*arm64.deb release: strategy: fail-fast: false matrix: platform: [macos-latest, ubuntu-latest, windows-latest] 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: Setup Rust run: | rustup update --no-self-update - 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 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_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} TAURI_KEY_PASSWORD: ${{ secrets.TAURI_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