name: "CI"
on:
pull_request:
push:
branches:
- main
workflow_dispatch:
jobs:
check-release:
name: "🏷️ Check release tag"
runs-on: ubuntu-slim
outputs:
is_release: ${{ steps.check.outputs.is_release }}
steps:
- name: 🔄 Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with:
fetch-depth: 1
fetch-tags: true
persist-credentials: false
- name: 🏷️ Check for release
id: check
shell: bash
env:
EVENT_NAME: ${{ github.event_name }}
run: |
is_release=false
if [ "$EVENT_NAME" = "push" ]; then
# The tag does not exist yet when CI starts: release-please
# creates it after this same push, so fall back to matching
# the release-please commit message.
if git tag --points-at HEAD | grep -q -- '-v[0-9]'; then
is_release=true
elif git log -1 --pretty=%B | grep -qE '^chore(\(main\))?: release '; then
is_release=true
fi
fi
echo "is_release=$is_release" >> "$GITHUB_OUTPUT"
typos:
name: "📝 Check typos"
needs:
- check-release
if: always() && needs.check-release.outputs.is_release != 'true'
uses: hrzlgnm/actions/.github/workflows/typos-reusable.yml@c4634c8090f9c2941bbad01a692e2dd4fc91416c
fmt:
name: "📐 fmt"
needs:
- check-release
if: needs.check-release.outputs.is_release != 'true'
runs-on: ubuntu-latest
steps:
- name: 🔄 Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with:
fetch-depth: 1
persist-credentials: false
- name: 🦀 Setup Rust
uses: dtolnay/rust-toolchain@6bed0761d98439e5a578e2877258200ad565ba87 with:
components: rustfmt
- name: 📐 Run rustfmt and fail if any warnings
shell: bash
run: cargo fmt -- --check
clippy:
name: "📎 clippy"
needs:
- check-release
if: needs.check-release.outputs.is_release != 'true'
runs-on: ubuntu-latest
steps:
- name: 🔄 Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with:
fetch-depth: 1
persist-credentials: false
- name: 🦀 Setup Rust
uses: dtolnay/rust-toolchain@6bed0761d98439e5a578e2877258200ad565ba87 with:
components: clippy
- name: 🧰 Install Tauri system dependencies
shell: bash
run: sudo apt-get update && sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
- name: 📎 Run clippy and fail if any warnings
shell: bash
run: cargo clippy --all-targets -- -D warnings
test:
name: "✅ test"
needs:
- check-release
if: needs.check-release.outputs.is_release != 'true'
runs-on: ubuntu-latest
steps:
- name: 🔄 Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with:
fetch-depth: 1
persist-credentials: false
- name: 🦀 Setup Rust
uses: dtolnay/rust-toolchain@6bed0761d98439e5a578e2877258200ad565ba87
- name: 🧰 Install Tauri system dependencies
shell: bash
run: sudo apt-get update && sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
- name: 🛠️🚀
uses: ./.github/actions/setup-sccache
- name: ✅ Run tests
shell: bash
run: cargo test
js:
name: "🟢 js"
needs:
- check-release
if: needs.check-release.outputs.is_release != 'true'
permissions:
contents: read
runs-on: ubuntu-latest
steps:
- name: 🔄 Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 with:
fetch-depth: 1
persist-credentials: false
- name: 🟢 Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 with:
node-version: 24
cache: npm
cache-dependency-path: package-lock.json
- name: 📥 Install dependencies
shell: bash
run: npm ci
- name: 🏗️ Build bindings
shell: bash
run: npm run build
all-required-green: name: CI Status
runs-on: ubuntu-latest
needs:
- check-release
- fmt
- clippy
- test
- js
- typos
if: always()
steps:
- name: Check whether the needed jobs succeeded or failed
uses: re-actors/alls-green@a638d6464689bbb24c325bb3fe9404d63a913030
with:
allowed-skips: >-
typos,
fmt,
clippy,
test,
js
jobs: ${{ toJSON(needs) }}