Add live acceptance smoke validation
This commit is contained in:
@@ -72,6 +72,14 @@ type CoveragePayload = {
|
||||
task_build_checks: Array<{ task: string; passed: boolean; script_exists?: boolean; error?: string }>;
|
||||
};
|
||||
|
||||
type AcceptancePayload = {
|
||||
available?: boolean;
|
||||
passed?: boolean;
|
||||
run_id?: string;
|
||||
created_at?: string;
|
||||
checks?: Array<{ name: string; passed: boolean }>;
|
||||
};
|
||||
|
||||
type GpuPayload = {
|
||||
available: boolean;
|
||||
gpus: Array<{
|
||||
@@ -152,17 +160,19 @@ function useData() {
|
||||
const [results, setResults] = useState<ResultItem[]>([]);
|
||||
const [datasets, setDatasets] = useState<UploadedDataset[]>([]);
|
||||
const [coverage, setCoverage] = useState<CoveragePayload | null>(null);
|
||||
const [acceptance, setAcceptance] = useState<AcceptancePayload | null>(null);
|
||||
const [error, setError] = useState<string>("");
|
||||
|
||||
async function refresh() {
|
||||
try {
|
||||
const [catalogNext, gpusNext, jobsNext, resultsNext, datasetsNext, coverageNext] = await Promise.all([
|
||||
const [catalogNext, gpusNext, jobsNext, resultsNext, datasetsNext, coverageNext, acceptanceNext] = await Promise.all([
|
||||
api<Catalog>("/api/catalog"),
|
||||
api<GpuPayload>("/api/system/gpus"),
|
||||
api<Job[]>("/api/jobs"),
|
||||
api<ResultItem[]>("/api/results"),
|
||||
api<UploadedDataset[]>("/api/datasets"),
|
||||
api<CoveragePayload>("/api/coverage")
|
||||
api<CoveragePayload>("/api/coverage"),
|
||||
api<AcceptancePayload>("/api/acceptance/latest")
|
||||
]);
|
||||
setCatalog(catalogNext);
|
||||
setGpus(gpusNext);
|
||||
@@ -170,6 +180,7 @@ function useData() {
|
||||
setResults(resultsNext.slice(0, 80));
|
||||
setDatasets(datasetsNext);
|
||||
setCoverage(coverageNext);
|
||||
setAcceptance(acceptanceNext);
|
||||
setError("");
|
||||
} catch (err) {
|
||||
setError(String(err));
|
||||
@@ -182,7 +193,7 @@ function useData() {
|
||||
return () => window.clearInterval(timer);
|
||||
}, []);
|
||||
|
||||
return { catalog, gpus, jobs, results, datasets, coverage, error, refresh };
|
||||
return { catalog, gpus, jobs, results, datasets, coverage, acceptance, error, refresh };
|
||||
}
|
||||
|
||||
function StatusPill({ status }: { status: string }) {
|
||||
@@ -190,7 +201,7 @@ function StatusPill({ status }: { status: string }) {
|
||||
}
|
||||
|
||||
function App() {
|
||||
const { catalog, gpus, jobs, results, datasets, coverage, error, refresh } = useData();
|
||||
const { catalog, gpus, jobs, results, datasets, coverage, acceptance, error, refresh } = useData();
|
||||
const [taskType, setTaskType] = useState("mock.echo");
|
||||
const [params, setParams] = useState(JSON.stringify(defaultParams["mock.echo"], null, 2));
|
||||
const [selectedJob, setSelectedJob] = useState<Job | null>(null);
|
||||
@@ -255,6 +266,16 @@ function App() {
|
||||
}
|
||||
}
|
||||
|
||||
async function runAcceptanceSmoke() {
|
||||
setBusy(true);
|
||||
try {
|
||||
await api("/api/acceptance/smoke", { method: "POST" });
|
||||
await refresh();
|
||||
} finally {
|
||||
setBusy(false);
|
||||
}
|
||||
}
|
||||
|
||||
async function createDataset() {
|
||||
setBusy(true);
|
||||
try {
|
||||
@@ -497,7 +518,9 @@ function App() {
|
||||
<p className="eyebrow">Coverage</p>
|
||||
<h2>Seg 功能覆盖</h2>
|
||||
</div>
|
||||
<ClipboardCheck size={22} />
|
||||
<button className="iconButton" disabled={busy} onClick={runAcceptanceSmoke} title="运行轻量验收">
|
||||
<ClipboardCheck size={18} />
|
||||
</button>
|
||||
</div>
|
||||
<div className="coverageGrid">
|
||||
<div>
|
||||
@@ -512,10 +535,17 @@ function App() {
|
||||
<span>任务构建</span>
|
||||
<strong>{coverage?.task_build_passed ? "OK" : "Check"}</strong>
|
||||
</div>
|
||||
<div>
|
||||
<span>轻量验收</span>
|
||||
<strong>{acceptance?.available === false ? "New" : acceptance?.passed ? "OK" : "Check"}</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div className="coverageStatus">
|
||||
{(coverage?.unmapped_user_scripts.length ?? 0) === 0 ? (
|
||||
<span>当前用户侧脚本已全部映射到网页任务。</span>
|
||||
<>
|
||||
<span>当前用户侧脚本已全部映射到网页任务。</span>
|
||||
<span>最近验收:{acceptance?.created_at ?? "尚未运行"} {acceptance?.run_id ? `#${acceptance.run_id}` : ""}</span>
|
||||
</>
|
||||
) : (
|
||||
coverage?.unmapped_user_scripts.slice(0, 8).map((item) => <code key={item}>{item}</code>)
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user