github.com/Racer159/jackal@v0.32.7-0.20240401174413-0bd2339e4f2e/src/pkg/packager/dev.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // SPDX-FileCopyrightText: 2021-Present The Jackal Authors 3 4 // Package packager contains functions for interacting with, managing and deploying Jackal packages. 5 package packager 6 7 import ( 8 "fmt" 9 "os" 10 "runtime" 11 12 "github.com/Racer159/jackal/src/config" 13 "github.com/Racer159/jackal/src/internal/packager/validate" 14 "github.com/Racer159/jackal/src/pkg/layout" 15 "github.com/Racer159/jackal/src/pkg/message" 16 "github.com/Racer159/jackal/src/pkg/packager/creator" 17 "github.com/Racer159/jackal/src/pkg/packager/filters" 18 "github.com/Racer159/jackal/src/pkg/packager/variables" 19 "github.com/Racer159/jackal/src/types" 20 "github.com/defenseunicorns/pkg/helpers" 21 ) 22 23 // DevDeploy creates + deploys a package in one shot 24 func (p *Packager) DevDeploy() error { 25 config.CommonOptions.Confirm = true 26 p.cfg.CreateOpts.SkipSBOM = !p.cfg.CreateOpts.NoYOLO 27 28 cwd, err := os.Getwd() 29 if err != nil { 30 return err 31 } 32 33 if err := os.Chdir(p.cfg.CreateOpts.BaseDir); err != nil { 34 return fmt.Errorf("unable to access directory %q: %w", p.cfg.CreateOpts.BaseDir, err) 35 } 36 37 pc := creator.NewPackageCreator(p.cfg.CreateOpts, p.cfg, cwd) 38 39 if err := helpers.CreatePathAndCopy(layout.JackalYAML, p.layout.JackalYAML); err != nil { 40 return err 41 } 42 43 p.cfg.Pkg, p.warnings, err = pc.LoadPackageDefinition(p.layout) 44 if err != nil { 45 return err 46 } 47 48 filter := filters.Combine( 49 filters.ByLocalOS(runtime.GOOS), 50 filters.ForDeploy(p.cfg.PkgOpts.OptionalComponents, false), 51 ) 52 p.cfg.Pkg.Components, err = filter.Apply(p.cfg.Pkg) 53 if err != nil { 54 return err 55 } 56 57 if err := validate.Run(p.cfg.Pkg); err != nil { 58 return fmt.Errorf("unable to validate package: %w", err) 59 } 60 61 if err := variables.SetVariableMapInConfig(p.cfg); err != nil { 62 return err 63 } 64 65 // If building in yolo mode, strip out all images and repos 66 if !p.cfg.CreateOpts.NoYOLO { 67 for idx := range p.cfg.Pkg.Components { 68 p.cfg.Pkg.Components[idx].Images = []string{} 69 p.cfg.Pkg.Components[idx].Repos = []string{} 70 } 71 } 72 73 if err := pc.Assemble(p.layout, p.cfg.Pkg.Components, p.cfg.Pkg.Metadata.Architecture); err != nil { 74 return err 75 } 76 77 message.HeaderInfof("📦 PACKAGE DEPLOY %s", p.cfg.Pkg.Metadata.Name) 78 79 p.connectStrings = make(types.ConnectStrings) 80 81 if !p.cfg.CreateOpts.NoYOLO { 82 p.cfg.Pkg.Metadata.YOLO = true 83 } else { 84 p.hpaModified = false 85 // Reset registry HPA scale down whether an error occurs or not 86 defer p.resetRegistryHPA() 87 } 88 89 // Get a list of all the components we are deploying and actually deploy them 90 deployedComponents, err := p.deployComponents() 91 if err != nil { 92 return err 93 } 94 if len(deployedComponents) == 0 { 95 message.Warn("No components were selected for deployment. Inspect the package to view the available components and select components interactively or by name with \"--components\"") 96 } 97 98 // Notify all the things about the successful deployment 99 message.Successf("Jackal dev deployment complete") 100 101 message.HorizontalRule() 102 message.Title("Next steps:", "") 103 104 message.JackalCommand("package inspect %s", p.cfg.Pkg.Metadata.Name) 105 106 // cd back 107 return os.Chdir(cwd) 108 }