80 lines
2.5 KiB
C#
80 lines
2.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace StellaOps.Scanner.Worker.Determinism;
|
|
|
|
/// <summary>
|
|
/// Represents a determinism score report produced by the worker replay harness.
|
|
/// This mirrors the determinism.json shape used in release bundles.
|
|
/// </summary>
|
|
public sealed record DeterminismReport(
|
|
string Version,
|
|
string Release,
|
|
string Platform,
|
|
string? PolicySha,
|
|
string? FeedsSha,
|
|
string? ScannerSha,
|
|
double OverallScore,
|
|
double ThresholdOverall,
|
|
double ThresholdImage,
|
|
IReadOnlyList<DeterminismImageReport> Images)
|
|
{
|
|
public static DeterminismReport FromHarness(Harness.DeterminismReport harnessReport,
|
|
string release,
|
|
string platform,
|
|
string? policySha = null,
|
|
string? feedsSha = null,
|
|
string? scannerSha = null,
|
|
string version = "1")
|
|
{
|
|
ArgumentNullException.ThrowIfNull(harnessReport);
|
|
|
|
return new DeterminismReport(
|
|
Version: version,
|
|
Release: release,
|
|
Platform: platform,
|
|
PolicySha: policySha,
|
|
FeedsSha: feedsSha,
|
|
ScannerSha: scannerSha,
|
|
OverallScore: harnessReport.OverallScore,
|
|
ThresholdOverall: harnessReport.OverallThreshold,
|
|
ThresholdImage: harnessReport.ImageThreshold,
|
|
Images: harnessReport.Images.Select(DeterminismImageReport.FromHarness).ToList());
|
|
}
|
|
}
|
|
|
|
public sealed record DeterminismImageReport(
|
|
string Image,
|
|
int Runs,
|
|
int Identical,
|
|
double Score,
|
|
IReadOnlyDictionary<string, string> ArtifactHashes,
|
|
IReadOnlyList<DeterminismRunReport> RunsDetail)
|
|
{
|
|
public static DeterminismImageReport FromHarness(Harness.DeterminismImageReport report)
|
|
{
|
|
return new DeterminismImageReport(
|
|
Image: report.ImageDigest,
|
|
Runs: report.Runs,
|
|
Identical: report.Identical,
|
|
Score: report.Score,
|
|
ArtifactHashes: report.BaselineHashes,
|
|
RunsDetail: report.RunReports.Select(DeterminismRunReport.FromHarness).ToList());
|
|
}
|
|
}
|
|
|
|
public sealed record DeterminismRunReport(
|
|
int RunIndex,
|
|
IReadOnlyDictionary<string, string> ArtifactHashes,
|
|
IReadOnlyList<string> NonDeterministic)
|
|
{
|
|
public static DeterminismRunReport FromHarness(Harness.DeterminismRunReport report)
|
|
{
|
|
return new DeterminismRunReport(
|
|
RunIndex: report.RunIndex,
|
|
ArtifactHashes: report.ArtifactHashes,
|
|
NonDeterministic: report.NonDeterministicArtifacts);
|
|
}
|
|
}
|