From 0411a0ef61250fa436eff9583a6b39a844e2eb7c Mon Sep 17 00:00:00 2001 From: Markus Pesch Date: Tue, 12 Nov 2019 18:30:16 +0100 Subject: [PATCH] add(cmd): replaced go integrated cli flags with cobra pkg flags --- Makefile | 14 ++++--- cmd/root.go | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++ go.mod | 1 + go.sum | 2 + main.go | 115 ++------------------------------------------------- 5 files changed, 130 insertions(+), 118 deletions(-) create mode 100644 cmd/root.go diff --git a/Makefile b/Makefile index 6e95e8f..785d0d9 100644 --- a/Makefile +++ b/Makefile @@ -2,8 +2,7 @@ # If no version is specified as a parameter of make, the last git hash # value is taken. # VERSION?=$(shell git describe --abbrev=0)+hash.$(shell git rev-parse --short HEAD) -VERSION?=$(shell git rev-parse --short HEAD) -RELEASE?=1 +VERSION?=$(shell git describe --abbrev=0)+hash.$(shell git rev-parse --short HEAD) # EXECUTABLE # Executable binary which should be compiled for different architecures @@ -62,19 +61,22 @@ README_FILE:=README.md # BINARIES # ============================================================================== PHONY:=all + +${EXECUTABLE}: bin/tmp/${EXECUTABLE} + all: ${EXECUTABLE_TARGETS} bin/linux/amd64/$(EXECUTABLE): bindata - CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -ldflags "-X main.version=${VERSION}" -o "$@" + CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -ldflags "-X main.version=${VERSION}" -o "${@}" bin/linux/arm/5/$(EXECUTABLE): bindata - CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -ldflags "-X main.version=${VERSION}" -o "$@" + CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -ldflags "-X main.version=${VERSION}" -o "${@}" bin/linux/arm/7/$(EXECUTABLE): bindata - CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -ldflags "-X main.version=${VERSION}" -o "$@" + CGO_ENABLED=0 GOARCH=amd64 GOOS=linux go build -ldflags "-X main.version=${VERSION}" -o "${@}" bin/tmp/${EXECUTABLE}: bindata - go build -ldflags "-X main.version=${VERSION}" -o "$@" + go build -ldflags "-X main.version=${VERSION}" -o "${@}" # BINDATA # ============================================================================== diff --git a/cmd/root.go b/cmd/root.go new file mode 100644 index 0000000..adda83f --- /dev/null +++ b/cmd/root.go @@ -0,0 +1,116 @@ +package cmd + +import ( + "io/ioutil" + "log" + "os" + + "github.com/go-flucky/flucky/pkg/logger" + "github.com/spf13/cobra" + "github.com/volker-raschek/docker-hub-description-updater/pkg/hub" + "github.com/volker-raschek/docker-hub-description-updater/pkg/types" +) + +var ( + dockerHubNamespace string + dockerHubUser string + dockerHubPassword string + dockerHubRepository string + file string + + loglevel string + flogger logger.Logger = logger.NewDefaultLogger(logger.LogLevelDebug) +) + +var rootCmd = &cobra.Command{ + Use: "dhdu", + Short: "docker hub description updater (dhdu)", + Run: func(cmd *cobra.Command, args []string) { + + switch loglevel { + case "debug": + flogger = logger.NewDefaultLogger(logger.LogLevelDebug) + break + case "info": + flogger = logger.NewDefaultLogger(logger.LogLevelDebug) + break + case "warn": + flogger = logger.NewDefaultLogger(logger.LogLevelDebug) + break + case "error": + flogger = logger.NewDefaultLogger(logger.LogLevelDebug) + break + case "fatal": + flogger = logger.NewDefaultLogger(logger.LogLevelDebug) + break + } + + if len(dockerHubUser) <= 0 { + flogger.Fatal("No user defined over flags") + } + + if len(dockerHubPassword) <= 0 { + flogger.Fatal("No password defined over flags") + } + + if len(dockerHubNamespace) <= 0 { + flogger.Debug("No namespace defined over flags: Use docker username instead") + dockerHubNamespace = dockerHubUser + } + + if len(dockerHubRepository) <= 0 { + flogger.Fatal("No repository defined over flags") + } + + if _, err := os.Stat(file); os.IsNotExist(err) && len(file) <= 0 { + flogger.Fatal("Can not find file: %v", file) + } + + flogger.Debug("Read file %v", file) + f, err := ioutil.ReadFile(file) + if err != nil { + flogger.Fatal("Can not read file %v: %v", file, err) + } + fullDescription := string(f) + + loginCredentials := &types.LoginCredentials{ + User: dockerHubUser, + Password: dockerHubPassword, + } + + flogger.Debug("Get Token") + token, err := hub.GetToken(loginCredentials) + if err != nil { + log.Fatalf("%v", err) + } + + repository := &types.Repository{ + Name: dockerHubRepository, + Namespcace: dockerHubNamespace, + FullDescription: fullDescription, + } + + flogger.Debug("Send Repository Patch") + _, err = hub.PatchRepository(repository, token) + if err != nil { + log.Fatalf("%v", err) + } + + }, +} + +// Execute a +func Execute(version string) { + rootCmd.Version = version + + rootCmd.Flags().StringVarP(&loglevel, "loglevel", "l", "info", "Loglevel, possible values: debug, info, warn, error, fatal") + + rootCmd.Flags().StringVarP(&dockerHubNamespace, "namespace", "n", "", "Docker Hub Namespace (default \"username\")") + rootCmd.Flags().StringVarP(&dockerHubPassword, "password", "p", "", "Docker Hub Password") + rootCmd.Flags().StringVarP(&dockerHubRepository, "repository", "r", "", "Docker Hub Repository") + rootCmd.Flags().StringVarP(&dockerHubUser, "username", "u", "", "Docker Hub Username") + + rootCmd.Flags().StringVarP(&file, "file", "f", "./README.md", "File which should be uploaded as docker hub description") + + rootCmd.Execute() +} diff --git a/go.mod b/go.mod index 6a9e889..4dde387 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/Masterminds/semver v1.5.0 github.com/davecgh/go-spew v1.1.1 // indirect github.com/go-flucky/flucky v0.0.0-20190714170626-0dd156f480be + github.com/spf13/cobra v0.0.3 github.com/stretchr/testify v1.4.0 github.com/volker-raschek/go-logger v0.0.0-20190924133618-4a42099e655f ) diff --git a/go.sum b/go.sum index 5666670..385fd98 100644 --- a/go.sum +++ b/go.sum @@ -18,7 +18,9 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/spf13/cobra v0.0.3 h1:ZlrZ4XsMRm04Fr5pSFxBgfND2EBVa1nLpiy1stUsX/8= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/stianeikeland/go-rpio v4.2.0+incompatible/go.mod h1:Sh81rdJwD96E2wja2Gd7rrKM+XZ9LrwvN2w4IXrqLR8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= diff --git a/main.go b/main.go index dfc5dc5..08ff6ea 100644 --- a/main.go +++ b/main.go @@ -1,122 +1,13 @@ package main import ( - "flag" - "io/ioutil" - "log" - - "github.com/Masterminds/semver" - "github.com/go-flucky/flucky/pkg/logger" - "github.com/volker-raschek/docker-hub-description-updater/pkg/hub" - "github.com/volker-raschek/docker-hub-description-updater/pkg/types" + "github.com/volker-raschek/docker-hub-description-updater/cmd" ) var ( - dockerHubAPI string = "https://hub.docker.com/v2" - dockerHubUser string - dockerHubPassword string - dockerHubNamespace string - dockerHubRepository string - - shortDescription string - shortDescriptionFile string - fullDescription string - fullDescriptionFile string - - semVersion *semver.Version - version string - - flogger logger.Logger + version string ) -func init() { - // sVersion, err := semver.NewVersion(version) - // if err != nil { - // log.Fatalf("Can not create new semantic version from %v: %v", version, err) - // } - // semVersion = sVersion - - flogger = logger.NewDefaultLogger(logger.LogLevelDebug) -} - func main() { - - flogger.Debug("Parse flags") - flag.StringVar(&dockerHubUser, "user", "", "Docker Hub Username") - flag.StringVar(&dockerHubPassword, "password", "", "Docker Hub Password") - flag.StringVar(&dockerHubNamespace, "namespace", "", "Docker Hub Namespace") - flag.StringVar(&dockerHubRepository, "repository", "", "Docker Hub Repository") - flag.StringVar(&shortDescription, "short-description", "", "Short description of the repository ") - flag.StringVar(&shortDescriptionFile, "short-description-file", "", "Short description of the repository. Override short-description if defined.") - flag.StringVar(&fullDescription, "full-description", "", "Full description of the repository") - flag.StringVar(&fullDescriptionFile, "full-description-file", "./README.md", "Full description of the repository. Override full-description if defined.") - flag.Parse() - - if len(dockerHubUser) <= 0 { - flogger.Fatal("No user defined over flags") - } - - if len(dockerHubPassword) <= 0 { - flogger.Fatal("No password defined over flags") - } - - if len(dockerHubNamespace) <= 0 { - flogger.Fatal("No namespace defined over flags") - } - - if len(dockerHubRepository) <= 0 { - flogger.Fatal("No repository defined over flags") - } - - hub.SetLogger(flogger) - - loginCredentials := &types.LoginCredentials{ - User: dockerHubUser, - Password: dockerHubPassword, - } - - actualShortDescription := "" - if len(shortDescription) > 0 { - actualShortDescription = shortDescription - flogger.Debug("Select short description from flag") - } else if len(shortDescriptionFile) > 0 { - f, err := ioutil.ReadFile(shortDescriptionFile) - if err != nil { - log.Fatalf("Can not read file %v", shortDescriptionFile) - } - actualShortDescription = string(f) - flogger.Debug("Select short description from file") - } - - actualFullDescription := "" - if len(fullDescription) > 0 { - actualFullDescription = fullDescription - flogger.Debug("Select full description from flag") - } else if len(fullDescriptionFile) > 0 { - f, err := ioutil.ReadFile(fullDescriptionFile) - if err != nil { - log.Fatalf("Can not read file %v", fullDescriptionFile) - } - actualFullDescription = string(f) - flogger.Debug("Select full description from file") - } - - flogger.Debug("Get Token") - token, err := hub.GetToken(loginCredentials) - if err != nil { - log.Fatalf("%v", err) - } - - repository := &types.Repository{ - Name: dockerHubRepository, - Namespcace: dockerHubNamespace, - Description: actualShortDescription, - FullDescription: actualFullDescription, - } - - flogger.Debug("Send Repository Patch") - _, err = hub.PatchRepository(repository, token) - if err != nil { - log.Fatalf("%v", err) - } + cmd.Execute(version) }