github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/engine/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 engine 7 8 import ( 9 "context" 10 11 "github.com/google/wire" 12 "github.com/jonboulle/clockwork" 13 sdktrace "go.opentelemetry.io/otel/sdk/trace" 14 ctrlclient "sigs.k8s.io/controller-runtime/pkg/client" 15 16 "github.com/tilt-dev/wmclient/pkg/dirs" 17 18 "github.com/tilt-dev/clusterid" 19 "github.com/tilt-dev/tilt/internal/analytics" 20 "github.com/tilt-dev/tilt/internal/build" 21 "github.com/tilt-dev/tilt/internal/container" 22 "github.com/tilt-dev/tilt/internal/controllers/core/cmd" 23 "github.com/tilt-dev/tilt/internal/controllers/core/cmdimage" 24 "github.com/tilt-dev/tilt/internal/controllers/core/dockercomposeservice" 25 "github.com/tilt-dev/tilt/internal/controllers/core/dockerimage" 26 "github.com/tilt-dev/tilt/internal/controllers/core/kubernetesapply" 27 "github.com/tilt-dev/tilt/internal/docker" 28 "github.com/tilt-dev/tilt/internal/dockercompose" 29 "github.com/tilt-dev/tilt/internal/engine/buildcontrol" 30 "github.com/tilt-dev/tilt/internal/k8s" 31 "github.com/tilt-dev/tilt/internal/localexec" 32 "github.com/tilt-dev/tilt/internal/store" 33 "github.com/tilt-dev/tilt/internal/store/liveupdates" 34 ) 35 36 var DeployerBaseWireSet = wire.NewSet( 37 buildcontrol.BaseWireSet, 38 wire.Value(UpperReducer), 39 40 // BuildOrder 41 DefaultBuildOrder, 42 43 wire.Bind(new(buildcontrol.BuildAndDeployer), new(*CompositeBuildAndDeployer)), 44 NewCompositeBuildAndDeployer, 45 ) 46 47 var DeployerWireSetTest = wire.NewSet( 48 DeployerBaseWireSet, 49 wire.InterfaceValue(new(sdktrace.SpanExporter), (sdktrace.SpanExporter)(nil)), 50 ) 51 52 var DeployerWireSet = wire.NewSet( 53 DeployerBaseWireSet, 54 ) 55 56 func provideFakeBuildAndDeployer( 57 ctx context.Context, 58 docker docker.Client, 59 kClient k8s.Client, 60 dir *dirs.TiltDevDir, 61 env clusterid.Product, 62 updateMode liveupdates.UpdateModeFlag, 63 dcc dockercompose.DockerComposeClient, 64 clock build.Clock, 65 kp build.KINDLoader, 66 analytics *analytics.TiltAnalytics, 67 ctrlClient ctrlclient.Client, 68 st store.RStore, 69 execer localexec.Execer) (buildcontrol.BuildAndDeployer, error) { 70 wire.Build( 71 DeployerWireSetTest, 72 provideFakeKubeContext, 73 provideFakeDockerClusterEnv, 74 kubernetesapply.NewReconciler, 75 dockerimage.NewReconciler, 76 cmdimage.NewReconciler, 77 dockercomposeservice.WireSet, 78 cmd.WireSet, 79 clockwork.NewRealClock, 80 provideFakeEnv, 81 ) 82 83 return nil, nil 84 } 85 86 func provideFakeEnv() *localexec.Env { 87 return localexec.EmptyEnv() 88 } 89 90 func provideFakeKubeContext(env clusterid.Product) k8s.KubeContext { 91 return k8s.KubeContext(string(env)) 92 } 93 94 // A simplified version of the normal calculation we do 95 // about whether we can build direct to a cluster 96 func provideFakeDockerClusterEnv(ctx context.Context, c docker.Client, k8sEnv clusterid.Product, kubeContext k8s.KubeContext, kClient k8s.Client) docker.ClusterEnv { 97 env := c.Env() 98 isLocalDockerCluster := k8sEnv == clusterid.ProductMinikube || k8sEnv == clusterid.ProductMicroK8s || k8sEnv == clusterid.ProductDockerDesktop 99 if isLocalDockerCluster { 100 isDockerRuntime := kClient.ContainerRuntime(ctx) == container.RuntimeDocker 101 if isDockerRuntime { 102 env.BuildToKubeContexts = append(env.BuildToKubeContexts, string(kubeContext)) 103 } 104 } 105 106 fake, ok := c.(*docker.FakeClient) 107 if ok { 108 fake.FakeEnv = env 109 } 110 111 return docker.ClusterEnv(env) 112 }