waterui-cli 0.3.1

Cross-platform tooling for WaterUI applications
Documentation
name: CI

permissions:
  contents: read

on:
  push:
    branches: [dev, main]
  pull_request:
    branches: ["**"]

concurrency:
  group: ci-${{ github.ref }}
  cancel-in-progress: true

env:
  CARGO_TERM_COLOR: always
  # Incremental artifacts are per-machine rebuild state, useless to a fresh
  # runner, so they stay disabled rather than bloating the restored cache.
  CARGO_INCREMENTAL: 0

jobs:
  test:
    name: Test / ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
    steps:
      - uses: actions/checkout@v4
      - uses: ./.github/actions/setup-rust
      - uses: ./.github/actions/setup-linux-deps
        if: runner.os == 'Linux'
      - uses: taiki-e/install-action@nextest
      # `tests/doctor_json.rs` is the `water doctor --json` smoke; nextest
      # runs it with everything else.
      - run: cargo nextest run --locked --profile ci

  lint:
    name: Lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: ./.github/actions/setup-rust
        with:
          components: clippy, rustfmt
      - uses: ./.github/actions/setup-linux-deps
      - run: cargo fmt --check
      - run: cargo clippy --all-targets -- -D warnings

  no-default-features:
    name: Check / no default features
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: ./.github/actions/setup-rust
      - run: cargo check --no-default-features --all-targets

  msrv:
    name: MSRV
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Read rust-version from Cargo.toml
        id: msrv
        shell: bash
        run: |
          set -euo pipefail
          version="$(sed -n 's/^rust-version = "\(.*\)"/\1/p' Cargo.toml)"
          if [ -z "$version" ]; then
            echo "::error::Cargo.toml declares no rust-version"
            exit 1
          fi
          echo "version=$version" >> "$GITHUB_OUTPUT"
      - uses: ./.github/actions/setup-rust
        with:
          toolchain: ${{ steps.msrv.outputs.version }}
          cache: "false"
      - uses: ./.github/actions/setup-linux-deps
      # The shipped artifact is what MSRV bounds: dev-dependencies may
      # legitimately require newer, so check the package targets only.
      - run: cargo check --locked