func WithNamespace(ns string) InstallerModifierFn {
	return func(h *installer) {
		h.namespace = ns
	}
}
WithNamespace sets the namespace for the helm installer.
package helm
import (
	"fmt"
	"net/url"
	"os"
	"path/filepath"
	"strings"
	"github.com/Masterminds/semver/v3"
	"github.com/crossplane/crossplane-runtime/pkg/logging"
	"github.com/google/go-containerregistry/pkg/authn"
	"github.com/google/go-containerregistry/pkg/v1/remote"
	"github.com/pkg/errors"
	"github.com/spf13/afero"
	"helm.sh/helm/v3/pkg/action"
	"helm.sh/helm/v3/pkg/chart"
	"helm.sh/helm/v3/pkg/chart/loader"
	"helm.sh/helm/v3/pkg/cli"
	"helm.sh/helm/v3/pkg/release"
	"helm.sh/helm/v3/pkg/storage/driver"
	"k8s.io/client-go/rest"
	"github.com/upbound/up/internal/install"
)
const (
	helmDriverSecret = "secret"
	defaultCacheDir  = ".cache/up/charts"
	defaultNamespace = "upbound-system"
	allVersions      = ">0.0.0-0"
)
const (
	errGetInstalledReleaseFmt            = "could not identify installed release for %s in namespace %s"
	errGetInstalledReleaseOrAlternateFmt = "could not identify installed release for %s or %s in namespace %s"
	errVerifyInstalledVersion            = "could not identify current version"
	errVerifyChartNotInstalled           = "could not verify that chart is not already installed"
	errChartAlreadyInstalledFmt          = "chart already installed with version %s"
	errPullChart                         = "could not pull chart"
	errGetLatestPulled                   = "could not identify chart pulled as latest"
	errCorruptTempDirFmt                 = "corrupt chart tmp directory, consider removing cache (%s)"
	errMoveLatest                        = "could not move latest pulled chart to cache"
	errUpgradeFromAlternateVersionFmt = "cannot upgrade %s to %s with version mismatch"
	errFailedUpgradeFailedRollback    = "failed upgrade resulted in a failed rollback"
	errFailedUpgradeRollback          = "failed upgrade was rolled back"
)
type helmPuller interface {
	Run(string) (string, error)
	SetDestDir(string)
	SetVersion(string)
}
type puller struct {  
	*action.Pull
}
func (p *puller) SetDestDir(dir string) {
	p.DestDir = dir
}
func (p *puller) SetVersion(version string) {
	p.Version = version
}
type helmGetter interface {
	Run(string) (*release.Release, error)
}
type helmInstaller interface {
	Run(*chart.Chart, map[string]interface{}) (*release.Release, error)
}
type helmUpgrader interface {
	Run(string, *chart.Chart, map[string]interface{}) (*release.Release, error)
}
type helmRollbacker interface {
	Run(string) error
}
type helmUninstaller interface {
	Run(name string) (*release.UninstallReleaseResponse, error)
}
type TempDirFn func(afero.Fs, string, string) (string, error)
type LoaderFn func(name string) (*chart.Chart, error)
type HomeDirFn func() (string, error)
type installer struct {
	repoURL         *url.URL
	chartFile       *os.File
	chartName       string
	releaseName     string
	alternateChart  string
	namespace       string
	cacheDir        string
	rollbackOnError bool
	force           bool
	home            HomeDirFn
	fs              afero.Fs
	tempDir         TempDirFn
	log             logging.Logger
	oci             bool
	username string
	password string
	pullClient      helmPuller
	getClient       helmGetter
	installClient   helmInstaller
	upgradeClient   helmUpgrader
	rollbackClient  helmRollbacker
	uninstallClient helmUninstaller
	load LoaderFn
}
type InstallerModifierFn func(*installer)