func()

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
}