From 882b754c6c4f3857767bcbe425616f83f80d9123 Mon Sep 17 00:00:00 2001 From: Pedro Tashima <23709916+tashima42@users.noreply.github.com> Date: Fri, 9 Aug 2024 12:13:31 -0300 Subject: [PATCH 1/7] fix registry urls --- release/rancher/rancher.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/release/rancher/rancher.go b/release/rancher/rancher.go index e89b40fb..3f04350b 100644 --- a/release/rancher/rancher.go +++ b/release/rancher/rancher.go @@ -413,6 +413,11 @@ func GenerateMissingImagesList(imagesListURL, registry string, concurrencyLimit repositoryAuths := make(map[string]string) mu := sync.RWMutex{} + rgInfo, ok := registriesInfo[registry] + if !ok { + return nil, errors.New("registry must be one of the following: 'docker.io', 'registry.rancher.com' or 'stgregistry.suse.com'") + } + for _, imageAndVersion := range checkImages { image, imageVersion, err := splitImageAndVersion(imageAndVersion) if err != nil { @@ -441,7 +446,7 @@ func GenerateMissingImagesList(imagesListURL, registry string, concurrencyLimit auth, ok = repositoryAuths[image] if !ok { - auth, err = registryAuth(sccSUSEURL, sccSUSEService, image) + auth, err = registryAuth(rgInfo.AuthURL, rgInfo.Service, image) if err != nil { cancel() return err @@ -450,7 +455,7 @@ func GenerateMissingImagesList(imagesListURL, registry string, concurrencyLimit } mu.Unlock() - exists, err := checkIfImageExists(rancherRegistryBaseURL, image, imageVersion, auth) + exists, err := checkIfImageExists(rgInfo.BaseURL, image, imageVersion, auth) if err != nil { cancel() return err From bb328c217df3c84ed4f49a233596fcaf5f308763 Mon Sep 17 00:00:00 2001 From: Pedro Tashima <23709916+tashima42@users.noreply.github.com> Date: Wed, 14 Aug 2024 09:28:56 -0300 Subject: [PATCH 2/7] add verbose output and custom log --- cmd/release/cmd/generate.go | 4 ++-- cmd/release/cmd/root.go | 2 ++ log/log.go | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 log/log.go diff --git a/cmd/release/cmd/generate.go b/cmd/release/cmd/generate.go index 742f5dfa..130d1d05 100644 --- a/cmd/release/cmd/generate.go +++ b/cmd/release/cmd/generate.go @@ -124,7 +124,7 @@ var rancherGenerateMissingImagesListSubCmd = &cobra.Command{ if len(checkImages) == 0 && imagesListURL == "" { return errors.New("either --images-list-url or --check-images must be provided") } - missingImages, err := rancher.GenerateMissingImagesList(imagesListURL, registry, concurrencyLimit, checkImages, ignoreImages) + missingImages, err := rancher.GenerateMissingImagesList(imagesListURL, registry, concurrencyLimit, checkImages, ignoreImages, verbose) if err != nil { return err } @@ -147,7 +147,7 @@ var rancherGenerateDockerImagesDigestsSubCmd = &cobra.Command{ Use: "docker-images-digests", Short: "Generate a file with images digests from an images list", RunE: func(cmd *cobra.Command, args []string) error { - return rancher.GenerateDockerImageDigests(rancherImagesDigestsOutputFile, rancherImagesDigestsImagesURL, rancherImagesDigestsRegistry) + return rancher.GenerateDockerImageDigests(rancherImagesDigestsOutputFile, rancherImagesDigestsImagesURL, rancherImagesDigestsRegistry, verbose) }, } diff --git a/cmd/release/cmd/root.go b/cmd/release/cmd/root.go index 7d3a2c4b..bda13ed3 100644 --- a/cmd/release/cmd/root.go +++ b/cmd/release/cmd/root.go @@ -15,6 +15,7 @@ var ( dryRun bool ignoreValidate bool rootConfig *config.Config + verbose bool configFile string stringConfig string ) @@ -44,6 +45,7 @@ func SetVersion(version string) { func init() { rootCmd.PersistentFlags().BoolVarP(&debug, "debug", "D", false, "Debug") rootCmd.PersistentFlags().BoolVarP(&dryRun, "dry-run", "R", false, "Dry Run") + rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "V", false, "Verbose output") rootCmd.PersistentFlags().BoolVarP(&ignoreValidate, "ignore-validate", "I", false, "Ignore the validate config step") rootCmd.PersistentFlags().StringVarP(&configFile, "config-file", "c", "$HOME/.ecm-distro-tools/config.json", "Path for the config.json file") rootCmd.PersistentFlags().StringVarP(&stringConfig, "config", "C", "", "JSON config string") diff --git a/log/log.go b/log/log.go new file mode 100644 index 00000000..e4887ed3 --- /dev/null +++ b/log/log.go @@ -0,0 +1,32 @@ +package log + +import "fmt" + +type Logger struct { + verbose bool +} + +func NewLogger(verbose bool) Logger { + return Logger{verbose: verbose} +} + +func (l Logger) Print(a ...any) (n int, err error) { + if l.verbose { + return fmt.Print(a...) + } + return +} + +func (l Logger) Printf(format string, a ...any) (n int, err error) { + if l.verbose { + return fmt.Printf(format, a...) + } + return +} + +func (l Logger) Println(a ...any) (n int, err error) { + if l.verbose { + return fmt.Println(a...) + } + return +} From b74adad42d65c6b57efd7803562147e1494d0787 Mon Sep 17 00:00:00 2001 From: Pedro Tashima <23709916+tashima42@users.noreply.github.com> Date: Wed, 14 Aug 2024 09:29:03 -0300 Subject: [PATCH 3/7] add registry to digests file --- release/rancher/rancher.go | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/release/rancher/rancher.go b/release/rancher/rancher.go index 3f04350b..53f26be7 100644 --- a/release/rancher/rancher.go +++ b/release/rancher/rancher.go @@ -12,7 +12,6 @@ import ( "io" "io/ioutil" "log" - "log/slog" "net/http" "os" "path" @@ -25,6 +24,8 @@ import ( "text/template" "time" + ecmLog "github.com/rancher/ecm-distro-tools/log" + "github.com/google/go-github/v39/github" ecmConfig "github.com/rancher/ecm-distro-tools/cmd/release/config" ecmHTTP "github.com/rancher/ecm-distro-tools/http" @@ -386,7 +387,8 @@ func formatContentLine(line string) string { return strings.TrimSpace(line) } -func GenerateMissingImagesList(imagesListURL, registry string, concurrencyLimit int, checkImages, ignoreImages []string) ([]string, error) { +func GenerateMissingImagesList(imagesListURL, registry string, concurrencyLimit int, checkImages, ignoreImages []string, verbose bool) ([]string, error) { + log := ecmLog.NewLogger(verbose) if len(checkImages) == 0 { if imagesListURL == "" { return nil, errors.New("if no images are provided, an images list URL must be provided") @@ -526,15 +528,16 @@ func validateRepoImage(repoImage string) error { return nil } -func GenerateDockerImageDigests(outputFile, imagesFileURL, registry string) error { - imagesDigests, err := dockerImagesDigests(imagesFileURL, registry) +func GenerateDockerImageDigests(outputFile, imagesFileURL, registry string, verbose bool) error { + imagesDigests, err := dockerImagesDigests(imagesFileURL, registry, verbose) if err != nil { return err } return createAssetFile(outputFile, imagesDigests) } -func dockerImagesDigests(imagesFileURL, registry string) (imageDigest, error) { +func dockerImagesDigests(imagesFileURL, registry string, verbose bool) (imageDigest, error) { + log := ecmLog.NewLogger(verbose) imagesList, err := artifactImageList(imagesFileURL, registry) if err != nil { return nil, err @@ -552,7 +555,7 @@ func dockerImagesDigests(imagesFileURL, registry string) (imageDigest, error) { if imageAndVersion == "" || imageAndVersion == " " { continue } - slog.Info("image: " + imageAndVersion) + log.Println("image: " + imageAndVersion) if !strings.Contains(imageAndVersion, ":") { return nil, errors.New("malformed image name: , missing ':'") } @@ -568,11 +571,12 @@ func dockerImagesDigests(imagesFileURL, registry string) (imageDigest, error) { repositoryAuths[image] = auth } digest, statusCode, err := dockerImageDigest(rgInfo.BaseURL, image, imageVersion, repositoryAuths[image]) - slog.Info("status code: " + strconv.Itoa(statusCode)) + log.Println("status code: " + strconv.Itoa(statusCode)) if err != nil { return nil, err } - imagesDigests[imageAndVersion] = digest + // e.g: registry.rancher.com/rancher/rancher:v2.9.0 = sha256:1234567890 + imagesDigests[registry+"/"+imageAndVersion] = digest } return imagesDigests, nil } From bc99f75b472daf494ed8a7a0c3c12f2ad69dc61c Mon Sep 17 00:00:00 2001 From: Pedro Tashima <23709916+tashima42@users.noreply.github.com> Date: Wed, 14 Aug 2024 09:51:42 -0300 Subject: [PATCH 4/7] use fmt and not log --- cmd/release/cmd/root.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cmd/release/cmd/root.go b/cmd/release/cmd/root.go index bda13ed3..06cae322 100644 --- a/cmd/release/cmd/root.go +++ b/cmd/release/cmd/root.go @@ -2,7 +2,6 @@ package cmd import ( "fmt" - "log" "os" "strings" @@ -69,7 +68,7 @@ func initConfig() { configFile = os.ExpandEnv(configFile) conf, err = config.Load(configFile) if err != nil { - log.Println("failed to load config, use 'release config gen' to create a new one at: " + configFile) + fmt.Println("failed to load config, use 'release config gen' to create a new one at: " + configFile) fmt.Println(err) os.Exit(1) } From 9438c970663e1f37deba6bd50d6d6ea3e085bfb2 Mon Sep 17 00:00:00 2001 From: Pedro Tashima <23709916+tashima42@users.noreply.github.com> Date: Wed, 14 Aug 2024 18:31:04 -0300 Subject: [PATCH 5/7] remove explicit returns --- log/log.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/log/log.go b/log/log.go index e4887ed3..c91fcd22 100644 --- a/log/log.go +++ b/log/log.go @@ -10,23 +10,23 @@ func NewLogger(verbose bool) Logger { return Logger{verbose: verbose} } -func (l Logger) Print(a ...any) (n int, err error) { +func (l Logger) Print(a ...any) (int, error) { if l.verbose { return fmt.Print(a...) } - return + return 0, nil } -func (l Logger) Printf(format string, a ...any) (n int, err error) { +func (l Logger) Printf(format string, a ...any) (int, error) { if l.verbose { return fmt.Printf(format, a...) } - return + return 0, nil } -func (l Logger) Println(a ...any) (n int, err error) { +func (l Logger) Println(a ...any) (int, error) { if l.verbose { return fmt.Println(a...) } - return + return 0, nil } From d733b9246abf19fe4666b7099afbf0c15f2c4b34 Mon Sep 17 00:00:00 2001 From: Pedro Tashima <23709916+tashima42@users.noreply.github.com> Date: Wed, 14 Aug 2024 18:43:47 -0300 Subject: [PATCH 6/7] reorder imports --- release/rancher/rancher.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/release/rancher/rancher.go b/release/rancher/rancher.go index 53f26be7..20bff9c7 100644 --- a/release/rancher/rancher.go +++ b/release/rancher/rancher.go @@ -24,11 +24,10 @@ import ( "text/template" "time" - ecmLog "github.com/rancher/ecm-distro-tools/log" - "github.com/google/go-github/v39/github" ecmConfig "github.com/rancher/ecm-distro-tools/cmd/release/config" ecmHTTP "github.com/rancher/ecm-distro-tools/http" + ecmLog "github.com/rancher/ecm-distro-tools/log" "github.com/rancher/ecm-distro-tools/release" "github.com/rancher/ecm-distro-tools/repository" "golang.org/x/mod/semver" From 434c86f9678ab69c793efcb44bbaf3e364362611 Mon Sep 17 00:00:00 2001 From: Pedro Tashima <23709916+tashima42@users.noreply.github.com> Date: Wed, 14 Aug 2024 18:45:22 -0300 Subject: [PATCH 7/7] remove logs --- release/rancher/rancher.go | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/release/rancher/rancher.go b/release/rancher/rancher.go index 20bff9c7..78599e4d 100644 --- a/release/rancher/rancher.go +++ b/release/rancher/rancher.go @@ -528,15 +528,14 @@ func validateRepoImage(repoImage string) error { } func GenerateDockerImageDigests(outputFile, imagesFileURL, registry string, verbose bool) error { - imagesDigests, err := dockerImagesDigests(imagesFileURL, registry, verbose) + imagesDigests, err := dockerImagesDigests(imagesFileURL, registry) if err != nil { return err } return createAssetFile(outputFile, imagesDigests) } -func dockerImagesDigests(imagesFileURL, registry string, verbose bool) (imageDigest, error) { - log := ecmLog.NewLogger(verbose) +func dockerImagesDigests(imagesFileURL, registry string) (imageDigest, error) { imagesList, err := artifactImageList(imagesFileURL, registry) if err != nil { return nil, err @@ -554,7 +553,6 @@ func dockerImagesDigests(imagesFileURL, registry string, verbose bool) (imageDig if imageAndVersion == "" || imageAndVersion == " " { continue } - log.Println("image: " + imageAndVersion) if !strings.Contains(imageAndVersion, ":") { return nil, errors.New("malformed image name: , missing ':'") } @@ -569,8 +567,7 @@ func dockerImagesDigests(imagesFileURL, registry string, verbose bool) (imageDig } repositoryAuths[image] = auth } - digest, statusCode, err := dockerImageDigest(rgInfo.BaseURL, image, imageVersion, repositoryAuths[image]) - log.Println("status code: " + strconv.Itoa(statusCode)) + digest, _, err := dockerImageDigest(rgInfo.BaseURL, image, imageVersion, repositoryAuths[image]) if err != nil { return nil, err }