Skip to content

Commit bb5c2c6

Browse files
authored
refactor(cli): makes better use of run context (#67)
1 parent 7de57df commit bb5c2c6

File tree

15 files changed

+98
-84
lines changed

15 files changed

+98
-84
lines changed

cli/cmd/cmds/ci.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package cmds
22

33
import (
4-
"log/slog"
5-
64
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
75
"github.com/input-output-hk/catalyst-forge/cli/tui/ci"
86
)
@@ -13,7 +11,7 @@ type CICmd struct {
1311
Platform []string `short:"p" help:"Run the target with the given platform."`
1412
}
1513

16-
func (c *CICmd) Run(ctx run.RunContext, logger *slog.Logger) error {
14+
func (c *CICmd) Run(ctx run.RunContext) error {
1715
flags := RunCmd{
1816
Artifact: c.Artifact,
1917
Platform: c.Platform,

cli/cmd/cmds/deploy.go

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,29 @@ package cmds
22

33
import (
44
"fmt"
5-
"log/slog"
65

76
"github.com/input-output-hk/catalyst-forge/cli/pkg/deployment"
87
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
9-
"github.com/input-output-hk/catalyst-forge/lib/project/secrets"
108
)
119

1210
type DeployCmd struct {
1311
Project string `arg:"" help:"The path to the project to deploy."`
1412
}
1513

16-
func (c *DeployCmd) Run(ctx run.RunContext, logger *slog.Logger) error {
17-
project, err := loadProject(ctx, c.Project, logger)
14+
func (c *DeployCmd) Run(ctx run.RunContext) error {
15+
project, err := ctx.ProjectLoader.Load(c.Project)
1816
if err != nil {
1917
return fmt.Errorf("could not load project: %w", err)
2018
}
2119

22-
store := secrets.NewDefaultSecretStore()
23-
deployer := deployment.NewGitopsDeployer(&project, &store, logger)
20+
deployer := deployment.NewGitopsDeployer(&project, &ctx.SecretStore, ctx.Logger)
2421
if err := deployer.Load(); err != nil {
2522
return fmt.Errorf("could not load deployer: %w", err)
2623
}
2724

2825
if err := deployer.Deploy(); err != nil {
2926
if err == deployment.ErrNoChanges {
30-
logger.Warn("no changes to deploy")
27+
ctx.Logger.Warn("no changes to deploy")
3128
return nil
3229
}
3330

cli/cmd/cmds/dump.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package cmds
22

33
import (
44
"fmt"
5-
"log/slog"
65

76
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
87
)
@@ -12,8 +11,8 @@ type DumpCmd struct {
1211
Pretty bool `help:"Pretty print JSON output."`
1312
}
1413

15-
func (c *DumpCmd) Run(ctx run.RunContext, logger *slog.Logger) error {
16-
project, err := loadProject(ctx, c.Project, logger)
14+
func (c *DumpCmd) Run(ctx run.RunContext) error {
15+
project, err := ctx.ProjectLoader.Load(c.Project)
1716
if err != nil {
1817
return fmt.Errorf("could not load project: %w", err)
1918
}

cli/cmd/cmds/run.go

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
package cmds
22

33
import (
4-
"log/slog"
5-
6-
"github.com/input-output-hk/catalyst-forge/cli/pkg/executor"
74
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
8-
"github.com/input-output-hk/catalyst-forge/lib/project/secrets"
95
"github.com/input-output-hk/catalyst-forge/lib/tools/earthfile"
106
)
117

@@ -17,23 +13,19 @@ type RunCmd struct {
1713
TargetArgs []string `arg:"" help:"Arguments to pass to the target." default:""`
1814
}
1915

20-
func (c *RunCmd) Run(ctx run.RunContext, logger *slog.Logger) error {
16+
func (c *RunCmd) Run(ctx run.RunContext) error {
2117
ref, err := earthfile.ParseEarthfileRef(c.Path)
2218
if err != nil {
2319
return err
2420
}
2521

26-
project, err := loadProject(ctx, ref.Path, logger)
22+
project, err := ctx.ProjectLoader.Load(ref.Path)
2723
if err != nil {
2824
return err
2925
}
3026

31-
logger.Info("Executing Earthly target", "project", project.Path, "target", ref.Target)
32-
localExec := executor.NewLocalExecutor(
33-
logger,
34-
executor.WithRedirect(),
35-
)
36-
runner := run.NewProjectRunner(ctx, localExec, logger, &project, secrets.NewDefaultSecretStore())
27+
ctx.Logger.Info("Executing Earthly target", "project", project.Path, "target", ref.Target)
28+
runner := run.NewProjectRunner(ctx, &project)
3729
result, err := runner.RunTarget(
3830
ref.Target,
3931
generateOpts(c, ctx)...,

cli/cmd/cmds/scan.go

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,13 @@ package cmds
22

33
import (
44
"fmt"
5-
"log/slog"
65
"path/filepath"
76
"regexp"
87
"sort"
98

109
"cuelang.org/go/cue"
1110
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
1211
"github.com/input-output-hk/catalyst-forge/cli/pkg/scan"
13-
"github.com/input-output-hk/catalyst-forge/lib/project/project"
14-
"github.com/input-output-hk/catalyst-forge/lib/tools/walker"
1512
"golang.org/x/exp/maps"
1613
)
1714

@@ -24,13 +21,7 @@ type ScanCmd struct {
2421
RootPath string `arg:"" help:"Root path to scan for Earthfiles and their respective targets."`
2522
}
2623

27-
func (c *ScanCmd) Run(ctx run.RunContext, logger *slog.Logger) error {
28-
walker := walker.NewDefaultFSWalker(logger)
29-
loader := project.NewDefaultProjectLoader(
30-
project.GetDefaultRuntimes(logger),
31-
logger,
32-
)
33-
24+
func (c *ScanCmd) Run(ctx run.RunContext) error {
3425
var rootPath string
3526
if c.Absolute {
3627
var err error
@@ -42,7 +33,7 @@ func (c *ScanCmd) Run(ctx run.RunContext, logger *slog.Logger) error {
4233
rootPath = c.RootPath
4334
}
4435

45-
projects, err := scan.ScanProjects(rootPath, &loader, &walker, logger)
36+
projects, err := scan.ScanProjects(rootPath, ctx.ProjectLoader, &ctx.FSWalker, ctx.Logger)
4637
if err != nil {
4738
return err
4839
}
@@ -94,7 +85,7 @@ func (c *ScanCmd) Run(ctx run.RunContext, logger *slog.Logger) error {
9485
result[filter][path] = targets
9586
}
9687

97-
logger.Debug("Filtered Earthfile", "path", path, "targets", targets)
88+
ctx.Logger.Debug("Filtered Earthfile", "path", path, "targets", targets)
9889
}
9990
}
10091
}

cli/cmd/cmds/secret.go

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package cmds
33
import (
44
"encoding/json"
55
"fmt"
6-
"log/slog"
76
"strings"
87

98
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
@@ -36,12 +35,12 @@ type SecretCmd struct {
3635
Set *Set `cmd:"" help:"Set a secret."`
3736
}
3837

39-
func (c *Get) Run(ctx run.RunContext, logger *slog.Logger) error {
38+
func (c *Get) Run(ctx run.RunContext) error {
4039
var path, provider string
4140
var maps map[string]string
4241

4342
if c.Project != "" {
44-
project, err := loadProject(ctx, c.Project, logger)
43+
project, err := ctx.ProjectLoader.Load(c.Project)
4544
if err != nil {
4645
return fmt.Errorf("could not load project: %w", err)
4746
}
@@ -65,10 +64,9 @@ func (c *Get) Run(ctx run.RunContext, logger *slog.Logger) error {
6564
maps = make(map[string]string)
6665
}
6766

68-
store := secrets.NewDefaultSecretStore()
69-
client, err := store.NewClient(logger, secrets.Provider(provider))
67+
client, err := ctx.SecretStore.NewClient(ctx.Logger, secrets.Provider(provider))
7068
if err != nil {
71-
logger.Error("Unable to create secret client.", "err", err)
69+
ctx.Logger.Error("Unable to create secret client.", "err", err)
7270
return fmt.Errorf("unable to create secret client: %w", err)
7371
}
7472

@@ -124,11 +122,11 @@ func (c *Get) Run(ctx run.RunContext, logger *slog.Logger) error {
124122
return nil
125123
}
126124

127-
func (c *Set) Run(ctx run.RunContext, logger *slog.Logger) error {
125+
func (c *Set) Run(ctx run.RunContext) error {
128126
var path, provider string
129127

130128
if c.Project != "" {
131-
project, err := loadProject(ctx, c.Project, logger)
129+
project, err := ctx.ProjectLoader.Load(c.Project)
132130
if err != nil {
133131
return fmt.Errorf("could not load project: %w", err)
134132
}
@@ -145,10 +143,9 @@ func (c *Set) Run(ctx run.RunContext, logger *slog.Logger) error {
145143
provider = c.Provider
146144
}
147145

148-
store := secrets.NewDefaultSecretStore()
149-
client, err := store.NewClient(logger, secrets.Provider(provider))
146+
client, err := ctx.SecretStore.NewClient(ctx.Logger, secrets.Provider(provider))
150147
if err != nil {
151-
logger.Error("Unable to create secret client.", "err", err)
148+
ctx.Logger.Error("Unable to create secret client.", "err", err)
152149
return fmt.Errorf("unable to create secret client: %w", err)
153150
}
154151

@@ -174,11 +171,11 @@ func (c *Set) Run(ctx run.RunContext, logger *slog.Logger) error {
174171

175172
id, err := client.Set(path, string(data))
176173
if err != nil {
177-
logger.Error("could not set secret", "err", err)
174+
ctx.Logger.Error("could not set secret", "err", err)
178175
return err
179176
}
180177

181-
logger.Info("Successfully set secret in AWS Secretsmanager.", "id", id)
178+
ctx.Logger.Info("Successfully set secret in AWS Secretsmanager.", "id", id)
182179

183180
return nil
184181
}

cli/cmd/cmds/tag.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package cmds
22

33
import (
44
"fmt"
5-
"log/slog"
65

76
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
87
p "github.com/input-output-hk/catalyst-forge/lib/project/project"
@@ -19,14 +18,14 @@ type TagOutput struct {
1918
Git string `json:"git"`
2019
}
2120

22-
func (c *TagCmd) Run(ctx run.RunContext, logger *slog.Logger) error {
23-
project, err := loadProject(ctx, c.Project, logger)
21+
func (c *TagCmd) Run(ctx run.RunContext) error {
22+
project, err := ctx.ProjectLoader.Load(c.Project)
2423
if err != nil {
2524
return err
2625
}
2726

2827
var output TagOutput
29-
tagger := p.NewTagger(&project, ctx.CI, c.Trim, logger)
28+
tagger := p.NewTagger(&project, ctx.CI, c.Trim, ctx.Logger)
3029

3130
if project.Blueprint.Global.CI.Tagging.Strategy != "" {
3231
tag, err := tagger.GenerateTag()

cli/cmd/cmds/util.go

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,9 @@ package cmds
33
import (
44
"encoding/json"
55
"fmt"
6-
"log/slog"
76

87
"github.com/input-output-hk/catalyst-forge/cli/pkg/earthly"
98
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
10-
"github.com/input-output-hk/catalyst-forge/lib/project/project"
119
)
1210

1311
type GlobalArgs struct {
@@ -55,15 +53,6 @@ func generateOpts(flags *RunCmd, ctx run.RunContext) []earthly.EarthlyExecutorOp
5553
return opts
5654
}
5755

58-
// loadProject loads the project from the given root path.
59-
func loadProject(ctx run.RunContext, rootPath string, logger *slog.Logger) (project.Project, error) {
60-
loader := project.NewDefaultProjectLoader(
61-
project.GetDefaultRuntimes(logger),
62-
logger,
63-
)
64-
return loader.Load(rootPath)
65-
}
66-
6756
// printJson prints the given data as a JSON string.
6857
func printJson(data interface{}, pretty bool) {
6958
var out []byte

cli/cmd/cmds/validate.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
package cmds
22

33
import (
4-
"log/slog"
5-
64
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
75
)
86

97
type ValidateCmd struct {
108
Project string `arg:"" help:"Path to the project."`
119
}
1210

13-
func (c *ValidateCmd) Run(ctx run.RunContext, logger *slog.Logger) error {
14-
_, err := loadProject(ctx, c.Project, logger)
11+
func (c *ValidateCmd) Run(ctx run.RunContext) error {
12+
_, err := ctx.ProjectLoader.Load(c.Project)
1513
if err != nil {
1614
return err
1715
}

cli/cmd/main.go

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,12 @@ import (
1010
"github.com/alecthomas/kong"
1111
"github.com/charmbracelet/log"
1212
"github.com/input-output-hk/catalyst-forge/cli/cmd/cmds"
13+
"github.com/input-output-hk/catalyst-forge/cli/pkg/executor"
1314
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
15+
"github.com/input-output-hk/catalyst-forge/lib/project/project"
1416
"github.com/input-output-hk/catalyst-forge/lib/project/schema"
17+
"github.com/input-output-hk/catalyst-forge/lib/project/secrets"
18+
"github.com/input-output-hk/catalyst-forge/lib/tools/walker"
1519
)
1620

1721
var version = "dev"
@@ -62,12 +66,22 @@ func Run() int {
6266
handler.SetLevel(log.DebugLevel)
6367
}
6468

69+
logger := slog.New(handler)
70+
loader := project.NewDefaultProjectLoader(logger)
6571
runctx := run.RunContext{
66-
CI: cli.GlobalArgs.CI,
67-
Local: cli.GlobalArgs.Local,
68-
Verbose: cli.GlobalArgs.Verbose,
72+
CI: cli.GlobalArgs.CI,
73+
Executor: executor.NewLocalExecutor(
74+
logger,
75+
executor.WithRedirect(),
76+
),
77+
FSWalker: walker.NewDefaultFSWalker(logger),
78+
Local: cli.GlobalArgs.Local,
79+
Logger: logger,
80+
ProjectLoader: &loader,
81+
SecretStore: secrets.NewDefaultSecretStore(),
82+
Verbose: cli.GlobalArgs.Verbose,
6983
}
70-
ctx.Bind(runctx, slog.New(handler))
84+
ctx.Bind(runctx)
7185

7286
err := ctx.Run()
7387
if err != nil {

0 commit comments

Comments
 (0)