name: CI on: pull_request: branches: - 'master' push: branches-ignore: - 'release-plz-**' - 'gh-readonly-queue/**' workflow_dispatch: merge_group: types: [checks_requested] env: RUSTFLAGS: -Dwarnings jobs: build_and_test: if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name strategy: matrix: os: [ubuntu-latest, macOS-latest, windows-latest] rustalias: [stable, nightly, msrv] include: - rustalias: stable rust: stable - rustalias: msrv rust: '1.70' - rustalias: nightly rust: nightly name: 'Build and test: ${{ matrix.os }}, ${{ matrix.rustalias }}' runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@master - name: Install Rust uses: actions-rs/toolchain@v1 with: toolchain: ${{ matrix.rust }} override: true - name: Check uses: actions-rs/cargo@v1 with: command: check args: --all --bins --examples - name: Tests uses: actions-rs/cargo@v1 with: command: test args: --all - name: Tests (no features) uses: actions-rs/cargo@v1 with: command: test args: --all --no-default-features style_and_docs: if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: nightly override: true components: rustfmt, clippy - name: fmt run: cargo fmt --all -- --check - name: clippy uses: actions-rs/cargo@v1 with: command: clippy args: --all-targets --all-features -- -D warnings - name: Docs run: cargo doc --no-deps fuzz_read: runs-on: ubuntu-latest needs: - build_and_test - style_and_docs steps: - uses: actions/checkout@v4 - uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: nightly override: true - uses: actions-rs/cargo@v1 with: command: install args: cargo-fuzz - name: compile fuzz uses: actions-rs/cargo@v1 with: command: fuzz args: build --all-features fuzz_read - name: run fuzz timeout-minutes: 331 uses: actions-rs/cargo@v1 with: command: fuzz args: run --all-features fuzz_read -- fuzz/corpus/seed -timeout=10s -fork=2 -runs=25000000 -max_len=1300 -len_control=0 -dict=fuzz/fuzz.dict - name: Upload any failure inputs if: always() uses: actions/upload-artifact@v4 with: name: fuzz_read_bad_inputs path: fuzz/artifacts/fuzz_read/crash-* if-no-files-found: ignore - name: Minimize seed corpus if: always() uses: actions-rs/cargo@v1 with: command: fuzz args: cmin --all-features fuzz_read fuzz/corpus/seed -- fuzz/corpus/new_seed - name: Upload updated seed corpus if: always() uses: actions/upload-artifact@v4 with: name: fuzz_read_corpus path: fuzz/corpus/new_seed/* fuzz_read_with_no_features: runs-on: ubuntu-latest needs: - build_and_test - style_and_docs steps: - uses: actions/checkout@v4 - uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: nightly override: true - uses: actions-rs/cargo@v1 with: command: install args: cargo-fuzz - name: compile fuzz uses: actions-rs/cargo@v1 with: command: fuzz args: build --no-default-features fuzz_read - name: run fuzz timeout-minutes: 331 uses: actions-rs/cargo@v1 with: command: fuzz args: run --no-default-features fuzz_read -- fuzz/corpus/seed -timeout=10s -fork=2 -runs=40000000 -max_total_time=19800 -max_len=16384 -len_control=0 -dict=fuzz/fuzz.dict - name: Upload any failure inputs if: always() uses: actions/upload-artifact@v4 with: name: fuzz_read_no_features_bad_inputs path: fuzz/artifacts/fuzz_read/crash-* if-no-files-found: ignore - name: Minimize seed corpus if: always() uses: actions-rs/cargo@v1 with: command: fuzz args: cmin --no-default-features fuzz_read fuzz/corpus/seed -- fuzz/corpus/new_seed - name: Upload updated seed corpus if: always() uses: actions/upload-artifact@v4 with: name: fuzz_read_no_features_corpus path: fuzz/corpus/new_seed/* fuzz_write: runs-on: ubuntu-latest needs: - build_and_test - style_and_docs steps: - uses: actions/checkout@v4 - uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: nightly override: true - uses: actions-rs/cargo@v1 with: command: install args: cargo-fuzz - name: compile fuzz uses: actions-rs/cargo@v1 with: command: fuzz args: build --all-features fuzz_write - name: run fuzz timeout-minutes: 331 uses: actions-rs/cargo@v1 with: command: fuzz args: run --all-features fuzz_write -- -timeout=10s -fork=2 -runs=2500000 -max_len=1100 -len_control=200 -dict=fuzz/fuzz.dict - name: Upload any failure inputs if: always() uses: actions/upload-artifact@v4 with: name: fuzz_write_bad_inputs path: fuzz/artifacts/fuzz_write/crash-* if-no-files-found: ignore - name: Minimize seed corpus if: always() uses: actions-rs/cargo@v1 with: command: fuzz args: cmin --all-features fuzz_write fuzz/corpus/fuzz_write -- fuzz/corpus/new_seed - name: Upload updated seed corpus if: always() uses: actions/upload-artifact@v4 with: name: fuzz_write_corpus path: fuzz/corpus/new_seed/* fuzz_write_with_no_features: runs-on: ubuntu-latest needs: - build_and_test - style_and_docs steps: - uses: actions/checkout@v4 - uses: actions-rs/toolchain@v1 with: profile: minimal toolchain: nightly override: true - uses: actions-rs/cargo@v1 with: command: install args: cargo-fuzz - name: compile fuzz uses: actions-rs/cargo@v1 with: command: fuzz args: build --no-default-features fuzz_write - name: run fuzz timeout-minutes: 331 uses: actions-rs/cargo@v1 with: command: fuzz args: run --no-default-features fuzz_write -- -timeout=10s -fork=2 -runs=20000000 -max_len=10000 -len_control=200 -dict=fuzz/fuzz.dict - name: Upload any failure inputs if: always() uses: actions/upload-artifact@v4 with: name: fuzz_write_no_features_bad_inputs path: fuzz/artifacts/fuzz_write/crash-* if-no-files-found: ignore - name: Minimize seed corpus if: always() uses: actions-rs/cargo@v1 with: command: fuzz args: cmin --no-default-features fuzz_write fuzz/corpus/fuzz_write -- fuzz/corpus/new_seed - name: Upload updated seed corpus if: always() uses: actions/upload-artifact@v4 with: name: fuzz_write_no_features_corpus path: fuzz/corpus/new_seed/*