github.com/profzone/eden-framework@v1.0.10/internal/generator/docker_generator.go (about)

     1  package generator
     2  
     3  import (
     4  	"github.com/profzone/eden-framework/internal/generator/files"
     5  	"github.com/profzone/envconfig"
     6  	"github.com/sirupsen/logrus"
     7  	"gopkg.in/yaml.v2"
     8  	"path"
     9  )
    10  
    11  const (
    12  	Image     = "${PROFZONE_DOCKER_REGISTRY}/${PROJECT_GROUP}/${PROJECT_NAME}:${PROJECT_VERSION}"
    13  	FromImage = "${PROFZONE_DOCKER_REGISTRY}/profzone/golang-runtime:1.14"
    14  )
    15  
    16  type DockerGenerator struct {
    17  	ServiceName string
    18  	EnvVars     []envconfig.EnvVar
    19  }
    20  
    21  func NewDockerGenerator(serviceName string, envVars []envconfig.EnvVar) *DockerGenerator {
    22  	return &DockerGenerator{
    23  		ServiceName: serviceName,
    24  		EnvVars:     envVars,
    25  	}
    26  }
    27  
    28  func (d *DockerGenerator) Load(path string) {
    29  }
    30  
    31  func (d *DockerGenerator) Pick() {
    32  }
    33  
    34  func (d *DockerGenerator) Output(outputPath string) Outputs {
    35  	outputs := Outputs{}
    36  
    37  	dockerFile := &files.Dockerfile{
    38  		From:  FromImage,
    39  		Image: Image,
    40  	}
    41  	dockerFile = dockerFile.AddEnv("GOENV", "DEV")
    42  
    43  	for _, envVar := range d.EnvVars {
    44  		strValue := envVar.GetValue(false)
    45  		dockerFile = dockerFile.AddEnv(envVar.Key, strValue)
    46  	}
    47  
    48  	dockerFile = dockerFile.WithWorkDir("/go/bin")
    49  	dockerFile = dockerFile.WithCmd("./"+d.ServiceName, "-d=false", "-m=false")
    50  	dockerFile = dockerFile.WithExpose("80")
    51  
    52  	dockerFile = dockerFile.AddContent("./build/configs", "./configs")
    53  	dockerFile = dockerFile.AddContent("./build/"+d.ServiceName, "./")
    54  	dockerFile = dockerFile.AddContent("./project.yml", "./")
    55  	dockerFile = dockerFile.AddContent("./api/openapi.json", "./")
    56  
    57  	content, err := yaml.Marshal(dockerFile)
    58  	if err != nil {
    59  		logrus.Panic(err)
    60  	}
    61  
    62  	configDefaultFile := files.NewConfigDefaultFile(d.EnvVars)
    63  
    64  	outputs.Add(path.Join(outputPath, "build/dockerfile.default.yml"), string(content))
    65  	outputs.Add(path.Join(outputPath, "build/configs/default.yml"), configDefaultFile.String())
    66  	return outputs
    67  }