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
}