(t *testing.T)
| 296 | } |
| 297 | |
| 298 | func TestBuildPlatformsWithCorrectBuildxConfig(t *testing.T) { |
| 299 | if runtime.GOOS == "windows" { |
| 300 | t.Skip("Running on Windows. Skipping...") |
| 301 | } |
| 302 | c := NewParallelCLI(t) |
| 303 | |
| 304 | // declare builder |
| 305 | result := c.RunDockerCmd(t, "buildx", "create", "--name", "build-platform", "--use", "--bootstrap") |
| 306 | assert.NilError(t, result.Error) |
| 307 | |
| 308 | t.Cleanup(func() { |
| 309 | c.RunDockerComposeCmd(t, "--project-directory", "fixtures/build-test/platforms", "down") |
| 310 | _ = c.RunDockerCmd(t, "buildx", "rm", "-f", "build-platform") |
| 311 | }) |
| 312 | |
| 313 | t.Run("platform not supported by builder", func(t *testing.T) { |
| 314 | res := c.RunDockerComposeCmdNoCheck(t, "--project-directory", "fixtures/build-test/platforms", |
| 315 | "-f", "fixtures/build-test/platforms/compose-unsupported-platform.yml", "build") |
| 316 | res.Assert(t, icmd.Expected{ |
| 317 | ExitCode: 1, |
| 318 | Err: "no match for platform", |
| 319 | }) |
| 320 | }) |
| 321 | |
| 322 | t.Run("multi-arch build ok", func(t *testing.T) { |
| 323 | res := c.RunDockerComposeCmdNoCheck(t, "--project-directory", "fixtures/build-test/platforms", "build") |
| 324 | assert.NilError(t, res.Error, res.Stderr()) |
| 325 | res.Assert(t, icmd.Expected{Out: "I am building for linux/arm64"}) |
| 326 | res.Assert(t, icmd.Expected{Out: "I am building for linux/amd64"}) |
| 327 | }) |
| 328 | |
| 329 | t.Run("multi-arch multi service builds ok", func(t *testing.T) { |
| 330 | res := c.RunDockerComposeCmdNoCheck(t, "--project-directory", "fixtures/build-test/platforms", |
| 331 | "-f", "fixtures/build-test/platforms/compose-multiple-platform-builds.yaml", "build") |
| 332 | assert.NilError(t, res.Error, res.Stderr()) |
| 333 | res.Assert(t, icmd.Expected{Out: "I'm Service A and I am building for linux/arm64"}) |
| 334 | res.Assert(t, icmd.Expected{Out: "I'm Service A and I am building for linux/amd64"}) |
| 335 | res.Assert(t, icmd.Expected{Out: "I'm Service B and I am building for linux/arm64"}) |
| 336 | res.Assert(t, icmd.Expected{Out: "I'm Service B and I am building for linux/amd64"}) |
| 337 | res.Assert(t, icmd.Expected{Out: "I'm Service C and I am building for linux/arm64"}) |
| 338 | res.Assert(t, icmd.Expected{Out: "I'm Service C and I am building for linux/amd64"}) |
| 339 | }) |
| 340 | |
| 341 | t.Run("multi-arch up --build", func(t *testing.T) { |
| 342 | res := c.RunDockerComposeCmdNoCheck(t, "--project-directory", "fixtures/build-test/platforms", "up", "--build", "--menu=false") |
| 343 | assert.NilError(t, res.Error, res.Stderr()) |
| 344 | res.Assert(t, icmd.Expected{Out: "platforms-1 exited with code 0"}) |
| 345 | }) |
| 346 | |
| 347 | t.Run("use DOCKER_DEFAULT_PLATFORM value when up --build", func(t *testing.T) { |
| 348 | cmd := c.NewDockerComposeCmd(t, "--project-directory", "fixtures/build-test/platforms", "up", "--build", "--menu=false") |
| 349 | res := icmd.RunCmd(cmd, func(cmd *icmd.Cmd) { |
| 350 | cmd.Env = append(cmd.Env, "DOCKER_DEFAULT_PLATFORM=linux/amd64") |
| 351 | }) |
| 352 | assert.NilError(t, res.Error, res.Stderr()) |
| 353 | res.Assert(t, icmd.Expected{Out: "I am building for linux/amd64"}) |
| 354 | assert.Assert(t, !strings.Contains(res.Stdout(), "I am building for linux/arm64")) |
| 355 | }) |
nothing calls this directly
no test coverage detected