name: Build
permissions:
  contents: write
on:
  push:
    branches: ["main"]
  pull_request:
env:
  # For setup-rust
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
jobs:
  format:
    name: Format
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: moonrepo/setup-rust@v1
        with:
          components: rustfmt
      - name: Check formatting
        run: cargo fmt --all --check
  lint:
    name: Lint
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os:
          - ubuntu-latest
      fail-fast: false
    steps:
      - uses: actions/checkout@v4
      - uses: moonrepo/setup-rust@v1
        with:
          bins: cargo-make
          components: clippy
      - name: Run linter
        run: cargo make lint
  test:
    name: Test
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os:
          - ubuntu-latest
          - macos-latest
      fail-fast: false
    steps:
      - uses: actions/checkout@v4
      - uses: moonrepo/setup-rust@v1
        with:
          bins: cargo-make, cargo-nextest
      - name: Run tests
        run: cargo make ci-test
