tact 0.1.1

Terminal interface for Nanocodex
name: CI
on:
  push:
    branches: [main]
  merge_group:
  pull_request:

env:
  CARGO_TERM_COLOR: always

jobs:
  cargo-tests:
    runs-on: ${{ matrix.os }}
    name: Tests (${{ matrix.os }})
    timeout-minutes: 30
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest]
    steps:
      - name: Checkout sources
        uses: actions/checkout@v4
        with:
          submodules: recursive
      - name: Install Rust stable toolchain
        uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
        with:
          cache-on-failure: true
      - uses: taiki-e/install-action@just
      - uses: taiki-e/install-action@nextest
      - name: cargo test
        run: just test --locked

  cargo-build:
    runs-on: ubuntu-latest
    name: Build (${{ matrix.toolchain }})
    timeout-minutes: 20
    continue-on-error: ${{ matrix.toolchain != '1.97.0' }}
    strategy:
      fail-fast: false
      matrix:
        toolchain: ["1.97.0", stable, nightly]
    steps:
      - name: Checkout sources
        uses: actions/checkout@v4
        with:
          submodules: recursive
      - name: Install Rust ${{ matrix.toolchain }} toolchain
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.toolchain }}
      - uses: Swatinem/rust-cache@v2
        with:
          cache-on-failure: true
      - uses: taiki-e/install-action@just
      - name: build
        run: just build --locked --all-features

  cargo-lint:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    name: Clippy
    steps:
      - name: Checkout sources
        uses: actions/checkout@v4
        with:
          submodules: recursive
      - uses: taiki-e/install-action@just
      - name: Install Rust stable Clippy toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy
      - name: Install Rust nightly formatting toolchain
        uses: dtolnay/rust-toolchain@nightly
        with:
          components: rustfmt
      - uses: Swatinem/rust-cache@v2
        with:
          cache-on-failure: true
      - name: fmt + lint
        run: just lint

  cargo-doc:
    runs-on: ubuntu-latest
    name: Docs (lint + test)
    timeout-minutes: 20
    steps:
      - name: Checkout sources
        uses: actions/checkout@v4
        with:
          submodules: recursive
      - uses: taiki-e/install-action@just
      - name: Install Rust stable toolchain
        uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
        with:
          cache-on-failure: true
      - name: doclint
        run: just check-docs
      - name: doctest
        run: just test-docs

  cargo-build-benches:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    name: Build Benchmarks
    continue-on-error: true
    steps:
      - name: Checkout sources
        uses: actions/checkout@v4
        with:
          submodules: recursive
      - uses: taiki-e/install-action@just
      - name: Install Rust stable toolchain
        uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
        with:
          cache-on-failure: true
      - name: build benches
        run: cargo bench --no-run --all