Skip to content

Commit dd72421

Browse files
authored
refactor: save module bundles instead of individual modules (#128)
1 parent 9bb1772 commit dd72421

File tree

6 files changed

+182
-84
lines changed

6 files changed

+182
-84
lines changed

cli/cmd/cmds/module/template.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ func (c *TemplateCmd) Run(ctx run.RunContext) error {
2525
}
2626

2727
var out string
28-
for _, module := range result {
29-
out += fmt.Sprintf("%s---\n", module.Manifests)
28+
for _, manifest := range result.Manifests {
29+
out += fmt.Sprintf("%s---\n", manifest)
3030
}
3131

3232
fmt.Print(strings.TrimSuffix(out, "---\n"))

lib/project/deployment/deployer/deployer.go

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -59,25 +59,26 @@ func (d *Deployer) Deploy() error {
5959
return fmt.Errorf("could not generate deployment manifests: %w", err)
6060
}
6161

62-
for name, result := range result {
62+
modPath := filepath.Join(prjPath, "mod.cue")
63+
d.logger.Info("Writing module", "path", modPath)
64+
if err := r.WriteFile(modPath, []byte(result.Module)); err != nil {
65+
return fmt.Errorf("could not write module: %w", err)
66+
}
67+
68+
if err := r.StageFile(modPath); err != nil {
69+
return fmt.Errorf("could not add module to working tree: %w", err)
70+
}
71+
72+
for name, result := range result.Manifests {
6373
manPath := filepath.Join(prjPath, fmt.Sprintf("%s.yaml", name))
64-
modPath := filepath.Join(prjPath, fmt.Sprintf("%s.mod.cue", name))
6574

6675
d.logger.Info("Writing manifest", "path", manPath)
67-
if err := r.WriteFile(manPath, []byte(result.Manifests)); err != nil {
76+
if err := r.WriteFile(manPath, []byte(result)); err != nil {
6877
return fmt.Errorf("could not write manifest: %w", err)
6978
}
7079
if err := r.StageFile(manPath); err != nil {
7180
return fmt.Errorf("could not add manifest to working tree: %w", err)
7281
}
73-
74-
d.logger.Info("Writing module", "path", modPath)
75-
if err := r.WriteFile(modPath, []byte(result.Module)); err != nil {
76-
return fmt.Errorf("could not write values: %w", err)
77-
}
78-
if err := r.StageFile(modPath); err != nil {
79-
return fmt.Errorf("could not add values to working tree: %w", err)
80-
}
8182
}
8283

8384
if !d.dryrun {
@@ -101,8 +102,8 @@ func (d *Deployer) Deploy() error {
101102
} else {
102103
d.logger.Info("Dry-run: not committing or pushing changes")
103104
d.logger.Info("Dumping manifests")
104-
for _, r := range result {
105-
fmt.Println(string(r.Manifests))
105+
for _, r := range result.Manifests {
106+
fmt.Println(string(r))
106107
}
107108
}
108109

lib/project/deployment/deployer/deployer_test.go

Lines changed: 33 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,12 @@ import (
2626
)
2727

2828
func TestDeployerDeploy(t *testing.T) {
29-
newProject := func(name string, module schema.DeploymentModule) project.Project {
29+
newProject := func(name string, bundle schema.DeploymentModuleBundle) project.Project {
3030
return project.Project{
3131
Blueprint: schema.Blueprint{
3232
Project: schema.Project{
3333
Deployment: schema.Deployment{
34-
Modules: map[string]schema.DeploymentModule{
35-
"main": module,
36-
},
34+
Modules: bundle,
3735
},
3836
},
3937
Global: schema.Global{
@@ -80,13 +78,15 @@ func TestDeployerDeploy(t *testing.T) {
8078
name: "success",
8179
project: newProject(
8280
"project",
83-
schema.DeploymentModule{
84-
Instance: "instance",
85-
Name: "module",
86-
Namespace: "default",
87-
Registry: "registry",
88-
Values: map[string]string{"key": "value"},
89-
Version: "v1.0.0",
81+
schema.DeploymentModuleBundle{
82+
"main": {
83+
Instance: "instance",
84+
Name: "module",
85+
Namespace: "default",
86+
Registry: "registry",
87+
Values: map[string]string{"key": "value"},
88+
Version: "v1.0.0",
89+
},
9090
},
9191
),
9292
files: nil,
@@ -98,7 +98,7 @@ func TestDeployerDeploy(t *testing.T) {
9898
require.NoError(t, err)
9999
assert.True(t, e)
100100

101-
e, err = afero.Exists(r.fs, "/repo/root/test/apps/project/main.mod.cue")
101+
e, err = afero.Exists(r.fs, "/repo/root/test/apps/project/mod.cue")
102102
require.NoError(t, err)
103103
assert.True(t, e)
104104

@@ -107,16 +107,18 @@ func TestDeployerDeploy(t *testing.T) {
107107
assert.Equal(t, "manifest", string(c))
108108

109109
mod := `{
110-
instance: "instance"
111-
name: "module"
112-
namespace: "default"
113-
registry: "registry"
114-
values: {
115-
key: "value"
110+
main: {
111+
instance: "instance"
112+
name: "module"
113+
namespace: "default"
114+
registry: "registry"
115+
values: {
116+
key: "value"
117+
}
118+
version: "v1.0.0"
116119
}
117-
version: "v1.0.0"
118120
}`
119-
c, err = afero.ReadFile(r.fs, "/repo/root/test/apps/project/main.mod.cue")
121+
c, err = afero.ReadFile(r.fs, "/repo/root/test/apps/project/mod.cue")
120122
require.NoError(t, err)
121123
assert.Equal(t, mod, string(c))
122124

@@ -139,13 +141,15 @@ func TestDeployerDeploy(t *testing.T) {
139141
name: "dry run with extra files",
140142
project: newProject(
141143
"project",
142-
schema.DeploymentModule{
143-
Instance: "instance",
144-
Name: "module",
145-
Namespace: "default",
146-
Registry: "registry",
147-
Values: map[string]string{"key": "value"},
148-
Version: "v1.0.0",
144+
schema.DeploymentModuleBundle{
145+
"main": {
146+
Instance: "instance",
147+
Name: "module",
148+
Namespace: "default",
149+
Registry: "registry",
150+
Values: map[string]string{"key": "value"},
151+
Version: "v1.0.0",
152+
},
149153
},
150154
),
151155
files: map[string]string{
@@ -159,7 +163,7 @@ func TestDeployerDeploy(t *testing.T) {
159163
require.NoError(t, err)
160164
assert.True(t, e)
161165

162-
e, err = afero.Exists(r.fs, "/repo/root/test/apps/project/main.mod.cue")
166+
e, err = afero.Exists(r.fs, "/repo/root/test/apps/project/mod.cue")
163167
require.NoError(t, err)
164168
assert.True(t, e)
165169

@@ -177,7 +181,7 @@ func TestDeployerDeploy(t *testing.T) {
177181
fst = st.File("root/test/apps/project/main.yaml")
178182
assert.Equal(t, fst.Staging, gg.Added)
179183

180-
fst = st.File("root/test/apps/project/main.mod.cue")
184+
fst = st.File("root/test/apps/project/mod.cue")
181185
assert.Equal(t, fst.Staging, gg.Added)
182186

183187
head, err := r.repo.Head()

lib/project/deployment/generator/generator.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111

1212
// GeneratorResult is the result of a deployment generation.
1313
type GeneratorResult struct {
14-
Manifests []byte
14+
Manifests map[string][]byte
1515
Module []byte
1616
}
1717

@@ -22,37 +22,37 @@ type Generator struct {
2222
}
2323

2424
// GenerateBundle generates manifests for a deployment bundle.
25-
func (d *Generator) GenerateBundle(b schema.DeploymentModuleBundle) (map[string]GeneratorResult, error) {
26-
results := make(map[string]GeneratorResult)
25+
func (d *Generator) GenerateBundle(b schema.DeploymentModuleBundle) (GeneratorResult, error) {
26+
bundle, err := deployment.DumpBundle(b)
27+
if err != nil {
28+
return GeneratorResult{}, fmt.Errorf("failed to dump bundle: %w", err)
29+
}
30+
31+
results := make(map[string][]byte)
2732
for name, module := range b {
2833
d.logger.Debug("Generating module", "name", name)
2934
result, err := d.Generate(module)
3035
if err != nil {
31-
return nil, fmt.Errorf("failed to generate module %s: %w", name, err)
36+
return GeneratorResult{}, fmt.Errorf("failed to generate module %s: %w", name, err)
3237
}
3338

3439
results[name] = result
3540
}
3641

37-
return results, nil
42+
return GeneratorResult{
43+
Manifests: results,
44+
Module: bundle,
45+
}, nil
3846
}
3947

4048
// Generate generates manifests for a deployment module.
41-
func (d *Generator) Generate(m schema.DeploymentModule) (GeneratorResult, error) {
49+
func (d *Generator) Generate(m schema.DeploymentModule) ([]byte, error) {
4250
manifests, err := d.mg.Generate(m)
4351
if err != nil {
44-
return GeneratorResult{}, fmt.Errorf("failed to generate manifest for module: %w", err)
52+
return nil, fmt.Errorf("failed to generate manifest for module: %w", err)
4553
}
4654

47-
module, err := deployment.DumpModule(m)
48-
if err != nil {
49-
return GeneratorResult{}, fmt.Errorf("failed to dump module: %w", err)
50-
}
51-
52-
return GeneratorResult{
53-
Manifests: manifests,
54-
Module: module,
55-
}, nil
55+
return manifests, nil
5656
}
5757

5858
// NewGenerator creates a new deployment generator.

0 commit comments

Comments
 (0)