1
+ on :
2
+ schedule :
3
+ - cron : " 00 05 * * *" # At 05:00 (UTC) every day.
4
+ workflow_dispatch : # allows manual triggering
5
+
6
+ permissions : {}
7
+
8
+ name : Daily Fuzz
9
+
10
+ jobs :
11
+ fuzz :
12
+ name : Cargo Fuzz
13
+ runs-on : ubuntu-latest
14
+ env :
15
+ # The version of `cargo-fuzz` to install and use.
16
+ CARGO_FUZZ_VERSION : 0.13.1
17
+
18
+ # The number of seconds to run the fuzz target. 1800 seconds = 30 minutes.
19
+ FUZZ_TIME : 1800
20
+
21
+ strategy :
22
+ fail-fast : false
23
+ matrix :
24
+ include :
25
+ - fuzz_target : bdk_wallet
26
+
27
+ steps :
28
+ - name : Checkout
29
+ uses : actions/checkout@v4
30
+ with :
31
+ persist-credentials : false
32
+
33
+ - name : Install the nightly Rust channel
34
+ uses : actions-rs/toolchain@v1
35
+ with :
36
+ toolchain : nightly
37
+ override : true
38
+ profile : minimal
39
+
40
+ - name : Check cache for cargo-fuzz
41
+ id : cache-cargo-fuzz
42
+ uses : actions/cache@v4
43
+ with :
44
+ path : ${{ runner.tool_cache }}/cargo-fuzz
45
+ key : cargo-fuzz-bin-${{ env.CARGO_FUZZ_VERSION }}
46
+
47
+ - name : Install cargo-fuzz
48
+ if : steps.cache-cargo-fuzz.outputs.cache-hit != 'true'
49
+ run : |
50
+ cargo install --root "${{ runner.tool_cache }}/cargo-fuzz" --version $CARGO_FUZZ_VERSION cargo-fuzz --locked
51
+ env :
52
+ CARGO_FUZZ_VERSION : ${{ env.CARGO_FUZZ_VERSION }}
53
+
54
+ - name : Add cargo-fuzz to PATH
55
+ run : echo "${{ runner.tool_cache }}/cargo-fuzz/bin" >> $GITHUB_PATH
56
+
57
+ - name : Build & Run Fuzz Target
58
+ run : |
59
+ cargo fuzz build ${{ matrix.fuzz_target }}
60
+ cargo fuzz run ${{ matrix.fuzz_target }} -- -max_total_time=$FUZZ_TIME
61
+ env :
62
+ FUZZ_TIME : ${{ env.FUZZ_TIME }}
63
+
64
+ - name : Upload fuzzing artifacts on failure
65
+ uses : actions/upload-artifact@v4
66
+ if : failure()
67
+ with :
68
+ name : fuzzing-artifacts-${{ matrix.fuzz_target }}-${{ github.sha }}
69
+ path : fuzz/artifacts
70
+
71
+ # TODO: add a verify-execution job similar to rust-bitcoin's one
0 commit comments