func Tools()

in build/mage/docker/tools.go [152:228]


func Tools() error {
	mg.Deps(git.CollectInfo)

	// Retrieve golang attributes
	golangBaseImage := golangImage
	if os.Getenv("GOLANG_BASE_IMAGE") != "" {
		golangBaseImage = os.Getenv("GOLANG_BASE_IMAGE")
	}
	golangVersion := golangVersion
	if os.Getenv("GOLANG_VERSION") != "" {
		golangVersion = os.Getenv("GOLANG_VERSION")
	}
	goBoringVersion := goBoringVersion
	overrideGoBoringVersion := false
	if os.Getenv("GOBORING_VERSION") != "" {
		goBoringVersion = os.Getenv("GOBORING_VERSION")
		overrideGoBoringVersion = true
	}
	fipsMode := "0"
	if os.Getenv("FIPS_MODE") == "1" {
		fipsMode = os.Getenv("FIPS_MODE")
	}

	buf, err := merge(dockerToolTemplate, map[string]interface{}{
		"BuildDate":               time.Now().Format(time.RFC3339),
		"Version":                 git.Tag,
		"VcsRef":                  git.Revision,
		"GolangImage":             golangBaseImage,
		"GolangVersion":           golangVersion,
		"GoArchitecture":          goArchitecture,
		"OverrideGoBoringVersion": overrideGoBoringVersion,
		"GoBoringVersion":         goBoringVersion,
		"FIPSMode":                fipsMode,
		"UpxVersion":              upxVersion,
	})
	if err != nil {
		return err
	}

	// Check if we want to generate dockerfile output
	if os.Getenv("DOCKERFILE_ONLY") != "" {
		return os.WriteFile("Dockerfile.tools", buf.Bytes(), 0o600)
	}

	// Docker image name
	dockerImageName := toolImage
	if os.Getenv("DOCKER_IMAGE_NAME") != "" {
		dockerImageName = os.Getenv("DOCKER_IMAGE_NAME")
	}

	// Prepare command
	c := exec.Command("docker", "build",
		"-t", dockerImageName,
		"-f", "-",
		".",
	)

	// Prepare environment
	c.Env = os.Environ()
	c.Env = append(c.Env, "DOCKER_BUILDKIT=1")
	c.Stderr = os.Stderr
	c.Stdout = os.Stdout
	c.Stdin = buf // Pass Dockerfile as stdin

	// Execute
	err = c.Run()
	if err != nil {
		return fmt.Errorf("unable to run command: %w", err)
	}

	// Check execution error
	if !sh.CmdRan(err) {
		return fmt.Errorf("running '%s' failed with exit code %d", c.String(), sh.ExitStatus(err))
	}

	return err
}