Add reconciliation state foundation

This commit is contained in:
2026-06-08 18:24:12 +00:00
parent c04432e40b
commit b7db3993fb
13 changed files with 557 additions and 66 deletions

View File

@@ -6,6 +6,7 @@ import (
"fmt"
"time"
"gitea.maximumdirect.net/eric/distributor/internal/config"
"gitea.maximumdirect.net/eric/distributor/internal/state"
"gitea.maximumdirect.net/eric/distributor/internal/storage"
)
@@ -69,14 +70,25 @@ func Execute(ctx context.Context, req Request, plan Plan) error {
writtenOutputs = append(writtenOutputs, output)
}
now := time.Now().UTC()
createdAt := now
existingOutputs := []state.OutputFile(nil)
if plan.ExistingState != nil {
createdAt = plan.ExistingState.CreatedAt
existingOutputs = plan.ExistingState.Outputs
}
destinationState := state.DistributorState{
SchemaVersion: state.SchemaVersion,
DistributorVersion: req.DistributorVersion,
PipelineID: req.PipelineID,
DestinationID: req.DestinationID,
PublishedAt: time.Now().UTC(),
PublishedAt: now,
CreatedAt: createdAt,
UpdatedAt: now,
State: state.StatePolicy{Mode: state.StateModeSingleOwner},
Reconciliation: state.ReconciliationPolicy{Mode: config.ReconciliationModeReplace},
Source: state.SourceState{Manifest: req.SourceBundle.Manifest},
Outputs: StateOutputFiles(plan.Outputs),
Outputs: state.ProjectOutputs(StateOutputProjections(plan.Outputs), existingOutputs, now),
}
if plan.PrimaryURL != "" {
destinationState.Links = &state.LinkState{PrimaryURL: plan.PrimaryURL}