docker-compose-runner 0.4.0

A small helper for running `docker-compose.yaml` files
Documentation
name: Build and Test

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

# Cancel already running jobs
concurrency:
  group: build_and_test_${{ github.head_ref }}
  cancel-in-progress: true

env:
  CARGO_TERM_COLOR: always
  RUST_BACKTRACE: 1

jobs:
  build_and_test:
    strategy:
      matrix:
        include:
          - name: Ubuntu amd64 - Release
            runner: ubuntu-24.04
            cargo_flags: --release

          - name: Ubuntu amd64 - Debug
            runner: ubuntu-24.04
            cargo_flags:

    name: ${{ matrix.name }}
    runs-on: ${{ matrix.runner }}
    steps:
    - uses: actions/checkout@v3
    - uses: Swatinem/rust-cache@v2
      with:
        # rust-cache already handles all the sane defaults for caching rust builds.
        # However because we are running seperate debug/release builds in parallel,
        # we also need to add the runner and cargo_flags to the key so that a seperate cache is used.
        # Otherwise only the last build to finish would get saved to the cache.
        # We allow different test_flags to share a cache as they should have identical build outputs
        key: ${{ matrix.runner }} - ${{ matrix.cargo_flags }}
    - name: Install cargo-hack
      run: cargo install cargo-hack --version 0.5.8
    - name: Check `cargo fmt` was run
      run: cargo fmt --all -- --check
    - name: Ensure that all crates compile and have no warnings under every possible combination of features
      # some things to explicitly point out:
      # * clippy also reports rustc warnings and errors
      # * clippy --all-targets causes clippy to run against tests and examples which it doesnt do by default.
      run: cargo hack --feature-powerset clippy --all-targets --locked ${{ matrix.cargo_flags }} -- -D warnings
    - name: Ensure that tests pass
      run: cargo test ${{ matrix.cargo_flags }} --all-features -- --include-ignored --show-output --nocapture
    - name: Ensure that tests did not create or modify any files that arent .gitignore'd
      run: |
        if [ -n "$(git status --porcelain)" ]; then
          git status
          exit 1
        fi