feat(go-swagger): Allow generate launcher makefile and readme. Refactoring
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Matthieu 'JP' DERASSE
2022-09-20 21:49:37 +00:00
parent 6268aad2ac
commit cda86019bb
15 changed files with 331 additions and 34 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"
)
// GenerateLauncher will generate a launcher entrypoint based on the given config.
func (a APIType) GenerateLauncher(path string, config *models.Config) error {
return errors.NotImplementedf("%s not implemented for %s", helpers.GetCurrentFuncName(), a.GetName())
}

View File

@ -0,0 +1,14 @@
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"
)
// GenerateMakefile will generate makefile based on the given config.
// Launched only at project init or with generate makefile command.
func (a APIType) GenerateMakefile(path string, config *models.Config) error {
return errors.NotImplementedf("%s not implemented for %s", helpers.GetCurrentFuncName(), a.GetName())
}

View File

@ -0,0 +1,14 @@
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"
)
// GenerateReadme will generate a readme based on the given config.
// Launched only at project init and with generate readme command.
func (a APIType) GenerateReadme(path string, config *models.Config) error {
return errors.NotImplementedf("%s not implemented for %s", helpers.GetCurrentFuncName(), a.GetName())
}

View File

@ -19,21 +19,8 @@ func (a APIType) CreateProjectSkeleton(path string, config *models.Config) error
return errors.Trace(err)
}
// Generate Makefile
err = a.GenerateMakefile(path, config)
if err != nil {
log.Error("Fail to generate Makefile")
return errors.Trace(err)
}
// Generate Readme
err = a.generateReadme(path, config)
if err != nil {
log.Error("Fail to generate Readme.md")
return errors.Trace(err)
}
// Generate api yaml files
err = a.generateAPIYamls(path, config)
err = a.createDefaultAPIYamls(path, config)
if err != nil {
log.Error("Fail to generate API Yaml files")
return errors.Trace(err)

View File

@ -0,0 +1,69 @@
package go_swagger
import (
"fmt"
"path/filepath"
"strings"
"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"
)
type launcherProcess struct {
Binary string
Name string
}
type launcherTemplate struct {
APIs []*launcherProcess
Workers []*launcherProcess
}
// 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())
cmdPath := filepath.Join(path, "cmd")
templatePath := filepath.Join(templateDirectory, "launcher.sh.tmpl")
savePath := filepath.Join(path, "launcher.sh")
data := launcherTemplate{
APIs: []*launcherProcess{},
Workers: []*launcherProcess{},
}
cmdDirectories, err := filepath.Glob(filepath.Join(cmdPath, "*"))
if err != nil {
log.Error("Fail to list cmd directory")
return errors.Trace(err)
}
for _, absDir := range cmdDirectories {
dir := strings.TrimPrefix(absDir, fmt.Sprintf("%s%c", cmdPath, filepath.Separator))
// if we have a suffix -server or -api we are on an API.
// if we have a prefix worker- we are on a worker.
if strings.HasSuffix(dir, "-server") || strings.HasSuffix(dir, "-api") {
data.APIs = append(data.APIs, &launcherProcess{
Binary: dir,
Name: dir,
})
} else if strings.HasPrefix(dir, "worker-") {
data.APIs = append(data.Workers, &launcherProcess{
Binary: dir,
Name: strings.TrimPrefix(dir, "worker-"),
})
}
}
err = helpers.WriteTemplate(templatePath, savePath, data)
if err != nil {
return errors.Trace(err)
}
return nil
}

View File

@ -16,9 +16,9 @@ type readmeTemplate struct {
ProjectName string
}
// generateReadme will generate a readme based on the given config.
// 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 {
func (a APIType) GenerateReadme(path string, config *models.Config) error {
log.Debugf("Starting %s - %s", a.GetName(), helpers.GetCurrentFuncName())
templatePath := filepath.Join(templateDirectory, "Readme.md.tmpl")

View File

@ -24,9 +24,9 @@ type apiYamlContact struct {
URL string
}
// generateAPIYamls will generate the main api yaml file based on the given config.
// createDefaultAPIYamls will generate the main api yaml file based on the given config.
// Launched only at project init.
func (a APIType) generateAPIYamls(path string, config *models.Config) error {
func (a APIType) createDefaultAPIYamls(path string, config *models.Config) error {
log.Debugf("Starting %s - %s", a.GetName(), helpers.GetCurrentFuncName())
type templateFileStruct struct {

View File

@ -6,6 +6,9 @@ import "git.home.m-and-m.ovh/mderasse/gouick/models"
type APITypeInterface interface {
CheckInitialize() error
CreateProjectSkeleton(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
GetInitializeUserInput(params *models.Config) (*models.Config, error)
GetName() models.APITypeName
}