name: ci

on:
  pull_request:
    branches: [main]
  push:
    branches: [main]
    tags:
      - "*"
  workflow_dispatch:

jobs:
  rust:
    runs-on: ubuntu-latest
    timeout-minutes: 30

    env:
      CARGO_INCREMENTAL: 0
      GH_ACTIONS: 1
      RUST_BACKTRACE: full
      RUSTFLAGS: -D warnings

    steps:
      - name: Clone repository
        uses: actions/checkout@v4

      - uses: dsherret/rust-toolchain-file@v1

      - uses: Swatinem/rust-cache@v2
        with:
          save-if: ${{ github.ref == 'refs/heads/main' }}

      - name: Format
        uses: dprint/check@v2.2

      - name: Lint
        run: cargo clippy --all-targets --all-features

      - name: Test
        run: cargo test --all-targets --all-features

      - name: Publish
        if: |
          github.repository == 'dsherret/capacity_builder' &&
          startsWith(github.ref, 'refs/tags/')
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
        run: |
          cargo publish

  miri:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - run: rustup install nightly
      - run: rustup component add --toolchain nightly-x86_64-unknown-linux-gnu miri
      - name: Tests (miri)
        run: cargo +nightly miri test
