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 }