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 }