diff --git a/cmd/oci/oci.go b/cmd/oci/oci.go index 50dc6a81..9c7ed6ab 100644 --- a/cmd/oci/oci.go +++ b/cmd/oci/oci.go @@ -21,23 +21,20 @@ import ( ) var ( - platform, output, tag, path, destcreds string - push, loadDocker, loadPodman, devDeps, dfSwap, digest bool -) -var ( - supportedPlatforms = []string{"linux/amd64", "linux/arm64"} + platform, output, tag, destcreds string + push, loadDocker, loadPodman, devDeps, digest bool ) +var supportedPlatforms = []string{"linux/amd64", "linux/arm64"} + func init() { OCICmd.Flags().StringVarP(&platform, "platform", "p", "", "The platform to build the image for") OCICmd.Flags().StringVarP(&output, "output", "o", "", "location of the build artifacts generated") OCICmd.Flags().BoolVarP(&loadDocker, "load-docker", "", false, "Load the image into docker daemon") OCICmd.Flags().BoolVarP(&loadPodman, "load-podman", "", false, "Load the image into podman") OCICmd.Flags().BoolVarP(&push, "push", "", false, "Push the image to the registry") + OCICmd.Flags().StringVarP(&tag, "tag", "t", "", "New tag for the image") OCICmd.Flags().BoolVarP(&devDeps, "dev", "", false, "Build base image for Dev Dependencies") - OCICmd.Flags().BoolVarP(&dfSwap, "df-swap", "", false, "Modify base images in Dockerfile") - OCICmd.Flags().StringVarP(&tag, "tag", "t", "", "The tag that will be replaced with original tag in Dockerfile") - OCICmd.Flags().StringVar(&path, "path", "", "The path to Dockerfile") OCICmd.Flags().BoolVar(&digest, "digest", false, "push image by digest") OCICmd.Flags().StringVar(&destcreds, "dest-creds", "", "Authenticate to the registry") } @@ -74,7 +71,7 @@ var OCICmd = &cobra.Command{ platform = p - if tag != "" && !dfSwap { + if tag != "" { newName, err := getNewName(artifact, tag) if err != nil { fmt.Println(styles.ErrorStyle.Render("error: ", err.Error())) @@ -83,26 +80,12 @@ var OCICmd = &cobra.Command{ artifact.Name = newName } - if dfSwap { - if tag != "" { - if err = modifyDockerfileWithTag(path, tag); err != nil { - fmt.Println(styles.ErrorStyle.Render("error: ", err.Error())) - os.Exit(1) - } - fmt.Println(styles.SucessStyle.Render("dockerfile succesfully updated with tag:", tag)) - } else { - fmt.Println(styles.HintStyle.Render("hint:", "use --tag flag to define a tag")) - } - os.Exit(1) - } - sc, fh, err := binit.GetBSFInitializers() if err != nil { fmt.Println(styles.ErrorStyle.Render("error: ", err.Error())) os.Exit(1) } err = generate.Generate(fh, sc) - if err != nil { fmt.Println(styles.ErrorStyle.Render("error: ", err.Error())) os.Exit(1) @@ -278,33 +261,6 @@ func ProcessPlatformAndConfig(conf *hcl2nix.Config, plat string, envName string) return artifact, plat, nil } -func modifyDockerfileWithTag(path, tag string) error { - var dockerfilePath string - if path != "" { - dockerfilePath = path + "/Dockerfile" - } else { - dockerfilePath = "./Dockerfile" - } - - file, err := os.Open(dockerfilePath) - if err != nil { - return err - } - defer file.Close() - - resLines, err := builddocker.ModifyDockerfile(file, devDeps, tag) - if err != nil { - return err - } - - err = os.WriteFile(dockerfilePath, []byte(strings.Join(resLines, "\n")), 0644) - if err != nil { - return err - } - - return nil -} - func getNewName(artifact hcl2nix.OCIArtifact, tag string) (string, error) { var newName string if strings.Contains(artifact.Name, ":") { diff --git a/pkg/builddocker/build.go b/pkg/builddocker/build.go index 4aa50de5..7da9fe7a 100644 --- a/pkg/builddocker/build.go +++ b/pkg/builddocker/build.go @@ -1,11 +1,9 @@ package builddocker import ( - "bufio" "fmt" "html/template" "io" - "os" "os/exec" "strings" @@ -42,76 +40,6 @@ func GenerateDockerfile(w io.Writer, env hcl2nix.OCIArtifact, platform string) e } return nil - -} - -// ModifyDockerfile modifies the Dockerfile with the specified tag -func ModifyDockerfile(file *os.File, dev bool, tag string) ([]string, error) { - lines, err := readDockerFile(file) - if err != nil { - return nil, err - } - - reslines, err := editDockerfile(lines, dev, tag) - if err != nil { - return nil, err - } - - return reslines, nil -} - -func readDockerFile(file *os.File) ([]string, error) { - scanner := bufio.NewScanner(file) - lines := []string{} - for scanner.Scan() { - lines = append(lines, scanner.Text()) - } - if err := scanner.Err(); err != nil { - return nil, fmt.Errorf("error reading Dockerfile: %v", err) - } - return lines, nil -} - -func editDockerfile(lines []string, dev bool, tag string) ([]string, error) { - var searchTag string - if dev { - searchTag = "bsfimage:dev" - } else { - searchTag = "bsfimage:runtime" - } - - var selectedFrom string - var selectedIndex int - for i, line := range lines { - if strings.Contains(line, searchTag) { - selectedFrom = line - selectedIndex = i - break - } - } - - if selectedFrom == "" { - return nil, fmt.Errorf("no FROM command found with tag %s", searchTag) - } - - fromParts := strings.Fields(selectedFrom) - if len(fromParts) < 2 { - return nil, fmt.Errorf("invalid FROM command format") - } - - var newFrom string - if strings.Contains(fromParts[1], ":") { - imageParts := strings.Split(fromParts[1], ":") - newFrom = fmt.Sprintf("FROM %s:%s", imageParts[0], tag) - } else { - newFrom = fmt.Sprintf("FROM %s:%s", fromParts[1], tag) - } - for _, part := range fromParts[2:] { - newFrom = fmt.Sprintf("%s %s", newFrom, part) - } - - lines[selectedIndex] = newFrom - return lines, nil } func convertExportCfgToDockerfileCfg(env hcl2nix.OCIArtifact, platform string) dockerfileCfg { diff --git a/pkg/builddocker/build_test.go b/pkg/builddocker/build_test.go deleted file mode 100644 index 405a28d3..00000000 --- a/pkg/builddocker/build_test.go +++ /dev/null @@ -1,80 +0,0 @@ -package builddocker - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestEditDockerFile(t *testing.T) { - tests := []struct { - name string - lines []string - isDev bool - tag string - expectedRes []string - expectError bool - }{ - { - name: "Dev", - lines: []string{ - "FROM ubuntu:18.04 # bsfimage:dev", - "RUN apt-get update", - }, - isDev: true, - tag: "latest", - expectedRes: []string{ - "FROM ubuntu:latest # bsfimage:dev", - "RUN apt-get update", - }, - expectError: false, - }, - { - name: "Runtime", - lines: []string{ - "FROM ubuntu:18.04 # bsfimage:runtime", - "RUN apt-get update", - }, - isDev: false, - tag: "latest", - expectedRes: []string{ - "FROM ubuntu:latest # bsfimage:runtime", - "RUN apt-get update", - }, - expectError: false, - }, - { - name: "No FROM Command with bsf tag", - lines: []string{ - "FROM ubuntu:latest", - "RUN apt-get update", - }, - isDev: true, - tag: "latest", - expectedRes: nil, - expectError: true, - }, - { - name: "No FROM Command", - lines: []string{ - "RUN apt-get update", - }, - isDev: true, - tag: "latest", - expectedRes: nil, - expectError: true, - }, - } - - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - res, err := editDockerfile(tt.lines, tt.isDev, tt.tag) - if tt.expectError { - assert.Error(t, err) - } else { - assert.NoError(t, err) - assert.Equal(t, tt.expectedRes, res) - } - }) - } -}