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
# rsconstruct build configuration for this repository.
#
# This file is the build. The test job of .github/workflows/ci.yml
# (byte-identical across all rs* repos) runs `rsconstruct build` and nothing
# else, so what passes here is what passes in CI, and `rsmultigit build`
# runs the same thing across the fleet. Every cargo invocation goes through
# rsconstruct rather than being typed by hand.
[]
# src_dirs entries name directories; "." (the whole tree) is a config error
= true
# ─── dependencies ────────────────────────────────────────────────────────────
# The crates every rs* repo's build and release run, installed with
# `rsconstruct tool install-deps` (cargo install --locked, by crate name).
# cargo-deny and cargo-nextest are what the clippy instances below run,
# mdbook builds docs/, and cargo-release reads release.toml. rustfmt and
# clippy are rustup components, not crates, so they are absent. This block
# is byte-identical across all rs* repos: change it everywhere or nowhere.
[]
= ["cargo-deny", "cargo-nextest", "cargo-release", "mdbook"]
# ─── analyzers ───────────────────────────────────────────────────────────────
[]
# ─── templating ──────────────────────────────────────────────────────────────
# Convention: tera configs are Lua (config/*.lua). Every dep_auto entry
# listed here must exist: rsconstruct rejects a missing one at config load.
[]
= ["config/project.lua"]
= ["tera.templates"]
# ─── markdown ────────────────────────────────────────────────────────────────
# rumdl over the README and the mdBook sources, with the fleet-shared
# .rumdl.toml. docs/src/SUMMARY.md is excluded: mdBook part titles are
# multiple level-1 headings by design, which MD025 would demote.
[]
= ["docs/src"]
= ["README.md"]
= ["docs/src/SUMMARY.md"]
# ─── rust ────────────────────────────────────────────────────────────────────
# `cargo build`. CI builds the dev profile only; release binaries come from
# the cross-target release job, which is not a local concern.
# target/ is not cached: it is many gigabytes and cargo already keeps its
# own incremental state there, so copying it into the rsconstruct store
# would cost far more than it could ever save.
[]
= ["Cargo.toml"]
= ["dev"]
= false
# The clippy processor is "run `cargo <command> <args>` once per Cargo.toml,
# re-run when any .rs or .toml under it changes". That is exactly the shape
# of every other cargo check, so each one is an instance of it with a
# different command.
# cargo fmt --all --check: stock rustfmt, there is no rustfmt.toml in the fleet
[]
= ["Cargo.toml"]
= "fmt"
= ["--all", "--check"]
# cargo clippy --all-targets -- -D warnings
[]
= ["Cargo.toml"]
= ["--all-targets", "--", "-D", "warnings"]
# cargo deny check: Cargo.lock against the RustSec advisory database, with
# the fleet-shared deny.toml
[]
= ["Cargo.toml"]
= "deny"
= ["check"]
# cargo nextest run: the test suite, with .config/nextest.toml's profile
[]
= ["Cargo.toml"]
= "nextest"
= ["run"]
# No doctest instance: nextest does not run doctests, but `cargo test --doc`
# errors outright on a binary-only crate, and this crate has no src/lib.rs.