(manifest: &SourcesManifest, strict: bool)
| 5334 | } |
| 5335 | |
| 5336 | fn check_generated_manifest(manifest: &SourcesManifest, strict: bool) -> Result<()> { |
| 5337 | let path = Path::new(GENERATED_ASSETS_DIR).join("manifest.json"); |
| 5338 | if !path.exists() { |
| 5339 | if strict { |
| 5340 | bail!("generated asset manifest is missing at {}", path.display()); |
| 5341 | } |
| 5342 | eprintln!( |
| 5343 | "warning: generated asset manifest is missing at {}", |
| 5344 | path.display() |
| 5345 | ); |
| 5346 | return Ok(()); |
| 5347 | } |
| 5348 | |
| 5349 | let text = fs::read_to_string(&path).with_context(|| format!("read {}", path.display()))?; |
| 5350 | let generated: GeneratedAssetManifest = |
| 5351 | serde_json::from_str(&text).with_context(|| format!("parse {}", path.display()))?; |
| 5352 | |
| 5353 | let mut drift = Vec::new(); |
| 5354 | for source in &manifest.sources { |
| 5355 | match generated |
| 5356 | .sources |
| 5357 | .iter() |
| 5358 | .find(|generated| generated.name == source.name) |
| 5359 | { |
| 5360 | Some(generated) |
| 5361 | if generated.url == source.url |
| 5362 | && generated.branch == source.branch |
| 5363 | && generated.commit == source.commit => {} |
| 5364 | Some(generated) => drift.push(format!( |
| 5365 | "{} generated={}/{}@{} expected={}/{}@{}", |
| 5366 | source.name, |
| 5367 | generated.url, |
| 5368 | generated.branch, |
| 5369 | generated.commit, |
| 5370 | source.url, |
| 5371 | source.branch, |
| 5372 | source.commit |
| 5373 | )), |
| 5374 | None => drift.push(format!("{} missing from generated manifest", source.name)), |
| 5375 | } |
| 5376 | } |
| 5377 | |
| 5378 | if drift.is_empty() { |
| 5379 | println!("generated asset manifest source pins match assets/sources.toml"); |
| 5380 | return Ok(()); |
| 5381 | } |
| 5382 | |
| 5383 | let details = drift.join("; "); |
| 5384 | if strict { |
| 5385 | bail!("generated asset manifest has stale source pins: {details}"); |
| 5386 | } |
| 5387 | eprintln!("warning: generated asset manifest has stale source pins: {details}"); |
| 5388 | Ok(()) |
| 5389 | } |
| 5390 | |
| 5391 | fn verify_committed_assets() -> Result<()> { |
| 5392 | check_source_free_repo()?; |
no test coverage detected