feat(template): Refactor template standard variable and implement dockerfile
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Matthieu 'JP' DERASSE
2022-09-29 20:04:37 +00:00
parent edbd97705a
commit ac7df8be2d
16 changed files with 191 additions and 98 deletions

View File

@ -0,0 +1,13 @@
package base
import (
"github.com/juju/errors"
"git.home.m-and-m.ovh/mderasse/gouick/helpers"
"git.home.m-and-m.ovh/mderasse/gouick/models"
)
// GenerateDockerfile will generate dockerfile based on the given config.
func (a APIType) GenerateDockerfile(path string, config *models.Config) error {
return errors.NotImplementedf("%s not implemented for %s", helpers.GetCurrentFuncName(), a.GetName())
}

View File

@ -0,0 +1,47 @@
package go_swagger
import (
"github.com/juju/errors"
"git.home.m-and-m.ovh/mderasse/gouick/models"
log "github.com/sirupsen/logrus"
)
type stdTemplateStruct struct {
categorizedProcess
Config *models.Config
}
type categorizedProcess struct {
APIs []*models.Process
Crons []*models.Process
Workers []*models.Process
}
// getStdTemplate will generate the "basic" struct we will provide to a template.
func (a APIType) getStdTemplate(path string, config *models.Config) (*stdTemplateStruct, error) {
data := stdTemplateStruct{
Config: config,
}
processes, err := a.getProcesses(path)
if err != nil {
log.Error("Fail to list processes")
return nil, errors.Trace(err)
}
for _, process := range processes {
switch process.Type {
case models.ProcessType_API:
data.APIs = append(data.APIs, process)
case models.ProcessType_CRON:
data.Crons = append(data.Crons, process)
case models.ProcessType_WORKER:
data.Workers = append(data.Workers, process)
}
}
return &data, nil
}

View File

@ -0,0 +1,33 @@
package go_swagger
import (
"path/filepath"
"github.com/juju/errors"
"git.home.m-and-m.ovh/mderasse/gouick/helpers"
"git.home.m-and-m.ovh/mderasse/gouick/models"
log "github.com/sirupsen/logrus"
)
// GenerateDockerfile will generate a Dockerfile based on the given config.
func (a APIType) GenerateDockerfile(path string, config *models.Config) error {
log.Debugf("Starting %s - %s", a.GetName(), helpers.GetCurrentFuncName())
templatePath := filepath.Join(templateDirectory, "Dockerfile.tmpl")
savePath := filepath.Join(path, "Dockerfile")
data, err := a.getStdTemplate(path, config)
if err != nil {
log.Error("Fail to generate standard template variable")
return errors.Trace(err)
}
err = helpers.WriteTemplate(templatePath, savePath, data)
if err != nil {
return errors.Trace(err)
}
return nil
}

View File

@ -11,12 +11,6 @@ import (
log "github.com/sirupsen/logrus"
)
type launcherTemplate struct {
APIs []*models.Process
Crons []*models.Process
Workers []*models.Process
}
// GenerateLauncher will generate a launcher.sh based on the files found in cmd directory.
func (a APIType) GenerateLauncher(path string, config *models.Config) error {
log.Debugf("Starting %s - %s", a.GetName(), helpers.GetCurrentFuncName())
@ -24,25 +18,12 @@ func (a APIType) GenerateLauncher(path string, config *models.Config) error {
templatePath := filepath.Join(templateDirectory, "launcher.sh.tmpl")
savePath := filepath.Join(path, "launcher.sh")
data := launcherTemplate{}
processes, err := a.getProcesses(path)
data, err := a.getStdTemplate(path, config)
if err != nil {
log.Error("Fail to list processes")
log.Error("Fail to generate standard template variable")
return errors.Trace(err)
}
for _, process := range processes {
switch process.Type {
case models.ProcessType_API:
data.APIs = append(data.APIs, process)
case models.ProcessType_CRON:
data.Crons = append(data.Crons, process)
case models.ProcessType_WORKER:
data.Workers = append(data.Workers, process)
}
}
err = helpers.WriteTemplate(templatePath, savePath, data)
if err != nil {
return errors.Trace(err)

View File

@ -11,12 +11,6 @@ import (
log "github.com/sirupsen/logrus"
)
type makefileTemplate struct {
APIs []*models.Process
Crons []*models.Process
Workers []*models.Process
}
// GenerateMakefile will generate makefile based on the given config.
// Launched only at project init or on force.
func (a APIType) GenerateMakefile(path string, config *models.Config) error {
@ -25,25 +19,12 @@ func (a APIType) GenerateMakefile(path string, config *models.Config) error {
templatePath := filepath.Join(templateDirectory, "Makefile.tmpl")
savePath := filepath.Join(path, "Makefile")
data := makefileTemplate{}
processes, err := a.getProcesses(path)
data, err := a.getStdTemplate(path, config)
if err != nil {
log.Error("Fail to list processes")
log.Error("Fail to generate standard template variable")
return errors.Trace(err)
}
for _, process := range processes {
switch process.Type {
case models.ProcessType_API:
data.APIs = append(data.APIs, process)
case models.ProcessType_CRON:
data.Crons = append(data.Crons, process)
case models.ProcessType_WORKER:
data.Workers = append(data.Workers, process)
}
}
err = helpers.WriteTemplate(templatePath, savePath, data)
if err != nil {
return errors.Trace(err)

View File

@ -11,11 +11,6 @@ import (
log "github.com/sirupsen/logrus"
)
type readmeTemplate struct {
ProjectDescription string
ProjectName string
}
// GenerateReadme will generate a readme based on the given config.
// Launched only at project init.
func (a APIType) GenerateReadme(path string, config *models.Config) error {
@ -24,12 +19,13 @@ func (a APIType) GenerateReadme(path string, config *models.Config) error {
templatePath := filepath.Join(templateDirectory, "Readme.md.tmpl")
savePath := filepath.Join(path, "Readme.md")
data := readmeTemplate{
ProjectDescription: config.ProjectDescription,
ProjectName: config.ProjectName,
data, err := a.getStdTemplate(path, config)
if err != nil {
log.Error("Fail to generate standard template variable")
return errors.Trace(err)
}
err := helpers.WriteTemplate(templatePath, savePath, data)
err = helpers.WriteTemplate(templatePath, savePath, data)
if err != nil {
return errors.Trace(err)
}

View File

@ -90,7 +90,10 @@ func (a APIType) goSwaggerGenerate(path string) error {
Server: &generate.Server{},
}
generateCmd.Server.Shared.Spec = flags.Filename(filepath.Join(path, mergeYamlFileName))
generateCmd.Server.Shared.Target = flags.Filename(path)
//generateCmd.Server.Shared.Target = flags.Filename(path)
generateCmd.Server.ServerPackage = "restapi"
generateCmd.Server.Models.ModelPackage = "models"
generateCmd.Server.Operations.APIPackage = "operations"
generateCmd.Server.Shared.StrictResponders = true
return generateCmd.Server.Execute(nil)

View File

@ -12,18 +12,6 @@ import (
log "github.com/sirupsen/logrus"
)
type apiYamlTemplate struct {
ProjectDescription string
ProjectName string
ProjectContact apiYamlContact
}
type apiYamlContact struct {
Email string
Name string
URL string
}
// createDefaultAPIYamls will generate the main api yaml file based on the given config.
// Launched only at project init.
func (a APIType) createDefaultAPIYamls(path string, config *models.Config) error {
@ -49,14 +37,10 @@ func (a APIType) createDefaultAPIYamls(path string, config *models.Config) error
},
}
data := apiYamlTemplate{
ProjectDescription: config.ProjectDescription,
ProjectName: config.ProjectName,
ProjectContact: apiYamlContact{
Email: config.ProjectContact.Email,
Name: config.ProjectContact.Name,
URL: config.ProjectContact.URL,
},
data, err := a.getStdTemplate(path, config)
if err != nil {
log.Error("Fail to generate standard template variable")
return errors.Trace(err)
}
for _, templateFile := range templateFileList {

View File

@ -6,6 +6,7 @@ import "git.home.m-and-m.ovh/mderasse/gouick/models"
type APITypeInterface interface {
CheckInitialize() error
CreateProjectSkeleton(path string, config *models.Config) error
GenerateDockerfile(path string, config *models.Config) error
GenerateLauncher(path string, config *models.Config) error
GenerateMakefile(path string, config *models.Config) error
GenerateReadme(path string, config *models.Config) error