name: CI on: push: branches: [main] pull_request: workflow_dispatch: permissions: contents: read # A newer push to a PR branch cancels its older run. Runs on main are never cancelled, so every # main state that gets a run is checked to the end. concurrency: group: ci-${{ github.ref }} cancel-in-progress: ${{ github.event_name == 'pull_request' }} jobs: # fmt, clippy, tests and the wasm check (`cargo xtask ci`) through the suite's shared gate. No # macOS on PRs or main: the org's 5 macOS slots are kept for release builds, and release.yml # builds and checks macOS. test: # Tracks @main so suite-wide CI fixes reach every app without a PR in each repository. uses: storytold/craft-common-actions/.github/workflows/gate.yml@main with: os: '["ubuntu-24.04","windows-latest"]' # The launcher bundles its own fonts (assets/fonts/) and builds nothing from craft-fonts. craft-fonts-ref: "" # `cargo xtask ci` and the Windows command run cargo test, not nextest. tools: "" # egui/winit/wgpu headers. The tray (ksni) and notifications (notify-rust over zbus) are # pure-Rust D-Bus clients, so no GTK, appindicator, xdo or libdbus packages are needed. packages: libxkbcommon-dev libwayland-dev libx11-dev libxrandr-dev libxi-dev libgl1-mesa-dev # Windows checks what differs by platform: clippy and the tests. windows-command: | cargo clippy --workspace --all-targets --locked -- -D warnings cargo test --workspace --locked # The browser build, as the release makes it (size gate and relative-URL check included), and # clippy for wasm32. Its own cache: another target and the wasm-release profile. web: # Tracks @main so suite-wide CI fixes reach every app without a PR in each repository. uses: storytold/craft-common-actions/.github/workflows/gate.yml@main with: cache-version: v1-web craft-fonts-ref: "" tools: trunk@0.21.14 command: | cargo clippy -p artcraft-launcher-core -p artcraft-launcher-web --target wasm32-unknown-unknown --locked -- -D warnings packaging/web/package.sh