From c92fb809c6f13936de512e59c1263499d94ec558 Mon Sep 17 00:00:00 2001 From: Jeff Regan Date: Sat, 27 Feb 2021 06:52:25 -0800 Subject: [PATCH] Delete older releasing program (replaced by gorepomod). --- releasing/releasing/gitrunner.go | 293 ---------------------- releasing/releasing/go.mod | 8 - releasing/releasing/go.sum | 138 ---------- releasing/releasing/main.go | 278 -------------------- releasing/releasing/main_test.go | 20 -- releasing/releasing/modulemeta.go | 80 ------ releasing/releasing/modulemeta_test.go | 160 ------------ releasing/releasing/moduleversion.go | 97 ------- releasing/releasing/moduleversion_test.go | 143 ----------- 9 files changed, 1217 deletions(-) delete mode 100644 releasing/releasing/gitrunner.go delete mode 100644 releasing/releasing/go.mod delete mode 100644 releasing/releasing/go.sum delete mode 100644 releasing/releasing/main.go delete mode 100644 releasing/releasing/main_test.go delete mode 100644 releasing/releasing/modulemeta.go delete mode 100644 releasing/releasing/modulemeta_test.go delete mode 100644 releasing/releasing/moduleversion.go delete mode 100644 releasing/releasing/moduleversion_test.go diff --git a/releasing/releasing/gitrunner.go b/releasing/releasing/gitrunner.go deleted file mode 100644 index 2d2bc956e..000000000 --- a/releasing/releasing/gitrunner.go +++ /dev/null @@ -1,293 +0,0 @@ -package main - -import ( - "fmt" - "io/ioutil" - "os" - "os/exec" - "path/filepath" - "regexp" - "strings" -) - -type gitRunner struct { - // Original git repo path, which should be current working directory - originalGitPath string - // A temporary path for worktree - worktreePath string - // Does this have worktree - hasWorktree bool -} - -func newGitRunner(worktree bool) (gitRunner, error) { - gr := gitRunner{} - pwd, err := os.Getwd() - if err != nil { - return gr, err - } - gr.originalGitPath = pwd - gr.hasWorktree = worktree - if worktree { - err = gr.CreateWorktreeDir() - if err != nil { - return gr, err - } - } - return gr, nil -} - -func (gr *gitRunner) Close() error { - if !gr.hasWorktree { - return nil - } - err := gr.DeleteWorktreeDir() - if err != nil { - return err - } - err = gr.PruneWorktree() - if err != nil { - return err - } - return nil -} - -func (gr *gitRunner) DeleteWorktreeDir() error { - logDebug("Deleting git worktree dir: %s", gr.worktreePath) - err := os.RemoveAll(gr.worktreePath) - if err != nil { - return err - } - logDebug("Deleting done") - return nil -} - -func (gr *gitRunner) WorktreePath() (string, error) { - if gr.worktreePath == "" { - return "", fmt.Errorf("empty worktree path") - } - return gr.worktreePath, nil -} - -func (gr *gitRunner) OriginalGitPath() (string, error) { - if gr.originalGitPath == "" { - return "", fmt.Errorf("empty git path") - } - return gr.originalGitPath, nil -} - -func (gr *gitRunner) CreateWorktreeDir() error { - // Create temporary directory - temp, err := ioutil.TempDir("", "kustomize-releases") - if err != nil { - return err - } - gr.worktreePath = filepath.Join(temp, "sigs.k8s.io/kustomize") - err = os.MkdirAll(gr.worktreePath, 0700) - logDebug("Created git worktree dir: %s", gr.worktreePath) - if err != nil { - return err - } - return nil -} - -func (gr *gitRunner) CheckRemoteExistence(remote string) error { - path, err := gr.OriginalGitPath() - if err != nil { - return err - } - logDebug("Checking remote %s in %s", remote, path) - cmd := exec.Command("git", "remote") - cmd.Dir = path - stdoutStderr, err := cmd.CombinedOutput() - if err != nil { - return fmt.Errorf("%s %s", err.Error(), stdoutStderr) - } - logDebug("Remotes:\n%s", string(stdoutStderr)) - - regString := fmt.Sprintf("(?m)^\\s*%s\\s*$", remote) - reg := regexp.MustCompile(regString) - if !reg.MatchString(string(stdoutStderr)) { - return fmt.Errorf("cannot find remote named %s", remote) - } - logDebug("Remote %s exists", remote) - return nil -} - -func (gr *gitRunner) FetchTags(remote string) error { - logDebug("Fetching latest tags") - path, err := gr.OriginalGitPath() - if err != nil { - return err - } - cmd := exec.Command("git", "fetch", "-t", remote, "-f") - cmd.Dir = path - stdoutStderr, err := cmd.CombinedOutput() - if err != nil { - return fmt.Errorf("%s %s", err.Error(), stdoutStderr) - } - logDebug("Finished fetching") - return nil -} - -func (gr *gitRunner) GetTags() (string, error) { - path, err := gr.OriginalGitPath() - if err != nil { - return "", err - } - logDebug("Getting latest tag in repo %s", path) - cmd := exec.Command("git", "tag", "-l") - cmd.Dir = path - stdoutStderr, err := cmd.CombinedOutput() - if err != nil { - return "", fmt.Errorf("%s %s", err.Error(), stdoutStderr) - } - logDebug("Finished getting tags") - return string(stdoutStderr), nil -} - -func (gr *gitRunner) CheckBranchExistence(name string) (bool, error) { - logDebug("Checking branch %s existence", name) - path, err := gr.OriginalGitPath() - if err != nil { - return false, err - } - cmd := exec.Command("git", "branch", "-a") - cmd.Dir = path - stdoutStderr, err := cmd.CombinedOutput() - if err != nil { - return false, fmt.Errorf("%s %s", err.Error(), stdoutStderr) - } - branches := strings.Split(string(stdoutStderr), "\n") - for _, branch := range branches { - if strings.Trim(branch, " ") == "remotes/"+name { - return true, nil - } - } - return false, nil -} - -func (gr *gitRunner) NewBranch(name string) error { - logInfo("Creating new branch %s", name) - path, err := gr.OriginalGitPath() - if err != nil { - return err - } - upstreamBranch := "upstream/" + name - cmd := exec.Command("git", "branch", name, upstreamBranch) - exist, err := gr.CheckBranchExistence(upstreamBranch) - if err != nil { - return err - } - if !exist { - logInfo("Remote branch %s doesn't exist", upstreamBranch) - cmd = exec.Command("git", "branch", name) - } - cmd.Dir = path - stdoutStderr, err := cmd.CombinedOutput() - if err != nil { - return fmt.Errorf("%s %s", err.Error(), stdoutStderr) - } - return nil -} - -func (gr *gitRunner) DeleteBranch(name string) error { - logDebug("Deleting branch %s", name) - path, err := gr.OriginalGitPath() - if err != nil { - return err - } - cmd := exec.Command("git", "branch", "-D", name) - cmd.Dir = path - stdoutStderr, err := cmd.CombinedOutput() - if err != nil { - return fmt.Errorf("%s %s", err.Error(), stdoutStderr) - } - logDebug("Finished deleting branch") - return nil -} - -func (gr *gitRunner) AddWorktree(branch string) error { - path, err := gr.OriginalGitPath() - if err != nil { - return err - } - tempDir, err := gr.WorktreePath() - if err != nil { - return err - } - logInfo("Adding worktree %s for branch %s", tempDir, branch) - cmd := exec.Command("git", "worktree", "add", tempDir, branch) - cmd.Dir = path - stdoutStderr, err := cmd.CombinedOutput() - if err != nil { - return fmt.Errorf("%s %s", err.Error(), stdoutStderr) - } - return nil -} - -func (gr *gitRunner) PruneWorktree() error { - path, err := gr.OriginalGitPath() - if err != nil { - return err - } - logDebug("Pruning worktree for repo %s", path) - cmd := exec.Command("git", "worktree", "prune") - cmd.Dir = path - stdoutStderr, err := cmd.CombinedOutput() - if err != nil { - return fmt.Errorf("%s %s", err.Error(), stdoutStderr) - } - logDebug("Finished pruning worktree") - return nil -} - -func (gr *gitRunner) Merge(branch string) error { - logInfo("Merging %s", branch) - path, err := gr.WorktreePath() - if err != nil { - return err - } - logDebug("Working dir: %s", path) - cmd := exec.Command("git", "merge", branch) - cmd.Dir = path - stdoutStderr, err := cmd.CombinedOutput() - if err != nil { - return fmt.Errorf("%s %s", err.Error(), stdoutStderr) - } - return nil -} - -func (gr *gitRunner) PushRelease(branch string, mod module) error { - logInfo("Pushing branch %s", branch) - path, err := gr.WorktreePath() - if err != nil { - return err - } - cmd := exec.Command("git", "push", "upstream", branch) - cmd.Dir = path - stdoutStderr, err := cmd.CombinedOutput() - if err != nil { - return fmt.Errorf("%s %s", err.Error(), stdoutStderr) - } - - logInfo("Creating tag %s", mod.Tag()) - cmd = exec.Command( - "git", "tag", - "-a", mod.Tag(), - "-m", fmt.Sprintf("Release %s on branch %s", mod.Tag(), branch), - ) - cmd.Dir = path - stdoutStderr, err = cmd.CombinedOutput() - if err != nil { - return fmt.Errorf("%s %s", err.Error(), stdoutStderr) - } - - logInfo("Pushing tag %s", mod.Tag()) - cmd = exec.Command("git", "push", "upstream", mod.Tag()) - cmd.Dir = path - stdoutStderr, err = cmd.CombinedOutput() - if err != nil { - return fmt.Errorf("%s %s", err.Error(), stdoutStderr) - } - return nil -} diff --git a/releasing/releasing/go.mod b/releasing/releasing/go.mod deleted file mode 100644 index 2e35de805..000000000 --- a/releasing/releasing/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module sigs.k8s.io/kustomize/releasing - -go 1.15 - -require ( - github.com/spf13/cobra v1.0.0 - golang.org/x/mod v0.3.0 -) diff --git a/releasing/releasing/go.sum b/releasing/releasing/go.sum deleted file mode 100644 index 056c8a671..000000000 --- a/releasing/releasing/go.sum +++ /dev/null @@ -1,138 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898 h1:/atklqdjdhuosWIl6AIbOeHJjicWYPqR9bpxqxYG2pA= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/releasing/releasing/main.go b/releasing/releasing/main.go deleted file mode 100644 index 690a62f9a..000000000 --- a/releasing/releasing/main.go +++ /dev/null @@ -1,278 +0,0 @@ -package main - -import ( - "errors" - "fmt" - "log" - - "github.com/spf13/cobra" -) - -var modules = [...]string{ - "kyaml", "api", "cmd/config", - "cmd/resource", "cmd/kubectl", "pluginator", "kustomize", -} - -// Enable verbose or not -var verbose bool - -// Disable dry run -var noDryRun bool - -// Enable module tests -var doTest bool - -// === Log helper functions === - -func logDebug(format string, v ...interface{}) { - if verbose { - log.Printf("DEBUG "+format, v...) - } -} - -func logInfo(format string, v ...interface{}) { - log.Printf("INFO "+format, v...) -} - -func logWarn(format string, v ...interface{}) { - log.Printf("WARN "+format, v...) -} - -func logFatal(format string, v ...interface{}) { - log.Fatalf("FATAL "+format, v...) -} - -func logFatalE(e error) { - log.Fatalf("FATAL %s", e.Error()) -} - -// === Command line commands === - -var rootCmd = &cobra.Command{ - Use: "releasing", - Short: `This go program is used to improve the modules releasing process in Kustomize repository. -Note: You may need to run fixgomod.sh in the module to make the module ready to release.`, -} - -func listCmdImpl() error { - gr, err := newGitRunner(false) - if err != nil { - return err - } - logDebug("Working directory: %s", gr.originalGitPath) - remote := "upstream" - - err = gr.CheckRemoteExistence(remote) - if err != nil { - return err - } - err = gr.FetchTags(remote) - if err != nil { - return err - } - tags, err := gr.GetTags() - if err != nil { - return err - } - - res := []string{} // Store result strings - for _, modName := range modules { - mod := module{ - name: modName, - } - err = mod.UpdateVersion(tags) - if err != nil { - return err - } - res = append(res, fmt.Sprintf("%s/%s", mod.name, mod.version.String())) - } - err = gr.Close() - if err != nil { - return err - } - for _, l := range res { - fmt.Println(l) - } - return nil -} - -var listSubCmd = &cobra.Command{ - Use: "list", - Short: "List current version of all covered modules", - Run: func(cmd *cobra.Command, args []string) { - err := listCmdImpl() - if err != nil { - logFatalE(err) - } - }, -} - -func checkReleaseArgs(args []string) error { - if len(args) != 2 { - return errors.New("2 arguments are required") - } - found := false - for _, mod := range modules { - if mod == args[0] { - found = true - break - } - } - if !found { - return fmt.Errorf("%s is not a valid module. Valid modules are %s", args[0], modules) - } - types := []string{"major", "minor", "patch"} - found = false - for _, t := range types { - if t == args[1] { - found = true - break - } - } - if !found { - return fmt.Errorf("%s is not a valid version type. Valid types are %s", args[1], types) - } - return nil -} - -func releaseCmdImpl(args []string) error { - modName := args[0] - versionType := args[1] - gr, err := newGitRunner(true) - if err != nil { - return err - } - logInfo("Creating tag for module %s", modName) - logDebug("Working directory: %s", gr.originalGitPath) - remote := "upstream" - - err = gr.CheckRemoteExistence(remote) - if err != nil { - return err - } - err = gr.FetchTags(remote) - if err != nil { - return err - } - tags, err := gr.GetTags() - if err != nil { - return err - } - - gitPath, err := gr.OriginalGitPath() - if err != nil { - return err - } - mod := module{ - name: modName, - path: gitPath, - } - err = mod.UpdateVersion(tags) - if err != nil { - return err - } - - oldVersion := mod.version.String() - err = mod.version.Bump(versionType) - if err != nil { - return err - } - newVersion := mod.version.String() - logInfo("Bumping version: %s => %s", oldVersion, newVersion) - - // Create branch - branch := fmt.Sprintf("release-%s-v%d.%d", mod.name, mod.version.major, mod.version.minor) - err = gr.NewBranch(branch) - if err != nil { - return err - } - - err = gr.AddWorktree(branch) - if err != nil { - return err - } - - err = gr.Merge("upstream/master") - if err != nil { - return err - } - // Update module path - worktreePath, err := gr.WorktreePath() - if err != nil { - return err - } - mod.path = worktreePath - - logInfo( - "Releasing summary:\nDir:\t%s\nModule:\t%s %s\nBranch:\t%s\nTag:\t%s", - worktreePath, - mod.name, - mod.version.String(), - branch, - mod.Tag(), - ) - - // Check is there replace statement in go.mod - err = mod.CheckModReplace() - if err != nil { - return err - } - - // Run module tests - output, err := mod.RunTest() - if err != nil { - logWarn(output) - } else if !noDryRun { - logInfo("Skipping push module %s. Run with --no-dry-run to push the release.", mod.name) - } else { - err = gr.PushRelease(branch, mod) - if err != nil { - return err - } - } - // Clean - err = gr.Close() - if err != nil { - return err - } - err = gr.DeleteBranch(branch) - if err != nil { - return err - } - logInfo("Releasing for module %s completes", mod.name) - return nil -} - -var release = &cobra.Command{ - Use: "release [module name] [version type]", - Short: "Release a new version of specified module", - Args: func(cmd *cobra.Command, args []string) error { - return checkReleaseArgs(args) - }, - Run: func(cmd *cobra.Command, args []string) { - err := releaseCmdImpl(args) - if err != nil { - logFatalE(err) - } - }, -} - -var subCmds = [...]*cobra.Command{ - listSubCmd, - release, -} - -// === Main function === - -func main() { - for _, cmd := range subCmds { - rootCmd.AddCommand(cmd) - } - rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "verbose output") - release.Flags().BoolVarP(&noDryRun, "no-dry-run", "", false, "disable dry-run") - release.Flags().BoolVarP(&doTest, "do-test", "", false, "run module tests before releasing") - - if err := rootCmd.Execute(); err != nil { - logFatal(err.Error()) - } -} diff --git a/releasing/releasing/main_test.go b/releasing/releasing/main_test.go deleted file mode 100644 index fe1988b23..000000000 --- a/releasing/releasing/main_test.go +++ /dev/null @@ -1,20 +0,0 @@ -package main - -import ( - "testing" -) - -func TestList(t *testing.T) { - err := listCmdImpl() - if err != nil { - t.Error(err) - } -} - -func TestRelease(t *testing.T) { - args := []string{"api", "minor"} - err := releaseCmdImpl(args) - if err != nil { - t.Error(err) - } -} diff --git a/releasing/releasing/modulemeta.go b/releasing/releasing/modulemeta.go deleted file mode 100644 index 66fc5cfab..000000000 --- a/releasing/releasing/modulemeta.go +++ /dev/null @@ -1,80 +0,0 @@ -package main - -import ( - "fmt" - "io/ioutil" - "os" - "os/exec" - "path/filepath" - "strings" - - "golang.org/x/mod/modfile" -) - -type module struct { - // Module name - name string - // Module path - path string - // Module version - version moduleVersion -} - -func (m *module) UpdateVersion(tags string) error { - v, err := newModuleVersionFromGitTags(tags, m.name) - if err != nil { - return err - } - m.version = v - return nil -} - -func (m *module) CheckModReplace() error { - goModPath := filepath.Join(m.path, m.name, "go.mod") - info, err := os.Stat(goModPath) - if os.IsNotExist(err) || info.IsDir() { - return nil - } - - goModContent, err := ioutil.ReadFile(goModPath) - if err != nil { - return err - } - return checkModReplace(goModPath, goModContent) -} - -func checkModReplace(path string, data []byte) error { - f, err := modfile.Parse(path, data, nil) - if err != nil { - return err - } - if len(f.Replace) > 0 { - var msg strings.Builder - for _, replace := range f.Replace { - fmt.Fprintf(&msg, " - Please update go.mod to pin a specific version of %s\n", replace.Old.Path) - } - return fmt.Errorf("Found replace in %s\n%s", path, msg.String()) - } - return nil -} - -func (m *module) Tag() string { - return m.name + "/" + m.version.String() -} - -func (m *module) RunTest() (string, error) { - if !doTest { - logInfo("Tests disabled.") - return "", nil - } - testPath := filepath.Join(m.path, m.name) - logInfo("Running tests in %s...", testPath) - cmd := exec.Command("go", "test", "./...") - cmd.Dir = testPath - stdoutStderr, err := cmd.CombinedOutput() - if err != nil { - return string(stdoutStderr), err - } - logInfo("Tests are successfully finished") - return "", nil -} diff --git a/releasing/releasing/modulemeta_test.go b/releasing/releasing/modulemeta_test.go deleted file mode 100644 index 1712e8f5e..000000000 --- a/releasing/releasing/modulemeta_test.go +++ /dev/null @@ -1,160 +0,0 @@ -package main - -import ( - "io/ioutil" - "os" - "path/filepath" - "testing" -) - -func TestModuleTags(t *testing.T) { - tags := `api/v0.1.1 - api/v0.2.0 - api/v0.3.0 - api/v0.3.1 - api/v0.3.2 - api/v0.3.3 - cmd/config/v0.0.1 - cmd/config/v0.0.10 - cmd/config/v0.0.11 - cmd/config/v0.0.12 - cmd/config/v0.0.13 - cmd/config/v0.0.2 - cmd/config/v0.0.3 - cmd/config/v0.0.4 - cmd/config/v0.0.5 - cmd/config/v0.0.6 - cmd/config/v0.0.7 - cmd/config/v0.0.8 - cmd/config/v0.0.9 - cmd/config/v0.1.0 - cmd/config/v0.1.1 - cmd/config/v0.1.10 - cmd/config/v0.1.11 - cmd/config/v0.1.2 - cmd/config/v0.1.3 - cmd/config/v0.1.4 - cmd/config/v0.1.5 - cmd/config/v0.1.6 - cmd/config/v0.1.7 - cmd/config/v0.1.8 - cmd/kubectl/v0.0.1 - cmd/kubectl/v0.0.2 - cmd/kubectl/v0.0.3 - cmd/resource/v0.0.1 - cmd/resource/v0.0.2 - kustomize/v3.2.1 - kustomize/v3.2.2 - kustomize/v3.2.3 - kustomize/v3.3.0 - kustomize/v3.4.0 - kustomize/v3.5.1 - kustomize/v3.5.2 - kustomize/v3.5.3 - kustomize/v3.5.4 - kustomize/v3.5.5` - expect := "cmd/config/v0.1.11" - - m := module{ - name: "cmd/config", - } - - err := m.UpdateVersion(tags) - if err != nil { - t.Error(err) - } - - if m.Tag() != expect { - t.Errorf("Tag %s doesn't match expected %s", m.Tag(), expect) - } -} - -func TestCheckModReplace1(t *testing.T) { - path := "testpath" - dataString := `module sigs.k8s.io/kustomize/kustomize/v3 - - go 1.15 - - replace ( - sigs.k8s.io/kustomize/cmd/kubectl v0.0.3 => ../cmd/kubectl - )` - - expect := `Found replace in testpath - - Please update go.mod to pin a specific version of sigs.k8s.io/kustomize/cmd/kubectl -` - - err := checkModReplace(path, []byte(dataString)) - if err.Error() != expect { - t.Errorf("Error %s doesn't match expected %s", err.Error(), expect) - } -} - -func TestCheckModReplace2(t *testing.T) { - path := "testpath" - dataString := `module sigs.k8s.io/kustomize/kustomize/v3 - - go 1.15 - - replace sigs.k8s.io/kustomize/cmd/kubectl v0.0.3 => ../cmd/kubectl` - - expect := `Found replace in testpath - - Please update go.mod to pin a specific version of sigs.k8s.io/kustomize/cmd/kubectl -` - - err := checkModReplace(path, []byte(dataString)) - if err.Error() != expect { - t.Errorf("Error %s doesn't match expected %s", err.Error(), expect) - } -} - -func TestCheckModReplace3(t *testing.T) { - path := "testpath" - dataString := `module sigs.k8s.io/kustomize/kustomize/v3 - - go 1.15 - - exclude ( - github.com/russross/blackfriday v2.0.0+incompatible - sigs.k8s.io/kustomize/api v0.2.0 - )` - - err := checkModReplace(path, []byte(dataString)) - if err != nil { - t.Errorf("Error %s is not expected", err.Error()) - } -} - -func TestCheckModReplaceWithFile(t *testing.T) { - dataString := `module sigs.k8s.io/kustomize/kustomize/v3 - - go 1.15 - - exclude ( - github.com/russross/blackfriday v2.0.0+incompatible - sigs.k8s.io/kustomize/api v0.2.0 - )` - - dir, err := ioutil.TempDir("", "kustomize-releases-test") - if err != nil { - t.Error(err) - } - modName := "kustomize" - defer os.RemoveAll(dir) - - err = os.MkdirAll(filepath.Join(dir, modName), os.FileMode(0700)) - if err != nil { - t.Error(err) - } - - ioutil.WriteFile(filepath.Join(dir, modName, "go.mod"), []byte(dataString), os.FileMode(0600)) - - m := module{ - name: modName, - path: dir, - } - - err = m.CheckModReplace() - if err != nil { - t.Errorf("Error %s is not expected", err.Error()) - } -} diff --git a/releasing/releasing/moduleversion.go b/releasing/releasing/moduleversion.go deleted file mode 100644 index af4a5ecab..000000000 --- a/releasing/releasing/moduleversion.go +++ /dev/null @@ -1,97 +0,0 @@ -package main - -import ( - "fmt" - "regexp" - "sort" - "strconv" - "strings" -) - -type moduleVersion struct { - major int - minor int - patch int -} - -func (v *moduleVersion) String() string { - return fmt.Sprintf("v%d.%d.%d", v.major, v.minor, v.patch) -} - -func (v *moduleVersion) Bump(t string) error { - if t == "major" { - v.major++ - v.minor = 0 - v.patch = 0 - } else if t == "minor" { - v.minor++ - v.patch = 0 - } else if t == "patch" { - v.patch++ - } else { - return fmt.Errorf("invalid version type: %s", t) - } - return nil -} - -func newModuleVersionFromString(vs string) (moduleVersion, error) { - v := moduleVersion{} - if len(vs) < 1 { - return v, fmt.Errorf("invalid version string %s", vs) - } - if vs[0] == 'v' { - vs = vs[1:] - } - versions := strings.Split(vs, ".") - if len(versions) != 3 { - return v, fmt.Errorf("invalid version string %s", vs) - } - major, err := strconv.Atoi(versions[0]) - if err != nil { - return v, err - } - minor, err := strconv.Atoi(versions[1]) - if err != nil { - return v, err - } - patch, err := strconv.Atoi(versions[2]) - if err != nil { - return v, err - } - v = moduleVersion{ - major: major, - minor: minor, - patch: patch, - } - - return v, nil -} - -func newModuleVersionFromGitTags(tags, modName string) (moduleVersion, error) { - // Search for module tag - regString := fmt.Sprintf("(?m)^\\s*%s/v(\\d+\\.){2}\\d+\\s*$", modName) - reg := regexp.MustCompile(regString) - modTagsString := reg.FindAllString(tags, -1) - logDebug("Tags for module %s:\n%s", modName, modTagsString) - var versions []moduleVersion - for _, tag := range modTagsString { - tag = tag[len(modName)+2:] - v, err := newModuleVersionFromString(tag) - if err != nil { - return moduleVersion{}, err - } - - versions = append(versions, v) - } - // Sort to find latest tag - sort.Slice(versions, func(i, j int) bool { - if versions[i].major == versions[j].major && versions[i].minor == versions[j].minor { - return versions[i].patch > versions[j].patch - } else if versions[i].major == versions[j].major { - return versions[i].minor > versions[j].minor - } else { - return versions[i].major > versions[j].major - } - }) - return versions[0], nil -} diff --git a/releasing/releasing/moduleversion_test.go b/releasing/releasing/moduleversion_test.go deleted file mode 100644 index 3cf3a83f9..000000000 --- a/releasing/releasing/moduleversion_test.go +++ /dev/null @@ -1,143 +0,0 @@ -package main - -import ( - "testing" -) - -func TestVersionFromAndToString(t *testing.T) { - vs := "1.1.1" - expect := "v1.1.1" - v, err := newModuleVersionFromString(vs) - if err != nil { - t.Error(err) - } - if v.String() != expect { - t.Errorf("%s doesn't match expected %s", v.String(), expect) - } - - vs = "v0.0.0" - expect = "v0.0.0" - v, err = newModuleVersionFromString(vs) - if err != nil { - t.Error(err) - } - if v.String() != expect { - t.Errorf("%s doesn't match expected %s", v.String(), expect) - } - - vs = "v0.0" - v, err = newModuleVersionFromString(vs) - if err == nil { - t.Errorf("%s should be invalid", vs) - } - - vs = "" - v, err = newModuleVersionFromString(vs) - if err == nil { - t.Errorf("%s should be invalid", vs) - } -} - -func TestVersionFromGitTags(t *testing.T) { - tags := `api/v0.1.1 - api/v0.2.0 - api/v0.3.0 - api/v0.3.1 - api/v0.3.2 - api/v0.3.3 - cmd/config/v0.0.1 - cmd/config/v0.0.10 - cmd/config/v0.0.11 - cmd/config/v0.0.12 - cmd/config/v0.0.13 - cmd/config/v0.0.2 - cmd/config/v0.0.3 - cmd/config/v0.0.4 - cmd/config/v0.0.5 - cmd/config/v0.0.6 - cmd/config/v0.0.7 - cmd/config/v0.0.8 - cmd/config/v0.0.9 - cmd/config/v0.1.0 - cmd/config/v0.1.1 - cmd/config/v0.1.10 - cmd/config/v0.1.11 - cmd/config/v0.1.2 - cmd/config/v0.1.3 - cmd/config/v0.1.4 - cmd/config/v0.1.5 - cmd/config/v0.1.6 - cmd/config/v0.1.7 - cmd/config/v0.1.8 - cmd/kubectl/v0.0.1 - cmd/kubectl/v0.0.2 - cmd/kubectl/v0.0.3 - cmd/resource/v0.0.1 - cmd/resource/v0.0.2 - kustomize/v3.2.1 - kustomize/v3.2.2 - kustomize/v3.2.3 - kustomize/v3.3.0 - kustomize/v3.4.0 - kustomize/v3.5.1 - kustomize/v3.5.2 - kustomize/v3.5.3 - kustomize/v3.5.4 - kustomize/v3.5.5` - expect := "v0.1.11" - - v, err := newModuleVersionFromGitTags(tags, "cmd/config") - if err != nil { - t.Error(err) - } - if v.String() != expect { - t.Errorf("%s doesn't match expected %s", v.String(), expect) - } -} - -func TestVersionBumpPatch(t *testing.T) { - v := moduleVersion{0, 1, 1} - expect := "v0.1.2" - err := v.Bump("patch") - if err != nil { - t.Error(err) - } - - if v.String() != expect { - t.Errorf("%s doesn't match expected %s", v.String(), expect) - } -} - -func TestVersionBumpMinor(t *testing.T) { - v := moduleVersion{0, 1, 1} - expect := "v0.2.0" - err := v.Bump("minor") - if err != nil { - t.Error(err) - } - - if v.String() != expect { - t.Errorf("%s doesn't match expected %s", v.String(), expect) - } -} - -func TestVersionBumpMajor(t *testing.T) { - v := moduleVersion{0, 1, 1} - expect := "v1.0.0" - err := v.Bump("major") - if err != nil { - t.Error(err) - } - - if v.String() != expect { - t.Errorf("%s doesn't match expected %s", v.String(), expect) - } -} - -func TestVersionBumpError(t *testing.T) { - v := moduleVersion{} - err := v.Bump("unknown") - if err == nil { - t.Errorf("Invalid bumping type should have error") - } -}