mirror of
https://github.com/git-chglog/git-chglog.git
synced 2026-01-23 18:35:06 +00:00
BREAKING CHANGE: `JiraIssueId` has been renamed to `JiraIssueID`. This impacts the value for `pattern_maps` in `config.yml`. * chore(ci): add golangci-lint action * chore(lint): address errcheck lint failures * chore(lint): address misspell lint failures * chore(lint): address gocritic lint failures * chore(lint): address golint lint failures * chore(lint): address structcheck lint failures * chore(lint): address gosimple lint failures * chore(lint): address gofmt lint failures * chore(ci): port to official golangci-lint github action * Update golangci configuration for better coverage Signed-off-by: Khosrow Moossavi <khos2ow@gmail.com> * fix: file is not goimports-ed Signed-off-by: Khosrow Moossavi <khos2ow@gmail.com> * fix: golint and exported functions comments Signed-off-by: Khosrow Moossavi <khos2ow@gmail.com> * chore(lint): address gosec G304 warning * chore(lint): address uparam warnings * chore(lint): address scopelint lint failures * fix: cyclomatic complexity Signed-off-by: Khosrow Moossavi <khos2ow@gmail.com> * chore(lint): address prealloc warning, noting that we are warning for now * chore(lint): address govet and errorlint failures * chore: clean up defer logic when checking errors Co-authored-by: Khosrow Moossavi <khos2ow@gmail.com>
95 lines
2.3 KiB
Go
95 lines
2.3 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"path/filepath"
|
|
|
|
"github.com/fatih/color"
|
|
|
|
chglog "github.com/git-chglog/git-chglog"
|
|
)
|
|
|
|
// Initializer ...
|
|
type Initializer struct {
|
|
ctx *InitContext
|
|
fs FileSystem
|
|
logger *chglog.Logger
|
|
questioner Questioner
|
|
configBuilder ConfigBuilder
|
|
templateBuilderFactory TemplateBuilderFactory
|
|
}
|
|
|
|
// NewInitializer ...
|
|
func NewInitializer(
|
|
ctx *InitContext,
|
|
fs FileSystem,
|
|
questioner Questioner,
|
|
configBuilder ConfigBuilder,
|
|
tplBuilderFactory TemplateBuilderFactory) *Initializer {
|
|
return &Initializer{
|
|
ctx: ctx,
|
|
fs: fs,
|
|
logger: chglog.NewLogger(ctx.Stdout, ctx.Stderr, false, false),
|
|
questioner: questioner,
|
|
configBuilder: configBuilder,
|
|
templateBuilderFactory: tplBuilderFactory,
|
|
}
|
|
}
|
|
|
|
// Run ...
|
|
func (init *Initializer) Run() int {
|
|
ans, err := init.questioner.Ask()
|
|
if err != nil {
|
|
init.logger.Error(err.Error())
|
|
return ExitCodeError
|
|
}
|
|
|
|
if err = init.fs.MkdirP(filepath.Join(init.ctx.WorkingDir, ans.ConfigDir)); err != nil {
|
|
init.logger.Error(err.Error())
|
|
return ExitCodeError
|
|
}
|
|
|
|
if err = init.generateConfig(ans); err != nil {
|
|
init.logger.Error(err.Error())
|
|
return ExitCodeError
|
|
}
|
|
|
|
if err = init.generateTemplate(ans); err != nil {
|
|
init.logger.Error(err.Error())
|
|
return ExitCodeError
|
|
}
|
|
|
|
success := color.CyanString("✔")
|
|
init.logger.Log(fmt.Sprintf(`
|
|
:sparkles: %s
|
|
%s %s
|
|
%s %s
|
|
`,
|
|
color.GreenString("Configuration file and template generation completed!"),
|
|
success,
|
|
filepath.Join(ans.ConfigDir, defaultConfigFilename),
|
|
success,
|
|
filepath.Join(ans.ConfigDir, defaultTemplateFilename),
|
|
))
|
|
|
|
return ExitCodeOK
|
|
}
|
|
|
|
func (init *Initializer) generateConfig(ans *Answer) error {
|
|
s, err := init.configBuilder.Build(ans)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return init.fs.WriteFile(filepath.Join(init.ctx.WorkingDir, ans.ConfigDir, defaultConfigFilename), []byte(s))
|
|
}
|
|
|
|
func (init *Initializer) generateTemplate(ans *Answer) error {
|
|
templateBuilder := init.templateBuilderFactory(ans.Template)
|
|
s, err := templateBuilder.Build(ans)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return init.fs.WriteFile(filepath.Join(init.ctx.WorkingDir, ans.ConfigDir, defaultTemplateFilename), []byte(s))
|
|
}
|