Coverage for src/secchi/workflows/check.py: 95%
21 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-08-04 22:15 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-08-04 22:15 +0000
1"""Package policy-check workflow."""
3from dataclasses import dataclass
5from secchi.models import PackageRef
6from secchi.policy import PolicyResult, evaluate_default_policy
7from secchi.services.intelligence import PackageIntelligenceService
8from secchi.services.resolver import parse_package_spec
9from secchi.workflows.common import require_package
12@dataclass(frozen=True)
13class CheckResult:
14 package: PackageRef
15 checks: list[PolicyResult]
16 warnings: list[object]
18 @property
19 def passed(self) -> bool:
20 return all(check.passed for check in self.checks)
23async def run(
24 package: str | PackageRef,
25 *,
26 registry: str | None = None,
27 min_health: int = 70,
28 require_ci: bool = False,
29 refresh: bool = False,
30 service: PackageIntelligenceService | None = None,
31) -> CheckResult:
32 if min_health < 0 or min_health > 100:
33 raise ValueError("min_health must be between 0 and 100")
34 ref = parse_package_spec(package, registry) if isinstance(package, str) else package
35 result = (
36 await require_package(ref, refresh, service=service)
37 if service is not None
38 else await require_package(ref, refresh)
39 )
40 checks = evaluate_default_policy(
41 result.info,
42 result.derived,
43 min_health=min_health,
44 require_ci=require_ci,
45 )
46 return CheckResult(ref, checks, result.warnings)