Skip to content

Commit 147ad58

Browse files
committed
feat: Updated based on review comments
- Also noticed that kiln version is not currently added to kiln carvel baked record. Fixed that ai-assisted=yes JIRA-ID: TNZ-119962 Authored-by: Ramkumar Vengadakrishnan <ramkumar.vengadakrishnan@broadcom.com>
1 parent 8b4f0cf commit 147ad58

6 files changed

Lines changed: 76 additions & 9 deletions

File tree

internal/carvel/baker.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ func (b *baker) Bake(source string) error {
9191
if err != nil {
9292
return err
9393
}
94+
if b.metadata.Name == "" {
95+
return errors.New("missing required field 'name' in tile metadata (base.yml)")
96+
}
9497
if err := validateVariables(b.metadata.Variables); err != nil {
9598
return err
9699
}
@@ -142,6 +145,9 @@ func (b *baker) BakeFromLockfile(source string, releaseLock cargo.BOSHReleaseTar
142145
if err != nil {
143146
return err
144147
}
148+
if b.metadata.Name == "" {
149+
return errors.New("missing required field 'name' in tile metadata (base.yml)")
150+
}
145151
if err := validateVariables(b.metadata.Variables); err != nil {
146152
return err
147153
}
@@ -153,7 +159,7 @@ func (b *baker) BakeFromLockfile(source string, releaseLock cargo.BOSHReleaseTar
153159
b.progress(fmt.Sprintf("Tile: %s version %s (metadata_version %s)", b.metadata.Name, ver, b.metadata.MetadataVersion))
154160

155161
if releaseLock.Name != b.GetBoshReleaseName() {
156-
return fmt.Errorf("lockfile release name %q does not match tile name %q", releaseLock.Name, b.GetBoshReleaseName())
162+
return fmt.Errorf("lockfile release name %q does not match tile-derived name %q", releaseLock.Name, b.GetBoshReleaseName())
157163
}
158164

159165
b.releaseVersion = releaseLock.Version

internal/carvel/baker_test.go

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,7 @@ consumes:
311311
}
312312
for _, cmd := range commands {
313313
cmd.Dir = inputPath
314+
cmd.Env = append(os.Environ(), "GIT_AUTHOR_NAME=test", "GIT_AUTHOR_EMAIL=test@test.com", "GIT_COMMITTER_NAME=test", "GIT_COMMITTER_EMAIL=test@test.com")
314315
out, err := cmd.CombinedOutput()
315316
Expect(err).NotTo(HaveOccurred(), "error invoking git: "+string(out))
316317
}
@@ -524,6 +525,7 @@ consumes:
524525
}
525526
for _, cmd := range commands {
526527
cmd.Dir = inputPath
528+
cmd.Env = append(os.Environ(), "GIT_AUTHOR_NAME=test", "GIT_AUTHOR_EMAIL=test@test.com", "GIT_COMMITTER_NAME=test", "GIT_COMMITTER_EMAIL=test@test.com")
527529
out, err := cmd.CombinedOutput()
528530
Expect(err).NotTo(HaveOccurred(), "error invoking git: "+string(out))
529531
}
@@ -578,7 +580,27 @@ consumes:
578580
subject := NewBaker()
579581
err = subject.BakeFromLockfile(inputPath, releaseLock, "/nonexistent/tarball.tgz")
580582
Expect(err).To(HaveOccurred())
581-
Expect(err.Error()).To(ContainSubstring("does not match tile name"))
583+
Expect(err.Error()).To(ContainSubstring("does not match tile-derived name"))
584+
})
585+
})
586+
587+
When("the tile metadata name is missing", func() {
588+
It("returns an error early", func() {
589+
inputPath, err := os.MkdirTemp("", "missing-name-*")
590+
Expect(err).NotTo(HaveOccurred())
591+
defer func() { _ = os.RemoveAll(inputPath) }()
592+
593+
err = os.WriteFile(filepath.Join(inputPath, "base.yml"), []byte("label: no-name-tile"), 0644)
594+
Expect(err).NotTo(HaveOccurred())
595+
596+
subject := NewBaker()
597+
err = subject.Bake(inputPath)
598+
Expect(err).To(HaveOccurred())
599+
Expect(err.Error()).To(ContainSubstring("missing required field 'name'"))
600+
601+
err = subject.BakeFromLockfile(inputPath, cargo.BOSHReleaseTarballLock{}, "/nonexistent/tarball.tgz")
602+
Expect(err).To(HaveOccurred())
603+
Expect(err.Error()).To(ContainSubstring("missing required field 'name'"))
582604
})
583605
})
584606
})

internal/commands/carvel.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ type Carvel struct {
1818
synopses map[string]string
1919
}
2020

21-
func NewCarvel(outLogger, errLogger *log.Logger) Carvel {
21+
func NewCarvel(outLogger, errLogger *log.Logger, kilnVersion string) Carvel {
2222
c := Carvel{
2323
outLogger: outLogger,
2424
errLogger: errLogger,
@@ -27,11 +27,17 @@ func NewCarvel(outLogger, errLogger *log.Logger) Carvel {
2727
synopses: map[string]string{},
2828
}
2929

30+
publishCmd := NewCarvelPublish(outLogger, errLogger)
31+
publishCmd.KilnVersion = kilnVersion
32+
33+
rebakeCmd := NewCarvelReBake(outLogger, errLogger)
34+
rebakeCmd.KilnVersion = kilnVersion
35+
3036
// Register subcommands
3137
c.commands["bake"] = NewCarvelBake(outLogger, errLogger)
3238
c.commands["upload"] = NewCarvelUpload(outLogger, errLogger)
33-
c.commands["publish"] = NewCarvelPublish(outLogger, errLogger)
34-
c.commands["re-bake"] = NewCarvelReBake(outLogger, errLogger)
39+
c.commands["publish"] = publishCmd
40+
c.commands["re-bake"] = rebakeCmd
3541

3642
// Positional argument synopses for usage lines
3743
c.synopses["re-bake"] = "<bake-record>"

internal/commands/carvel_rebake.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@ import (
1818
)
1919

2020
type CarvelReBake struct {
21-
outLogger *log.Logger
22-
errLogger *log.Logger
23-
Options CarvelReBakeOptions
21+
outLogger *log.Logger
22+
errLogger *log.Logger
23+
KilnVersion string
24+
Options CarvelReBakeOptions
2425
}
2526

2627
type CarvelReBakeOptions struct {
@@ -56,6 +57,10 @@ func (c CarvelReBake) Execute(args []string) error {
5657
return fmt.Errorf("failed to parse bake record: %w", err)
5758
}
5859

60+
if record.KilnVersion != "" && c.KilnVersion != "" && record.KilnVersion != c.KilnVersion {
61+
return fmt.Errorf("kiln version mismatch: bake record was created with kiln %s, but running kiln is %s", record.KilnVersion, c.KilnVersion)
62+
}
63+
5964
tileDir := filepath.FromSlash(record.TileDirectory)
6065
if tileDir == "" {
6166
tileDir = "."

internal/commands/carvel_rebake_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,34 @@ var _ = Describe("CarvelReBake", func() {
7070
})
7171
})
7272

73+
When("the bake record has a mismatched kiln version", func() {
74+
It("returns an error", func() {
75+
record := bake.Record{
76+
KilnVersion: "0.14.0",
77+
}
78+
buf, err := json.Marshal(record)
79+
Expect(err).NotTo(HaveOccurred())
80+
81+
tmpDir, err := os.MkdirTemp("", "version-mismatch-*")
82+
Expect(err).NotTo(HaveOccurred())
83+
defer func() { _ = os.RemoveAll(tmpDir) }()
84+
85+
recPath := filepath.Join(tmpDir, "record.json")
86+
err = os.WriteFile(recPath, buf, 0644)
87+
Expect(err).NotTo(HaveOccurred())
88+
89+
cmd := commands.NewCarvelReBake(outLogger, errLogger)
90+
cmd.KilnVersion = "0.15.0"
91+
92+
err = cmd.Execute([]string{
93+
"--output-file", "/tmp/out.pivotal",
94+
recPath,
95+
})
96+
Expect(err).To(HaveOccurred())
97+
Expect(err.Error()).To(ContainSubstring("kiln version mismatch: bake record was created with kiln 0.14.0, but running kiln is 0.15.0"))
98+
})
99+
})
100+
73101
When("the bake record has a mismatched source revision", func() {
74102
var (
75103
inputPath string

main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ func main() {
106106
log.Fatal(err)
107107
}
108108

109-
carvelCommand := commands.NewCarvel(outLogger, errLogger)
109+
carvelCommand := commands.NewCarvel(outLogger, errLogger, version)
110110
commandSet["carvel"] = carvelCommand
111111

112112
if command == "carvel" {

0 commit comments

Comments
 (0)