Add read-only configuration inspection commands

This commit is contained in:
2026-08-30 14:43:25 +00:00
parent b5b1d22011
commit a102db36af
10 changed files with 614 additions and 4 deletions

View File

@@ -31,10 +31,10 @@ func Validate(cfg *Config) error {
return fmt.Errorf("session config is required")
}
if err := validatePipeline(cfg.Pipeline); err != nil {
if err := ValidatePipelineConfig(cfg.Pipeline); err != nil {
return fmt.Errorf("pipeline config %q invalid: %w", shortName(cfg.PipelinePath, "pipeline.yml"), err)
}
if err := validateCampaign(cfg.Campaign); err != nil {
if err := ValidateCampaignConfig(cfg.Campaign); err != nil {
return fmt.Errorf("campaign config %q invalid: %w", shortName(cfg.CampaignPath, "campaign.yml"), err)
}
if err := validateSession(cfg.Session); err != nil {
@@ -50,6 +50,23 @@ func Validate(cfg *Config) error {
return nil
}
// ValidatePipelineConfig validates a loaded, defaulted pipeline without
// requiring session configuration. Callers that require party-driven artifact
// expansion must resolve a campaign first through LoadPipelineCampaign.
func ValidatePipelineConfig(cfg *PipelineConfig) error {
if cfg == nil {
return fmt.Errorf("pipeline config is required")
}
return validatePipeline(cfg)
}
// ValidateCampaignConfig validates a loaded campaign without requiring a
// session. Party parsing and canonical-party checks remain owned by
// LoadPipelineCampaign, which has the campaign source path available.
func ValidateCampaignConfig(cfg *CampaignConfig) error {
return validateCampaign(cfg)
}
func validateCampaign(cfg *CampaignConfig) error {
if cfg == nil {
return fmt.Errorf("campaign config is required")