in helmcli/release.go [149:193]
func (cli *ReleaseCli) Deploy(ctx context.Context, timeout time.Duration, valuesAppliers ...ValuesApplier) error {
values, err := cli.initValues(valuesAppliers...)
if err != nil {
return err
}
// NOTE: Maintain only one history record just in case that there are
// too many secret records which causes ETCD OutOfSpace.
histCli := action.NewHistory(cli.cfg)
histCli.Max = 1
if _, err = histCli.Run(cli.name); err == driver.ErrReleaseNotFound {
installCli := action.NewInstall(cli.cfg)
installCli.CreateNamespace = true
installCli.Atomic = true
installCli.Namespace = cli.namespace
installCli.ReleaseName = cli.name
installCli.IsUpgrade = true
installCli.Timeout = timeout
installCli.Labels = cli.labels
installCli.Wait = true
release, err := installCli.RunWithContext(ctx, cli.ch, values)
if err != nil {
return fmt.Errorf("failed to install that release %s: %w", cli.name, err)
}
cli.values = release.Config
return nil
}
upgradeCli := action.NewUpgrade(cli.cfg)
upgradeCli.Namespace = cli.namespace
upgradeCli.Atomic = true
upgradeCli.Timeout = timeout
upgradeCli.MaxHistory = 1
upgradeCli.Wait = true
upgradeCli.Labels = cli.labels
release, err := upgradeCli.RunWithContext(ctx, cli.name, cli.ch, values)
if err != nil {
return fmt.Errorf("failed to upgrade that release %s: %w", cli.name, err)
}
cli.values = release.Config
return nil
}