# Automatically generated by fuzz/generate-files.sh name: Fuzz on: push: branches: - master - 'test-ci/**' pull_request: jobs: Prepare: runs-on: ubuntu-latest outputs: pr_changed_source: ${{ steps.classify_pr.outputs.pr_changed_source }} steps: - name: Checkout Crate uses: actions/checkout@v4 - name: Determine what files the PR changes. id: classify_pr run: contrib/classify-pr.sh ${{ github.event.pull_request.head.sha }} ${{ github.event.pull_request.base.sha }} fuzz: needs: Prepare if: ${{ !github.event.act }} && needs.Prepare.outputs.pr_changed_source == 'true' runs-on: ubuntu-latest strategy: fail-fast: false matrix: fuzz_target: [ bitcoin_deserialize_address, bitcoin_deserialize_block, bitcoin_deserialize_prefilled_transaction, bitcoin_deserialize_psbt, bitcoin_deserialize_script, bitcoin_deserialize_transaction, bitcoin_deserialize_witness, bitcoin_deser_net_msg, bitcoin_outpoint_string, bitcoin_script_bytes_to_asm_fmt, hashes_cbor, hashes_json, hashes_ripemd160, hashes_sha1, hashes_sha256, hashes_sha512_256, hashes_sha512, units_deserialize_amount, ] steps: - name: Install test dependencies run: sudo apt-get update -y && sudo apt-get install -y binutils-dev libunwind8-dev libcurl4-openssl-dev libelf-dev libdw-dev cmake gcc libiberty-dev - uses: actions/checkout@v4 - uses: actions/cache@v4 id: cache-fuzz with: path: | ~/.cargo/bin fuzz/target target key: cache-${{ matrix.target }}-${{ hashFiles('**/Cargo.toml','**/Cargo.lock') }} - uses: dtolnay/rust-toolchain@stable with: toolchain: '1.65.0' - name: fuzz run: | if [[ "${{ matrix.fuzz_target }}" =~ ^bitcoin ]]; then export RUSTFLAGS='--cfg=hashes_fuzz --cfg=secp256k1_fuzz' fi echo "Using RUSTFLAGS $RUSTFLAGS" cd fuzz && ./fuzz.sh "${{ matrix.fuzz_target }}" - run: echo "${{ matrix.fuzz_target }}" >executed_${{ matrix.fuzz_target }} - uses: actions/upload-artifact@v3 with: name: executed_${{ matrix.fuzz_target }} path: executed_${{ matrix.fuzz_target }} verify-execution: needs: Prepare if: ${{ !github.event.act }} && needs.Prepare.outputs.pr_changed_source == 'true' needs: fuzz runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/download-artifact@v3 - name: Display structure of downloaded files run: ls -R - run: find executed_* -type f -exec cat {} + | sort > executed - run: source ./fuzz/fuzz-util.sh && listTargetNames | sort | diff - executed