repo_description: Declaratively deploy your Kubernetes manifests, Kustomize configs, and Charts as Helm releases. Generate all-in-one manifests for use with ArgoCD.
repo_topics: helm kubernetes kustomize
code: package main
  
  import (
  	"os"
  	"os/signal"
  	"syscall"
  
  	"github.com/helmfile/helmfile/cmd"
  	"github.com/helmfile/helmfile/pkg/app"
  	"github.com/helmfile/helmfile/pkg/config"
  	"github.com/helmfile/helmfile/pkg/errors"
  )
  
  func main() {
  	var sig os.Signal
  	sigs := make(chan os.Signal, 1)
  	errChan := make(chan error, 1)
  
  	signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
  
  	go func() {
  		globalConfig := new(config.GlobalOptions)
  		rootCmd, err := cmd.NewRootCmd(globalConfig)
  		if err != nil {
  			errChan <- err
  			return
  		}
  
  		errChan <- rootCmd.Execute()
  	}()
  
  	select {
  	case sig = <-sigs:
  		if sig != nil {
  			app.Cancel()
  			app.CleanWaitGroup.Wait()
  
  			// See http://tldp.org/LDP/abs/html/exitcodes.html
  			switch sig {
  			case syscall.SIGINT:
  				os.Exit(130)
  			case syscall.SIGTERM:
  				os.Exit(143)
  			}
  		}
  	case err := <-errChan:
  		errors.HandleExitCoder(err)
  	}
  }
  