github.com/grahambrereton-form3/tilt@v0.10.18/internal/engine/testdata_test.go (about) 1 package engine 2 3 import ( 4 "fmt" 5 6 "github.com/windmilleng/tilt/internal/container" 7 "github.com/windmilleng/tilt/internal/k8s/testyaml" 8 "github.com/windmilleng/tilt/internal/testutils/manifestbuilder" 9 "github.com/windmilleng/tilt/pkg/model" 10 ) 11 12 type Fixture = manifestbuilder.Fixture 13 14 const SanchoYAML = testyaml.SanchoYAML 15 16 const SanchoTwinYAML = testyaml.SanchoTwinYAML 17 18 const SanchoBaseDockerfile = ` 19 FROM go:1.10 20 ` 21 22 const SanchoDockerfile = ` 23 FROM go:1.10 24 ADD . . 25 RUN go install github.com/windmilleng/sancho 26 ENTRYPOINT /go/bin/sancho 27 ` 28 29 var SanchoRef = container.MustParseSelector(testyaml.SanchoImage) 30 var SanchoBaseRef = container.MustParseSelector("sancho-base") 31 var SanchoSidecarRef = container.MustParseSelector(testyaml.SanchoSidecarImage) 32 33 func NewSanchoFastBuild(fixture Fixture) model.FastBuild { 34 return model.FastBuild{ 35 BaseDockerfile: SanchoBaseDockerfile, 36 Syncs: []model.Sync{ 37 model.Sync{ 38 LocalPath: fixture.Path(), 39 ContainerPath: "/go/src/github.com/windmilleng/sancho", 40 }, 41 }, 42 Runs: model.ToRuns([]model.Cmd{ 43 model.Cmd{Argv: []string{"go", "install", "github.com/windmilleng/sancho"}}, 44 }), 45 Entrypoint: model.Cmd{Argv: []string{"/go/bin/sancho"}}, 46 } 47 } 48 49 func SyncStepsForApp(app string, fixture Fixture) []model.LiveUpdateSyncStep { 50 return []model.LiveUpdateSyncStep{model.LiveUpdateSyncStep{ 51 Source: fixture.Path(), 52 Dest: fmt.Sprintf("/go/src/github.com/windmilleng/%s", app), 53 }} 54 } 55 func SanchoSyncSteps(fixture Fixture) []model.LiveUpdateSyncStep { 56 return SyncStepsForApp("sancho", fixture) 57 } 58 59 func RunStepsForApp(app string) []model.LiveUpdateRunStep { 60 return []model.LiveUpdateRunStep{model.LiveUpdateRunStep{Command: model.Cmd{Argv: []string{"go", "install", fmt.Sprintf("github.com/windmilleng/%s", app)}}}} 61 } 62 63 var SanchoRunSteps = RunStepsForApp("sancho") 64 65 func NewSanchoFastBuildImage(fixture Fixture) model.ImageTarget { 66 fbInfo := NewSanchoFastBuild(fixture) 67 return model.NewImageTarget(SanchoRef).WithBuildDetails(fbInfo) 68 } 69 70 func NewSanchoFastBuildManifest(f Fixture) model.Manifest { 71 return manifestbuilder.New(f, "sancho"). 72 WithK8sYAML(SanchoYAML). 73 WithImageTarget(NewSanchoFastBuildImage(f)). 74 Build() 75 } 76 77 func NewSanchoLiveUpdateManifest(f Fixture) model.Manifest { 78 return manifestbuilder.New(f, "sancho"). 79 WithK8sYAML(SanchoYAML). 80 WithImageTarget(NewSanchoLiveUpdateImageTarget(f)). 81 Build() 82 } 83 84 func NewSanchoFastBuildDCManifest(f Fixture) model.Manifest { 85 return manifestbuilder.New(f, "sancho"). 86 WithDockerCompose(). 87 WithImageTarget(NewSanchoFastBuildImage(f)). 88 Build() 89 } 90 91 func NewSanchoFastBuildManifestWithCache(fixture Fixture, paths []string) model.Manifest { 92 manifest := NewSanchoFastBuildManifest(fixture) 93 manifest = manifest.WithImageTarget(manifest.ImageTargetAt(0).WithCachePaths(paths)) 94 return manifest 95 } 96 97 func NewSanchoManifestWithImageInEnvVar(f Fixture) model.Manifest { 98 it2 := model.NewImageTarget(container.MustParseSelector(SanchoRef.String() + "2")).WithBuildDetails(model.DockerBuild{ 99 Dockerfile: SanchoDockerfile, 100 BuildPath: f.Path(), 101 }) 102 it2.MatchInEnvVars = true 103 return manifestbuilder.New(f, "sancho"). 104 WithK8sYAML(testyaml.SanchoImageInEnvYAML). 105 WithImageTargets(NewSanchoDockerBuildImageTarget(f), it2). 106 Build() 107 } 108 109 func NewSanchoCustomBuildManifest(fixture Fixture) model.Manifest { 110 return NewSanchoCustomBuildManifestWithTag(fixture, "") 111 } 112 113 func NewSanchoCustomBuildImageTarget(fixture Fixture) model.ImageTarget { 114 return NewSanchoCustomBuildImageTargetWithTag(fixture, "") 115 } 116 117 func NewSanchoCustomBuildImageTargetWithTag(fixture Fixture, tag string) model.ImageTarget { 118 cb := model.CustomBuild{ 119 Command: "true", 120 Deps: []string{fixture.JoinPath("app")}, 121 Tag: tag, 122 } 123 return model.NewImageTarget(SanchoRef).WithBuildDetails(cb) 124 } 125 126 func NewSanchoCustomBuildManifestWithTag(fixture Fixture, tag string) model.Manifest { 127 return manifestbuilder.New(fixture, "sancho"). 128 WithK8sYAML(SanchoYAML). 129 WithImageTarget(NewSanchoCustomBuildImageTargetWithTag(fixture, tag)). 130 Build() 131 } 132 133 func NewSanchoCustomBuildManifestWithFastBuild(fixture Fixture) model.Manifest { 134 fb := NewSanchoFastBuild(fixture) 135 cb := model.CustomBuild{ 136 Command: "true", 137 Deps: []string{fixture.JoinPath("app")}, 138 Fast: fb, 139 } 140 141 return manifestbuilder.New(fixture, "sancho"). 142 WithK8sYAML(SanchoYAML). 143 WithImageTarget(model.NewImageTarget(SanchoRef).WithBuildDetails(cb)). 144 Build() 145 } 146 147 func NewSanchoCustomBuildManifestWithPushDisabled(fixture Fixture) model.Manifest { 148 cb := model.CustomBuild{ 149 Command: "true", 150 Deps: []string{fixture.JoinPath("app")}, 151 DisablePush: true, 152 Tag: "tilt-build", 153 } 154 155 return manifestbuilder.New(fixture, "sancho"). 156 WithK8sYAML(SanchoYAML). 157 WithImageTarget(model.NewImageTarget(SanchoRef).WithBuildDetails(cb)). 158 Build() 159 } 160 161 func NewSanchoDockerBuildImageTarget(f Fixture) model.ImageTarget { 162 return model.NewImageTarget(SanchoRef).WithBuildDetails(model.DockerBuild{ 163 Dockerfile: SanchoDockerfile, 164 BuildPath: f.Path(), 165 }) 166 } 167 168 func NewSanchoSyncOnlyImageTarget(f Fixture, syncs []model.LiveUpdateSyncStep) model.ImageTarget { 169 lu := assembleLiveUpdate(syncs, nil, false, []string{}, f) 170 return imageTargetWithLiveUpdate(NewSanchoDockerBuildImageTarget(f), lu) 171 } 172 173 func NewSanchoLiveUpdateImageTarget(f Fixture) model.ImageTarget { 174 syncs := []model.LiveUpdateSyncStep{ 175 { 176 Source: f.Path(), 177 Dest: "/go/src/github.com/windmilleng/sancho", 178 }, 179 } 180 runs := []model.LiveUpdateRunStep{ 181 { 182 Command: model.Cmd{Argv: []string{"go", "install", "github.com/windmilleng/sancho"}}, 183 }, 184 } 185 186 lu := assembleLiveUpdate(syncs, runs, true, []string{}, f) 187 return imageTargetWithLiveUpdate(NewSanchoDockerBuildImageTarget(f), lu) 188 } 189 190 func NewSanchoSidecarDockerBuildImageTarget(f Fixture) model.ImageTarget { 191 iTarget := NewSanchoDockerBuildImageTarget(f) 192 iTarget.ConfigurationRef = SanchoSidecarRef 193 iTarget.DeploymentRef = SanchoSidecarRef.AsNamedOnly() 194 return iTarget 195 } 196 197 func NewSanchoSidecarFastBuildImageTarget(f Fixture) model.ImageTarget { 198 iTarget := NewSanchoFastBuildImage(f) 199 iTarget.ConfigurationRef = SanchoSidecarRef 200 iTarget.DeploymentRef = SanchoSidecarRef.AsNamedOnly() 201 return iTarget 202 } 203 204 func NewSanchoSidecarLiveUpdateImageTarget(f Fixture) model.ImageTarget { 205 iTarget := NewSanchoLiveUpdateImageTarget(f) 206 iTarget.ConfigurationRef = SanchoSidecarRef 207 iTarget.DeploymentRef = SanchoSidecarRef.AsNamedOnly() 208 return iTarget 209 } 210 211 func NewSanchoDockerBuildManifest(f Fixture) model.Manifest { 212 return NewSanchoDockerBuildManifestWithYaml(f, SanchoYAML) 213 } 214 215 func NewSanchoDockerBuildManifestWithYaml(f Fixture, yaml string) model.Manifest { 216 return manifestbuilder.New(f, "sancho"). 217 WithK8sYAML(yaml). 218 WithImageTarget(NewSanchoDockerBuildImageTarget(f)). 219 Build() 220 } 221 222 func NewSanchoDockerBuildManifestWithCache(f Fixture, paths []string) model.Manifest { 223 manifest := NewSanchoDockerBuildManifest(f) 224 manifest = manifest.WithImageTarget(manifest.ImageTargetAt(0).WithCachePaths(paths)) 225 return manifest 226 } 227 228 func NewSanchoDockerBuildManifestWithNestedFastBuild(fixture Fixture) model.Manifest { 229 manifest := NewSanchoDockerBuildManifest(fixture) 230 iTarg := manifest.ImageTargetAt(0) 231 fb := NewSanchoFastBuild(fixture) 232 sb := iTarg.DockerBuildInfo() 233 sb.FastBuild = fb 234 iTarg = iTarg.WithBuildDetails(sb) 235 manifest = manifest.WithImageTarget(iTarg) 236 return manifest 237 } 238 239 func NewSanchoDockerBuildMultiStageManifest(fixture Fixture) model.Manifest { 240 baseImage := model.NewImageTarget(SanchoBaseRef).WithBuildDetails(model.DockerBuild{ 241 Dockerfile: `FROM golang:1.10`, 242 BuildPath: fixture.JoinPath("sancho-base"), 243 }) 244 245 srcImage := model.NewImageTarget(SanchoRef).WithBuildDetails(model.DockerBuild{ 246 Dockerfile: ` 247 FROM sancho-base 248 ADD . . 249 RUN go install github.com/windmilleng/sancho 250 ENTRYPOINT /go/bin/sancho 251 `, 252 BuildPath: fixture.JoinPath("sancho"), 253 }).WithDependencyIDs([]model.TargetID{baseImage.ID()}) 254 255 return manifestbuilder.New(fixture, "sancho"). 256 WithK8sYAML(SanchoYAML). 257 WithImageTargets(baseImage, srcImage). 258 Build() 259 } 260 261 func NewSanchoDockerBuildMultiStageManifestWithLiveUpdate(fixture Fixture, lu model.LiveUpdate) model.Manifest { 262 baseImage := model.NewImageTarget(SanchoBaseRef).WithBuildDetails(model.DockerBuild{ 263 Dockerfile: `FROM golang:1.10`, 264 BuildPath: fixture.JoinPath("sancho-base"), 265 }) 266 267 srcImage := model.NewImageTarget(SanchoRef).WithBuildDetails(model.DockerBuild{ 268 Dockerfile: ` 269 FROM sancho-base 270 ADD . . 271 RUN go install github.com/windmilleng/sancho 272 ENTRYPOINT /go/bin/sancho 273 `, 274 BuildPath: fixture.JoinPath("sancho"), 275 }).WithDependencyIDs([]model.TargetID{baseImage.ID()}) 276 277 return manifestbuilder.New(fixture, "sancho"). 278 WithK8sYAML(SanchoYAML). 279 WithImageTargets(baseImage, srcImage). 280 WithLiveUpdateAtIndex(lu, 1). 281 Build() 282 } 283 284 func NewSanchoLiveUpdateMultiStageManifest(fixture Fixture) model.Manifest { 285 baseImage := model.NewImageTarget(SanchoBaseRef).WithBuildDetails(model.DockerBuild{ 286 Dockerfile: `FROM golang:1.10`, 287 BuildPath: fixture.Path(), 288 }) 289 290 srcImage := NewSanchoLiveUpdateImageTarget(fixture) 291 dbInfo := srcImage.DockerBuildInfo() 292 dbInfo.Dockerfile = `FROM sancho-base` 293 294 srcImage = srcImage. 295 WithBuildDetails(dbInfo). 296 WithDependencyIDs([]model.TargetID{baseImage.ID()}) 297 298 kTarget := model.K8sTarget{YAML: SanchoYAML}. 299 WithDependencyIDs([]model.TargetID{srcImage.ID()}) 300 301 return model.Manifest{Name: "sancho"}. 302 WithImageTargets([]model.ImageTarget{baseImage, srcImage}). 303 WithDeployTarget(kTarget) 304 } 305 306 func NewManifestsWithCommonAncestor(fixture Fixture) (model.Manifest, model.Manifest) { 307 refCommon := container.MustParseSelector("gcr.io/common") 308 ref1 := container.MustParseSelector("gcr.io/image-1") 309 ref2 := container.MustParseSelector("gcr.io/image-2") 310 311 fixture.MkdirAll("common") 312 fixture.MkdirAll("image-1") 313 fixture.MkdirAll("image-2") 314 315 targetCommon := model.NewImageTarget(refCommon).WithBuildDetails(model.DockerBuild{ 316 Dockerfile: `FROM golang:1.10`, 317 BuildPath: fixture.JoinPath("common"), 318 }) 319 target1 := model.NewImageTarget(ref1).WithBuildDetails(model.DockerBuild{ 320 Dockerfile: `FROM ` + refCommon.String(), 321 BuildPath: fixture.JoinPath("image-1"), 322 }) 323 target2 := model.NewImageTarget(ref2).WithBuildDetails(model.DockerBuild{ 324 Dockerfile: `FROM ` + refCommon.String(), 325 BuildPath: fixture.JoinPath("image-2"), 326 }) 327 328 m1 := manifestbuilder.New(fixture, "image-1"). 329 WithK8sYAML(testyaml.Deployment("image-1", ref1.String())). 330 WithImageTargets(targetCommon, target1). 331 Build() 332 m2 := manifestbuilder.New(fixture, "image-2"). 333 WithK8sYAML(testyaml.Deployment("image-2", ref2.String())). 334 WithImageTargets(targetCommon, target2). 335 Build() 336 return m1, m2 337 } 338 339 func assembleLiveUpdate(syncs []model.LiveUpdateSyncStep, runs []model.LiveUpdateRunStep, shouldRestart bool, fallBackOn []string, f Fixture) model.LiveUpdate { 340 var steps []model.LiveUpdateStep 341 if len(fallBackOn) > 0 { 342 steps = append(steps, model.LiveUpdateFallBackOnStep{Files: fallBackOn}) 343 } 344 for _, sync := range syncs { 345 steps = append(steps, sync) 346 } 347 for _, run := range runs { 348 steps = append(steps, run) 349 } 350 if shouldRestart { 351 steps = append(steps, model.LiveUpdateRestartContainerStep{}) 352 } 353 lu, err := model.NewLiveUpdate(steps, f.Path()) 354 if err != nil { 355 f.T().Fatal(err) 356 } 357 return lu 358 } 359 360 func imageTargetWithLiveUpdate(i model.ImageTarget, lu model.LiveUpdate) model.ImageTarget { 361 db := i.DockerBuildInfo() 362 db.LiveUpdate = lu 363 return i.WithBuildDetails(db) 364 }