Validate hidden base artifact ownership conflicts

This commit is contained in:
2026-09-07 11:59:49 +00:00
parent 99d1a0b926
commit 47b3e5b55b
3 changed files with 67 additions and 17 deletions

View File

@@ -42,18 +42,20 @@ type pipelineFieldOwnership struct {
func loadPipelineWithConfigKit(path string, opts PipelineLoadOptions) (*PipelineConfig, error) {
profile := selectedPipelineProfileName(opts)
result, err := configkit.Load(configkit.File(path), configkit.Options[PipelineConfig]{
Imports: true,
Profile: profile,
Definition: configkit.Definition[PipelineConfig]{
Defaults: pipelineConfigDefaults,
Resolve: resolvePipelineConfig,
Validate: validatePipelineConfigKit,
},
})
result, err := loadPipelineConfigKitResult(path, profile)
if err != nil {
return nil, describePipelineLoadError(err)
}
if profile != "" {
base, err := loadPipelineConfigKitResult(path, "")
if err != nil {
return nil, describePipelineLoadError(err)
}
baseConfig := base.Config
if err := rejectDuplicateBaseDefinitions(&baseConfig, base.Metadata(), base.Sources()); err != nil {
return nil, fmt.Errorf("load pipeline config: %w", err)
}
}
cfg := result.Config
metadata, err := pipelineMetadataFromConfigKit(&cfg, result, opts)
if err != nil {
@@ -63,6 +65,18 @@ func loadPipelineWithConfigKit(path string, opts PipelineLoadOptions) (*Pipeline
return &cfg, nil
}
func loadPipelineConfigKitResult(path, profile string) (*configkit.Result[PipelineConfig], error) {
return configkit.Load(configkit.File(path), configkit.Options[PipelineConfig]{
Imports: true,
Profile: profile,
Definition: configkit.Definition[PipelineConfig]{
Defaults: pipelineConfigDefaults,
Resolve: resolvePipelineConfig,
Validate: validatePipelineConfigKit,
},
})
}
func describePipelineLoadError(err error) error {
return describeConfigKitLoadError("pipeline", err)
}