66 "io/ioutil"
77 "os"
88 "path/filepath"
9+ "time"
910
1011 "github.com/gookit/color"
1112 "github.com/samber/lo"
@@ -30,6 +31,8 @@ import (
3031 "github.com/werf/nelm/pkg/resrcchanglog"
3132 "github.com/werf/nelm/pkg/resrcpatcher"
3233 "github.com/werf/nelm/pkg/resrcprocssr"
34+ "github.com/werf/nelm/pkg/rls"
35+ "github.com/werf/nelm/pkg/rlsdiff"
3336 "github.com/werf/nelm/pkg/rlshistor"
3437 "github.com/werf/werf/cmd/werf/common"
3538 "github.com/werf/werf/pkg/build"
@@ -552,8 +555,10 @@ func run(ctx context.Context, containerBackend container_backend.ContainerBacken
552555 }
553556
554557 var newRevision int
558+ var firstDeployed time.Time
555559 if prevReleaseFound {
556560 newRevision = prevRelease .Revision () + 1
561+ firstDeployed = prevRelease .FirstDeployed ()
557562 } else {
558563 newRevision = 1
559564 }
@@ -589,6 +594,8 @@ func run(ctx context.Context, containerBackend container_backend.ContainerBacken
589594 return fmt .Errorf ("error constructing chart tree: %w" , err )
590595 }
591596
597+ notes := chartTree .Notes ()
598+
592599 var prevRelGeneralResources []* resrc.GeneralResource
593600 var prevRelFailed bool
594601 if prevReleaseFound {
@@ -633,8 +640,17 @@ func run(ctx context.Context, containerBackend container_backend.ContainerBacken
633640 return fmt .Errorf ("error processing deployable resources: %w" , err )
634641 }
635642
643+ log .Default .Info (ctx , "Constructing new release" )
644+ newRel , err := rls .NewRelease (releaseName , releaseNamespace .Name (), newRevision , chartTree .ReleaseValues (), chartTree .LegacyChart (), resProcessor .ReleasableHookResources (), resProcessor .ReleasableGeneralResources (), notes , rls.ReleaseOptions {
645+ FirstDeployed : firstDeployed ,
646+ Mapper : clientFactory .Mapper (),
647+ })
648+ if err != nil {
649+ return fmt .Errorf ("error constructing new release: %w" , err )
650+ }
651+
636652 log .Default .Info (ctx , "Calculating planned changes" )
637- createdChanges , recreatedChanges , updatedChanges , appliedChanges , deletedChanges , anyChangesPlanned := resrcchangcalc .CalculatePlannedChanges (
653+ createdChanges , recreatedChanges , updatedChanges , appliedChanges , deletedChanges , planChangesPlanned := resrcchangcalc .CalculatePlannedChanges (
638654 resProcessor .DeployableReleaseNamespaceInfo (),
639655 resProcessor .DeployableStandaloneCRDsInfos (),
640656 resProcessor .DeployableHookResourcesInfos (),
@@ -643,18 +659,24 @@ func run(ctx context.Context, containerBackend container_backend.ContainerBacken
643659 prevRelFailed ,
644660 )
645661
662+ releaseUpToDate , err := rlsdiff .ReleaseUpToDate (prevRelease , newRel )
663+ if err != nil {
664+ return fmt .Errorf ("error checking if release is up to date: %w" , err )
665+ }
666+
646667 resrcchanglog .LogPlannedChanges (
647668 ctx ,
648669 releaseName ,
649670 releaseNamespace .Name (),
671+ ! releaseUpToDate ,
650672 createdChanges ,
651673 recreatedChanges ,
652674 updatedChanges ,
653675 appliedChanges ,
654676 deletedChanges ,
655677 )
656678
657- if cmdData .DetailedExitCode && anyChangesPlanned {
679+ if cmdData .DetailedExitCode && ( planChangesPlanned || ! releaseUpToDate ) {
658680 return resrcchangcalc .ErrChangesPlanned
659681 }
660682
0 commit comments