[go: up one dir, main page]

untrusted 0.8.0

Safe, fast, zero-panic, zero-crashing, zero-allocation parsing of untrusted inputs in Rust.
Documentation
name: ci
permissions:
  contents: read
on:
  pull_request:
  push:
jobs:
  rustfmt:
    runs-on: ubuntu-18.04

    steps:
      - uses: briansmith/actions-rs-toolchain@v1
        with:
          toolchain: stable
          profile: minimal
          components: rustfmt
      - uses: briansmith/actions-checkout@v2
        with:
          persist-credentials: false
      - run: cargo fmt --all -- --check

  clippy:
    runs-on: ubuntu-18.04

    steps:
      - uses: briansmith/actions-rs-toolchain@v1
        with:
          toolchain: stable
          profile: minimal
          components: clippy

      - uses: briansmith/actions-checkout@v2
        with:
          persist-credentials: false

      - run: cargo clippy --all-features ---all-targets -- --deny warnings

  audit:
    runs-on: ubuntu-18.04

    steps:
      - uses: briansmith/actions-rs-toolchain@v1
        with:
          toolchain: stable
          profile: minimal

      - uses: briansmith/actions-cache@v2
        with:
          path: |
            ~/.cargo/bin/cargo-audit
            ~/.cargo/.crates.toml
            ~/.cargo/.crates2.json
          key: ${{ runner.os }}-v2-cargo-audit-0.13.1

      - run: cargo install cargo-audit --vers "0.13.1"

      - uses: briansmith/actions-checkout@v2
        with:
          persist-credentials: false

      - run: cargo generate-lockfile

      - run: cargo audit --deny warnings

  deny:
    runs-on: ubuntu-18.04

    steps:
      - uses: briansmith/actions-rs-toolchain@v1
        with:
          toolchain: stable
          profile: minimal

      - uses: briansmith/actions-cache@v2
        with:
          path: |
            ~/.cargo/bin/cargo-deny
            ~/.cargo/.crates.toml
            ~/.cargo/.crates2.json
          key: ${{ runner.os }}-v2-cargo-deny-0.8.4

      - run: cargo install cargo-deny --vers "0.8.4"

      - uses: briansmith/actions-checkout@v2
        with:
          persist-credentials: false

      - run: cargo deny check

  # Verify that documentation builds.
  rustdoc:
    runs-on: ubuntu-18.04

    strategy:
      matrix:
        rust_channel:
          - stable
          - beta
          - nightly

        include:
          - target: x86_64-unknown-linux-gnu

    steps:
      - uses: briansmith/actions-rs-toolchain@v1
        with:
          override: true
          target: ${{ matrix.target }}
          toolchain: ${{ matrix.rust_channel }}

      - uses: briansmith/actions-checkout@v2
        with:
          persist-credentials: false

      - run: |
          cargo doc --all-features

  test:
    runs-on: ${{ matrix.host_os }}

    strategy:
      matrix:
        features:
          - # Default

        target:
          - i686-unknown-linux-musl
          - x86_64-unknown-linux-gnu

        mode:
          - # debug
          - --release

        rust_channel:
          - stable
          - nightly
          - 1.49.0 # MSRV
          - beta

        include:
          - target: i686-unknown-linux-musl
            host_os: ubuntu-18.04

          - target: x86_64-unknown-linux-gnu
            host_os: ubuntu-18.04

    steps:
      - uses: briansmith/actions-checkout@v2
        with:
          persist-credentials: false

      - uses: briansmith/actions-rs-toolchain@v1
        with:
          override: true
          target: ${{ matrix.target }}
          toolchain: ${{ matrix.rust_channel }}

      - run: |
          cargo test -vv --target=${{ matrix.target }} ${{ matrix.cargo_options }} ${{ matrix.features }} ${{ matrix.mode }}

  coverage:
    runs-on: ${{ matrix.host_os }}

    strategy:
      matrix:
        features:
          - --all-features

        target:
          - x86_64-unknown-linux-musl

        mode:
          - # debug

        # Coverage collection is Nightly-only
        rust_channel:
          - nightly

        # TODO: targets
        include:
          - target: x86_64-unknown-linux-musl
            host_os: ubuntu-18.04

    steps:
      - if: ${{ contains(matrix.host_os, 'ubuntu') }}
        run: sudo apt-get update -y

      - uses: briansmith/actions-checkout@v2
        with:
          persist-credentials: false

      - if: ${{ !contains(matrix.host_os, 'windows') }}
        run: RING_COVERAGE=1 mk/install-build-tools.sh --target=${{ matrix.target }} ${{ matrix.features }}

      - uses: briansmith/actions-rs-toolchain@v1
        with:
          override: true
          target: ${{ matrix.target }}
          toolchain: ${{ matrix.rust_channel }}

      - if: ${{ matrix.target == 'aarch64-apple-darwin' }}
        run: echo "DEVELOPER_DIR=/Applications/Xcode_12.2.app/Contents/Developer" >> $GITHUB_ENV

      - if: ${{ !contains(matrix.host_os, 'windows') }}
        run: |
          RING_COVERAGE=1 mk/cargo.sh +${{ matrix.rust_channel }} test -vv --target=${{ matrix.target }} ${{ matrix.cargo_options }} ${{ matrix.features }} ${{ matrix.mode }}

      - uses: briansmith/codecov-codecov-action@v1
        with:
          directory: ./target/${{ matrix.target }}/debug/coverage/reports
          fail_ci_if_error: true
          verbose: true