# Runs fuzzing nightly. name: Fuzz Tests on: workflow_dispatch: # allow running workflow manually schedule: - cron: '0 3 * * *' pull_request: branches: [main] paths: - "test/fuzz/**/*.go" jobs: fuzz-nightly-test: runs-on: ubuntu-latest steps: - uses: actions/setup-go@v3 with: go-version: '1.18' - uses: actions/checkout@v3 - name: Install go-fuzz working-directory: test/fuzz run: go install github.com/dvyukov/go-fuzz/go-fuzz@latest github.com/dvyukov/go-fuzz/go-fuzz-build@latest - name: Fuzz mempool working-directory: test/fuzz run: timeout -s SIGINT --preserve-status 10m make fuzz-mempool continue-on-error: true - name: Fuzz p2p-addrbook working-directory: test/fuzz run: timeout -s SIGINT --preserve-status 10m make fuzz-p2p-addrbook continue-on-error: true - name: Fuzz p2p-pex working-directory: test/fuzz run: timeout -s SIGINT --preserve-status 10m make fuzz-p2p-pex continue-on-error: true - name: Fuzz p2p-sc working-directory: test/fuzz run: timeout -s SIGINT --preserve-status 10m make fuzz-p2p-sc continue-on-error: true - name: Fuzz p2p-rpc-server working-directory: test/fuzz run: timeout -s SIGINT --preserve-status 10m make fuzz-rpc-server continue-on-error: true - name: Archive crashers uses: actions/upload-artifact@v3 with: name: crashers path: test/fuzz/**/crashers retention-days: 3 - name: Archive suppressions uses: actions/upload-artifact@v3 with: name: suppressions path: test/fuzz/**/suppressions retention-days: 3 - name: Set crashers count working-directory: test/fuzz run: echo "::set-output name=count::$(find . -type d -name 'crashers' | xargs -I % sh -c 'ls % | wc -l' | awk '{total += $1} END {print total}')" id: set-crashers-count outputs: crashers-count: ${{ steps.set-crashers-count.outputs.count }} fuzz-nightly-fail: needs: fuzz-nightly-test if: ${{ needs.fuzz-nightly-test.outputs.crashers-count != 0 }} runs-on: ubuntu-latest steps: - name: Notify Slack on failure uses: slackapi/slack-github-action@v1.22.0 env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK BRANCH: ${{ github.ref_name }} CRASHERS: ${{ needs.fuzz-nightly-test.outputs.crashers-count }} RUN_URL: "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" with: payload: | { "blocks": [ { "type": "section", "text": { "type": "mrkdwn", "text": ":skull: Nightly fuzz tests for `${{ env.BRANCH }}` failed with ${{ env.CRASHERS }} crasher(s). See the <${{ env.RUN_URL }}|run details>." } } ] }