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:
76
src/__Tests/Tools/FixtureHarvester/Program.cs
Normal file
76
src/__Tests/Tools/FixtureHarvester/Program.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user