#json-schema #diff #breaking #cli-tool #find #ci

bin+lib json-schema-diff

比较 JSON 模式文件的更改

8 个版本

0.1.7 2023 年 6 月 6 日
0.1.6 2023 年 5 月 16 日
0.1.4 2023 年 4 月 7 日
0.1.2 2023 年 3 月 29 日

#341数据库接口

Download history 1142/week @ 2024-03-14 1262/week @ 2024-03-21 1509/week @ 2024-03-28 1235/week @ 2024-04-04 2306/week @ 2024-04-11 1901/week @ 2024-04-18 1699/week @ 2024-04-25 1588/week @ 2024-05-02 661/week @ 2024-05-09 502/week @ 2024-05-16 230/week @ 2024-05-23 279/week @ 2024-05-30 476/week @ 2024-06-06 240/week @ 2024-06-13 480/week @ 2024-06-20 187/week @ 2024-06-27

1,411 每月下载量
用于 2 crates

Apache-2.0

40KB
881

json-schema-diff

一个正在进行的工具,用于比较 JSON 模式的更改。许多 JSON 模式功能尚未实现,因此被忽略,请参阅 问题跟踪器

请将该工具作为在 CI 中尽力查找明显破坏性更改的最佳尝试使用,但不要用于其他更多。

该 crate 使用 draft-07,但即使是这个也在进行中。

通过 CLI 使用

安装 Rust

cargo install json-schema-diff

cat schema-old.json schema-new.json
# {"type": "string"}
# {"type": "boolean"}

cargo run --features=build-binary -- \
    schema-old.json \
    schema-new.json
# {"path":"","change":{"TypeRemove":{"removed":"string"}},"is_breaking":true}
# {"path":"","change":{"TypeAdd":{"added":"boolean"}},"is_breaking":false}

Sentry 使用此工具在 sentry-kafka-schemas 中为拉取请求添加对模式定义进行的破坏性更改的注释。它通过 CLI 工具对 master 中的模式与 PR 中的模式进行比较,并使用 Python 脚本进行后处理,以便人类消费。

is_breaking 只是一个建议。您可以选择完全忽略它,并在包装脚本中定义哪些类型的更改对您来说是破坏性的。

作为库的使用

use json_schema_diff::*;

let lhs = serde_json::json! {{ 
    "type": "string",
}};
let rhs = serde_json::json! {{ 
    "type": "boolean",
}};

assert_eq!(
    json_schema_diff::diff(lhs, rhs).unwrap(),
    vec![
        Change {
            path: "".to_owned(),
            change: ChangeKind::TypeRemove { removed: JsonSchemaType::String }
        },
        Change {
            path: "".to_owned(),
            change: ChangeKind::TypeAdd { added: JsonSchemaType::Boolean }
        }
    ]
);

许可证

Apache 2.0 许可

依赖关系

~1.9–3MB
~59K SLoC