Reconcile removed analysis artifacts

This commit is contained in:
2026-09-04 18:37:17 +00:00
parent a520cfdcc8
commit da99857fd0
3 changed files with 97 additions and 32 deletions

View File

@@ -71,25 +71,19 @@ func (analyzeStage) Run(ctx context.Context, env *Env, m *manifest.Manifest) (*S
if err != nil {
return nil, fmt.Errorf("analyze: resolve run-stage layout: %w", err)
}
if env.Config.Pipeline.Scriptorium == nil {
return &StageResult{Metadata: map[string]any{
"stage": "analyze",
"skipped": true,
"reason": "pipeline.scriptorium is not configured",
}}, nil
}
if len(env.Config.Pipeline.Scriptorium.Artifacts) == 0 {
return &StageResult{Metadata: map[string]any{
"stage": "analyze",
"skipped": true,
"reason": "no scriptorium artifacts configured",
}}, nil
scriptoriumCfg := env.Config.Pipeline.Scriptorium
noWorkReason := ""
if scriptoriumCfg == nil {
noWorkReason = "pipeline.scriptorium is not configured"
scriptoriumCfg = &config.ScriptoriumConfig{}
} else if len(scriptoriumCfg.Artifacts) == 0 {
noWorkReason = "no scriptorium artifacts configured"
}
effective := env.EffectiveArtifacts
if !effective.Resolved() {
effective, err = artifacts.ResolveEffectiveArtifactSet(
artifacts.ConfiguredArtifactDefinitions(env.Config.Pipeline.Scriptorium.Artifacts),
artifacts.ConfiguredArtifactDefinitions(scriptoriumCfg.Artifacts),
env.SelectedArtifactKeys,
)
if err != nil {
@@ -100,7 +94,7 @@ func (analyzeStage) Run(ctx context.Context, env *Env, m *manifest.Manifest) (*S
runtimeCatalog, err := buildAnalyzeRuntimeArtifactCatalog(
paths,
m,
env.Config.Pipeline.Scriptorium,
scriptoriumCfg,
env.Config.Pipeline.Notarius,
effective,
)
@@ -108,12 +102,8 @@ func (analyzeStage) Run(ctx context.Context, env *Env, m *manifest.Manifest) (*S
return nil, fmt.Errorf("analyze: build runtime artifact catalog: %w", err)
}
if len(effective.Keys()) == 0 {
return &StageResult{Metadata: map[string]any{
"stage": "analyze",
"skipped": true,
"reason": "no selected scriptorium artifacts to execute",
}}, nil
if len(effective.Keys()) == 0 && noWorkReason == "" {
noWorkReason = "no selected scriptorium artifacts to execute"
}
execution := analyzeExecutionContext{
@@ -125,12 +115,12 @@ func (analyzeStage) Run(ctx context.Context, env *Env, m *manifest.Manifest) (*S
TranscriptRefs: discoverAnalyzeTranscriptRefs(m, paths),
Catalog: runtimeCatalog,
}
reconciliation, err := reconcileAnalyzeArtifacts(env.Config.Pipeline.Scriptorium, execution)
reconciliation, err := reconcileAnalyzeArtifacts(scriptoriumCfg, execution)
if err != nil {
return nil, fmt.Errorf("analyze: reconcile configured artifacts: %w", err)
}
workPlan, err := planAnalyzeWork(
env.Config.Pipeline.Scriptorium,
scriptoriumCfg,
env.SelectedArtifactKeys,
env.Force,
reconciliation,
@@ -148,10 +138,10 @@ func (analyzeStage) Run(ctx context.Context, env *Env, m *manifest.Manifest) (*S
}
for _, item := range workPlan.ExecutionOrder {
artifactCfg := env.Config.Pipeline.Scriptorium.Artifacts[item.Key]
artifactCfg := scriptoriumCfg.Artifacts[item.Key]
fingerprint, _, _, err := computeAnalyzeArtifactFingerprint(
item.Key,
env.Config.Pipeline.Scriptorium,
scriptoriumCfg,
execution,
)
if err != nil {
@@ -167,7 +157,12 @@ func (analyzeStage) Run(ctx context.Context, env *Env, m *manifest.Manifest) (*S
return state.failedResult(item, artifactCfg, fingerprint, err), err
}
}
return state.successResult(), nil
result := state.successResult()
if noWorkReason != "" {
result.Metadata["skipped"] = true
result.Metadata["reason"] = noWorkReason
}
return result, nil
}
func analyzeArtifactOrigin(execution analyzeExecutionContext, key string) (config.ArtifactFamilyMemberOrigin, bool) {