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 }