sccmod 0.6.4

A mediocre module manager for handling multiple versions of self-compiled modules
Documentation
on:
  push:
    branches:
      - "**"
  pull_request:
  merge_group:
  workflow_dispatch:
  workflow_call:

name: Continuous integration

env:
  CARGO_TERM_COLOR: always
  FEATURES: ""

jobs:
  clippy:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        rust:
          - nightly
    name: clippy/${{ matrix.rust }}
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust }}
          components: clippy
      - uses: Swatinem/rust-cache@v2
      - run: cargo clippy

  format:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        rust:
          - nightly
    name: format/${{ matrix.rust }}
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust }}
          components: rustfmt
      - run: cargo fmt --all --check

  tests:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os:
          - macos-latest
          - windows-latest
          - ubuntu-latest

        rust:
          - nightly

    name: tests/${{ matrix.os }}/${{ matrix.rust }}
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust }}
      - uses: Swatinem/rust-cache@v2
      - run: ./scripts/test-all.sh "$FEATURES" ${{ matrix.rust }}

  docs:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        rust:
          - nightly
    name: docs/${{ matrix.rust }}
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust }}
      - run: cargo doc

  dry_publish:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        rust:
          - nightly
    name: dry_publish/${{ matrix.rust }}
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.rust }}
      - run: cargo publish --dry-run

  conclusion:
    needs:
      - clippy
      - format
      - tests
      - docs
      - dry_publish
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        rust:
          - nightly
    steps:
      - name: Result
        run: |
          jq -C <<< "${needs}"
          # Check if all needs were successful or skipped.
          "$(jq -r 'all(.result as $result | (["success", "skipped"] | contains([$result])))' <<< "${needs}")"
        env:
          needs: ${{ toJson(needs) }}