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  }