github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/store/liveupdates/update_mode.go (about) 1 package liveupdates 2 3 import ( 4 "fmt" 5 6 "github.com/tilt-dev/tilt/internal/docker" 7 "github.com/tilt-dev/tilt/internal/k8s" 8 ) 9 10 type UpdateMode string 11 12 // A type to bind to flag values that need validation. 13 type UpdateModeFlag UpdateMode 14 15 var ( 16 // Auto-pick the build mode based on 17 UpdateModeAuto UpdateMode = "auto" 18 19 // Only do image builds 20 UpdateModeImage UpdateMode = "image" 21 22 // Update containers in-place. This mode only works with DockerForDesktop and Minikube. 23 // If you try to use this mode with a different K8s cluster type, we will return an error 24 UpdateModeContainer UpdateMode = "container" 25 26 // Use `kubectl exec` 27 UpdateModeKubectlExec UpdateMode = "exec" 28 ) 29 30 var AllUpdateModes = []UpdateMode{ 31 UpdateModeAuto, 32 UpdateModeImage, 33 UpdateModeContainer, 34 UpdateModeKubectlExec, 35 } 36 37 func ProvideUpdateMode(flag UpdateModeFlag, kubeContext k8s.KubeContext, env docker.ClusterEnv) (UpdateMode, error) { 38 valid := false 39 for _, mode := range AllUpdateModes { 40 if mode == UpdateMode(flag) { 41 valid = true 42 } 43 } 44 45 if !valid { 46 return "", fmt.Errorf("unknown update mode %q. Valid Values: %v", flag, AllUpdateModes) 47 } 48 49 mode := UpdateMode(flag) 50 if mode == UpdateModeContainer { 51 if !docker.Env(env).WillBuildToKubeContext(kubeContext) { 52 return "", fmt.Errorf("update mode %q is only valid with local Docker clusters like Docker For Mac or Minikube", flag) 53 } 54 } 55 56 return mode, nil 57 }