UI work to fill SBOM sourcing management gap. UI planning remaining functionality exposure. Work on CI/Tests stabilization

Introduces CGS determinism test runs to CI workflows for Windows, macOS, Linux, Alpine, and Debian, fulfilling CGS-008 cross-platform requirements. Updates local-ci scripts to support new smoke steps, test timeouts, progress intervals, and project slicing for improved test isolation and diagnostics.
This commit is contained in:
master
2025-12-29 19:12:38 +02:00
parent 41552d26ec
commit a4badc275e
286 changed files with 50918 additions and 992 deletions

View File

@@ -0,0 +1,76 @@
// <copyright file="Program.cs" company="Stella Operations">
// Copyright (c) Stella Operations. Licensed under AGPL-3.0-or-later.
// </copyright>
using System.CommandLine;
using StellaOps.Testing.FixtureHarvester.Commands;
namespace StellaOps.Testing.FixtureHarvester;
/// <summary>
/// Fixture Harvester CLI entry point
/// </summary>
internal static class Program
{
internal static async Task<int> Main(string[] args)
{
var rootCommand = new RootCommand("Stella Ops Fixture Harvester - Acquire, curate, and pin test fixtures");
// Harvest command
var harvestCommand = new Command("harvest", "Harvest and store a fixture with metadata");
var harvestTypeOption = new Option<string>(
"--type",
description: "Fixture type: sbom, feed, vex") { IsRequired = true };
var harvestIdOption = new Option<string>(
"--id",
description: "Unique fixture identifier") { IsRequired = true };
var harvestSourceOption = new Option<string>(
"--source",
description: "Source URL or path");
var harvestOutputOption = new Option<string>(
"--output",
description: "Output directory",
getDefaultValue: () => "src/__Tests/fixtures");
harvestCommand.AddOption(harvestTypeOption);
harvestCommand.AddOption(harvestIdOption);
harvestCommand.AddOption(harvestSourceOption);
harvestCommand.AddOption(harvestOutputOption);
harvestCommand.SetHandler(HarvestCommand.ExecuteAsync, harvestTypeOption, harvestIdOption, harvestSourceOption, harvestOutputOption);
// Validate command
var validateCommand = new Command("validate", "Validate fixtures against manifest");
var validatePathOption = new Option<string>(
"--path",
description: "Fixtures directory path",
getDefaultValue: () => "src/__Tests/fixtures");
validateCommand.AddOption(validatePathOption);
validateCommand.SetHandler(ValidateCommand.ExecuteAsync, validatePathOption);
// Regen command
var regenCommand = new Command("regen", "Regenerate expected outputs (manual, use with caution)");
var regenFixtureOption = new Option<string>(
"--fixture",
description: "Fixture ID to regenerate");
var regenAllOption = new Option<bool>(
"--all",
description: "Regenerate all fixtures",
getDefaultValue: () => false);
var regenConfirmOption = new Option<bool>(
"--confirm",
description: "Confirm regeneration",
getDefaultValue: () => false);
regenCommand.AddOption(regenFixtureOption);
regenCommand.AddOption(regenAllOption);
regenCommand.AddOption(regenConfirmOption);
regenCommand.SetHandler(RegenCommand.ExecuteAsync, regenFixtureOption, regenAllOption, regenConfirmOption);
rootCommand.AddCommand(harvestCommand);
rootCommand.AddCommand(validateCommand);
rootCommand.AddCommand(regenCommand);
return await rootCommand.InvokeAsync(args);
}
}