integration-cli/fixtures.go
ff91276d
 package main
 
 import (
 	"fmt"
 	"io/ioutil"
 	"os"
 	"os/exec"
 	"path/filepath"
 	"sync"
 )
 
 var ensureHTTPServerOnce sync.Once
 
 func ensureHTTPServerImage() error {
 	var doIt bool
 	ensureHTTPServerOnce.Do(func() {
 		doIt = true
 	})
 
 	if !doIt {
 		return nil
 	}
 
 	protectedImages["httpserver:latest"] = struct{}{}
 
 	tmp, err := ioutil.TempDir("", "docker-http-server-test")
 	if err != nil {
 		return fmt.Errorf("could not build http server: %v", err)
 	}
 	defer os.RemoveAll(tmp)
 
 	goos := daemonPlatform
 	if goos == "" {
 		goos = "linux"
 	}
 	goarch := os.Getenv("DOCKER_ENGINE_GOARCH")
 	if goarch == "" {
 		goarch = "amd64"
 	}
 
 	goCmd, lookErr := exec.LookPath("go")
 	if lookErr != nil {
 		return fmt.Errorf("could not build http server: %v", lookErr)
 	}
 
 	cmd := exec.Command(goCmd, "build", "-o", filepath.Join(tmp, "httpserver"), "github.com/docker/docker/contrib/httpserver")
 	cmd.Env = append(os.Environ(), []string{
 		"CGO_ENABLED=0",
 		"GOOS=" + goos,
 		"GOARCH=" + goarch,
 	}...)
 	var out []byte
 	if out, err = cmd.CombinedOutput(); err != nil {
 		return fmt.Errorf("could not build http server: %s", string(out))
 	}
 
 	cpCmd, lookErr := exec.LookPath("cp")
 	if lookErr != nil {
 		return fmt.Errorf("could not build http server: %v", lookErr)
 	}
 	if out, err = exec.Command(cpCmd, "../contrib/httpserver/Dockerfile", filepath.Join(tmp, "Dockerfile")).CombinedOutput(); err != nil {
 		return fmt.Errorf("could not build http server: %v", string(out))
 	}
 
 	if out, err = exec.Command(dockerBinary, "build", "-q", "-t", "httpserver", tmp).CombinedOutput(); err != nil {
 		return fmt.Errorf("could not build http server: %v", string(out))
 	}
 	return nil
 }