os-checker JSON 配置格式
快速指定一组仓库
并采用默认的检查方式
{
"user1/repo": {},
"user2/repo": {},
}
指定仓库的配置选项
在 {}
中指定仓库的配置选项
{
"user1/repo": {
...,
}
}
cmds
使用 cmds
,自定义某个检查命令。未指定的检查命令以默认方式进行检查。
{
"user/repo": {
// 一组自定义检查命令:键为检查工具名称,值为 bool、字符串或者字符串数组
"cmds": {
"fmt": "cargo fmt ...",
"clippy": [
"cargo clippy --target x86_64-unknown-linux-musl",
"cargo clippy --target x86_64-unknown-linux-gnu"
],
"lockbud": false
}
}
}
注意:
- 检查命令字符串暂时只支持单命令,而不支持多命令,也就是不支持
cmd1; cmd2
。 - 对于字符串数组,每个数组元素表示一次检查。对于上面的 clippy 检查命令数组,它表示进行 2 次检查,分别在两个目标编译架构上编译和执行检查。
- 对于 bool 值,true 表示按默认方式检查(可以无需设置为 true),而 false 表示不要这项检查。
- cmds 里定义的每项检查是覆盖性质的。
- cmds 里定义的每项检查最终都在 package 的 Cargo.toml 所在的目录中执行,因此无需 cd。
packages
使用 packages
指定某个 package 的检查方式(不限于检查命令和其他配置)。
{
"user/repo": {
"packages": { // 键为 package name,值为检查配置
"package1": { // 指定 repo 中名称为 package1 的包的检查方式
"cmds": {
"lockbud": false
}
}
}
}
}
通常我们有上面几种配置就足够使用了。但为了简化编写检查命令,有一些额外的配置参数:
targets
targets
接收一个字符串或者一个字符串数组。
{
"user/repo": {
"targets": [
"x86_64-unknown-linux-musl",
"x86_64-unknown-linux-gnu"
]
}
}
这表示 target 数组里每个元素都添加到检查命令参数上,它等价于
{
"user/repo": {
"cmds": {
"fmt": [
"cargo fmt --target x86_64-unknown-linux-musl",
"cargo fmt --target x86_64-unknown-linux-gnu"
],
"clippy": [
"cargo clippy --target x86_64-unknown-linux-musl",
"cargo clippy --target x86_64-unknown-linux-gnu"
],
...
}
}
}
当 cmds 和 targets 同时指定时,cmds 具有更高的优先级:
// 只在 x86_64-unknown-linux-gnu 上执行 clippy,
// 但对其他检查工具,依然应用指定的两个 targets。
{
"user/repo": {
"targets": [
"x86_64-unknown-linux-musl",
"x86_64-unknown-linux-gnu"
],
"cmds": {
"clippy": "cargo clippy --target x86_64-unknown-linux-gnu"
}
}
}
如前所述,packages
可以使用这些检查选项:
{
"user/repo": {
"packages": {
"pkg1": {
"targets": "riscv64gc-unknown-none-elf"
},
"pkg2": {
"targets": [
"riscv64gc-unknown-none-elf",
"x86_64-unknown-none"
]
}
}
}
}
no_install_targets
{
"user/repo": {
"no_install_targets": "x86_64-unknown-uefi"
}
}
从 targets 安装列表中移除某些 targets。值为字符串或者字符串数组。
当 rustup
不支持安装该 targets 时,那么应该使用此字段明确排除不要安装它们,因为
os-checker 会对所有检测到的 targets 执行 rustup target install
。
实际案例见 #96。
setup
使用 setup
选项来设置编译环境,它只会执行一次。
它接收字符串或者字符串数组。
目前只适用于 repo,并且在仓库的根目录下执行,不作用于 packages
。
{
"user/repo": {
"setup": "make setup"
}
}
{
"user/repo": {
"setup": [
"apt install ...",
"curl ..."
]
}
}
Tracking: #81
features
这个暂时还在考虑是否要支持。我初步的想法是,只适用于 packages
:
{
"user/repo": {
"packages": {
"pkg1": {
"features": "feat1,feat2"
}
}
}
}
它和 targets
类似,表示附加到每个检查命令上,所以等价于
{
"user/repo": {
"packages": {
"pkg1": {
"cmds": {
"fmt": "cargo fmt --features=feat1,feat2",
"clippy": "cargo clippy --features=feat1,feat2"
}
}
}
}
}
它和 targets
选项一起设置的效果:
{
"user/repo": {
"targets": ["t1", "t2"],
"packages": {
"p1": { "features": "xxx" },
"p2": { "features": "yyy" }
}
}
}
// 等价于写
{
"user/repo": {
"targets": ["t1", "t2"],
"packages": {
"p1": {
"cmds": {
"fmt": [
"cargo fmt --target t1 -features xxx",
"cargo fmt --target t2 -features xxx"
],
"clippy": [...] // 类似 fmt 的参数
}
},
"p2": {
"cmds": {
"fmt": [
"cargo fmt --target t1 -features yyy",
"cargo fmt --target t2 -features yyy"
],
...
}
}
}
}
}
当 features
接收数组,与 targets
类似,表示附加每个元素到每个检查命令:
{
"user/repo": {
"packages": {
"pkg1": {
"features": ["feat1", "feat2"]
}
}
}
}
// 等价于
{
"user/repo": {
"packages": {
"pkg1": {
"cmds": {
"fmt": [ // 注意,不是 --features feat1,feat2
"cargo fmt --features feat1",
"cargo fmt --features feat2"
],
...
}
}
}
}
}
Tracking: #241
meta.skip_pkg_dir_globs
如果 package 所处的目录符合 glob 条件,那么不检查这个 package。示例:
{
"AsyncModules/embassy-priority": {
"meta": {
"skip_pkg_dir_globs": [
"docs/**",
"examples/**",
"tests/**"
]
}
}
}
注意:该 glob 应为仓库根目录的相对路径。