Skip to content

feat: add Windows and Linux builds to CI/CD pipeline #7

feat: add Windows and Linux builds to CI/CD pipeline

feat: add Windows and Linux builds to CI/CD pipeline #7

Workflow file for this run

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 }}