MCPcopy Create free account
hub / github.com/f0rr0/oliphaunt / discover_catalog

Function discover_catalog

xtask/src/extension_catalog.rs:615–783  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

613}
614
615fn discover_catalog() -> Result<ExtensionCatalog> {
616 let repl = parse_repl_exports(Path::new(PGLITE_REPL_EXTENSIONS))?;
617 let docs = parse_docs_catalog(Path::new(PGLITE_DOCS_EXTENSIONS))?;
618 let package_exports = parse_package_exports(Path::new(PGLITE_PACKAGE_JSON))?;
619 let promotion_requests = parse_promotion_config(Path::new(PROMOTION_CONFIG_PATH))?;
620 let smoke_evidence = parse_smoke_config(Path::new(SMOKE_CONFIG_PATH))?;
621 let packaged = parse_packaged_manifest(Path::new(ASSET_MANIFEST))?;
622 let submodules = parse_other_extension_submodules(Path::new(POSTGRES_OTHER_EXTENSIONS))?;
623
624 let mut ids = BTreeSet::new();
625 ids.extend(repl.keys().cloned());
626 ids.extend(docs.keys().filter(|id| id.as_str() != "live").cloned());
627
628 let mut entries = Vec::new();
629 for id in ids {
630 let repl_export = repl.get(&id);
631 let docs_entry = docs.get(&id);
632 let sql_name = discover_sql_name(&id, repl_export, docs_entry)?;
633 let control_file = discover_control_file(&id, &sql_name, repl_export);
634 let control = control_file
635 .as_ref()
636 .filter(|path| path.is_file())
637 .map(|path| parse_control_file(path))
638 .transpose()?;
639 let tests = discover_test_paths(&id);
640 let lifecycle = classify_lifecycle(&id, control.as_ref());
641 let dependencies = discover_dependencies(&id, control.as_ref());
642 let source_kind = classify_source_kind(&id, repl_export, docs_entry);
643 let native_module_file =
644 discover_native_module_file(&id, &sql_name, source_kind, control.as_ref())?;
645 let request = promotion_requests
646 .get(id.as_str())
647 .or_else(|| promotion_requests.get(sql_name.as_str()));
648 let asset = packaged.get(sql_name.as_str());
649 let archive = asset
650 .and_then(|asset| asset.archive.clone())
651 .or_else(|| request.and_then(|request| request.archive.clone()))
652 .or_else(|| request.map(|_| format!("extensions/{sql_name}.tar.zst")));
653 let requested = request.map(|request| request.build).unwrap_or(false);
654 let stable = request.map(|request| request.stable).unwrap_or(false);
655 let blocker = request.and_then(|request| request.blocker.clone());
656 let packaged = asset.is_some();
657 let asset_stable = asset.map(|asset| asset.stable).unwrap_or(false);
658 let smoke = smoke_evidence
659 .get(id.as_str())
660 .or_else(|| smoke_evidence.get(sql_name.as_str()))
661 .cloned()
662 .unwrap_or_default();
663 let promotion = PromotionStatus {
664 configured: request.is_some(),
665 requested,
666 packaged,
667 promoted: requested
668 && stable
669 && packaged
670 && asset_stable
671 && smoke.direct == "passed"
672 && smoke.server == "passed"

Callers 5

extensionsFunction · 0.85
check_catalog_fileFunction · 0.85
check_build_plan_fileFunction · 0.85
promoted_build_specsFunction · 0.85

Calls 15

parse_repl_exportsFunction · 0.85
parse_docs_catalogFunction · 0.85
parse_package_exportsFunction · 0.85
parse_promotion_configFunction · 0.85
parse_smoke_configFunction · 0.85
parse_packaged_manifestFunction · 0.85
discover_sql_nameFunction · 0.85
discover_control_fileFunction · 0.85
parse_control_fileFunction · 0.85
discover_test_pathsFunction · 0.85
classify_lifecycleFunction · 0.85

Tested by

no test coverage detected