func()

in command-runner/internal/containers/docker/docker_build.go [21:68]


func (dcs *dockerContainerService) BuildImage(input ctypes.BuildImageInput) common.Executor {
	return func(ctx context.Context) error {
		logger := log.Ctx(ctx)
		if input.Platform != "" {
			logger.Info().Msgf("%sdocker build -t %s --platform %s %s", logPrefix, input.ImageTag, input.Platform, input.ContextDir)
		} else {
			logger.Info().Msgf("%sdocker build -t %s %s", logPrefix, input.ImageTag, input.ContextDir)
		}
		if common.Dryrun(ctx) {
			return nil
		}

		cli, err := getDockerClient(ctx)
		if err != nil {
			return err
		}
		defer cli.Close()

		logger.Debug().Msgf("Building image from '%v'", input.ContextDir)

		tags := []string{input.ImageTag}
		options := types.ImageBuildOptions{
			Tags:        tags,
			Remove:      true,
			Platform:    input.Platform,
			AuthConfigs: loadDockerAuthConfigs(ctx),
			Dockerfile:  input.Dockerfile,
		}
		buildContext, err := createBuildContext(ctx, input.ContextDir, input.Dockerfile)
		if err != nil {
			return err
		}

		defer buildContext.Close()

		logger.Debug().Msgf("Creating image from context dir '%s' with tag '%s' and platform '%s'", input.ContextDir, input.ImageTag, input.Platform)
		resp, err := cli.ImageBuild(ctx, buildContext, options)
		if err != nil {
			return err
		}

		err = logDockerResponse(log.Ctx(ctx), resp.Body, err != nil)
		if err != nil {
			return err
		}
		return nil
	}
}