1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# Common developer tasks. Run `make help` for the list.
:
# There is no release target: merging a version bump to main is the release
# (.github/workflows/release.yml tags and publishes it).
:
:
# The same build the release workflow ships (.github/workflows/release.yml):
# `cargo auditable` embeds a dependency SBOM in the binary, so `cargo audit bin
# <path>` can scan an already-built artifact without its source or lockfile.
# Keep this in step with the workflow's build step.
:
:
:
:
:
# Scan the locked dependency tree against the RustSec advisory database.
#
# Skipped with a NOTE, not failed, when cargo-audit is absent: this runs inside
# `ci`, and the CI runner images do not ship the tool. The scan itself is gated
# in CI by a dedicated rustsec/audit-check job, in ci.yml for pushes and pull
# requests and in release.yml for a release. This target exists so the same scan is
# exercised LOCALLY, before a push, rather than being first seen in CI, and a
# hard failure here would break CI to re-check what CI already does.
#
# The skip means `make ci` passing does NOT imply an advisory scan ran. Install
# cargo-audit locally if you want the gate to mean that.
#
# `cargo audit` fetches the RustSec advisory database, so this is the one step
# in the gate that reaches the network, and the one whose result can change
# without the tree changing: an advisory published upstream today fails a gate
# that passed yesterday, including for a transitive dependency with no fixed
# release to move to. `make ci-local SKIP_AUDIT=1` opts out when you are offline
# or unblocking unrelated work. It is not a way to ship past an advisory: CI
# scans every push and every release and does not read this variable.
#
# `cargo audit` exits non-zero on a vulnerability but not on an informational
# advisory (`unmaintained`, `unsound`, `notice`), which matches the CI job's
# behavior: those are reported as warnings and are frequently in a transitive
# dependency with no fixed release to move to.
:
# Local developer gate: format in place, then lint, test, and scan advisories.
:
# CI gate: the same lints and tests, but verify formatting (fail if unformatted)
# rather than rewriting files. CI runs this; see .github/workflows/ci.yml.
:
# Local pre-commit gate: identical to `ci` but formats in place (cargo fmt)
# instead of just checking, so a single command both fixes formatting and runs
# the full lint + test gate. Same set as `check`.
:
# Serve the mdBook docs (docs/) locally with live reload, opening a browser.
# Same tool the Pages workflow uses; install with `cargo install mdbook` (or grab
# a prebuilt binary from the mdBook releases).
:
# Build the static site to docs/book (what CI deploys to Pages).
:
: