cargo_metadata 0.23.1

structured access to the output of `cargo metadata`
Documentation
name: CI
on: [push, pull_request]

jobs:
  rustfmt:
    name: rustfmt
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Install rust
      run: rustup update --no-self-update stable && rustup default stable && rustup component add rustfmt --toolchain stable
    - name: Check formatting
      run: cargo fmt -- --check

  clippy:
    name: clippy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install rust
        run: rustup update --no-self-update stable && rustup default stable && rustup component add clippy --toolchain stable
      - name: Clippy check
        run: cargo clippy --all-features -- -Dwarnings

  test:
    name: Test
    runs-on: ubuntu-latest
    strategy:
      matrix:
        include:
          - rust: stable
          - rust: beta
          - rust: nightly
          - rust: 1.86.0
    steps:
    - uses: actions/checkout@v2
    - name: Install rust
      run: rustup update --no-self-update ${{ matrix.rust }} && rustup default ${{ matrix.rust }}
    - name: Run tests
      run: |
        cargo build --verbose
        cargo build --verbose --no-default-features
        cargo test --verbose
        cargo test --verbose --no-default-features

        # Test with all features. But do not use the `unstable` feature on non-nightly toolchains
        if [ "${{ matrix.rust }}" = "nightly" ]; then
          cargo test --verbose --all-features
        else
          ALL_FEATURES_EXCEPT_UNSTABLE=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[0].features | keys | .[]' | grep -v 'unstable' | tr '\n' ' ')
          cargo test --features "$ALL_FEATURES_EXCEPT_UNSTABLE"
        fi