github.com/profzone/eden-framework@v1.0.10/internal/project/shipping.go (about) 1 package project 2 3 import ( 4 "github.com/profzone/eden-framework/internal/docker" 5 "gopkg.in/yaml.v2" 6 "io/ioutil" 7 "os" 8 "os/exec" 9 ) 10 11 var tmpDockerfile = "Dockerfile" 12 13 var DockerfileYmlOrders = []string{ 14 "build/dockerfile.default.yml", 15 "build/dockerfile.yml", 16 } 17 18 func CommandsForShipping(p *Project, push bool) (commands []*exec.Cmd) { 19 dockerfile := &docker.Dockerfile{} 20 21 hasDockerfileYaml := false 22 23 for _, dockerfileYml := range DockerfileYmlOrders { 24 if isPathExist(dockerfileYml) { 25 hasDockerfileYaml = true 26 mayReadFileAndUnmarshal(dockerfileYml, dockerfile) 27 } 28 } 29 30 if dockerfile.Image == "" { 31 dockerfile.Image = "${PROFZONE_DOCKER_REGISTRY}/${PROJECT_OWNER}/${PROJECT_NAME}:${PROJECT_VERSION}" 32 } 33 34 if hasDockerfileYaml { 35 dockerfile.AddEnv(EnvKeyProjectVersion, p.Version.String()) 36 dockerfile.AddEnv(EnvKeyProjectOwner, p.Owner) 37 dockerfile.AddEnv(EnvKeyProjectGroup, p.Group) 38 dockerfile.AddEnv(EnvKeyProjectName, p.Name) 39 dockerfile.AddEnv(EnvKeyProjectFeature, p.Feature) 40 41 ioutil.WriteFile(tmpDockerfile, []byte(dockerfile.String()), os.ModePerm) 42 } 43 44 commands = append(commands, p.Command("docker", "build", "-f", tmpDockerfile, "-t", dockerfile.Image, ".")) 45 if push { 46 commands = append(commands, p.Command("docker", "push", dockerfile.Image)) 47 } 48 return 49 } 50 51 func isPathExist(path string) bool { 52 f, _ := os.Stat(path) 53 return f != nil 54 } 55 56 func mayReadFileAndUnmarshal(file string, v interface{}) { 57 bytes, errForRead := ioutil.ReadFile(file) 58 if errForRead != nil { 59 panic(errForRead) 60 } 61 err := yaml.Unmarshal(bytes, v) 62 if err != nil { 63 panic(err) 64 } 65 }