//! A test to ensure the rules_rust bzlmod versions match the standard versions. use runfiles::Runfiles; fn parse_module_bazel_version(text: &str) -> String { let mut found_module = false; for line in text.split('\n') { if found_module { assert!(!line.ends_with(')'), "Failed to parse version"); if let Some((param, value)) = line.rsplit_once(" = ") { if param.trim() == "version" { return value.trim().trim_matches(',').trim_matches('"').to_owned(); } } } else if line.starts_with("module(") { found_module = true; continue; } } panic!("Failed to find MODULE.bazel version"); } /// If this test fails it means `//:version.bzl` and `//:MODULE.bazel` need to /// be synced up. `//:version.bzl` should contain the source of truth. #[test] fn module_bzl_has_correct_version() { let version = std::env::var("VERSION").unwrap(); let module_bazel_text = { let r = Runfiles::create().unwrap(); let path = runfiles::rlocation!(r, std::env::var("MODULE_BAZEL").unwrap()); std::fs::read_to_string(path).unwrap() }; let module_bazel_version = parse_module_bazel_version(&module_bazel_text); assert_eq!( version, module_bazel_version, "//:version.bzl and //:MODULE.bazel versions are out of sync" ); }