Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var OCICmd = &cobra.Command{ Use: "oci", Short: "Builds an OCI image", Long: ` bsf oci <artifact> bsf oci <artifact> --platform <platform> bsf oci <artifact> --push --digest bsf oci <artifact> --push --dest-creds user:password bsf oci <artifact> --platform <platform> --output <output directory> `, Run: func(cmd *cobra.Command, args []string) { if len(args) < 1 { fmt.Println(styles.HintStyle.Render("hint:", "run `bsf oci <environment name>` to build an OCI image")) os.Exit(1) } conf, err := hcl2nix.ReadHclFile("bsf.hcl") if err != nil { fmt.Println(styles.ErrorStyle.Render("error: ", err.Error())) os.Exit(1) } artifact, p, err := ProcessPlatformAndConfig(conf, platform, args[0]) if err != nil { fmt.Println(styles.ErrorStyle.Render("error: ", err.Error())) os.Exit(1) } platform = p if tag != "" && !dfSwap { newName, err := getNewName(artifact, tag) if err != nil { fmt.Println(styles.ErrorStyle.Render("error: ", err.Error())) os.Exit(1) } 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) } if output == "" { output = "bsf-result" } err = bgit.Add("bsf/") if err != nil { fmt.Println(styles.ErrorStyle.Render("error: ", err.Error())) os.Exit(1) } err = bgit.Ignore(output + "/") if err != nil { fmt.Println(styles.ErrorStyle.Render("error: ", err.Error())) os.Exit(1) } symlink := "/result" err = nixcmd.Build(output+symlink, genOCIAttrName(artifact.Artifact, platform, artifact.IsBase)) if err != nil { fmt.Println(styles.ErrorStyle.Render("error: ", err.Error())) os.Exit(1) } fmt.Println(styles.HighlightStyle.Render("Generating artifacts...")) lockData, err := os.ReadFile("bsf.lock") if err != nil { fmt.Println(styles.ErrorStyle.Render("error:", err.Error())) os.Exit(1) } lockFile := &hcl2nix.LockFile{} err = json.Unmarshal(lockData, lockFile) if err != nil { fmt.Println(styles.ErrorStyle.Render("error:", err.Error())) os.Exit(1) } appDetails, graph, err := nixcmd.GetRuntimeClosureGraph(lockFile.App.Name, output, symlink) if err != nil { fmt.Println(styles.ErrorStyle.Render("error:", err.Error())) os.Exit(1) } appDetails.Name = artifact.Name tos, tarch := platformutils.FindPlatform(platform) err = build.GenerateArtifcats(output, symlink, lockFile, appDetails, graph, tos, tarch) if err != nil { fmt.Println(styles.ErrorStyle.Render("error:", err.Error())) os.Exit(1) } fmt.Println(styles.SucessStyle.Render(fmt.Sprintf("Build completed successfully, please check the %s directory", output))) if loadDocker { fmt.Println(styles.HighlightStyle.Render("Loading image to docker daemon...")) expectedInstall := true currentContext, err := builddocker.GetCurrentContext() if err != nil { expectedInstall = false } contextEP, err := builddocker.ReadContextEndpoints() if err != nil { expectedInstall = false } if currentContext == "" { currentContext = "default" } if contextEP == nil { contextEP = make(map[string]string) } if _, ok := contextEP[currentContext]; !ok { contextEP[currentContext] = "unix:///var/run/docker.sock" } err = oci.LoadDocker(contextEP[currentContext], output+"/result", artifact.Name) if err != nil { fmt.Println(styles.ErrorStyle.Render("error:", err.Error())) if !expectedInstall { fmt.Println(styles.ErrorStyle.Render("error:", "Is Docker installed?")) } os.Exit(1) } fmt.Println(styles.SucessStyle.Render(fmt.Sprintf("Image %s loaded to docker daemon", artifact.Name))) } if loadPodman { fmt.Println(styles.HighlightStyle.Render("Loading image to podman...")) err = oci.LoadPodman(output+"/result", artifact.Name) if err != nil { fmt.Println(styles.ErrorStyle.Render("error:", err.Error())) os.Exit(1) } fmt.Println(styles.SucessStyle.Render(fmt.Sprintf("Image %s loaded to podman", artifact.Name))) } if push { fmt.Println(styles.HighlightStyle.Render("Pushing image to registry...")) if digest { err = oci.Push(output+"/result", artifact.Name, destcreds, output+"/digest") if err != nil { fmt.Println(styles.ErrorStyle.Render("error:", err.Error())) os.Exit(1) } fmt.Println(styles.SucessStyle.Render(fmt.Sprintf("Image %s pushed to registry", artifact.Name))) digest, err := os.ReadFile(output + "/digest") if err != nil { fmt.Println(styles.ErrorStyle.Render("error:", err.Error())) os.Exit(1) } fmt.Println(styles.SucessStyle.Render(fmt.Sprintf("Digest: %s", string(digest)))) } else { err = oci.Push(output+"/result", artifact.Name, destcreds, "") if err != nil { fmt.Println(styles.ErrorStyle.Render("error:", err.Error())) os.Exit(1) } fmt.Println(styles.SucessStyle.Render(fmt.Sprintf("Image %s pushed to registry", artifact.Name))) } } }, }
OCICmd represents the export command
Functions ¶
func ProcessPlatformAndConfig ¶
func ProcessPlatformAndConfig(conf *hcl2nix.Config, plat string, envName string) (hcl2nix.OCIArtifact, string, error)
ProcessPlatformAndConfig processes the platform and config file
Types ¶
This section is empty.
Click to show internal directories.
Click to hide internal directories.