Skip to content

Commit

Permalink
misc: nth refacto
Browse files Browse the repository at this point in the history
  • Loading branch information
nervo committed May 17, 2024
1 parent 61de105 commit 25ffd5c
Show file tree
Hide file tree
Showing 73 changed files with 485 additions and 367 deletions.
2 changes: 1 addition & 1 deletion .env
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Versions
MANALA_GO_VERSION=1.22.3
MANALA_GORELEASER_VERSION=1.25.1
MANALA_GORELEASER_VERSION=1.26.1
MANALA_GOLANGCI_LINT_VERSION=1.58.1
MANALA_RICHGO_VERSION=0.3.12
MANALA_MKDOCS_VERSION=9.0.6
Expand Down
2 changes: 1 addition & 1 deletion .goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ brews:
commit_author:
name: manala-bot
email: contact@manala.io
folder: Formula
directory: Formula
homepage: https://github.com/manala/manala
description: Let your project's plumbing up to date
test: |
Expand Down
30 changes: 15 additions & 15 deletions app/api/project.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,21 @@ func (api *Api) NewProjectLoader(repositoryLoader *repository.Loader, recipeLoad
}

return project.NewLoader(api.log,
filter.New(
filter.WithDotfiles(false),
filter.Without(
"node_modules", // NodeJS
"vendor", // Composer
"venv", // Python
project.WithLoaderFilter(
filter.New(
filter.WithDotfiles(false),
filter.Without(
"node_modules", // NodeJS
"vendor", // Composer
"venv", // Python
),
),
),
append(handlers,
manifest.NewLoaderHandler(api.log, repositoryLoader, recipeLoader),
)...,
project.WithLoaderHandlers(
append(handlers,
manifest.NewLoaderHandler(api.log, repositoryLoader, recipeLoader),
)...,
),
)
}

Expand All @@ -56,17 +60,13 @@ func (api *Api) WithProjectLoaderFrom(from bool) ProjectLoaderOption {
}

func (api *Api) NewProjectFinder() *manifest.Finder {
return manifest.NewFinder(api.log)
}

func (api *Api) NewProjectWatcher() *manifest.Watcher {
return manifest.NewWatcher(api.log)
return manifest.NewFinder()
}

func (api *Api) NewProjectSyncer() *syncer.Syncer {
return syncer.New(api.log)
}

func (api *Api) NewProjectCreator() *manifest.Creator {
return manifest.NewCreator(api.log)
return manifest.NewCreator()
}
12 changes: 8 additions & 4 deletions app/api/recipe.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,15 @@ func (api *Api) NewRecipeLoader(opts ...RecipeLoaderOption) *recipe.Loader {
}

return recipe.NewLoader(api.log,
filter.New(
filter.WithDotfiles(false),
recipe.WithLoaderFilter(
filter.New(
filter.WithDotfiles(false),
),
),
recipe.WithLoaderHandlers(
name.NewProcessorLoaderHandler(api.log, nameProcessor),
manifest.NewLoaderHandler(api.log),
),
name.NewProcessorLoaderHandler(api.log, nameProcessor),
manifest.NewLoaderHandler(api.log),
)
}

Expand Down
16 changes: 9 additions & 7 deletions app/api/repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,15 @@ func (api *Api) NewRepositoryLoader(opts ...RepositoryLoaderOption) *repository.
urlProcessor.AddQuery("ref", options.ref, 20)
}

return repository.NewLoader(api.log,
url.NewProcessorLoaderHandler(api.log, urlProcessor),
cache.NewLoaderHandler(api.log, cache.New()),
getter.NewGitLoaderHandler(api.log, api.cache),
getter.NewS3LoaderHandler(api.log, api.cache),
getter.NewHttpLoaderHandler(api.log, api.cache),
getter.NewFileLoaderHandler(api.log),
return repository.NewLoader(
repository.WithLoaderHandlers(
url.NewProcessorLoaderHandler(api.log, urlProcessor),
cache.NewLoaderHandler(api.log, cache.New()),
getter.NewGitLoaderHandler(api.log, api.cache),
getter.NewS3LoaderHandler(api.log, api.cache),
getter.NewHttpLoaderHandler(api.log, api.cache),
getter.NewFileLoaderHandler(api.log),
),
)
}

Expand Down
2 changes: 2 additions & 0 deletions app/interfaces.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ type Project interface {
Recipe() Recipe
Vars() map[string]any
Template() *template.Template
Watches() ([]string, error)
}

/**********/
Expand All @@ -38,6 +39,7 @@ type Recipe interface {
Template() *template.Template
ProjectManifestTemplate() *template.Template
ProjectValidator() validator.Validator
Watches() ([]string, error)
}

// RecipeOption describe a recipe option interface
Expand Down
10 changes: 10 additions & 0 deletions app/mocks.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@ func (mock *ProjectMock) Template() *template.Template {
return args.Get(0).(*template.Template)
}

func (mock *ProjectMock) Watches() ([]string, error) {
args := mock.Called()
return args.Get(0).([]string), args.Error(1)
}

/**********/
/* Recipe */
/**********/
Expand Down Expand Up @@ -106,6 +111,11 @@ func (mock *RecipeMock) ProjectValidator() validator.Validator {
return args.Get(0).(validator.Validator)
}

func (mock *RecipeMock) Watches() ([]string, error) {
args := mock.Called()
return args.Get(0).([]string), args.Error(1)
}

/**************/
/* Repository */
/**************/
Expand Down
43 changes: 30 additions & 13 deletions app/project/loader.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,17 @@ import (
"path/filepath"
)

func NewLoader(log *slog.Logger, filter *filter.Filter, handlers ...LoaderHandler) *Loader {
return &Loader{
log: log,
filter: filter,
handlers: handlers,
func NewLoader(log *slog.Logger, opts ...LoaderOption) *Loader {
loader := &Loader{
log: log,
}

// Options
for _, opt := range opts {
opt(loader)
}

return loader
}

type Loader struct {
Expand All @@ -27,8 +32,6 @@ type Loader struct {

//goland:noinspection GoMixedReceiverTypes
func (loader *Loader) Load(dir string) (app.Project, error) {
loader.log.Info("loading project…")

// Prepare query
query := &LoaderQuery{Dir: dir}

Expand All @@ -38,8 +41,6 @@ func (loader *Loader) Load(dir string) (app.Project, error) {

//goland:noinspection GoMixedReceiverTypes
func (loader *Loader) LoadRecursive(dir string, fn func(project app.Project) error) error {
loader.log.Info("loading projects recursive…")

err := filepath.WalkDir(dir,
func(path string, entry os.DirEntry, err error) error {
if err != nil {
Expand All @@ -57,10 +58,12 @@ func (loader *Loader) LoadRecursive(dir string, fn func(project app.Project) err
return nil
}

// Exclusions
if loader.filter.Excluded(entry.Name()) {
loader.log.Debug("exclude project path", "path", path)
return filepath.SkipDir
if loader.filter != nil {
// Exclusions
if loader.filter.Excluded(entry.Name()) {
loader.log.Debug("exclude project path", "path", path)
return filepath.SkipDir
}
}

// Load project
Expand Down Expand Up @@ -98,6 +101,20 @@ func (loader Loader) Last(query *LoaderQuery) (app.Project, error) {
return nil, &app.NotFoundProjectError{Dir: query.Dir}
}

type LoaderOption func(loader *Loader)

func WithLoaderFilter(filter *filter.Filter) LoaderOption {
return func(loader *Loader) {
loader.filter = filter
}
}

func WithLoaderHandlers(handlers ...LoaderHandler) LoaderOption {
return func(loader *Loader) {
loader.handlers = append(loader.handlers, handlers...)
}
}

type LoaderQuery struct {
Dir string
}
Expand Down
9 changes: 4 additions & 5 deletions app/project/loader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/suite"
"manala/app"
"manala/internal/filepath/filter"
"manala/internal/log"
"manala/internal/serrors"
"path/filepath"
Expand All @@ -18,7 +17,7 @@ func TestLoaderSuite(t *testing.T) {
}

func (s *LoaderSuite) TestLoadErrors() {
loader := NewLoader(log.Discard, filter.New())
loader := NewLoader(log.Discard)

s.Run("NotFound", func() {
project, err := loader.Load("dir")
Expand All @@ -41,7 +40,7 @@ func (s *LoaderSuite) TestLoad() {
handlerMock.
On("Handle", &LoaderQuery{Dir: "dir"}, mock.Anything).Return(projectMock, nil)

loader := NewLoader(log.Discard, filter.New(), handlerMock)
loader := NewLoader(log.Discard, WithLoaderHandlers(handlerMock))

project, err := loader.Load("dir")

Expand All @@ -54,7 +53,7 @@ func (s *LoaderSuite) TestLoadRecursiveErrors() {
s.Run("NotFound", func() {
handlerMock := &LoaderHandlerMock{}

loader := NewLoader(log.Discard, filter.New(), handlerMock)
loader := NewLoader(log.Discard, WithLoaderHandlers(handlerMock))

err := loader.LoadRecursive("dir", func(project app.Project) error {
return nil
Expand All @@ -81,7 +80,7 @@ func (s *LoaderSuite) TestLoadRecursive() {
On("Handle", &LoaderQuery{Dir: filepath.Join(projectsDir, "bar", "baz")}, mock.Anything).Return(projectMock, nil).
On("Handle", &LoaderQuery{Dir: filepath.Join(projectsDir, "foo")}, mock.Anything).Return(projectMock, nil)

loader := NewLoader(log.Discard, filter.New(), handlerMock)
loader := NewLoader(log.Discard, WithLoaderHandlers(handlerMock))

err := loader.LoadRecursive(projectsDir, func(project app.Project) error {
s.Equal(projectMock, project)
Expand Down
13 changes: 3 additions & 10 deletions app/project/manifest/creator.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,19 @@ package manifest
import (
"bytes"
"errors"
"log/slog"
"manala/app"
"manala/internal/serrors"
"os"
"path/filepath"
)

func NewCreator(log *slog.Logger) *Creator {
return &Creator{
log: log,
}
func NewCreator() *Creator {
return &Creator{}
}

type Creator struct {
log *slog.Logger
}
type Creator struct{}

func (creator *Creator) Create(dir string, recipe app.Recipe, vars map[string]any) (app.Project, error) {
creator.log.Info("creating project…")

template := recipe.ProjectManifestTemplate().
WithData(&app.ProjectView{
Vars: vars,
Expand Down
21 changes: 14 additions & 7 deletions app/project/manifest/creator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"manala/app/recipe/manifest"
"manala/app/repository"
"manala/app/repository/getter"
"manala/internal/filepath/filter"
"manala/internal/log"
"manala/internal/serrors"
"manala/internal/testing/heredoc"
Expand All @@ -25,16 +24,20 @@ func (s *CreatorSuite) TestCreateErrors() {
repositoryUrl := filepath.FromSlash("testdata/CreatorSuite/TestCreateErrors/repository")
recipeName := "recipe"

repositoryLoader := repository.NewLoader(log.Discard, getter.NewFileLoaderHandler(log.Discard))
repositoryLoader := repository.NewLoader(repository.WithLoaderHandlers(
getter.NewFileLoaderHandler(log.Discard),
))
repository, _ := repositoryLoader.Load(repositoryUrl)

recipeLoader := recipe.NewLoader(log.Discard, filter.New(), manifest.NewLoaderHandler(log.Discard))
recipeLoader := recipe.NewLoader(log.Discard, recipe.WithLoaderHandlers(
manifest.NewLoaderHandler(log.Discard),
))
recipe, _ := recipeLoader.Load(repository, recipeName)

s.Run("File", func() {
projectDir := filepath.FromSlash("testdata/CreatorSuite/TestCreateErrors/File/project")

creator := NewCreator(log.Discard)
creator := NewCreator()
project, err := creator.Create(projectDir, recipe, nil)

s.Nil(project)
Expand All @@ -56,17 +59,21 @@ func (s *CreatorSuite) TestCreate() {

_ = os.RemoveAll(projectDir)

repositoryLoader := repository.NewLoader(log.Discard, getter.NewFileLoaderHandler(log.Discard))
repositoryLoader := repository.NewLoader(repository.WithLoaderHandlers(
getter.NewFileLoaderHandler(log.Discard),
))
repository, _ := repositoryLoader.Load(repositoryUrl)

recipeLoader := recipe.NewLoader(log.Discard, filter.New(), manifest.NewLoaderHandler(log.Discard))
recipeLoader := recipe.NewLoader(log.Discard, recipe.WithLoaderHandlers(
manifest.NewLoaderHandler(log.Discard),
))
recipe, _ := recipeLoader.Load(repository, recipeName)

vars := recipe.Vars()
vars["string_float_int"] = "3.0"
vars["string_asterisk"] = "*"

creator := NewCreator(log.Discard)
creator := NewCreator()
project, err := creator.Create(projectDir, recipe, vars)

s.NotNil(project)
Expand Down
13 changes: 3 additions & 10 deletions app/project/manifest/finder.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,17 @@ package manifest

import (
"errors"
"log/slog"
"os"
"path/filepath"
)

func NewFinder(log *slog.Logger) *Finder {
return &Finder{
log: log,
}
func NewFinder() *Finder {
return &Finder{}
}

type Finder struct {
log *slog.Logger
}
type Finder struct{}

func (finder *Finder) Find(dir string) bool {
finder.log.Info("finding project…")

manifestFile := filepath.Join(dir, filename)

if _, err := os.Stat(manifestFile); errors.Is(err, os.ErrNotExist) {
Expand Down
Loading

0 comments on commit 25ffd5c

Please sign in to comment.