{
  "name": "CI",
  "on": {
    "push": {
      "branches": [
        "trunk",
        "v*.x"
      ]
    },
    "pull_request": {
      "branches": [
        "trunk",
        "v*.x"
      ]
    }
  },
  "jobs": {
    "check": {
      "name": "Check",
      "runs-on": "ubuntu-latest",
      "strategy": {
        "fail-fast": false,
        "matrix": {
          "rust": [
            "stable",
            "beta",
            "nightly",
            "1.18.0"
          ]
        }
      },
      "steps": [
        {
          "uses": "actions/checkout@v2",
          "name": "Checkout"
        },
        {
          "uses": "actions-rs/toolchain@v1",
          "with": {
            "profile": "minimal",
            "toolchain": "${{ matrix.rust }}",
            "override": true
          },
          "name": "Install Rust ${{ matrix.rust }}"
        },
        {
          "uses": "actions-rs/cargo@v1",
          "with": {
            "command": "check"
          },
          "name": "Run `cargo check`"
        },
        {
          "uses": "actions-rs/cargo@v1",
          "with": {
            "command": "check",
            "args": "--examples"
          },
          "name": "Check examples",
          "if": "matrix.rust != '1.18.0'"
        }
      ]
    },
    "test": {
      "name": "Test",
      "runs-on": "ubuntu-latest",
      "strategy": {
        "matrix": {
          "rust": [
            "stable",
            "beta",
            "nightly"
          ]
        }
      },
      "steps": [
        {
          "uses": "actions/checkout@v2",
          "name": "Checkout"
        },
        {
          "uses": "actions-rs/toolchain@v1",
          "with": {
            "profile": "minimal",
            "toolchain": "${{ matrix.rust }}",
            "override": true
          },
          "name": "Install Rust ${{ matrix.rust }}"
        },
        {
          "uses": "actions-rs/cargo@v1",
          "with": {
            "command": "test"
          },
          "name": "Run `cargo test`"
        }
      ]
    },
    "lints": {
      "name": "Lints",
      "runs-on": "ubuntu-latest",
      "steps": [
        {
          "uses": "actions/checkout@v2",
          "name": "Checkout"
        },
        {
          "uses": "actions-rs/toolchain@v1",
          "with": {
            "profile": "minimal",
            "toolchain": "stable",
            "override": true,
            "components": "rustfmt, clippy"
          },
          "name": "Install Rust stable"
        },
        {
          "uses": "actions-rs/cargo@v1",
          "with": {
            "command": "fmt",
            "args": "--all -- --check"
          },
          "name": "Run `cargo fmt`"
        },
        {
          "uses": "actions-rs/cargo@v1",
          "with": {
            "command": "clippy",
            "args": "-- -D warnings"
          },
          "name": "Run `cargo clippy`"
        }
      ]
    },
    "coverage": {
      "name": "Code Coverage",
      "runs-on": "ubuntu-latest",
      "steps": [
        {
          "uses": "actions/checkout@v2",
          "name": "Checkout"
        },
        {
          "uses": "actions-rs/toolchain@v1",
          "with": {
            "profile": "minimal",
            "toolchain": "nightly",
            "override": true
          },
          "name": "Install Rust nightly"
        },
        {
          "name": "Run cargo-tarpaulin",
          "uses": "actions-rs/tarpaulin@v0.1",
          "with": {
            "version": "0.12.3",
            "args": "--ignore-tests -- --test-threads 1"
          }
        },
        {
          "name": "Upload to codecov.io",
          "uses": "codecov/codecov-action@v1"
        },
        {
          "name": "Archive code coverage results",
          "uses": "actions/upload-artifact@v1",
          "with": {
            "name": "code-coverage-report",
            "path": "cobertura.xml"
          }
        }
      ]
    }
  }
}
