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  }