Skip to content

Commit 7de57df

Browse files
authored
refactor: moves project code to separate lib (#64)
1 parent 3d77e66 commit 7de57df

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

112 files changed

+604
-499
lines changed

cli/.earthlyignore

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Earthfile
2+
README.md
3+
LICENSE-*
4+
blueprint.cue

cli/Earthfile

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ deps:
1212
ENV GOMODCACHE=/go/modcache
1313
CACHE --persist --sharing shared /go
1414

15-
COPY ../lib/blueprint+src/src /lib/blueprint
15+
COPY ../lib/project+src/src /lib/project
1616
COPY ../lib/tools+src/src /lib/tools
1717

1818
COPY go.mod go.sum .
@@ -23,7 +23,7 @@ src:
2323

2424
CACHE --persist --sharing shared /go
2525

26-
COPY --dir cmd internal pkg tui .
26+
COPY . .
2727
RUN go generate ./...
2828

2929
check:

cli/cmd/cmds/ci.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package cmds
33
import (
44
"log/slog"
55

6+
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
67
"github.com/input-output-hk/catalyst-forge/cli/tui/ci"
78
)
89

@@ -12,11 +13,11 @@ type CICmd struct {
1213
Platform []string `short:"p" help:"Run the target with the given platform."`
1314
}
1415

15-
func (c *CICmd) Run(logger *slog.Logger, global GlobalArgs) error {
16+
func (c *CICmd) Run(ctx run.RunContext, logger *slog.Logger) error {
1617
flags := RunCmd{
1718
Artifact: c.Artifact,
1819
Platform: c.Platform,
1920
}
20-
opts := generateOpts(&flags, &global)
21-
return ci.Run(c.Path, global.Local, opts...)
21+
opts := generateOpts(&flags, ctx)
22+
return ci.Run(c.Path, ctx, opts...)
2223
}

cli/cmd/cmds/deploy.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,16 @@ import (
55
"log/slog"
66

77
"github.com/input-output-hk/catalyst-forge/cli/pkg/deployment"
8-
"github.com/input-output-hk/catalyst-forge/cli/pkg/secrets"
8+
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
9+
"github.com/input-output-hk/catalyst-forge/lib/project/secrets"
910
)
1011

1112
type DeployCmd struct {
1213
Project string `arg:"" help:"The path to the project to deploy."`
1314
}
1415

15-
func (c *DeployCmd) Run(logger *slog.Logger, global GlobalArgs) error {
16-
project, err := loadProject(global, c.Project, logger)
16+
func (c *DeployCmd) Run(ctx run.RunContext, logger *slog.Logger) error {
17+
project, err := loadProject(ctx, c.Project, logger)
1718
if err != nil {
1819
return fmt.Errorf("could not load project: %w", err)
1920
}

cli/cmd/cmds/dump.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,17 @@ package cmds
33
import (
44
"fmt"
55
"log/slog"
6+
7+
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
68
)
79

810
type DumpCmd struct {
911
Project string `arg:"" help:"Path to the project."`
1012
Pretty bool `help:"Pretty print JSON output."`
1113
}
1214

13-
func (c *DumpCmd) Run(logger *slog.Logger, global GlobalArgs) error {
14-
project, err := loadProject(global, c.Project, logger)
15+
func (c *DumpCmd) Run(ctx run.RunContext, logger *slog.Logger) error {
16+
project, err := loadProject(ctx, c.Project, logger)
1517
if err != nil {
1618
return fmt.Errorf("could not load project: %w", err)
1719
}

cli/cmd/cmds/run.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ package cmds
33
import (
44
"log/slog"
55

6-
"github.com/input-output-hk/catalyst-forge/cli/pkg/earthfile"
76
"github.com/input-output-hk/catalyst-forge/cli/pkg/executor"
8-
"github.com/input-output-hk/catalyst-forge/cli/pkg/secrets"
7+
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
8+
"github.com/input-output-hk/catalyst-forge/lib/project/secrets"
9+
"github.com/input-output-hk/catalyst-forge/lib/tools/earthfile"
910
)
1011

1112
type RunCmd struct {
@@ -16,13 +17,13 @@ type RunCmd struct {
1617
TargetArgs []string `arg:"" help:"Arguments to pass to the target." default:""`
1718
}
1819

19-
func (c *RunCmd) Run(logger *slog.Logger, global GlobalArgs) error {
20+
func (c *RunCmd) Run(ctx run.RunContext, logger *slog.Logger) error {
2021
ref, err := earthfile.ParseEarthfileRef(c.Path)
2122
if err != nil {
2223
return err
2324
}
2425

25-
project, err := loadProject(global, ref.Path, logger)
26+
project, err := loadProject(ctx, ref.Path, logger)
2627
if err != nil {
2728
return err
2829
}
@@ -32,11 +33,10 @@ func (c *RunCmd) Run(logger *slog.Logger, global GlobalArgs) error {
3233
logger,
3334
executor.WithRedirect(),
3435
)
35-
result, err := project.RunTarget(
36+
runner := run.NewProjectRunner(ctx, localExec, logger, &project, secrets.NewDefaultSecretStore())
37+
result, err := runner.RunTarget(
3638
ref.Target,
37-
localExec,
38-
secrets.NewDefaultSecretStore(),
39-
generateOpts(c, &global)...,
39+
generateOpts(c, ctx)...,
4040
)
4141
if err != nil {
4242
return err

cli/cmd/cmds/scan.go

+6-7
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ import (
88
"sort"
99

1010
"cuelang.org/go/cue"
11-
"github.com/input-output-hk/catalyst-forge/cli/pkg/project"
11+
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
1212
"github.com/input-output-hk/catalyst-forge/cli/pkg/scan"
13-
"github.com/input-output-hk/catalyst-forge/lib/tools/pkg/walker"
13+
"github.com/input-output-hk/catalyst-forge/lib/project/project"
14+
"github.com/input-output-hk/catalyst-forge/lib/tools/walker"
1415
"golang.org/x/exp/maps"
1516
)
1617

@@ -23,11 +24,9 @@ type ScanCmd struct {
2324
RootPath string `arg:"" help:"Root path to scan for Earthfiles and their respective targets."`
2425
}
2526

26-
func (c *ScanCmd) Run(logger *slog.Logger, global GlobalArgs) error {
27+
func (c *ScanCmd) Run(ctx run.RunContext, logger *slog.Logger) error {
2728
walker := walker.NewDefaultFSWalker(logger)
2829
loader := project.NewDefaultProjectLoader(
29-
false,
30-
false,
3130
project.GetDefaultRuntimes(logger),
3231
logger,
3332
)
@@ -100,7 +99,7 @@ func (c *ScanCmd) Run(logger *slog.Logger, global GlobalArgs) error {
10099
}
101100
}
102101

103-
if global.CI {
102+
if ctx.CI {
104103
enumerated := make(map[string][]string)
105104
for filter, targetMap := range result {
106105
enumerated[filter] = enumerate(targetMap)
@@ -119,7 +118,7 @@ func (c *ScanCmd) Run(logger *slog.Logger, global GlobalArgs) error {
119118
}
120119
}
121120

122-
if global.CI {
121+
if ctx.CI {
123122
enumerated := enumerate(result)
124123
sort.Strings(enumerated)
125124
printJson(enumerated, c.Pretty)

cli/cmd/cmds/secret.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ import (
66
"log/slog"
77
"strings"
88

9-
"github.com/input-output-hk/catalyst-forge/cli/pkg/secrets"
10-
"github.com/input-output-hk/catalyst-forge/lib/blueprint/schema"
9+
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
10+
"github.com/input-output-hk/catalyst-forge/lib/project/schema"
11+
"github.com/input-output-hk/catalyst-forge/lib/project/secrets"
1112
)
1213

1314
const (
@@ -35,12 +36,12 @@ type SecretCmd struct {
3536
Set *Set `cmd:"" help:"Set a secret."`
3637
}
3738

38-
func (c *Get) Run(logger *slog.Logger, global GlobalArgs) error {
39+
func (c *Get) Run(ctx run.RunContext, logger *slog.Logger) error {
3940
var path, provider string
4041
var maps map[string]string
4142

4243
if c.Project != "" {
43-
project, err := loadProject(global, c.Project, logger)
44+
project, err := loadProject(ctx, c.Project, logger)
4445
if err != nil {
4546
return fmt.Errorf("could not load project: %w", err)
4647
}
@@ -123,11 +124,11 @@ func (c *Get) Run(logger *slog.Logger, global GlobalArgs) error {
123124
return nil
124125
}
125126

126-
func (c *Set) Run(logger *slog.Logger, global GlobalArgs) error {
127+
func (c *Set) Run(ctx run.RunContext, logger *slog.Logger) error {
127128
var path, provider string
128129

129130
if c.Project != "" {
130-
project, err := loadProject(global, c.Project, logger)
131+
project, err := loadProject(ctx, c.Project, logger)
131132
if err != nil {
132133
return fmt.Errorf("could not load project: %w", err)
133134
}

cli/cmd/cmds/tag.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ import (
44
"fmt"
55
"log/slog"
66

7-
p "github.com/input-output-hk/catalyst-forge/cli/pkg/project"
7+
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
8+
p "github.com/input-output-hk/catalyst-forge/lib/project/project"
89
)
910

1011
type TagCmd struct {
@@ -18,14 +19,14 @@ type TagOutput struct {
1819
Git string `json:"git"`
1920
}
2021

21-
func (c *TagCmd) Run(logger *slog.Logger, global GlobalArgs) error {
22-
project, err := loadProject(global, c.Project, logger)
22+
func (c *TagCmd) Run(ctx run.RunContext, logger *slog.Logger) error {
23+
project, err := loadProject(ctx, c.Project, logger)
2324
if err != nil {
2425
return err
2526
}
2627

2728
var output TagOutput
28-
tagger := p.NewTagger(&project, global.CI, c.Trim, logger)
29+
tagger := p.NewTagger(&project, ctx.CI, c.Trim, logger)
2930

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

cli/cmd/cmds/util.go

+5-6
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ import (
66
"log/slog"
77

88
"github.com/input-output-hk/catalyst-forge/cli/pkg/earthly"
9-
"github.com/input-output-hk/catalyst-forge/cli/pkg/project"
9+
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
10+
"github.com/input-output-hk/catalyst-forge/lib/project/project"
1011
)
1112

1213
type GlobalArgs struct {
@@ -29,15 +30,15 @@ func enumerate(data map[string][]string) []string {
2930

3031
// generateOpts generates the options for the Earthly executor based on command
3132
// flags.
32-
func generateOpts(flags *RunCmd, global *GlobalArgs) []earthly.EarthlyExecutorOption {
33+
func generateOpts(flags *RunCmd, ctx run.RunContext) []earthly.EarthlyExecutorOption {
3334
var opts []earthly.EarthlyExecutorOption
3435

3536
if flags != nil {
3637
if flags.Artifact != "" {
3738
opts = append(opts, earthly.WithArtifact(flags.Artifact))
3839
}
3940

40-
if global.CI {
41+
if ctx.CI {
4142
opts = append(opts, earthly.WithCI())
4243
}
4344

@@ -55,10 +56,8 @@ func generateOpts(flags *RunCmd, global *GlobalArgs) []earthly.EarthlyExecutorOp
5556
}
5657

5758
// loadProject loads the project from the given root path.
58-
func loadProject(global GlobalArgs, rootPath string, logger *slog.Logger) (project.Project, error) {
59+
func loadProject(ctx run.RunContext, rootPath string, logger *slog.Logger) (project.Project, error) {
5960
loader := project.NewDefaultProjectLoader(
60-
global.CI,
61-
global.Local,
6261
project.GetDefaultRuntimes(logger),
6362
logger,
6463
)

cli/cmd/cmds/validate.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@ package cmds
22

33
import (
44
"log/slog"
5+
6+
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
57
)
68

79
type ValidateCmd struct {
810
Project string `arg:"" help:"Path to the project."`
911
}
1012

11-
func (c *ValidateCmd) Run(logger *slog.Logger, global GlobalArgs) error {
12-
_, err := loadProject(global, c.Project, logger)
13+
func (c *ValidateCmd) Run(ctx run.RunContext, logger *slog.Logger) error {
14+
_, err := loadProject(ctx, c.Project, logger)
1315
if err != nil {
1416
return err
1517
}

cli/cmd/main.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ 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/lib/blueprint/schema"
13+
"github.com/input-output-hk/catalyst-forge/cli/pkg/run"
14+
"github.com/input-output-hk/catalyst-forge/lib/project/schema"
1415
)
1516

1617
var version = "dev"
@@ -61,7 +62,12 @@ func Run() int {
6162
handler.SetLevel(log.DebugLevel)
6263
}
6364

64-
ctx.Bind(slog.New(handler), cli.GlobalArgs)
65+
runctx := run.RunContext{
66+
CI: cli.GlobalArgs.CI,
67+
Local: cli.GlobalArgs.Local,
68+
Verbose: cli.GlobalArgs.Verbose,
69+
}
70+
ctx.Bind(runctx, slog.New(handler))
6571

6672
err := ctx.Run()
6773
if err != nil {

0 commit comments

Comments
 (0)