github.com/tilt-dev/tilt@v0.36.0/internal/cli/wire.go (about)

     1  //go:build wireinject
     2  // +build wireinject
     3  
     4  // The build tag makes sure the stub is not built in the final build.
     5  
     6  package cli
     7  
     8  import (
     9  	"context"
    10  	"time"
    11  
    12  	"github.com/spf13/afero"
    13  
    14  	"github.com/tilt-dev/clusterid"
    15  	cliclient "github.com/tilt-dev/tilt/internal/cli/client"
    16  	"github.com/tilt-dev/tilt/internal/controllers/core/filewatch/fsevent"
    17  	"github.com/tilt-dev/tilt/internal/k8s/kubeconfig"
    18  
    19  	"github.com/google/wire"
    20  	"github.com/jonboulle/clockwork"
    21  	sdktrace "go.opentelemetry.io/otel/sdk/trace"
    22  	"k8s.io/apimachinery/pkg/version"
    23  	ctrlclient "sigs.k8s.io/controller-runtime/pkg/client"
    24  
    25  	"github.com/tilt-dev/wmclient/pkg/dirs"
    26  
    27  	"github.com/tilt-dev/tilt/internal/analytics"
    28  	tiltanalytics "github.com/tilt-dev/tilt/internal/analytics"
    29  	"github.com/tilt-dev/tilt/internal/build"
    30  	"github.com/tilt-dev/tilt/internal/cloud"
    31  	"github.com/tilt-dev/tilt/internal/cloud/cloudurl"
    32  	"github.com/tilt-dev/tilt/internal/controllers"
    33  	"github.com/tilt-dev/tilt/internal/controllers/core/kubernetesdiscovery"
    34  	"github.com/tilt-dev/tilt/internal/docker"
    35  	"github.com/tilt-dev/tilt/internal/dockercompose"
    36  	"github.com/tilt-dev/tilt/internal/engine"
    37  	engineanalytics "github.com/tilt-dev/tilt/internal/engine/analytics"
    38  	"github.com/tilt-dev/tilt/internal/engine/configs"
    39  	"github.com/tilt-dev/tilt/internal/engine/dockerprune"
    40  	"github.com/tilt-dev/tilt/internal/engine/k8srollout"
    41  	"github.com/tilt-dev/tilt/internal/engine/k8swatch"
    42  	"github.com/tilt-dev/tilt/internal/engine/local"
    43  	"github.com/tilt-dev/tilt/internal/engine/session"
    44  	"github.com/tilt-dev/tilt/internal/engine/telemetry"
    45  	"github.com/tilt-dev/tilt/internal/engine/uiresource"
    46  	"github.com/tilt-dev/tilt/internal/engine/uisession"
    47  	"github.com/tilt-dev/tilt/internal/feature"
    48  	"github.com/tilt-dev/tilt/internal/git"
    49  	"github.com/tilt-dev/tilt/internal/hud"
    50  	"github.com/tilt-dev/tilt/internal/hud/prompt"
    51  	"github.com/tilt-dev/tilt/internal/hud/server"
    52  	"github.com/tilt-dev/tilt/internal/k8s"
    53  	"github.com/tilt-dev/tilt/internal/localexec"
    54  	"github.com/tilt-dev/tilt/internal/openurl"
    55  	"github.com/tilt-dev/tilt/internal/store"
    56  	"github.com/tilt-dev/tilt/internal/tiltfile"
    57  	"github.com/tilt-dev/tilt/internal/token"
    58  	"github.com/tilt-dev/tilt/internal/tracer"
    59  	"github.com/tilt-dev/tilt/internal/xdg"
    60  	"github.com/tilt-dev/tilt/pkg/logger"
    61  	"github.com/tilt-dev/tilt/pkg/model"
    62  )
    63  
    64  var K8sWireSet = wire.NewSet(
    65  	k8s.ProvideClusterProduct,
    66  	k8s.ProvideClusterName,
    67  	k8s.ProvideKubeContext,
    68  	k8s.ProvideAPIConfig,
    69  	k8s.ProvideClientConfig,
    70  	k8s.ProvideClientset,
    71  	k8s.ProvideRESTConfig,
    72  	k8s.ProvidePortForwardClient,
    73  	k8s.ProvideConfigNamespace,
    74  	k8s.ProvideServerVersion,
    75  	k8s.ProvideK8sClient,
    76  	k8s.ProvideDefaultLocalKubeconfigPath,
    77  	ProvideKubeContextOverride,
    78  	ProvideNamespaceOverride)
    79  
    80  var BaseWireSet = wire.NewSet(
    81  	K8sWireSet,
    82  	tiltfile.WireSet,
    83  	git.ProvideGitRemote,
    84  
    85  	localexec.DefaultEnv,
    86  	localexec.NewProcessExecer,
    87  	wire.Bind(new(localexec.Execer), new(*localexec.ProcessExecer)),
    88  
    89  	docker.SwitchWireSet,
    90  
    91  	dockercompose.NewDockerComposeClient,
    92  
    93  	clockwork.NewRealClock,
    94  	engine.DeployerWireSet,
    95  	engine.NewBuildController,
    96  	local.NewServerController,
    97  	kubernetesdiscovery.NewContainerRestartDetector,
    98  	k8swatch.NewServiceWatcher,
    99  	k8swatch.NewEventWatchManager,
   100  	uisession.NewSubscriber,
   101  	uiresource.NewSubscriber,
   102  	configs.NewConfigsController,
   103  	configs.NewTriggerQueueSubscriber,
   104  	telemetry.NewController,
   105  	cloud.WireSet,
   106  	cloudurl.ProvideAddress,
   107  	k8srollout.NewPodMonitor,
   108  	telemetry.NewStartTracker,
   109  	session.NewController,
   110  
   111  	build.ProvideClock,
   112  	provideClock,
   113  	provideLogSource,
   114  	provideLogResources,
   115  	provideLogLevel,
   116  	hud.WireSet,
   117  	prompt.WireSet,
   118  	wire.Value(openurl.OpenURL(openurl.BrowserOpen)),
   119  
   120  	provideLogActions,
   121  	store.NewStore,
   122  	wire.Bind(new(store.RStore), new(*store.Store)),
   123  	wire.Bind(new(store.Dispatcher), new(*store.Store)),
   124  
   125  	dockerprune.NewDockerPruner,
   126  
   127  	provideTiltInfo,
   128  	engine.NewUpper,
   129  	engineanalytics.NewAnalyticsUpdater,
   130  	engineanalytics.ProvideAnalyticsReporter,
   131  	provideUpdateModeFlag,
   132  	fsevent.ProvideWatcherMaker,
   133  	fsevent.ProvideTimerMaker,
   134  
   135  	controllers.WireSet,
   136  
   137  	provideCITimeoutFlag,
   138  	provideWebVersion,
   139  	provideWebMode,
   140  	provideWebURL,
   141  	provideWebPort,
   142  	provideWebHost,
   143  	server.WireSet,
   144  	server.ProvideDefaultConnProvider,
   145  	provideAssetServer,
   146  
   147  	tracer.NewSpanCollector,
   148  	wire.Bind(new(sdktrace.SpanExporter), new(*tracer.SpanCollector)),
   149  	wire.Bind(new(tracer.SpanSource), new(*tracer.SpanCollector)),
   150  
   151  	dirs.UseTiltDevDir,
   152  	xdg.NewTiltDevBase,
   153  	token.GetOrCreateToken,
   154  
   155  	build.NewKINDLoader,
   156  
   157  	wire.Value(feature.MainDefaults),
   158  )
   159  
   160  var CLIClientWireSet = wire.NewSet(
   161  	BaseWireSet,
   162  	cliclient.WireSet,
   163  )
   164  
   165  var UpWireSet = wire.NewSet(
   166  	BaseWireSet,
   167  	engine.ProvideSubscribers,
   168  )
   169  
   170  func wireTiltfileResult(ctx context.Context, analytics *analytics.TiltAnalytics, subcommand model.TiltSubcommand) (cmdTiltfileResultDeps, error) {
   171  	wire.Build(UpWireSet, newTiltfileResultDeps)
   172  	return cmdTiltfileResultDeps{}, nil
   173  }
   174  
   175  func wireDockerPrune(ctx context.Context, analytics *analytics.TiltAnalytics, subcommand model.TiltSubcommand) (dpDeps, error) {
   176  	wire.Build(UpWireSet, newDPDeps)
   177  	return dpDeps{}, nil
   178  }
   179  
   180  func wireCmdUp(ctx context.Context, analytics *analytics.TiltAnalytics, cmdTags engineanalytics.CmdTags, subcommand model.TiltSubcommand) (CmdUpDeps, error) {
   181  	wire.Build(UpWireSet,
   182  		cloud.NewSnapshotter,
   183  		wire.Value(store.EngineModeUp),
   184  		wire.Struct(new(CmdUpDeps), "*"))
   185  	return CmdUpDeps{}, nil
   186  }
   187  
   188  type CmdUpDeps struct {
   189  	Upper        engine.Upper
   190  	TiltBuild    model.TiltBuild
   191  	Token        token.Token
   192  	CloudAddress cloudurl.Address
   193  	Prompt       *prompt.TerminalPrompt
   194  	Snapshotter  *cloud.Snapshotter
   195  }
   196  
   197  func wireCmdCI(ctx context.Context, analytics *analytics.TiltAnalytics, subcommand model.TiltSubcommand) (CmdCIDeps, error) {
   198  	wire.Build(UpWireSet,
   199  		cloud.NewSnapshotter,
   200  		wire.Value(store.EngineModeCI),
   201  		wire.Value(engineanalytics.CmdTags(map[string]string{})),
   202  		wire.Struct(new(CmdCIDeps), "*"),
   203  	)
   204  	return CmdCIDeps{}, nil
   205  }
   206  
   207  type CmdCIDeps struct {
   208  	Upper        engine.Upper
   209  	TiltBuild    model.TiltBuild
   210  	Token        token.Token
   211  	CloudAddress cloudurl.Address
   212  	Snapshotter  *cloud.Snapshotter
   213  }
   214  
   215  func wireCmdUpdog(ctx context.Context,
   216  	analytics *analytics.TiltAnalytics,
   217  	cmdTags engineanalytics.CmdTags,
   218  	subcommand model.TiltSubcommand,
   219  	objects []ctrlclient.Object,
   220  ) (CmdUpdogDeps, error) {
   221  	wire.Build(BaseWireSet,
   222  		provideUpdogSubscriber,
   223  		provideUpdogCmdSubscribers,
   224  		wire.Value(store.EngineModeCI),
   225  		wire.Struct(new(CmdUpdogDeps), "*"))
   226  	return CmdUpdogDeps{}, nil
   227  }
   228  
   229  type CmdUpdogDeps struct {
   230  	Upper        engine.Upper
   231  	TiltBuild    model.TiltBuild
   232  	Token        token.Token
   233  	CloudAddress cloudurl.Address
   234  	Store        *store.Store
   235  }
   236  
   237  func wireKubeContext(ctx context.Context) (k8s.KubeContext, error) {
   238  	wire.Build(K8sWireSet)
   239  	return "", nil
   240  }
   241  
   242  func wireEnv(ctx context.Context) (clusterid.Product, error) {
   243  	wire.Build(K8sWireSet)
   244  	return "", nil
   245  }
   246  
   247  func wireNamespace(ctx context.Context) (k8s.Namespace, error) {
   248  	wire.Build(K8sWireSet)
   249  	return "", nil
   250  }
   251  
   252  func wireClusterName(ctx context.Context) (k8s.ClusterName, error) {
   253  	wire.Build(K8sWireSet)
   254  	return "", nil
   255  }
   256  
   257  func wireK8sClient(ctx context.Context) (k8s.Client, error) {
   258  	wire.Build(
   259  		K8sWireSet,
   260  		k8s.ProvideMinikubeClient,
   261  	)
   262  	return nil, nil
   263  }
   264  
   265  func wireK8sVersion(ctx context.Context) (*version.Info, error) {
   266  	wire.Build(K8sWireSet)
   267  	return nil, nil
   268  }
   269  
   270  func wireDockerClusterClient(ctx context.Context) (docker.ClusterClient, error) {
   271  	wire.Build(UpWireSet)
   272  	return nil, nil
   273  }
   274  
   275  func wireDockerLocalClient(ctx context.Context) (docker.LocalClient, error) {
   276  	wire.Build(UpWireSet)
   277  	return nil, nil
   278  }
   279  
   280  func wireDockerCompositeClient(ctx context.Context) (docker.CompositeClient, error) {
   281  	wire.Build(UpWireSet)
   282  	return nil, nil
   283  }
   284  
   285  func wireDownDeps(ctx context.Context, tiltAnalytics *analytics.TiltAnalytics, subcommand model.TiltSubcommand) (DownDeps, error) {
   286  	wire.Build(UpWireSet,
   287  		wire.Struct(new(DownDeps), "*"))
   288  	return DownDeps{}, nil
   289  }
   290  
   291  type DownDeps struct {
   292  	tfl              tiltfile.TiltfileLoader
   293  	dcClient         dockercompose.DockerComposeClient
   294  	kClient          k8s.Client
   295  	execer           localexec.Execer
   296  	kubeconfigWriter *kubeconfig.Writer
   297  	fs               afero.Fs
   298  }
   299  
   300  func wireLogsDeps(ctx context.Context, tiltAnalytics *analytics.TiltAnalytics, subcommand model.TiltSubcommand) (LogsDeps, error) {
   301  	wire.Build(UpWireSet,
   302  		wire.Struct(new(LogsDeps), "*"))
   303  	return LogsDeps{}, nil
   304  }
   305  
   306  type LogsDeps struct {
   307  	url     model.WebURL
   308  	printer *hud.IncrementalPrinter
   309  	filter  hud.LogFilter
   310  }
   311  
   312  func provideClock() func() time.Time {
   313  	return time.Now
   314  }
   315  
   316  type DumpImageDeployRefDeps struct {
   317  	DockerBuilder *build.DockerBuilder
   318  	DockerClient  docker.Client
   319  }
   320  
   321  func wireDumpImageDeployRefDeps(ctx context.Context) (DumpImageDeployRefDeps, error) {
   322  	wire.Build(UpWireSet,
   323  		wire.Struct(new(DumpImageDeployRefDeps), "*"))
   324  	return DumpImageDeployRefDeps{}, nil
   325  }
   326  
   327  func wireAnalytics(l logger.Logger, cmdName model.TiltSubcommand) (*tiltanalytics.TiltAnalytics, error) {
   328  	wire.Build(UpWireSet,
   329  		newAnalytics)
   330  	return nil, nil
   331  }
   332  
   333  func wireClientGetter(ctx context.Context) (*cliclient.Getter, error) {
   334  	wire.Build(CLIClientWireSet)
   335  	return nil, nil
   336  }
   337  
   338  func wireLsp(ctx context.Context, l logger.Logger, subcommand model.TiltSubcommand) (cmdLspDeps, error) {
   339  	wire.Build(UpWireSet, newLspDeps, newAnalytics)
   340  	return cmdLspDeps{}, nil
   341  }
   342  
   343  func provideCITimeoutFlag() model.CITimeoutFlag {
   344  	return model.CITimeoutFlag(ciTimeout)
   345  }
   346  
   347  func provideLogSource() hud.FilterSource {
   348  	return hud.FilterSource(logSourceFlag)
   349  }
   350  
   351  func provideLogResources() hud.FilterResources {
   352  	result := []model.ManifestName{}
   353  	for _, r := range logResourcesFlag {
   354  		result = append(result, model.ManifestName(r))
   355  	}
   356  	return hud.FilterResources(result)
   357  }
   358  
   359  func provideLogLevel() hud.FilterLevel {
   360  	switch logLevelFlag {
   361  	case "warn", "WARN", "warning", "WARNING":
   362  		return hud.FilterLevel(logger.WarnLvl)
   363  	case "error", "ERROR":
   364  		return hud.FilterLevel(logger.ErrorLvl)
   365  	default:
   366  		return hud.FilterLevel(logger.NoneLvl)
   367  	}
   368  }