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

     1  package generator
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/AlecAivazis/survey/v2/core"
     6  	"github.com/profzone/eden-framework/internal/generator/files"
     7  	"github.com/profzone/eden-framework/internal/project"
     8  	"path"
     9  )
    10  
    11  type expressBool bool
    12  
    13  func (e *expressBool) WriteAnswer(field string, value interface{}) error {
    14  	result := value.(core.OptionAnswer)
    15  	switch result.Value {
    16  	case "是":
    17  		*e = true
    18  	case "否":
    19  		*e = false
    20  	}
    21  	return nil
    22  }
    23  
    24  type ProjectOption struct {
    25  	Name            string
    26  	Group           string
    27  	Owner           string
    28  	Desc            string
    29  	Version         string
    30  	ProgramLanguage string `survey:"project_language"`
    31  	Workflow        string
    32  	ApolloSupport   expressBool `survey:"apollo_support"`
    33  }
    34  
    35  func NewProjectGenerator(opt ProjectOption) *ProjectGenerator {
    36  	p := project.Project{}
    37  	p = p.WithName(opt.Name).
    38  		WithGroup(opt.Group).
    39  		WithOwner(opt.Owner).
    40  		WithDesc(opt.Desc).
    41  		WithLanguage(opt.ProgramLanguage)
    42  
    43  	if opt.Version != "" {
    44  		p = p.WithVersion(opt.Version)
    45  	}
    46  
    47  	if opt.Workflow != "" && opt.Workflow != "custom" {
    48  		p = p.WithWorkflow(opt.Workflow)
    49  	}
    50  
    51  	var withApolloFlag string
    52  	if opt.ApolloSupport {
    53  		withApolloFlag = fmt.Sprintf(" -ldflags \"-X github.com/profzone/eden-framework/pkg/conf/apollo.Branch=%s.json\"", files.EnvVarInBash(project.EnvKeyCIBranch))
    54  	}
    55  	p.Scripts = map[string]project.Script{
    56  		"build": []string{
    57  			fmt.Sprintf("go build -v -o ./build/$PROJECT_NAME%s ./cmd", withApolloFlag),
    58  			"eden generate openapi",
    59  		},
    60  		"test": []string{
    61  			"go test ./cmd",
    62  		},
    63  	}
    64  
    65  	return &ProjectGenerator{
    66  		project: p,
    67  	}
    68  }
    69  
    70  type ProjectGenerator struct {
    71  	project project.Project
    72  }
    73  
    74  func (p *ProjectGenerator) Load(path string) {
    75  	p.project.SetEnviron()
    76  }
    77  
    78  func (p *ProjectGenerator) Pick() {
    79  }
    80  
    81  func (p *ProjectGenerator) Output(outputPath string) Outputs {
    82  	outputs := Outputs{}
    83  
    84  	outputs.Add(path.Join(outputPath, "project.yml"), p.project.String())
    85  	outputs.Add(path.Join(outputPath, ".drone.yml"), p.project.Workflow.TryExtendsOrSetDefaults().ToDroneConfig(&p.project).String())
    86  
    87  	return outputs
    88  }