87 lines
1.5 KiB
Python
87 lines
1.5 KiB
Python
from dataclasses import dataclass
|
|
from enum import Enum
|
|
from pathlib import Path
|
|
|
|
|
|
class ProjectKind(Enum):
|
|
DOTNET = "dotnet"
|
|
|
|
|
|
class ResultCheckKind(Enum):
|
|
TRX_HAS_TESTS = "trx_has_tests"
|
|
PROJECT_IS_NET8 = "project_is_net8"
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class DotnetConfig:
|
|
target: Path | None = None
|
|
configuration: str = "Debug"
|
|
test_projects: tuple[Path, ...] = ()
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class TDDConfig:
|
|
test_roots: tuple[Path, ...]
|
|
test_patterns: tuple[str, ...]
|
|
exclude: tuple[str, ...] = ()
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class HarnessConfig:
|
|
version: int
|
|
project_type: str
|
|
dotnet: DotnetConfig
|
|
tdd: TDDConfig
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ProjectSelection:
|
|
kind: ProjectKind
|
|
project_file: Path
|
|
projects: tuple[Path, ...] = ()
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class DiscoveryResult:
|
|
selection: ProjectSelection | None
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class Toolchain:
|
|
dotnet: Path
|
|
sdk_version: str
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class CommandSpec:
|
|
argv: tuple[str, ...]
|
|
cwd: Path
|
|
stage: str
|
|
timeout_seconds: int = 1800
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ResultCheck:
|
|
kind: ResultCheckKind
|
|
path: Path | None = None
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ValidationStep:
|
|
command: CommandSpec
|
|
checks: tuple[ResultCheck, ...] = ()
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class ValidationPlan:
|
|
project_kind: ProjectKind
|
|
steps: tuple[ValidationStep, ...]
|
|
|
|
|
|
@dataclass(frozen=True)
|
|
class CommandResult:
|
|
command: CommandSpec
|
|
returncode: int
|
|
stdout: str
|
|
stderr: str
|