feat: add Windows and Linux builds to CI/CD pipeline #7
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release & Build | |
| on: | |
| push: | |
| branches: [main] | |
| workflow_dispatch: | |
| jobs: | |
| semantic-release: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| issues: write | |
| pull-requests: write | |
| outputs: | |
| new-release-published: ${{ steps.semantic.outputs.new_release_published }} | |
| new-release-version: ${{ steps.semantic.outputs.new_release_version }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| - run: npm ci | |
| - name: Semantic Release | |
| id: semantic | |
| uses: cycjimmy/semantic-release-action@v4 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Release Debug Info | |
| run: | | |
| echo "Release published: ${{ steps.semantic.outputs.new_release_published }}" | |
| echo "Version: ${{ steps.semantic.outputs.new_release_version }}" | |
| build-macos: | |
| needs: semantic-release | |
| if: needs.semantic-release.outputs.new-release-published == 'true' | |
| runs-on: macos-14 | |
| timeout-minutes: 60 | |
| permissions: | |
| contents: write | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - target: aarch64-apple-darwin | |
| label: apple-silicon | |
| - target: x86_64-apple-darwin | |
| label: intel | |
| steps: | |
| - name: Starting Build - ${{ matrix.label }} | |
| run: | | |
| echo "Target: ${{ matrix.target }}" | |
| echo "Version: ${{ needs.semantic-release.outputs.new-release-version }}" | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Setup Environment | |
| run: | | |
| VERSION="${{ needs.semantic-release.outputs.new-release-version }}" | |
| echo "Syncing version: $VERSION" | |
| git pull origin main || true | |
| sed -i '' "s/\"version\": \".*\"/\"version\": \"$VERSION\"/" src-tauri/tauri.conf.json | |
| node scripts/bump-version.js "$VERSION" | |
| echo "Version synchronized" | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: npm | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: ${{ matrix.target }} | |
| - name: Rust Cache | |
| uses: swatinem/rust-cache@v2 | |
| with: | |
| workspaces: src-tauri -> target | |
| cache-on-failure: true | |
| - name: Install Dependencies | |
| run: | | |
| npm ci | |
| echo "Node: $(node --version)" | |
| echo "Rust: $(rustc --version)" | |
| - name: Build Frontend | |
| run: | | |
| npm run build | |
| echo "Frontend built: $(du -sh dist/)" | |
| - name: Build Tauri App | |
| uses: tauri-apps/tauri-action@v0 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| tagName: v${{ needs.semantic-release.outputs.new-release-version }} | |
| releaseName: Clif v${{ needs.semantic-release.outputs.new-release-version }} | |
| releaseBody: "See the assets to download and install Clif." | |
| releaseDraft: false | |
| prerelease: false | |
| args: --target ${{ matrix.target }} | |
| - name: Generate Checksums | |
| run: | | |
| cd src-tauri/target/${{ matrix.target }}/release/bundle | |
| find . -name "*.dmg" -o -name "*.tar.gz" -o -name "*.zip" | while read f; do | |
| shasum -a 256 "$f" > "$f.sha256" | |
| echo "Checksum: $(cat "$f.sha256")" | |
| done | |
| - name: Upload Checksums | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: v${{ needs.semantic-release.outputs.new-release-version }} | |
| files: src-tauri/target/${{ matrix.target }}/release/bundle/**/*.sha256 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| build-windows: | |
| needs: semantic-release | |
| if: needs.semantic-release.outputs.new-release-published == 'true' | |
| runs-on: windows-latest | |
| timeout-minutes: 60 | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Starting Windows Build | |
| run: | | |
| echo "Version: ${{ needs.semantic-release.outputs.new-release-version }}" | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Setup Environment | |
| run: | | |
| $VERSION = "${{ needs.semantic-release.outputs.new-release-version }}" | |
| echo "Syncing version: $VERSION" | |
| git pull origin main | |
| node scripts/bump-version.js "$VERSION" | |
| echo "Version synchronized" | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: npm | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Rust Cache | |
| uses: swatinem/rust-cache@v2 | |
| with: | |
| workspaces: src-tauri -> target | |
| cache-on-failure: true | |
| - name: Install Dependencies | |
| run: npm ci | |
| - name: Build Frontend | |
| run: npm run build | |
| - name: Build Tauri App | |
| uses: tauri-apps/tauri-action@v0 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| tagName: v${{ needs.semantic-release.outputs.new-release-version }} | |
| releaseName: Clif v${{ needs.semantic-release.outputs.new-release-version }} | |
| releaseBody: "See the assets to download and install Clif." | |
| releaseDraft: false | |
| prerelease: false | |
| - name: Generate Checksums | |
| shell: bash | |
| run: | | |
| cd src-tauri/target/release/bundle | |
| find . -name "*.msi" -o -name "*.exe" -o -name "*.zip" | while read f; do | |
| sha256sum "$f" > "$f.sha256" | |
| echo "Checksum: $(cat "$f.sha256")" | |
| done | |
| - name: Upload Checksums | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: v${{ needs.semantic-release.outputs.new-release-version }} | |
| files: src-tauri/target/release/bundle/**/*.sha256 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| build-linux: | |
| needs: semantic-release | |
| if: needs.semantic-release.outputs.new-release-published == 'true' | |
| runs-on: ubuntu-22.04 | |
| timeout-minutes: 60 | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Starting Linux Build | |
| run: | | |
| echo "Version: ${{ needs.semantic-release.outputs.new-release-version }}" | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Install Linux Dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| libwebkit2gtk-4.1-dev \ | |
| libappindicator3-dev \ | |
| librsvg2-dev \ | |
| patchelf \ | |
| libgtk-3-dev \ | |
| libsoup-3.0-dev \ | |
| libjavascriptcoregtk-4.1-dev | |
| - name: Setup Environment | |
| run: | | |
| VERSION="${{ needs.semantic-release.outputs.new-release-version }}" | |
| echo "Syncing version: $VERSION" | |
| git pull origin main || true | |
| node scripts/bump-version.js "$VERSION" | |
| echo "Version synchronized" | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: npm | |
| - name: Setup Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Rust Cache | |
| uses: swatinem/rust-cache@v2 | |
| with: | |
| workspaces: src-tauri -> target | |
| cache-on-failure: true | |
| - name: Install Dependencies | |
| run: npm ci | |
| - name: Build Frontend | |
| run: npm run build | |
| - name: Build Tauri App | |
| uses: tauri-apps/tauri-action@v0 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| tagName: v${{ needs.semantic-release.outputs.new-release-version }} | |
| releaseName: Clif v${{ needs.semantic-release.outputs.new-release-version }} | |
| releaseBody: "See the assets to download and install Clif." | |
| releaseDraft: false | |
| prerelease: false | |
| - name: Generate Checksums | |
| run: | | |
| cd src-tauri/target/release/bundle | |
| find . -name "*.deb" -o -name "*.rpm" -o -name "*.AppImage" -o -name "*.tar.gz" | while read f; do | |
| sha256sum "$f" > "$f.sha256" | |
| echo "Checksum: $(cat "$f.sha256")" | |
| done | |
| - name: Upload Checksums | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: v${{ needs.semantic-release.outputs.new-release-version }} | |
| files: src-tauri/target/release/bundle/**/*.sha256 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |