name: Run tests

on:
  push:
    branches:
      - master
      - main
      - staging
      - trying
      - release/**
  pull_request:
  merge_group:

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref_name }}
  cancel-in-progress: true

env:
  CARGO_TERM_COLOR: always

jobs:
  robust:
    name: robust
    runs-on: ubuntu-latest
    if: "!contains(github.event.head_commit.message, '[skip ci]')"
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
      - run: cargo install cargo-all-features
      - run: cargo build-all-features --verbose --examples
      - run: cargo test-all-features

  check:
    name: robust Rustfmt and Clippy check
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
      - name: Install stable toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy, rustfmt
      - name: Check formatting using Rustfmt
        run: cargo fmt --check
      - name: Lint using Clippy
        run: cargo clippy --tests

  all_checks_complete:
    needs:
      - robust
      - check
    if: always()
    runs-on: ubuntu-latest
    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) }}
