github.com/helmwave/helmwave@v0.36.4-0.20240509190856-b35563eba4c6/pkg/release/sync.go (about)

     1  package release
     2  
     3  import (
     4  	"context"
     5  
     6  	"github.com/helmwave/helmwave/pkg/helper"
     7  	"helm.sh/helm/v3/pkg/release"
     8  )
     9  
    10  func (rel *config) Sync(ctx context.Context, runHooks bool) (r *release.Release, err error) {
    11  	ctx = helper.ContextWithReleaseUniq(ctx, rel.Uniq())
    12  
    13  	// Run hooks
    14  	if runHooks {
    15  		preHook, postHook := rel.syncLifecycleHooks()
    16  
    17  		err = preHook(ctx)
    18  		if err != nil {
    19  			return nil, err
    20  		}
    21  
    22  		defer func() {
    23  			lifecycleErr := postHook(ctx)
    24  			if lifecycleErr != nil && err == nil {
    25  				err = lifecycleErr
    26  			}
    27  		}()
    28  	}
    29  
    30  	r, err = rel.upgrade(ctx)
    31  	if err != nil {
    32  		return nil, err
    33  	}
    34  
    35  	if rel.dryRun {
    36  		return r, nil
    37  	}
    38  
    39  	if rel.Tests.Enabled {
    40  		err = rel.test()
    41  		if err != nil {
    42  			rel.Logger().Errorf("helm tests failed")
    43  
    44  			return nil, err
    45  		}
    46  	}
    47  
    48  	if rel.ShowNotes {
    49  		rel.Logger().Infof("🗒️ release notes:\n%s", r.Info.Notes)
    50  	}
    51  
    52  	return r, nil
    53  }
    54  
    55  type lifecycleHook func(context.Context) error
    56  
    57  func (rel *config) syncLifecycleHooks() (pre, post lifecycleHook) {
    58  	if rel.dryRun {
    59  		pre = rel.Lifecycle.RunPreBuild
    60  		post = rel.Lifecycle.RunPostBuild
    61  	} else {
    62  		pre = rel.Lifecycle.RunPreUp
    63  		post = rel.Lifecycle.RunPostUp
    64  	}
    65  
    66  	return
    67  }
    68  
    69  func (rel *config) SyncDryRun(ctx context.Context, runHooks bool) (*release.Release, error) {
    70  	old := rel.dryRun
    71  	if !old {
    72  		defer rel.DryRun(old)
    73  		rel.DryRun(true)
    74  	}
    75  
    76  	return rel.Sync(ctx, runHooks)
    77  }