name: Fuzz

on:
  workflow_dispatch:

jobs:
  fuzz:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v1

      - name: Set up Rust
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          profile: minimal
          default: true

      - name: Run prebuild steps
        shell: bash
        run: bash ./prebuild.sh

      - name: Build fuzz target
        working-directory: ./fuzz
        run: |
          cargo install afl
          cargo afl build

      - name: Run fuzz
        working-directory: ./fuzz
        run: |
          echo core | sudo tee /proc/sys/kernel/core_pattern
          # Hide verbose stdout (not stderr) logging.
          timeout 5h cargo afl fuzz -i in -o out target/debug/minify-html-fuzz-target > /dev/null || true
          find ./out/crashes -type f | wc -l

      - name: Set up Backblaze B2 CLI
        uses: wilsonzlin/setup-b2@v3

      - name: Upload log and output files
        working-directory: ./fuzz
        run: |
          if [ -d ./out/crashes ]; then
            b2 authorize-account ${{ secrets.CICD_CLI_B2_KEY_ID }} ${{ secrets.CICD_CLI_B2_APPLICATION_KEY }}
            b2 sync --allowEmptySource ./out/crashes/ b2://${{ secrets.CICD_CLI_B2_BUCKET_NAME }}/minify-html/fuzz/$(git rev-parse --short HEAD)/crashes/
          fi
