github.com/buildpacks/pack@v0.33.3-0.20240516162812-884dd1837311/internal/commands/config_registries_default.go (about)

     1  package commands
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/pkg/errors"
     7  	"github.com/spf13/cobra"
     8  
     9  	"github.com/buildpacks/pack/internal/config"
    10  	"github.com/buildpacks/pack/internal/style"
    11  	"github.com/buildpacks/pack/pkg/logging"
    12  )
    13  
    14  func ConfigRegistriesDefault(logger logging.Logger, cfg config.Config, cfgPath string) *cobra.Command {
    15  	var unset bool
    16  
    17  	cmd := &cobra.Command{
    18  		Use:     "default <name>",
    19  		Args:    cobra.MaximumNArgs(1),
    20  		Short:   "Set default registry",
    21  		Example: "pack config registries default myregistry",
    22  		Long: bpRegistryExplanation + "\n\nYou can use this command to list, set, and unset a default registry, which will be used when looking for buildpacks:" +
    23  			"* To list your default registry, run `pack config registries default`.\n" +
    24  			"* To set your default registry, run `pack config registries default <registry-name>`.\n" +
    25  			"* To unset your default registry, run `pack config registries default --unset`.\n" +
    26  			fmt.Sprintf("Unsetting the default registry will reset the default-registry to be the official buildpacks registry, %s", style.Symbol(config.DefaultRegistry().URL)),
    27  		RunE: logError(logger, func(cmd *cobra.Command, args []string) error {
    28  			switch {
    29  			case unset:
    30  				if cfg.DefaultRegistryName == "" || cfg.DefaultRegistryName == config.OfficialRegistryName {
    31  					return errors.Errorf("Registry %s is a protected registry, and can be replaced as a default registry, but not removed entirely. "+
    32  						"To add a new registry and set as default, run `pack config registries add <registry-name> <registry-url> --default.\n"+
    33  						"To set an existing registry as default, call `pack config registries default <registry-name>`", style.Symbol(config.OfficialRegistryName))
    34  				}
    35  				oldRegistry := cfg.DefaultRegistryName
    36  				cfg.DefaultRegistryName = ""
    37  				if err := config.Write(cfg, cfgPath); err != nil {
    38  					return errors.Wrapf(err, "writing config to %s", cfgPath)
    39  				}
    40  				logger.Infof("Successfully unset default registry %s", style.Symbol(oldRegistry))
    41  				logger.Infof("Default registry has been set to %s", style.Symbol(config.OfficialRegistryName))
    42  			case len(args) == 0: // list
    43  				if cfg.DefaultRegistryName == "" {
    44  					cfg.DefaultRegistryName = config.OfficialRegistryName
    45  				}
    46  				logger.Infof("The current default registry is %s", style.Symbol(cfg.DefaultRegistryName))
    47  			default: // set
    48  				registryName := args[0]
    49  				if !registriesContains(config.GetRegistries(cfg), registryName) {
    50  					return errors.Errorf("no registry with the name %s exists", style.Symbol(registryName))
    51  				}
    52  
    53  				if cfg.DefaultRegistryName != registryName {
    54  					cfg.DefaultRegistryName = registryName
    55  					err := config.Write(cfg, cfgPath)
    56  					if err != nil {
    57  						return errors.Wrapf(err, "writing config to %s", cfgPath)
    58  					}
    59  				}
    60  
    61  				logger.Infof("Successfully set %s as the default registry", style.Symbol(registryName))
    62  			}
    63  
    64  			return nil
    65  		}),
    66  	}
    67  
    68  	cmd.Flags().BoolVarP(&unset, "unset", "u", false, "Unset the current default registry, and set it to the official buildpacks registry")
    69  	AddHelpFlag(cmd, "default")
    70  	return cmd
    71  }