Skip to content

Commit 7d85325

Browse files
fix: oci cmd for tag
Signed-off-by: Rakshit Gondwal <rakshitgondwal3@gmail.com>
1 parent 06982f2 commit 7d85325

File tree

10 files changed

+103
-65
lines changed

10 files changed

+103
-65
lines changed

cmd/build/build.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ var BuildCmd = &cobra.Command{
4848
os.Exit(1)
4949
}
5050

51-
err = generate.Generate(fh, sc, nil)
51+
err = generate.Generate(fh, sc)
5252
if err != nil {
5353
fmt.Println(styles.ErrorStyle.Render("error: ", err.Error()))
5454
os.Exit(1)

cmd/develop/develop.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ var DevCmd = &cobra.Command{
2626
os.Exit(1)
2727
}
2828

29-
err = generate.Generate(fh, sc, nil)
29+
err = generate.Generate(fh, sc)
3030
if err != nil {
3131
fmt.Println(styles.ErrorStyle.Render("error: ", err.Error()))
3232
os.Exit(1)

cmd/dockerfile/df.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/buildsafedev/bsf/pkg/builddocker"
1414
"github.com/buildsafedev/bsf/pkg/generate"
1515
bgit "github.com/buildsafedev/bsf/pkg/git"
16+
"github.com/buildsafedev/bsf/pkg/hcl2nix"
1617
)
1718

1819
var (
@@ -40,7 +41,13 @@ var DFCmd = &cobra.Command{
4041
os.Exit(1)
4142
}
4243

43-
env, p, err := ocicmd.ProcessPlatformAndConfig(platform, args[0])
44+
conf, err := hcl2nix.ReadHclFile("bsf.hcl")
45+
if err != nil {
46+
fmt.Println(styles.ErrorStyle.Render("error: ", err.Error()))
47+
os.Exit(1)
48+
}
49+
50+
env, p, err := ocicmd.ProcessPlatformAndConfig(conf, platform, args[0])
4451
if err != nil {
4552
fmt.Println(styles.ErrorStyle.Render("error: ", err.Error()))
4653
os.Exit(1)
@@ -53,7 +60,7 @@ var DFCmd = &cobra.Command{
5360
os.Exit(1)
5461
}
5562

56-
err = generate.Generate(fh, sc, nil)
63+
err = generate.Generate(fh, sc)
5764
if err != nil {
5865
fmt.Println(styles.ErrorStyle.Render("error: ", err.Error()))
5966
os.Exit(1)

cmd/init/model.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ func (m *model) processStages(stage int) error {
128128
return err
129129
}
130130

131-
err = generate.Generate(fh, m.sc, nil)
131+
err = generate.Generate(fh, m.sc)
132132
if err != nil {
133133
m.stageMsg = errorStyle(err.Error())
134134
return err

cmd/nixgenerate/model.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ func (m *model) processStages(stage int) error {
9292
defer fh.FlakeFile.Close()
9393
defer fh.DefFlakeFile.Close()
9494

95-
err = generate.Generate(fh, m.sc, nil)
95+
err = generate.Generate(fh, m.sc)
9696
if err != nil {
9797
m.stageMsg = errorStyle("Failed to generate files: ", err.Error())
9898
return err

cmd/oci/oci.go

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package oci
22

33
import (
4-
"bytes"
54
"encoding/json"
65
"fmt"
76
"os"
@@ -32,7 +31,6 @@ var (
3231
func init() {
3332
OCICmd.Flags().StringVarP(&platform, "platform", "p", "", "The platform to build the image for")
3433
OCICmd.Flags().StringVarP(&output, "output", "o", "", "location of the build artifacts generated")
35-
OCICmd.Flags().StringVarP(&tag, "tag", "t", "", "Tag for the OCI image")
3634
OCICmd.Flags().BoolVarP(&loadDocker, "load-docker", "", false, "Load the image into docker daemon")
3735
OCICmd.Flags().BoolVarP(&loadPodman, "load-podman", "", false, "Load the image into podman")
3836
OCICmd.Flags().BoolVarP(&push, "push", "", false, "Push the image to the registry")
@@ -58,34 +56,40 @@ var OCICmd = &cobra.Command{
5856
os.Exit(1)
5957
}
6058

61-
artifact, p, err := ProcessPlatformAndConfig(platform, args[0])
59+
conf, err := hcl2nix.ReadHclFile("bsf.hcl")
6260
if err != nil {
6361
fmt.Println(styles.ErrorStyle.Render("error: ", err.Error()))
6462
os.Exit(1)
6563
}
64+
65+
artifact, p, err := ProcessPlatformAndConfig(conf, platform, args[0])
66+
if err != nil {
67+
fmt.Println(styles.ErrorStyle.Render("error: ", err.Error()))
68+
os.Exit(1)
69+
}
70+
6671
platform = p
67-
nameMap := make(map[string]string)
68-
originalName := artifact.Name
69-
var newName string
70-
71-
if tag != "" {
72-
if strings.Contains(artifact.Name, ":") {
73-
parts := strings.Split(artifact.Name, ":")
74-
if len(parts) > 0 {
75-
newName = fmt.Sprintf("%s:%s", parts[0], tag)
76-
} else {
77-
newName = fmt.Sprintf("%s:%s", artifact.Name, tag)
78-
}
79-
} else {
80-
newName = fmt.Sprintf("%s:%s", artifact.Name, tag)
72+
73+
if tag != "" && !dfSwap {
74+
newName, err := getNewName(artifact, tag)
75+
if err != nil {
76+
fmt.Println(styles.ErrorStyle.Render("error: ", err.Error()))
77+
os.Exit(1)
78+
}
79+
oldName := artifact.Name
80+
artifact.Name = newName
81+
err = hcl2nix.ModifyConfig(oldName, artifact, conf)
82+
if err != nil {
83+
fmt.Println(styles.ErrorStyle.Render("error: ", err.Error()))
84+
os.Exit(1)
8185
}
8286
}
83-
nameMap[originalName] = newName
8487

8588
if dfSwap {
8689
if tag != "" {
8790
if err = modifyDockerfileWithTag(path, tag, devDeps); err != nil {
8891
fmt.Println(styles.ErrorStyle.Render("error: ", err.Error()))
92+
os.Exit(1)
8993
}
9094
fmt.Println(styles.SucessStyle.Render("dockerfile succesfully updated with tag:", tag))
9195
} else {
@@ -99,7 +103,7 @@ var OCICmd = &cobra.Command{
99103
fmt.Println(styles.ErrorStyle.Render("error: ", err.Error()))
100104
os.Exit(1)
101105
}
102-
err = generate.Generate(fh, sc, nameMap)
106+
err = generate.Generate(fh, sc)
103107

104108
if err != nil {
105109
fmt.Println(styles.ErrorStyle.Render("error: ", err.Error()))
@@ -219,7 +223,7 @@ var OCICmd = &cobra.Command{
219223
}
220224

221225
// ProcessPlatformAndConfig processes the platform and config file
222-
func ProcessPlatformAndConfig(plat string, envName string) (hcl2nix.OCIArtifact, string, error) {
226+
func ProcessPlatformAndConfig(conf *hcl2nix.Config, plat string, envName string) (hcl2nix.OCIArtifact, string, error) {
223227
if plat == "" {
224228
tos, tarch := platformutils.FindPlatform(plat)
225229
plat = tos + "/" + tarch
@@ -235,16 +239,6 @@ func ProcessPlatformAndConfig(plat string, envName string) (hcl2nix.OCIArtifact,
235239
if !pfound {
236240
return hcl2nix.OCIArtifact{}, "", fmt.Errorf("Platform %s is not supported. Supported platforms are %s", platform, strings.Join(supportedPlatforms, ", "))
237241
}
238-
data, err := os.ReadFile("bsf.hcl")
239-
if err != nil {
240-
return hcl2nix.OCIArtifact{}, "", fmt.Errorf("error: %s", err.Error())
241-
}
242-
243-
var dstErr bytes.Buffer
244-
conf, err := hcl2nix.ReadConfig(data, &dstErr)
245-
if err != nil {
246-
return hcl2nix.OCIArtifact{}, "", fmt.Errorf(dstErr.String())
247-
}
248242

249243
envNames := make([]string, 0, len(conf.OCIArtifact))
250244
var found bool
@@ -297,6 +291,21 @@ func modifyDockerfileWithTag(path, tag string, devDeps bool) error {
297291
return nil
298292
}
299293

294+
func getNewName(artifact hcl2nix.OCIArtifact, tag string) (string, error) {
295+
var newName string
296+
if strings.Contains(artifact.Name, ":") {
297+
parts := strings.Split(artifact.Name, ":")
298+
if len(parts) > 0 {
299+
newName = fmt.Sprintf("%s:%s", parts[0], tag)
300+
} else {
301+
newName = fmt.Sprintf("%s:%s", artifact.Name, tag)
302+
}
303+
} else {
304+
newName = fmt.Sprintf("%s:%s", artifact.Name, tag)
305+
}
306+
return newName, nil
307+
}
308+
300309
func genOCIAttrName(env, platform string, artifact hcl2nix.OCIArtifact) string {
301310
var arch string
302311

cmd/release/release.go

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package release
22

33
import (
4-
"bytes"
54
"context"
65
"fmt"
76
"os"
@@ -50,15 +49,7 @@ var ReleaseCmd = &cobra.Command{
5049
os.Exit(1)
5150
}
5251

53-
data, err := os.ReadFile("bsf.hcl")
54-
if err != nil {
55-
fmt.Println(styles.ErrorStyle.Render("error: ", "failed to read config"))
56-
fmt.Println(styles.HintStyle.Render("hint:", "run `bsf init` "))
57-
os.Exit(1)
58-
}
59-
60-
var dstErr bytes.Buffer
61-
conf, err := hcl2nix.ReadConfig(data, &dstErr)
52+
conf, err := hcl2nix.ReadHclFile("bsf.hcl")
6253
if err != nil {
6354
fmt.Println(styles.ErrorStyle.Render("error: ", "failed to read config"))
6455
fmt.Println(styles.HintStyle.Render("hint:", "run `bsf init` "))

cmd/update/update.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ var UpdateCmd = &cobra.Command{
9898
os.Exit(1)
9999
}
100100

101-
err = generate.Generate(fh, sc, nil)
101+
err = generate.Generate(fh, sc)
102102
if err != nil {
103103
fmt.Println(styles.ErrorStyle.Render("Error generating files: %s", err.Error()))
104104
os.Exit(1)

pkg/generate/generate.go

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package generate
22

33
import (
4-
"bytes"
54
"context"
65
"fmt"
76
"os"
@@ -17,31 +16,16 @@ import (
1716
)
1817

1918
// Generate reads bsf.hcl, resolves dependencies and generates bsf.lock, bsf/flake.nix, bsf/default.nix, etc.
20-
func Generate(fh *hcl2nix.FileHandlers, sc buildsafev1.SearchServiceClient, nameMap map[string]string) error {
21-
data, err := os.ReadFile("bsf.hcl")
19+
func Generate(fh *hcl2nix.FileHandlers, sc buildsafev1.SearchServiceClient) error {
20+
conf, err := hcl2nix.ReadHclFile("bsf.hcl")
2221
if err != nil {
2322
return err
2423
}
2524

26-
var dstErr bytes.Buffer
27-
conf, err := hcl2nix.ReadConfig(data, &dstErr)
28-
if err != nil {
29-
return fmt.Errorf("%v", &dstErr)
30-
}
31-
32-
if len(nameMap) > 0 {
33-
for i, artifact := range conf.OCIArtifact {
34-
if newName, ok := nameMap[artifact.Name]; ok {
35-
conf.OCIArtifact[i].Name = newName
36-
}
37-
}
38-
}
39-
4025
ctx, cancel := context.WithTimeout(context.Background(), 300*time.Second)
4126
defer cancel()
4227

4328
pkgType := getPkgType(conf)
44-
4529
lockPackages, err := hcl2nix.ResolvePackages(ctx, sc, conf.Packages, pkgType)
4630
if err != nil {
4731
return err

pkg/hcl2nix/config.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package hcl2nix
22

33
import (
4+
"bytes"
5+
"fmt"
46
"io"
7+
"os"
58

69
"github.com/hashicorp/hcl/v2"
710
"github.com/hashicorp/hcl/v2/gohcl"
@@ -39,6 +42,21 @@ type Packages struct {
3942
Runtime []string `hcl:"runtime"`
4043
}
4144

45+
// ReadHclFile reads an HCL file
46+
func ReadHclFile(fileName string) (*Config, error) {
47+
data, err := os.ReadFile(fileName)
48+
if err != nil {
49+
return nil, fmt.Errorf("error: %s", err.Error())
50+
}
51+
52+
var dstErr bytes.Buffer
53+
conf, err := ReadConfig(data, &dstErr)
54+
if err != nil {
55+
return nil, fmt.Errorf(dstErr.String())
56+
}
57+
return conf, nil
58+
}
59+
4260
// WriteConfig writes packages to writer
4361
func WriteConfig(config Config, wr io.Writer) error {
4462
f := hclwrite.NewEmptyFile()
@@ -50,6 +68,35 @@ func WriteConfig(config Config, wr io.Writer) error {
5068
return nil
5169
}
5270

71+
// ModifyConfig modifes the config
72+
func ModifyConfig(oldName string, artifact OCIArtifact, config *Config) error {
73+
updated := false
74+
for i, existingArtifact := range config.OCIArtifact {
75+
if existingArtifact.Name == oldName {
76+
config.OCIArtifact[i] = artifact
77+
updated = true
78+
break
79+
}
80+
}
81+
82+
if !updated {
83+
config.OCIArtifact = append(config.OCIArtifact, artifact)
84+
}
85+
86+
var buf bytes.Buffer
87+
err := WriteConfig(*config, &buf)
88+
if err != nil {
89+
return err
90+
}
91+
92+
err = os.WriteFile("bsf.hcl", buf.Bytes(), 0644)
93+
if err != nil {
94+
return err
95+
}
96+
97+
return nil
98+
}
99+
53100
// ReadConfig reads config from bytes and returns Config. If any errors are encountered, they are written to dstErr
54101
func ReadConfig(src []byte, dstErr io.Writer) (*Config, error) {
55102
parser := hclparse.NewParser()

0 commit comments

Comments
 (0)