From 5cd59fb5f265ee0aca90b47eb9892db617ba2938 Mon Sep 17 00:00:00 2001 From: Rodrig Navarro Date: Sat, 23 Feb 2019 12:31:50 -0300 Subject: [PATCH 01/41] Create LICENSE --- LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..1c7af4a --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Walmart Digital + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From 0d745e6a1cece5c065f1fd4505db6a8b7d4a0697 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Tue, 12 Mar 2019 11:05:10 -0300 Subject: [PATCH 02/41] master (fix): Get error from git command execution and set success or fail --- pkg/git/git.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkg/git/git.go b/pkg/git/git.go index 50d8ddc..9be09fd 100644 --- a/pkg/git/git.go +++ b/pkg/git/git.go @@ -33,10 +33,14 @@ func commit(cmdGit *exec.Cmd, message ...interface{}) { fmt.Println(color.Gray("-------------------------------")) fmt.Println("") cmdGit.Stdout = os.Stdout - cmdGit.Run() + err := cmdGit.Run() fmt.Println("") fmt.Println(color.Gray("-------------------------------")) - fmt.Println(color.Green("Done \U0001F604")) + if err == nil { + fmt.Println(color.Green("Done \U0001F604")) + } else { + fmt.Println(color.Red("Something went grong \U0001F92F")) + } return } From b50216d9c0269a04e251fec82654058d9f3adb13 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Tue, 12 Mar 2019 11:06:27 -0300 Subject: [PATCH 03/41] 2.0.6 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index a5405b5..a1455f2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "go-cmf", - "version": "2.0.5", + "version": "2.0.6", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 68081dd..6b3f2f3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "go-cmf", - "version": "2.0.5", + "version": "2.0.6", "description": "CMF is an utility to standarize commit messages on porjects", "scripts": { "postinstall": "go-npm install", From 1c64f5400e1381f594398a5670c4729692d1b6bb Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Sat, 30 Mar 2019 08:40:55 -0300 Subject: [PATCH 04/41] master (fix): Add StdErr pipe to command --- pkg/git/git.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/git/git.go b/pkg/git/git.go index 9be09fd..9cb6093 100644 --- a/pkg/git/git.go +++ b/pkg/git/git.go @@ -33,6 +33,7 @@ func commit(cmdGit *exec.Cmd, message ...interface{}) { fmt.Println(color.Gray("-------------------------------")) fmt.Println("") cmdGit.Stdout = os.Stdout + cmdGit.Stderr = os.Stderr err := cmdGit.Run() fmt.Println("") fmt.Println(color.Gray("-------------------------------")) From 9b910ad540a8d58516a2a4a653c3de5353aea38d Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Sat, 30 Mar 2019 08:40:59 -0300 Subject: [PATCH 05/41] 2.0.7 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index a1455f2..2f7706b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "go-cmf", - "version": "2.0.6", + "version": "2.0.7", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 6b3f2f3..de97146 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "go-cmf", - "version": "2.0.6", + "version": "2.0.7", "description": "CMF is an utility to standarize commit messages on porjects", "scripts": { "postinstall": "go-npm install", From 9f6b04677de226e7b66921993c31938dca9d513c Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Tue, 10 Sep 2019 08:55:27 -0300 Subject: [PATCH 06/41] no-story (fix): Fix security vulnerabilities --- package-lock.json | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2f7706b..8c584e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -159,9 +159,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "requires": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", @@ -178,9 +178,9 @@ } }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -201,9 +201,9 @@ } }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" }, "har-schema": { "version": "2.0.0", @@ -239,9 +239,9 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "is-typedarray": { "version": "1.0.0", @@ -384,9 +384,9 @@ } }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" } @@ -418,12 +418,12 @@ } }, "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", "requires": { "block-stream": "*", - "fstream": "^1.0.2", + "fstream": "^1.0.12", "inherits": "2" } }, From b29a50865354336f68c5049b8af56900de6003f9 Mon Sep 17 00:00:00 2001 From: Rodrigo Date: Tue, 10 Sep 2019 09:00:21 -0300 Subject: [PATCH 07/41] 2.0.8 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8c584e1..3ebcf71 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "go-cmf", - "version": "2.0.7", + "version": "2.0.8", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index de97146..dd9229b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "go-cmf", - "version": "2.0.7", + "version": "2.0.8", "description": "CMF is an utility to standarize commit messages on porjects", "scripts": { "postinstall": "go-npm install", From 5fd29a37c173b4318bf21b3fde32aff089e514c0 Mon Sep 17 00:00:00 2001 From: Sebastian Diaz Date: Mon, 24 May 2021 12:00:26 -0400 Subject: [PATCH 08/41] fix(dependency): update minimist version to solve a vulnerability --- package-lock.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3ebcf71..a37afc5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -306,16 +306,16 @@ } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" } }, "oauth-sign": { From 38f5ba82adf08e49a13ac2b275a0a3969689a0cb Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Sun, 13 Jun 2021 08:08:21 -0400 Subject: [PATCH 09/41] v3.0 (feature): add go mod to the project --- go.mod | 8 ++ go.sum | 288 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 7 +- 3 files changed, 298 insertions(+), 5 deletions(-) create mode 100644 go.mod create mode 100644 go.sum diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..1924b13 --- /dev/null +++ b/go.mod @@ -0,0 +1,8 @@ +module github.com/walmartdigital/commit-message-formatter + +go 1.16 + +require ( + github.com/logrusorgru/aurora v2.0.3+incompatible // indirect + github.com/spf13/cobra v1.1.3 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..1574a11 --- /dev/null +++ b/go.sum @@ -0,0 +1,288 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +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/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +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/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +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.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-semver v0.3.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.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +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/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +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-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +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/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +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/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +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/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +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/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +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/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +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/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= +github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +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/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +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/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +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/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +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/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +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.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M= +github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +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/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +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-20181029021203-45a5f77698d3/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-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/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-20181201002055-351d144fa1fc/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-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/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-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/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/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +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-20190227155943-e225da77a7e6/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-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +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-20181026203630-95b1ffbd15a5/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-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +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-20180917221912-90fa682c2a6e/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-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +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.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/main.go b/main.go index 692c380..b36881c 100644 --- a/main.go +++ b/main.go @@ -21,12 +21,9 @@ package main import ( - "cmd" - "os" + "github.com/walmartdigital/commit-message-formatter/cmd" ) func main() { - if err := cmd.Root.Execute(); err != nil { - os.Exit(1) - } + cmd.Execute() } From 4e9d9838d6ac9bfbf36fd8278f1a4f8bcaf04c0a Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Sun, 13 Jun 2021 08:09:25 -0400 Subject: [PATCH 10/41] v3.0 (refactor): removed pkg folder in order to expose cmf packages for reuse --- pkg/boilerplate/boilerplate-packr.go | 7 -- pkg/boilerplate/boilerplate.go | 75 ---------------- pkg/cmd/cmd.go | 56 ------------ pkg/git/git.go | 76 ---------------- pkg/prompt/prompt.go | 62 ------------- pkg/template/template.go | 126 --------------------------- vendor | 1 - 7 files changed, 403 deletions(-) delete mode 100644 pkg/boilerplate/boilerplate-packr.go delete mode 100644 pkg/boilerplate/boilerplate.go delete mode 100644 pkg/cmd/cmd.go delete mode 100644 pkg/git/git.go delete mode 100644 pkg/prompt/prompt.go delete mode 100644 pkg/template/template.go delete mode 120000 vendor diff --git a/pkg/boilerplate/boilerplate-packr.go b/pkg/boilerplate/boilerplate-packr.go deleted file mode 100644 index f4b2d7a..0000000 --- a/pkg/boilerplate/boilerplate-packr.go +++ /dev/null @@ -1,7 +0,0 @@ -// Code generated by github.com/gobuffalo/packr/v2. DO NOT EDIT. - -// You can use the "packr clean" command to clean up this, -// and any other packr generated files. -package boilerplate - -import _ "github.com/commit-message-formatter/packrd" diff --git a/pkg/boilerplate/boilerplate.go b/pkg/boilerplate/boilerplate.go deleted file mode 100644 index 2df33ef..0000000 --- a/pkg/boilerplate/boilerplate.go +++ /dev/null @@ -1,75 +0,0 @@ -package boilerplate - -import ( - "fmt" - "os" - "prompt" - - packr "github.com/gobuffalo/packr/v2" - color "github.com/logrusorgru/aurora" -) - -func checkErr(err error) { - if err != nil { - fmt.Print(color.Red(err)) - os.Exit(0) - } -} - -var flows = map[string][]byte{ - "default": []byte(""), - "jira": []byte(""), - "custom": []byte(""), -} - -var flowTypes = []prompt.SelectItem{ - {Title: "Default", Description: "Flow with module affected and message", Value: "default"}, - {Title: "Jira", Description: "Flow based on Jira task", Value: "jira"}, - {Title: "Custom", Description: "Flow with your own rules", Value: "custom"}, -} - -var configurationSelectFlow = &prompt.SelectConfiguration{ - ActiveTpl: "\U0001F449 {{ .Title | cyan }}", - InactiveTpl: " {{ .Title | white }}", - SelectPrompt: "Flow Type", - SelectedTpl: "{{ \"Flow:\" | bold }} {{ .Title | green | bold }}", - DetailsTpl: `------------------------------- -{{ .Title | white | bold }} {{ .Description | white | bold }}`, -} - -func createConfigurationFile(flowType string) error { - projectFolder, err := os.Getwd() - if err != nil { - return err - } - - configFile, err := os.Create(projectFolder + "/.cmf.yaml") - defer configFile.Close() - - if err != nil { - return err - } - - _, err = configFile.Write(flows[flowType]) - - return err -} - -// Create a configuration file -func Create() { - selector := - prompt.Select(flowTypes, *configurationSelectFlow) - - err := createConfigurationFile(selector.Value) - checkErr(err) - - fmt.Println(color.Gray("File .cmf.yaml for " + selector.Value + " flow generated ")) - fmt.Println("Happy coding. \U0001F604") -} - -func init() { - box := packr.New("config", "../../configs") - flows["default"], _ = box.Find("default.yaml") - flows["jira"], _ = box.Find("jira.yaml") - flows["custom"], _ = box.Find("custom.yaml") -} diff --git a/pkg/cmd/cmd.go b/pkg/cmd/cmd.go deleted file mode 100644 index b9f40e5..0000000 --- a/pkg/cmd/cmd.go +++ /dev/null @@ -1,56 +0,0 @@ -package cmd - -import ( - "boilerplate" - "fmt" - "template" - - "github.com/commit-message-formatter/pkg/git" - "github.com/spf13/cobra" -) - -// Root Root cli command -var Root = &cobra.Command{ - Use: "cmf", - Short: "Commit Message Formatter", - Long: "Generate custom commit message for your repo and standarize your commits log", - Run: func(cmd *cobra.Command, args []string) { - go git.CheckTree() - message := template.Run() - git.Commit(message) - }, -} - -var version = &cobra.Command{ - Use: "version", - Short: "Version cmf", - Long: "Display version of commit message formatter", - Run: func(cmd *cobra.Command, args []string) { - fmt.Println("CMF - Commit Message Formatter v2.0") - }, -} - -var amend = &cobra.Command{ - Use: "amend", - Short: "Amend commit message", - Long: "Amend last commit message", - Run: func(cmd *cobra.Command, args []string) { - message := template.Run() - git.Amend(message) - }, -} - -var boilerplateCMD = &cobra.Command{ - Use: "init", - Short: "Create configuration file", - Long: "Create .cmf.yaml configuration file", - Run: func(cmd *cobra.Command, args []string) { - boilerplate.Create() - }, -} - -func init() { - Root.AddCommand(version) - Root.AddCommand(boilerplateCMD) - Root.AddCommand(amend) -} diff --git a/pkg/git/git.go b/pkg/git/git.go deleted file mode 100644 index 9cb6093..0000000 --- a/pkg/git/git.go +++ /dev/null @@ -1,76 +0,0 @@ -package git - -import ( - "context" - "errors" - "fmt" - "os" - "os/exec" - "strings" - - color "github.com/logrusorgru/aurora" -) - -func checkErr(err error) { - if err != nil { - fmt.Println(color.Red(err)) - os.Exit(1) - } -} - -// CheckTree perform a git tree check -func CheckTree() { - cmdGit := exec.Command("git", "diff", "--cached", "--exit-code") - _, err := cmdGit.Output() - if err == nil { - checkErr(errors.New("No changes added to commit")) - } -} - -func commit(cmdGit *exec.Cmd, message ...interface{}) { - fmt.Println("") - fmt.Println(message...) - fmt.Println(color.Gray("-------------------------------")) - fmt.Println("") - cmdGit.Stdout = os.Stdout - cmdGit.Stderr = os.Stderr - err := cmdGit.Run() - fmt.Println("") - fmt.Println(color.Gray("-------------------------------")) - if err == nil { - fmt.Println(color.Green("Done \U0001F604")) - } else { - fmt.Println(color.Red("Something went grong \U0001F92F")) - } - - return -} - -// Commit execute commit -func Commit(message string) (err error) { - ctx := context.Background() - cmdGit := exec.CommandContext(ctx, "git", "commit", "-m", message) - commit(cmdGit, "Committing: ", color.Blue(message)) - - return -} - -// Amend execute commit amend -func Amend(message string) (err error) { - ctx := context.Background() - cmdGit := exec.CommandContext(ctx, "git", "commit", "--amend", "-m", message) - commit(cmdGit, "Amending: ", color.Blue(message)) - - return -} - -// BranchName return current branch name -func BranchName() string { - cmdGit := exec.Command("git", "rev-parse", "--abbrev-ref", "HEAD") - branchName, err := cmdGit.Output() - if err != nil { - return "" - } - - return strings.TrimSuffix(string(branchName), "\n") -} diff --git a/pkg/prompt/prompt.go b/pkg/prompt/prompt.go deleted file mode 100644 index e194e64..0000000 --- a/pkg/prompt/prompt.go +++ /dev/null @@ -1,62 +0,0 @@ -package prompt - -import ( - "errors" - "strings" - - "github.com/mritd/promptx" -) - -// SelectItem a default item struct -type SelectItem struct { - Title string - Description string - Value string -} - -// SelectConfiguration a complete configuration select options -type SelectConfiguration struct { - ActiveTpl string - InactiveTpl string - SelectPrompt string - SelectedTpl string - DetailsTpl string -} - -// Select Returns a selected item -func Select(items []SelectItem, config SelectConfiguration) SelectItem { - configuration := &promptx.SelectConfig{ - ActiveTpl: config.ActiveTpl, - InactiveTpl: config.InactiveTpl, - SelectPrompt: config.SelectPrompt, - SelectedTpl: config.SelectedTpl, - DisPlaySize: 9, - DetailsTpl: config.DetailsTpl, - } - - selector := &promptx.Select{ - Items: items, - Config: configuration, - } - - return items[selector.Run()] -} - -// Input return a simple user input -func Input(title string, errorMessage string, defaultValue string) string { - input := promptx.NewDefaultPrompt(func(line []rune) error { - if strings.TrimSpace(string(line)) == "" && defaultValue == "" { - return errors.New(errorMessage) - } - - return nil - }, title) - - value := input.Run() - - if value == "" && defaultValue != "" { - return defaultValue - } - - return value -} diff --git a/pkg/template/template.go b/pkg/template/template.go deleted file mode 100644 index f976a12..0000000 --- a/pkg/template/template.go +++ /dev/null @@ -1,126 +0,0 @@ -package template - -import ( - "fmt" - "os" - "prompt" - "strings" - - "git" - - color "github.com/logrusorgru/aurora" - "github.com/spf13/viper" -) - -type option struct { - Value string - Desc string -} - -type keyValue struct { - Key string - Value string -} - -func checkErr(err error) { - if err != nil { - fmt.Print(color.Red("An error occurred, maybe 'cmf init' could fix it")) - os.Exit(0) - } -} - -func parseTemplate(template string, variables []keyValue) string { - for _, v := range variables { - template = strings.Replace(template, "{{"+v.Key+"}}", v.Value, -1) - } - - return template -} - -func executeFlow(settings map[string]interface{}) (variables []keyValue) { - prompts := settings["prompt"].([]interface{}) - for _, v := range prompts { - result := "" - var label = "" - var errorMessage = "Field empty" - var defaultValue = "" - - pr := v.(map[interface{}]interface{}) - - if value, ok := pr["LABEL"]; ok { - label = value.(string) - } - - if value, ok := pr["ERROR_LABEL"]; ok { - errorMessage = value.(string) - } - - if value, ok := pr["DEFAULT_VALUE"]; ok { - defaultValue = value.(string) - defaultValue = strings.Replace(defaultValue, "{{BRANCH_NAME}}", git.BranchName(), -1) - } - - if options := pr["OPTIONS"]; options == nil { - var labelMessage = label - - if defaultValue != "" { - labelMessage = label + " (" + defaultValue + ")" - } - - result = prompt.Input(labelMessage+":", errorMessage, defaultValue) - } else { - configurationSelectOption := &prompt.SelectConfiguration{ - ActiveTpl: "\U0001F449 {{ .Title | cyan | bold }}", - InactiveTpl: " {{ .Title | white }}", - SelectPrompt: label, - SelectedTpl: "\U0001F44D {{ \"" + label + "\" | cyan }} {{ .Title | cyan | bold }}", - DetailsTpl: `------------------------------- -{{ .Title | white | bold }} {{ .Description | white | bold }}`, - } - - optList := pr["OPTIONS"].([]interface{}) - var opts []prompt.SelectItem - for _, o := range optList { - op := o.(map[interface{}]interface{}) - - opts = append(opts, prompt.SelectItem{Title: op["VALUE"].(string), Value: op["VALUE"].(string), Description: op["DESC"].(string)}) - } - - selector := prompt.Select(opts, *configurationSelectOption) - result = selector.Value - } - - variables = append(variables, keyValue{ - Key: pr["KEY"].(string), - Value: result, - }) - } - - return -} - -func setFlowFileAsVariables() map[string]interface{} { - projectDir, err := os.Getwd() - checkErr(err) - projectConfigFile := projectDir + "/.cmf.yaml" - - _, err = os.Stat(projectConfigFile) - checkErr(err) - - viper.SetConfigFile(projectConfigFile) - viper.SetConfigType("yaml") - viper.AutomaticEnv() - - err = viper.ReadInConfig() - checkErr(err) - - return viper.AllSettings() -} - -// Run initialize prompt flow -func Run() string { - settings := setFlowFileAsVariables() - variables := executeFlow(settings) - template := settings["template"].(string) - return parseTemplate(template, variables) -} diff --git a/vendor b/vendor deleted file mode 120000 index 40ef090..0000000 --- a/vendor +++ /dev/null @@ -1 +0,0 @@ -./pkg \ No newline at end of file From 1d7a490b2f411f3193fc50d4b8f9d17962424f55 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Sun, 13 Jun 2021 08:09:56 -0400 Subject: [PATCH 11/41] v3.0 (feature): add simple mock flow for cmf --- cmd/cmd.go | 69 +++++++++++++++++++++++++++++++++++++++++ cmf/cmf.go | 51 ++++++++++++++++++++++++++++++ git/git.go | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 211 insertions(+) create mode 100644 cmd/cmd.go create mode 100644 cmf/cmf.go create mode 100644 git/git.go diff --git a/cmd/cmd.go b/cmd/cmd.go new file mode 100644 index 0000000..4690da6 --- /dev/null +++ b/cmd/cmd.go @@ -0,0 +1,69 @@ +package cmd + +import ( + "fmt" + "os" + + "github.com/spf13/cobra" + "github.com/walmartdigital/commit-message-formatter/cmf" + git "github.com/walmartdigital/commit-message-formatter/git" +) + +var cmfInstance cmf.CMF + +// Root Root cli command +var root = &cobra.Command{ + Use: "cmf", + Short: "Commit Message Formatter", + Long: "Generate custom commit message for your repo and standarize your commits log", + Run: func(cmd *cobra.Command, args []string) { + cmfInstance.CommitChanges() + // go git.CheckTree() + // message := template.Run() + // git.Commit(message) + }, +} + +var version = &cobra.Command{ + Use: "version", + Short: "Version cmf", + Long: "Display version of commit message formatter", + Run: func(cmd *cobra.Command, args []string) { + // fmt.Println("CMF - Commit Message Formatter v2.0") + cmfInstance.GetVersion() + }, +} + +var amend = &cobra.Command{ + Use: "amend", + Short: "Amend commit message", + Long: "Amend last commit message", + Run: func(cmd *cobra.Command, args []string) { + cmfInstance.CommitAmend() + // message := template.Run() + // git.Amend(message) + }, +} + +var boilerplateCMD = &cobra.Command{ + Use: "init", + Short: "Create configuration file", + Long: "Create .cmf.yaml configuration file", + Run: func(cmd *cobra.Command, args []string) { + cmfInstance.InitializeProject() + }, +} + +func Execute() { + if err := root.Execute(); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } +} + +func init() { + cmfInstance = cmf.NewCMF(git.NewGitWrapper()) + root.AddCommand(version) + root.AddCommand(boilerplateCMD) + root.AddCommand(amend) +} diff --git a/cmf/cmf.go b/cmf/cmf.go new file mode 100644 index 0000000..8d5862a --- /dev/null +++ b/cmf/cmf.go @@ -0,0 +1,51 @@ +package cmf + +import ( + "fmt" +) + +var version = "3.0" + +type Repository interface { + CheckWorkspaceChanges() + Commit(message string) + Amend(message string) +} +type cmf struct { + repository Repository +} + +type CMF interface { + GetVersion() + CommitChanges() + CommitAmend() + InitializeProject() +} + +func NewCMF(repository Repository) CMF { + return &cmf{ + repository: repository, + } +} + +// GetVersion return current cmf version +func (cmfInstance *cmf) GetVersion() { + fmt.Println("Git - Commit Message Formatter v", version) +} + +// CommitChanges perform a commit changes over current repository +func (cmfInstance *cmf) CommitChanges() { + cmfInstance.repository.CheckWorkspaceChanges() + // message := template.Run() + cmfInstance.repository.Commit("message") +} + +// CommitAmend perform a commit amend over current repository +func (cmfInstance *cmf) CommitAmend() { + fmt.Println("amend!!") +} + +// InitializeProject initialize current directory with a inner cmf template +func (cmfInstance *cmf) InitializeProject() { + fmt.Println("initialize!!") +} diff --git a/git/git.go b/git/git.go new file mode 100644 index 0000000..0ce4690 --- /dev/null +++ b/git/git.go @@ -0,0 +1,91 @@ +package git + +import "fmt" + +type git struct{} + +type Git interface { + CheckWorkspaceChanges() + Commit(message string) + Amend(message string) +} + +func NewGitWrapper() Git { + return &git{} +} + +func (gitInstance *git) CheckWorkspaceChanges() { + fmt.Println("check wrokspace") +} + +func (gitInstance *git) Commit(message string) { + fmt.Println(message) +} + +func (gitInstance *git) Amend(message string) { + fmt.Println("amend") +} + +// func checkErr(err error) { +// if err != nil { +// fmt.Println(color.Red(err)) +// os.Exit(1) +// } +// } + +// // CheckTree perform a git tree check +// func CheckTree() { +// cmdGit := exec.Command("git", "diff", "--cached", "--exit-code") +// _, err := cmdGit.Output() +// if err == nil { +// checkErr(errors.New("No changes added to commit")) +// } +// } + +// func commit(cmdGit *exec.Cmd, message ...interface{}) { +// fmt.Println("") +// fmt.Println(message...) +// // fmt.Println(color.Gray("-------------------------------")) +// fmt.Println("") +// cmdGit.Stdout = os.Stdout +// cmdGit.Stderr = os.Stderr +// err := cmdGit.Run() +// fmt.Println("") +// // fmt.Println(color.Gray("-------------------------------")) +// if err == nil { +// fmt.Println(color.Green("Done \U0001F604")) +// } else { +// fmt.Println(color.Red("Something went grong \U0001F92F")) +// } + +// return +// } + +// // Commit execute commit +// func Commit(message string) (err error) { +// ctx := context.Background() +// cmdGit := exec.CommandContext(ctx, "git", "commit", "-m", message) +// commit(cmdGit, "Committing: ", color.Blue(message)) + +// return +// } + +// // Amend execute commit amend +// func Amend(message string) (err error) { +// ctx := context.Background() +// cmdGit := exec.CommandContext(ctx, "git", "commit", "--amend", "-m", message) +// commit(cmdGit, "Amending: ", color.Blue(message)) + +// return +// } + +// // BranchName return current branch name +// func BranchName() string { +// cmdGit := exec.Command("git", "rev-parse", "--abbrev-ref", "HEAD") +// branchName, err := cmdGit.Output() +// if err != nil { +// return "" +// } + +// return strings.TrimSuffix(string(branchName), "\n") +// } From 2050263bdf26b65b4b640c32cd685d0089c8c3a2 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Sun, 13 Jun 2021 13:41:12 -0400 Subject: [PATCH 12/41] v3.0 (feat): add fs package to handle user directory and cmf inner directory --- fs/fs.go | 66 +++++++++++++++++++++++ fs/fs_test.go | 68 ++++++++++++++++++++++++ mocks/fs.go | 116 +++++++++++++++++++++++++++++++++++++++++ packrd/packed-packr.go | 33 ------------ 4 files changed, 250 insertions(+), 33 deletions(-) create mode 100644 fs/fs.go create mode 100644 fs/fs_test.go create mode 100644 mocks/fs.go delete mode 100644 packrd/packed-packr.go diff --git a/fs/fs.go b/fs/fs.go new file mode 100644 index 0000000..c7a1365 --- /dev/null +++ b/fs/fs.go @@ -0,0 +1,66 @@ +package fs + +import ( + "errors" + "io/ioutil" + "os" +) + +// GetFileFromVirtualFSError vfs.ReadFileSync fail +const GetFileFromVirtualFSError = "open file from vfs error" + +// GetFileFromFSError ioutil.ReadFile fail +const GetFileFromFSError = "open file from user fs error" + +type fs struct { + vfs VFS +} + +// VFS VirtualFS main object +type VFS interface { + ReadFile(path string) ([]byte, error) +} + +// FS file system interface +type FS interface { + GetFileFromVirtualFS(path string) (string, error) + GetFileFromFS(path string) (string, error) + GetCurrentDirectory() (string, error) +} + +// NewFs return new file system with virtual file system +func NewFs(vfs VFS) FS { + return &fs{ + vfs: vfs, + } +} + +// GetFileFromVirtualFS return a file from virtual fs +func (vfs *fs) GetFileFromVirtualFS(path string) (string, error) { + file, err := vfs.vfs.ReadFile(path) + if err != nil { + return "", errors.New(GetFileFromVirtualFSError) + } + + return string(file), nil +} + +// GetFileFromFS return a file from user fs +func (vfs *fs) GetFileFromFS(path string) (string, error) { + file, err := ioutil.ReadFile(path) + if err != nil { + return "", errors.New(GetFileFromFSError) + } + + return string(file), nil +} + +// GetCurrentDirectory return user current directory +func (vfs *fs) GetCurrentDirectory() (string, error) { + path, err := os.Getwd() + if err != nil { + return "", errors.New(GetFileFromFSError) + } + + return path, nil +} diff --git a/fs/fs_test.go b/fs/fs_test.go new file mode 100644 index 0000000..c344015 --- /dev/null +++ b/fs/fs_test.go @@ -0,0 +1,68 @@ +package fs_test + +import ( + "errors" + "os" + "testing" + + "github.com/golang/mock/gomock" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "github.com/walmartdigital/commit-message-formatter/fs" + "github.com/walmartdigital/commit-message-formatter/mocks" +) + +var ctrl *gomock.Controller + +func TestAll(t *testing.T) { + ctrl = gomock.NewController(t) + defer ctrl.Finish() + + RegisterFailHandler(Fail) + RunSpecs(t, "fs tests") +} + +var _ = Describe("fs package", func() { + var ( + fakeVFS *mocks.MockVFS + ) + + BeforeEach(func() { + fakeVFS = mocks.NewMockVFS(ctrl) + }) + + It("should return a file from VirtualFS", func() { + fakeVFS.EXPECT().ReadFile(gomock.Any().String()).Return([]byte{}, nil).Times(1) + + vfs := fs.NewFs(fakeVFS) + file, err := vfs.GetFileFromVirtualFS(gomock.Any().String()) + + Expect(vfs).ToNot(BeNil()) + Expect(err).To(BeNil()) + Expect(file).To(Equal("")) + }) + + It("should not return a file from VirtualFS when readFile fails", func() { + fakeVFS.EXPECT().ReadFile(gomock.Any().String()).Return([]byte(""), errors.New(gomock.Any().String())).Times(1) + + vfs := fs.NewFs(fakeVFS) + file, err := vfs.GetFileFromVirtualFS(gomock.Any().String()) + + Expect(vfs).ToNot(BeNil()) + Expect(file).To(Equal("")) + Expect(err).To(Equal(errors.New(fs.GetFileFromVirtualFSError))) + }) + + It("should return a file from user FS", func() { + + vfs := fs.NewFs(fakeVFS) + folder, _ := os.Getwd() + filePath := folder + "/fs.go" + file, err := vfs.GetFileFromFS(filePath) + + Expect(vfs).ToNot(BeNil()) + Expect(err).To(BeNil()) + Expect(file).ToNot(Equal("")) + }) +}) diff --git a/mocks/fs.go b/mocks/fs.go new file mode 100644 index 0000000..08f4661 --- /dev/null +++ b/mocks/fs.go @@ -0,0 +1,116 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: ./fs/fs.go + +// Package mocks is a generated GoMock package. +package mocks + +import ( + gomock "github.com/golang/mock/gomock" + reflect "reflect" +) + +// MockVFS is a mock of VFS interface +type MockVFS struct { + ctrl *gomock.Controller + recorder *MockVFSMockRecorder +} + +// MockVFSMockRecorder is the mock recorder for MockVFS +type MockVFSMockRecorder struct { + mock *MockVFS +} + +// NewMockVFS creates a new mock instance +func NewMockVFS(ctrl *gomock.Controller) *MockVFS { + mock := &MockVFS{ctrl: ctrl} + mock.recorder = &MockVFSMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockVFS) EXPECT() *MockVFSMockRecorder { + return m.recorder +} + +// ReadFile mocks base method +func (m *MockVFS) ReadFile(path string) ([]byte, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ReadFile", path) + ret0, _ := ret[0].([]byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ReadFile indicates an expected call of ReadFile +func (mr *MockVFSMockRecorder) ReadFile(path interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReadFile", reflect.TypeOf((*MockVFS)(nil).ReadFile), path) +} + +// MockFS is a mock of FS interface +type MockFS struct { + ctrl *gomock.Controller + recorder *MockFSMockRecorder +} + +// MockFSMockRecorder is the mock recorder for MockFS +type MockFSMockRecorder struct { + mock *MockFS +} + +// NewMockFS creates a new mock instance +func NewMockFS(ctrl *gomock.Controller) *MockFS { + mock := &MockFS{ctrl: ctrl} + mock.recorder = &MockFSMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockFS) EXPECT() *MockFSMockRecorder { + return m.recorder +} + +// GetFileFromVirtualFS mocks base method +func (m *MockFS) GetFileFromVirtualFS(path string) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetFileFromVirtualFS", path) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetFileFromVirtualFS indicates an expected call of GetFileFromVirtualFS +func (mr *MockFSMockRecorder) GetFileFromVirtualFS(path interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetFileFromVirtualFS", reflect.TypeOf((*MockFS)(nil).GetFileFromVirtualFS), path) +} + +// GetFileFromFS mocks base method +func (m *MockFS) GetFileFromFS(path string) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetFileFromFS", path) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetFileFromFS indicates an expected call of GetFileFromFS +func (mr *MockFSMockRecorder) GetFileFromFS(path interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetFileFromFS", reflect.TypeOf((*MockFS)(nil).GetFileFromFS), path) +} + +// GetCurrentDirectory mocks base method +func (m *MockFS) GetCurrentDirectory() (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetCurrentDirectory") + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetCurrentDirectory indicates an expected call of GetCurrentDirectory +func (mr *MockFSMockRecorder) GetCurrentDirectory() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetCurrentDirectory", reflect.TypeOf((*MockFS)(nil).GetCurrentDirectory)) +} diff --git a/packrd/packed-packr.go b/packrd/packed-packr.go deleted file mode 100644 index 9dbf064..0000000 --- a/packrd/packed-packr.go +++ /dev/null @@ -1,33 +0,0 @@ -// Code generated by github.com/gobuffalo/packr/v2. DO NOT EDIT. - -// You can use the "packr2 clean" command to clean up this, -// and any other packr generated files. -package packrd - -import ( - "github.com/gobuffalo/packr/v2" - "github.com/gobuffalo/packr/v2/file/resolver" -) - -var _ = func() error { - const gk = "7e12094938b20695eb2a126ff944e858" - g := packr.New(gk, "") - hgr, err := resolver.NewHexGzip(map[string]string{ - "62db5f172a9b22c8d52c942e61af1852": "1f8b08000000000000ff7c524d6eb33014dce7142356dfb7c805d85182daa824a0422a7549cc23b184fd226cda22c4dd2b036da310d51bcb9e9f37b6267d497669eeaf80359ea3371f5ef814ec1f236f050071f010c53ebcbcbb10b8823817fa441396a4f936d967fe7870f2d7203e443ebc8a0adb3633cbad4d94853ebca02ca1e90337f895507e2e4538b6275c21bf744bc6de1b22f5094a1ae376c731e006829b86847577acc92cdd8cedea3b9921b8a4f9ddb00ca92e0dbf13444d851ec1a5d5b19575b91672e1168e3606ac61cf849107d3194bca650cb7a8647d2f5c4355212c377fe75bea4a1666a1d9b06815695b58c91aaceb6ed68fd4ef1aec92cd21bea9415055242c95505cb6d36ffdd0a32c0b6e6b13b252d2429131858b9747bb340e7297acefa79e0dc3bfbe9f660dc37f1f7d3f3b0d83b7fa0a0000fffff72404029d020000", - "80fa7149cc272248518019d08636b2ca": "1f8b08000000000000ff7c92c10e9b301044eff98a11a7f6901fe046096aa392800aa9d423314b62097b916d9a22c4bf5706da46212a17847766f6614dfe2d3be565b803f6f89afc0811c45fa2f3e724d801401a7d4ad210413974046e20ee95bed132cbf2f2989d8b70fef0f6ef517a4942040d55ae37abca3f87a4884304515d43d3032ff327a3fcb535e1dadff034f9277764ddbb2552dfa0a4b5feed35166c20d81812ce9fb126bb4db36e68df3043704deb7fc331a4ea0cff2488962a3d0fb751d75eb6f55ec84d5a3cc758b086bb13661dec601d29cf181fd1c8f61d9ca1a6128ecdfff9b6be9a85dd780e2c7a45da554eb206eb7658fdb3f44f0d4ed9e192bed4206a1a128e6a28aefbe5b6feca93a2885e6b13b352d24191b595c72b93539e46a5278b0d558e30706fc00f0d47aa6bfd091b70e7c92cc671e9e2347d18c785679a3e8618c775db3405bbdf010000ffff1488fed3c1020000", - "b3a6c6c38da037c9ce49dbf36d351adb": "1f8b08000000000000ff8453cd6e9b4010befb293e716a0f7e016e1b4c1b6a8c91218daaa88af0b2262bc30eda5dda5a8877af00a721063527c47e3ff3cd68263eec7771eaae8035b6fe0f17ceb7e0c0d6294bb6ce0a004276e787fdb3d4196c66ce083623b2f1bfb087307dfecec207df85d3b677071679f7cf11dbf95de74c3cbd7b167df5df1ba6975a804ee02f992ac488ede334d847893bfcf4f257ef93c86ca3afacb178e2b970589e4389dfb8c12742f9672ec2b1293041dee85618bb5444aa029534a6fff61c03d2e0a4b5e0b67f2325ccdccdd84bb990199c7271ed1b9620ab5ad32f015e8a4c0de0dcead8c8325f733973f3061b0352b02f02030fe662aca8fa8c5e80932c97c26971cab825fdff7c735d4edccc341be24d2594cdac240552e5e5aa37d335d8f949c26ef7c0a3aa92169530261bebbdd207c67b72981d45f9c1aeccc24584f24d37a53e7901926d10ff9c6992b3acc14959a9a83190ca8a428fddd5b216a5540ba3797a5cb27a247d46a0106b2ab430c659a5fe2e0e593a1ecdbf7beb3a7c6adbf154baeeb38bb6bd0eacebda7698407f557f030000fffffab364e8b2030000", - }) - if err != nil { - panic(err) - } - g.DefaultResolver = hgr - - func() { - b := packr.New("config", "../../configs") - b.SetResolver("custom.yaml", packr.Pointer{ForwardBox: gk, ForwardPath: "80fa7149cc272248518019d08636b2ca"}) - b.SetResolver("default.yaml", packr.Pointer{ForwardBox: gk, ForwardPath: "62db5f172a9b22c8d52c942e61af1852"}) - b.SetResolver("jira.yaml", packr.Pointer{ForwardBox: gk, ForwardPath: "b3a6c6c38da037c9ce49dbf36d351adb"}) - }() - - return nil -}() From ffa0ffb91165b08e52db7ce93d8c027803a6b3cd Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Sun, 13 Jun 2021 13:41:47 -0400 Subject: [PATCH 13/41] v3.0 (feat): add template runner and it dependency prompt wrapper to load and parse cmf yaml file --- mocks/templaterunner.go | 100 +++++++++++++++++++ prompt/prompt.go | 62 ++++++++++++ promptxWrapper/promptxwrapper.go | 61 ++++++++++++ templaterunner/templaterunner.go | 125 ++++++++++++++++++++++++ templaterunner/templaterunner_test.go | 132 ++++++++++++++++++++++++++ 5 files changed, 480 insertions(+) create mode 100644 mocks/templaterunner.go create mode 100644 prompt/prompt.go create mode 100644 promptxWrapper/promptxwrapper.go create mode 100644 templaterunner/templaterunner.go create mode 100644 templaterunner/templaterunner_test.go diff --git a/mocks/templaterunner.go b/mocks/templaterunner.go new file mode 100644 index 0000000..ff6433d --- /dev/null +++ b/mocks/templaterunner.go @@ -0,0 +1,100 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: templaterunner/templaterunner.go + +// Package mocks is a generated GoMock package. +package mocks + +import ( + gomock "github.com/golang/mock/gomock" + templaterunner "github.com/walmartdigital/commit-message-formatter/templaterunner" + reflect "reflect" +) + +// MockPromptManager is a mock of PromptManager interface +type MockPromptManager struct { + ctrl *gomock.Controller + recorder *MockPromptManagerMockRecorder +} + +// MockPromptManagerMockRecorder is the mock recorder for MockPromptManager +type MockPromptManagerMockRecorder struct { + mock *MockPromptManager +} + +// NewMockPromptManager creates a new mock instance +func NewMockPromptManager(ctrl *gomock.Controller) *MockPromptManager { + mock := &MockPromptManager{ctrl: ctrl} + mock.recorder = &MockPromptManagerMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockPromptManager) EXPECT() *MockPromptManagerMockRecorder { + return m.recorder +} + +// ReadValue mocks base method +func (m *MockPromptManager) ReadValue(title, errorMessage, defaultValue string) string { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ReadValue", title, errorMessage, defaultValue) + ret0, _ := ret[0].(string) + return ret0 +} + +// ReadValue indicates an expected call of ReadValue +func (mr *MockPromptManagerMockRecorder) ReadValue(title, errorMessage, defaultValue interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReadValue", reflect.TypeOf((*MockPromptManager)(nil).ReadValue), title, errorMessage, defaultValue) +} + +// ReadValueFromList mocks base method +func (m *MockPromptManager) ReadValueFromList(title string, options []templaterunner.Options) string { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ReadValueFromList", title, options) + ret0, _ := ret[0].(string) + return ret0 +} + +// ReadValueFromList indicates an expected call of ReadValueFromList +func (mr *MockPromptManagerMockRecorder) ReadValueFromList(title, options interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReadValueFromList", reflect.TypeOf((*MockPromptManager)(nil).ReadValueFromList), title, options) +} + +// MockTemplateRunner is a mock of TemplateRunner interface +type MockTemplateRunner struct { + ctrl *gomock.Controller + recorder *MockTemplateRunnerMockRecorder +} + +// MockTemplateRunnerMockRecorder is the mock recorder for MockTemplateRunner +type MockTemplateRunnerMockRecorder struct { + mock *MockTemplateRunner +} + +// NewMockTemplateRunner creates a new mock instance +func NewMockTemplateRunner(ctrl *gomock.Controller) *MockTemplateRunner { + mock := &MockTemplateRunner{ctrl: ctrl} + mock.recorder = &MockTemplateRunnerMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use +func (m *MockTemplateRunner) EXPECT() *MockTemplateRunnerMockRecorder { + return m.recorder +} + +// Run mocks base method +func (m *MockTemplateRunner) Run(yamlData string, injectedVariables map[string]string) (string, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Run", yamlData, injectedVariables) + ret0, _ := ret[0].(string) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// Run indicates an expected call of Run +func (mr *MockTemplateRunnerMockRecorder) Run(yamlData, injectedVariables interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Run", reflect.TypeOf((*MockTemplateRunner)(nil).Run), yamlData, injectedVariables) +} diff --git a/prompt/prompt.go b/prompt/prompt.go new file mode 100644 index 0000000..e194e64 --- /dev/null +++ b/prompt/prompt.go @@ -0,0 +1,62 @@ +package prompt + +import ( + "errors" + "strings" + + "github.com/mritd/promptx" +) + +// SelectItem a default item struct +type SelectItem struct { + Title string + Description string + Value string +} + +// SelectConfiguration a complete configuration select options +type SelectConfiguration struct { + ActiveTpl string + InactiveTpl string + SelectPrompt string + SelectedTpl string + DetailsTpl string +} + +// Select Returns a selected item +func Select(items []SelectItem, config SelectConfiguration) SelectItem { + configuration := &promptx.SelectConfig{ + ActiveTpl: config.ActiveTpl, + InactiveTpl: config.InactiveTpl, + SelectPrompt: config.SelectPrompt, + SelectedTpl: config.SelectedTpl, + DisPlaySize: 9, + DetailsTpl: config.DetailsTpl, + } + + selector := &promptx.Select{ + Items: items, + Config: configuration, + } + + return items[selector.Run()] +} + +// Input return a simple user input +func Input(title string, errorMessage string, defaultValue string) string { + input := promptx.NewDefaultPrompt(func(line []rune) error { + if strings.TrimSpace(string(line)) == "" && defaultValue == "" { + return errors.New(errorMessage) + } + + return nil + }, title) + + value := input.Run() + + if value == "" && defaultValue != "" { + return defaultValue + } + + return value +} diff --git a/promptxWrapper/promptxwrapper.go b/promptxWrapper/promptxwrapper.go new file mode 100644 index 0000000..f3c89ca --- /dev/null +++ b/promptxWrapper/promptxwrapper.go @@ -0,0 +1,61 @@ +package promptxwrapper + +import ( + "errors" + "strings" + + "github.com/mritd/promptx" + "github.com/walmartdigital/commit-message-formatter/prompt" + "github.com/walmartdigital/commit-message-formatter/templaterunner" +) + +// PromptxWrapper promptx wrapper object +type PromptxWrapper struct{} + +// NewPromptxWrapper return a new instance of promptxWrapper +func NewPromptxWrapper() *PromptxWrapper { + return &PromptxWrapper{} +} + +// ReadValue return a value from user single input +func (pw *PromptxWrapper) ReadValue(title string, errorMessage string, defaultValue string) string { + input := promptx.NewDefaultPrompt(func(line []rune) error { + if strings.TrimSpace(string(line)) == "" && defaultValue == "" { + return errors.New(errorMessage) + } + + return nil + }, title) + + value := input.Run() + + if value == "" && defaultValue != "" { + return defaultValue + } + + return value +} + +// ReadValueFromList return a value from user multi select input +func (pw *PromptxWrapper) ReadValueFromList(title string, options []templaterunner.Options) string { + configuration := &promptx.SelectConfig{ + ActiveTpl: "\U0001F449 {{ .Title | cyan | bold }}", + InactiveTpl: " {{ .Title | white }}", + SelectPrompt: title, + SelectedTpl: "\U0001F44D {{ \"" + title + "\" | cyan }} {{ .Title | cyan | bold }}", + DetailsTpl: `------------------------------- + {{ .Title | white | bold }} {{ .Description | white | bold }}`, + } + + var items []prompt.SelectItem + for _, option := range options { + items = append(items, prompt.SelectItem{Title: option.Value, Value: option.Value, Description: option.Description}) + } + + selector := &promptx.Select{ + Items: items, + Config: configuration, + } + + return items[selector.Run()].Value +} diff --git a/templaterunner/templaterunner.go b/templaterunner/templaterunner.go new file mode 100644 index 0000000..47ee40b --- /dev/null +++ b/templaterunner/templaterunner.go @@ -0,0 +1,125 @@ +package templaterunner + +import ( + "errors" + "strings" + + "gopkg.in/yaml.v2" +) + +type templateRunner struct { + promptManager PromptManager +} + +// PromptManager ... +type PromptManager interface { + ReadValue(title string, errorMessage string, defaultValue string) string + ReadValueFromList(title string, options []Options) string +} + +// TemplateRunner main template interface +type TemplateRunner interface { + Run(yamlData string, injectedVariables map[string]string) (message string, err error) +} + +// Template main template struct +type Template struct { + Prompt []PromptItem `yaml:"PROMPT"` + Template string `yaml:"TEMPLATE"` +} + +//PromptItem ... +type PromptItem struct { + Key string `yaml:"KEY"` + Label string `yaml:"LABEL"` + ErrorLabel string `yaml:"ERROR_LABEL"` + DefaultValue string `yaml:"DEFAULT_VALUE"` + Options []Options `yaml:"OPTIONS"` +} + +// Options multiselect option struct +type Options struct { + Value string `yaml:"VALUE"` + Description string `yaml:"DESC"` +} + +type keyValue struct { + Key string + Value string +} + +// NewTemplateRunner return a bluetnew instance of template +func NewTemplateRunner(promptManager PromptManager) TemplateRunner { + return &templateRunner{ + promptManager: promptManager, + } +} + +func (tr *templateRunner) parseYaml(yamlData string) (Template, error) { + template := Template{} + err := yaml.Unmarshal([]byte(yamlData), &template) + + if err != nil { + return Template{}, errors.New("parsing yaml error") + } + + return template, nil +} + +// Run return the result of run the template +func (tr *templateRunner) Run(yamlData string, injectedVariables map[string]string) (string, error) { + template, err := tr.parseYaml(yamlData) + if err != nil { + return "", err + } + + variables := tr.prompt(template) + for k, v := range injectedVariables { + variables = append(variables, keyValue{Key: k, Value: v}) + } + + message := tr.parseTemplate(template.Template, variables) + + return message, err +} + +func (tr *templateRunner) parseTemplate(template string, variables []keyValue) string { + for _, v := range variables { + template = strings.Replace(template, "{{"+v.Key+"}}", v.Value, -1) + } + + return template +} + +func (tr *templateRunner) prompt(template Template) []keyValue { + variables := []keyValue{} + for _, step := range template.Prompt { + result := "" + var errorMessage = "empty value" + + if step.ErrorLabel != "" { + errorMessage = step.ErrorLabel + } + + if step.Options == nil { + var labelMessage = step.Label + + if step.DefaultValue != "" { + labelMessage += " (" + step.DefaultValue + ")" + } + + labelMessage += ":" + + result = tr.promptManager.ReadValue(labelMessage, errorMessage, step.DefaultValue) + } else { + result = tr.promptManager.ReadValueFromList(step.Label, step.Options) + } + + variables = append(variables, keyValue{ + Key: step.Key, + Value: result, + }) + } + + return variables +} diff --git a/templaterunner/templaterunner_test.go b/templaterunner/templaterunner_test.go new file mode 100644 index 0000000..2f29a5d --- /dev/null +++ b/templaterunner/templaterunner_test.go @@ -0,0 +1,132 @@ +package templaterunner_test + +import ( + "testing" + + "github.com/golang/mock/gomock" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "github.com/walmartdigital/commit-message-formatter/mocks" + "github.com/walmartdigital/commit-message-formatter/templaterunner" +) + +var ctrl *gomock.Controller + +type promptCallback func([]rune) error + +func TestAll(t *testing.T) { + ctrl = gomock.NewController(t) + defer ctrl.Finish() + + RegisterFailHandler(Fail) + RunSpecs(t, "templaterunner tests") +} + +var _ = Describe("templaterunner package", func() { + var ( + fakePromptManager *mocks.MockPromptManager + ) + BeforeEach(func() { + fakePromptManager = mocks.NewMockPromptManager(ctrl) + }) + + It("should return a template instance", func() { + template := templaterunner.NewTemplateRunner(fakePromptManager) + + Expect(template).ToNot(BeNil()) + }) + + It("should return a message from a 1 input template", func() { + label := "label test:" + template := templaterunner.NewTemplateRunner(fakePromptManager) + yaml := `PROMPT: +- KEY: "TEST" + LABEL: "label test" +TEMPLATE: "{{TEST}}"` + + fakePromptManager.EXPECT().ReadValue(label, "empty value", "").Return("ok").Times(1) + messageFromTemplate, err := template.Run(yaml, nil) + + Expect(template).ToNot(BeNil()) + Expect(err).To(BeNil()) + Expect(messageFromTemplate).To(Equal("ok")) + }) + + It("should return a message from a 1 input template with all options available filled", func() { + label := "label test (test value):" + defaultValue := "test value" + template := templaterunner.NewTemplateRunner(fakePromptManager) + yaml := `PROMPT: +- KEY: "TEST" + LABEL: "label test" + ERROR_LABEL: "error value" + DEFAULT_VALUE: "test value" +TEMPLATE: "{{TEST}}"` + + fakePromptManager.EXPECT().ReadValue(label, "error value", defaultValue).Return("test value").Times(1) + messageFromTemplate, err := template.Run(yaml, nil) + + Expect(template).ToNot(BeNil()) + Expect(err).To(BeNil()) + Expect(messageFromTemplate).To(Equal(defaultValue)) + }) + + It("should return a message from a 1 multi selection item template", func() { + label := "label test" + template := templaterunner.NewTemplateRunner(fakePromptManager) + yaml := `PROMPT: +- KEY: "TEST" + LABEL: "label test" + OPTIONS: + - VALUE: "opt1" + DESC: "Test option1" + - VALUE: "opt2" + DESC: "Test option2" +TEMPLATE: "{{TEST}}"` + + options := []templaterunner.Options{ + {Value: "opt1", Description: "Test option1"}, + {Value: "opt2", Description: "Test option2"}, + } + + fakePromptManager.EXPECT().ReadValueFromList(label, options).Return("Test option1").Times(1) + messageFromTemplate, err := template.Run(yaml, nil) + + Expect(template).ToNot(BeNil()) + Expect(err).To(BeNil()) + Expect(messageFromTemplate).To(Equal("Test option1")) + }) + + It("should return a message from a 1 input template with extra variables", func() { + label := "label test:" + template := templaterunner.NewTemplateRunner(fakePromptManager) + yaml := `PROMPT: +- KEY: "TEST" + LABEL: "label test" +TEMPLATE: "{{TEST}}: {{SAMPLE}}"` + injectedVariables := map[string]string{ + "SAMPLE": "sample value", + } + + fakePromptManager.EXPECT().ReadValue(label, "empty value", "").Return("ok").Times(1) + messageFromTemplate, err := template.Run(yaml, injectedVariables) + + Expect(template).ToNot(BeNil()) + Expect(err).To(BeNil()) + Expect(messageFromTemplate).To(Equal("ok: sample value")) + }) + + It("should fail if parseYaml fail", func() { + template := templaterunner.NewTemplateRunner(fakePromptManager) + // this yaml fails because it is bad format + yaml := `PROMPT: + - KEY: "TEST" + LABEL: "label test"` + + _, err := template.Run(yaml, nil) + + Expect(template).ToNot(BeNil()) + Expect(err).To(Not(BeNil())) + }) +}) From 9327bc52c1bd89fafc27525b1968547dc1f8069c Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Sun, 13 Jun 2021 13:42:16 -0400 Subject: [PATCH 14/41] v3.0 (feat): clear cmd package and add amd builder for initialization --- cmd/cmd.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/cmd/cmd.go b/cmd/cmd.go index 4690da6..01e6b9f 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -1,12 +1,16 @@ package cmd import ( + "embed" "fmt" "os" "github.com/spf13/cobra" "github.com/walmartdigital/commit-message-formatter/cmf" + "github.com/walmartdigital/commit-message-formatter/fs" git "github.com/walmartdigital/commit-message-formatter/git" + promptxwrapper "github.com/walmartdigital/commit-message-formatter/promptxWrapper" + "github.com/walmartdigital/commit-message-formatter/templaterunner" ) var cmfInstance cmf.CMF @@ -18,9 +22,6 @@ var root = &cobra.Command{ Long: "Generate custom commit message for your repo and standarize your commits log", Run: func(cmd *cobra.Command, args []string) { cmfInstance.CommitChanges() - // go git.CheckTree() - // message := template.Run() - // git.Commit(message) }, } @@ -29,7 +30,6 @@ var version = &cobra.Command{ Short: "Version cmf", Long: "Display version of commit message formatter", Run: func(cmd *cobra.Command, args []string) { - // fmt.Println("CMF - Commit Message Formatter v2.0") cmfInstance.GetVersion() }, } @@ -40,8 +40,6 @@ var amend = &cobra.Command{ Long: "Amend last commit message", Run: func(cmd *cobra.Command, args []string) { cmfInstance.CommitAmend() - // message := template.Run() - // git.Amend(message) }, } @@ -61,8 +59,11 @@ func Execute() { } } -func init() { - cmfInstance = cmf.NewCMF(git.NewGitWrapper()) +func Build(vfs embed.FS) { + fsManager := fs.NewFs(vfs) + promptManager := promptxwrapper.NewPromptxWrapper() + templateManager := templaterunner.NewTemplateRunner(promptManager) + cmfInstance = cmf.NewCMF(git.NewGitWrapper(), templateManager, fsManager) root.AddCommand(version) root.AddCommand(boilerplateCMD) root.AddCommand(amend) From 2c1caa6a043425a6ff8b794b765790016849b54d Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Sun, 13 Jun 2021 13:42:39 -0400 Subject: [PATCH 15/41] v3.0 (feat): add cmf initializsation and dependencies --- cmf/cmf.go | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/cmf/cmf.go b/cmf/cmf.go index 8d5862a..ead7966 100644 --- a/cmf/cmf.go +++ b/cmf/cmf.go @@ -4,15 +4,30 @@ import ( "fmt" ) -var version = "3.0" +const version = "3.0" +const defaultYamlFile = "resources/default.yaml" +const defaultCMFFile = ".cmf.yaml" type Repository interface { CheckWorkspaceChanges() Commit(message string) Amend(message string) } + +type TemplateManager interface { + Run(yamlData string, injectedVariables map[string]string) (string, error) +} + +type FS interface { + GetFileFromVirtualFS(path string) (string, error) + GetFileFromFS(path string) (string, error) + GetCurrentDirectory() (string, error) +} + type cmf struct { - repository Repository + repository Repository + templateManager TemplateManager + fs FS } type CMF interface { @@ -22,9 +37,11 @@ type CMF interface { InitializeProject() } -func NewCMF(repository Repository) CMF { +func NewCMF(repository Repository, templateManager TemplateManager, fsManager FS) CMF { return &cmf{ - repository: repository, + repository: repository, + templateManager: templateManager, + fs: fsManager, } } @@ -36,8 +53,15 @@ func (cmfInstance *cmf) GetVersion() { // CommitChanges perform a commit changes over current repository func (cmfInstance *cmf) CommitChanges() { cmfInstance.repository.CheckWorkspaceChanges() - // message := template.Run() - cmfInstance.repository.Commit("message") + currentDirectory, _ := cmfInstance.fs.GetCurrentDirectory() + cmfFile, err := cmfInstance.fs.GetFileFromFS(currentDirectory + "/" + defaultCMFFile) + if err != nil { + cmfFile, _ = cmfInstance.fs.GetFileFromVirtualFS(defaultYamlFile) + } + + extra := map[string]string{} + message, _ := cmfInstance.templateManager.Run(cmfFile, extra) + cmfInstance.repository.Commit(message) } // CommitAmend perform a commit amend over current repository From 9c20d191c8476682f33b3f475b7dc79dfaa67de7 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Sun, 13 Jun 2021 13:43:12 -0400 Subject: [PATCH 16/41] v3.0 (feat): add embed vfs files using embed from go 1.16 and the call to build command --- go.mod | 5 ++++ go.sum | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ main.go | 6 ++++ 3 files changed, 102 insertions(+) diff --git a/go.mod b/go.mod index 1924b13..9698e07 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,11 @@ module github.com/walmartdigital/commit-message-formatter go 1.16 require ( + github.com/golang/mock v1.6.0 // indirect github.com/logrusorgru/aurora v2.0.3+incompatible // indirect + github.com/mritd/promptx v0.0.0-20201227060029-3c9bd8aa86dd // indirect + github.com/onsi/ginkgo v1.16.4 // indirect + github.com/onsi/gomega v1.13.0 // indirect github.com/spf13/cobra v1.1.3 + gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/go.sum b/go.sum index 1574a11..7888753 100644 --- a/go.sum +++ b/go.sum @@ -24,6 +24,8 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= 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.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -37,12 +39,15 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= 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/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= 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= @@ -50,13 +55,26 @@ github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4er github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= 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/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= 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/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -88,6 +106,7 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= 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= @@ -107,6 +126,8 @@ github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/z github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= @@ -119,8 +140,25 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mritd/promptx v0.0.0-20201227060029-3c9bd8aa86dd h1:7i0LjsJlcQNe6diQvItJzAUrBDMoU3M4ZCH8X7BHOL4= +github.com/mritd/promptx v0.0.0-20201227060029-3c9bd8aa86dd/go.mod h1:3fywjHX11nsf0f4lrmJ5zuwdxTEn6qh5v3LV2Nt8nVc= +github.com/mritd/readline v0.0.0-20190919142632-e26f42a56c34 h1:BPeB6AxncRXhTouiFcv++Gso1IOki6rCVhkEE36DI6I= +github.com/mritd/readline v0.0.0-20190919142632-e26f42a56c34/go.mod h1:RCmOeHfgzDd3ofo+QDJZ4tjCOv3SWN8WPk3piOfjqiU= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= +github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= 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= @@ -160,9 +198,13 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ 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/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= @@ -174,6 +216,8 @@ golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -192,8 +236,11 @@ golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/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-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -206,6 +253,11 @@ golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/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/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -214,9 +266,12 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/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= @@ -227,9 +282,25 @@ golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190919044723-0c1ff786ef13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 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= @@ -249,7 +320,13 @@ golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -271,15 +348,29 @@ google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvx google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= 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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= 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= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/main.go b/main.go index b36881c..689f799 100644 --- a/main.go +++ b/main.go @@ -21,9 +21,15 @@ package main import ( + "embed" + "github.com/walmartdigital/commit-message-formatter/cmd" ) +//go:embed resources +var vfs embed.FS + func main() { + cmd.Build(vfs) cmd.Execute() } From e01ef93a8440ff07c0d9cbcad8ad6a6186e3b854 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Sun, 13 Jun 2021 14:14:38 -0400 Subject: [PATCH 17/41] feat(git): add missing implementations of methods (commit, amend and get branch name) --- git/git.go | 115 +++++++++++++++++++++++------------------------------ 1 file changed, 49 insertions(+), 66 deletions(-) diff --git a/git/git.go b/git/git.go index 0ce4690..fedb078 100644 --- a/git/git.go +++ b/git/git.go @@ -1,6 +1,15 @@ package git -import "fmt" +import ( + "context" + "errors" + "fmt" + "os" + "os/exec" + "strings" + + color "github.com/logrusorgru/aurora" +) type git struct{} @@ -10,82 +19,56 @@ type Git interface { Amend(message string) } +func commit(cmdGit *exec.Cmd, message ...interface{}) { + fmt.Println("") + fmt.Println(message...) + fmt.Println(color.Gray(16-1, "-------------------------------")) + fmt.Println("") + cmdGit.Stdout = os.Stdout + cmdGit.Stderr = os.Stderr + err := cmdGit.Run() + fmt.Println("") + fmt.Println(color.Gray(16-1, "-------------------------------")) + if err == nil { + fmt.Println(color.Green("Done \U0001F604")) + } else { + fmt.Println(color.Red("Something went grong \U0001F92F")) + os.Exit(2) + } +} + func NewGitWrapper() Git { return &git{} } func (gitInstance *git) CheckWorkspaceChanges() { - fmt.Println("check wrokspace") + cmdGit := exec.Command("git", "diff", "--cached", "--exit-code") + _, err := cmdGit.Output() + if err == nil { + fmt.Println(color.Red(errors.New("no tracked changes"))) + fmt.Println(color.Blue("run git add or . 'to track changes'")) + os.Exit(1) + } } func (gitInstance *git) Commit(message string) { - fmt.Println(message) + ctx := context.Background() + cmdGit := exec.CommandContext(ctx, "git", "commit", "-m", message) + commit(cmdGit, "Committing: ", color.Blue(message)) } func (gitInstance *git) Amend(message string) { - fmt.Println("amend") + ctx := context.Background() + cmdGit := exec.CommandContext(ctx, "git", "commit", "--amend", "-m", message) + commit(cmdGit, "Amending: ", color.Blue(message)) } -// func checkErr(err error) { -// if err != nil { -// fmt.Println(color.Red(err)) -// os.Exit(1) -// } -// } - -// // CheckTree perform a git tree check -// func CheckTree() { -// cmdGit := exec.Command("git", "diff", "--cached", "--exit-code") -// _, err := cmdGit.Output() -// if err == nil { -// checkErr(errors.New("No changes added to commit")) -// } -// } - -// func commit(cmdGit *exec.Cmd, message ...interface{}) { -// fmt.Println("") -// fmt.Println(message...) -// // fmt.Println(color.Gray("-------------------------------")) -// fmt.Println("") -// cmdGit.Stdout = os.Stdout -// cmdGit.Stderr = os.Stderr -// err := cmdGit.Run() -// fmt.Println("") -// // fmt.Println(color.Gray("-------------------------------")) -// if err == nil { -// fmt.Println(color.Green("Done \U0001F604")) -// } else { -// fmt.Println(color.Red("Something went grong \U0001F92F")) -// } - -// return -// } +func (gitInstance *git) BranchName() string { + cmdGit := exec.Command("git", "rev-parse", "--abbrev-ref", "HEAD") + branchName, err := cmdGit.Output() + if err != nil { + return "" + } -// // Commit execute commit -// func Commit(message string) (err error) { -// ctx := context.Background() -// cmdGit := exec.CommandContext(ctx, "git", "commit", "-m", message) -// commit(cmdGit, "Committing: ", color.Blue(message)) - -// return -// } - -// // Amend execute commit amend -// func Amend(message string) (err error) { -// ctx := context.Background() -// cmdGit := exec.CommandContext(ctx, "git", "commit", "--amend", "-m", message) -// commit(cmdGit, "Amending: ", color.Blue(message)) - -// return -// } - -// // BranchName return current branch name -// func BranchName() string { -// cmdGit := exec.Command("git", "rev-parse", "--abbrev-ref", "HEAD") -// branchName, err := cmdGit.Output() -// if err != nil { -// return "" -// } - -// return strings.TrimSuffix(string(branchName), "\n") -// } + return strings.TrimSuffix(string(branchName), "\n") +} From 394ef28ab179ff6e602dd21a8003905291e0649e Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Sun, 13 Jun 2021 14:15:05 -0400 Subject: [PATCH 18/41] feat(go.mod): add dependencies --- go.mod | 1 + go.sum | 2 ++ 2 files changed, 3 insertions(+) diff --git a/go.mod b/go.mod index 9698e07..261d026 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.16 require ( github.com/golang/mock v1.6.0 // indirect github.com/logrusorgru/aurora v2.0.3+incompatible // indirect + github.com/logrusorgru/aurora/v3 v3.0.0 // indirect github.com/mritd/promptx v0.0.0-20201227060029-3c9bd8aa86dd // indirect github.com/onsi/ginkgo v1.16.4 // indirect github.com/onsi/gomega v1.13.0 // indirect diff --git a/go.sum b/go.sum index 7888753..895c465 100644 --- a/go.sum +++ b/go.sum @@ -123,6 +123,8 @@ 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/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= +github.com/logrusorgru/aurora/v3 v3.0.0 h1:R6zcoZZbvVcGMvDCKo45A9U/lzYyzl5NfYIvznmDfE4= +github.com/logrusorgru/aurora/v3 v3.0.0/go.mod h1:vsR12bk5grlLvLXAYrBsb5Oc/N+LxAlxggSjiwMnCUc= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= From 44d1eacf62449d5c271ea79181bbda443cbe0426 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Sun, 13 Jun 2021 14:15:53 -0400 Subject: [PATCH 19/41] fix(go.mod): fix aurora dependency using v3 --- git/git.go | 2 +- go.mod | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/git/git.go b/git/git.go index fedb078..dd1b632 100644 --- a/git/git.go +++ b/git/git.go @@ -8,7 +8,7 @@ import ( "os/exec" "strings" - color "github.com/logrusorgru/aurora" + color "github.com/logrusorgru/aurora/v3" ) type git struct{} diff --git a/go.mod b/go.mod index 261d026..a1e9207 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,6 @@ go 1.16 require ( github.com/golang/mock v1.6.0 // indirect - github.com/logrusorgru/aurora v2.0.3+incompatible // indirect github.com/logrusorgru/aurora/v3 v3.0.0 // indirect github.com/mritd/promptx v0.0.0-20201227060029-3c9bd8aa86dd // indirect github.com/onsi/ginkgo v1.16.4 // indirect From 923d33e72db762fd772a7078dfac671b303ca568 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Sun, 13 Jun 2021 14:21:10 -0400 Subject: [PATCH 20/41] feat(git): add extra value BRANCH_NAME --- cmf/cmf.go | 5 ++++- git/git.go | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/cmf/cmf.go b/cmf/cmf.go index ead7966..d525ad3 100644 --- a/cmf/cmf.go +++ b/cmf/cmf.go @@ -12,6 +12,7 @@ type Repository interface { CheckWorkspaceChanges() Commit(message string) Amend(message string) + BranchName() string } type TemplateManager interface { @@ -59,7 +60,9 @@ func (cmfInstance *cmf) CommitChanges() { cmfFile, _ = cmfInstance.fs.GetFileFromVirtualFS(defaultYamlFile) } - extra := map[string]string{} + extra := map[string]string{ + "BRANCH_NAME": cmfInstance.repository.BranchName(), + } message, _ := cmfInstance.templateManager.Run(cmfFile, extra) cmfInstance.repository.Commit(message) } diff --git a/git/git.go b/git/git.go index dd1b632..1f9a131 100644 --- a/git/git.go +++ b/git/git.go @@ -17,6 +17,7 @@ type Git interface { CheckWorkspaceChanges() Commit(message string) Amend(message string) + BranchName() string } func commit(cmdGit *exec.Cmd, message ...interface{}) { From efb5ac371957e79d22f7b8b36ae3935db9ed9fdd Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Sun, 13 Jun 2021 14:21:40 -0400 Subject: [PATCH 21/41] chore(root): removed cmf file because it is not usefull anymore --- .cmf.yaml | 33 --------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 .cmf.yaml diff --git a/.cmf.yaml b/.cmf.yaml deleted file mode 100644 index aec32f7..0000000 --- a/.cmf.yaml +++ /dev/null @@ -1,33 +0,0 @@ -PROMPT: - - KEY: "JIRA-TASK" - LABEL: "Jira task ID" - DEFAULT_VALUE: "{{BRANCH_NAME}}" - - KEY: "CHANGE" - LABEL: "Type of change" - OPTIONS: - - VALUE: "feature" - DESC: "Add new feature" - - VALUE: "fix" - DESC: "A bug fix" - - VALUE: "test" - DESC: "Adding missing tests or correcting ones" - - VALUE: "style" - DESC: "A code change to improve clean code" - - VALUE: "build-ci" - DESC: "Changes on the build system or CI files" - - VALUE: "refactor" - DESC: "A code change" - - VALUE: "docs" - DESC: "Documentation only changes" - - KEY: "MESSAGE" - LABEL: "Commit message" - - KEY: "LABEL" - LABEL: "Label" - OPTIONS: - - VALUE: "" - DESC: "No label" - - VALUE: "[CI SKIP]" - DESC: "Skip continous integration pipeline" - - VALUE: "[WIP]" - DESC: "Work In Progress" -TEMPLATE: "{{JIRA-TASK}} ({{CHANGE}}): {{MESSAGE}}{{LABEL}}" From 7849a4668a214864b646980ec0293375dff0cbb7 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Sun, 13 Jun 2021 14:21:59 -0400 Subject: [PATCH 22/41] feat(resources): add default files --- resources/default.yaml | 34 ++++++++++++++++++++++++++++++++++ resources/jira.yaml | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 resources/default.yaml create mode 100644 resources/jira.yaml diff --git a/resources/default.yaml b/resources/default.yaml new file mode 100644 index 0000000..62a7e60 --- /dev/null +++ b/resources/default.yaml @@ -0,0 +1,34 @@ +PROMPT: + - KEY: "CHANGE" + LABEL: "Type of change" + OPTIONS: + - VALUE: "feat" + DESC: "Add new feature" + - VALUE: "fix" + DESC: "A bug fix" + - VALUE: "test" + DESC: "Adding missing tests or correcting ones" + - VALUE: "chore" + DESC: "Add non bussiness logic change" + - VALUE: "style" + DESC: "A code change to improve clean code" + - VALUE: "ci/cd" + DESC: "Changes on the build system or CI files" + - VALUE: "refactor" + DESC: "A code change" + - VALUE: "docs" + DESC: "Documentation changes" + - KEY: "MODULE" + LABEL: "Affected module" + - KEY: "MESSAGE" + LABEL: "Commit message" + - KEY: "LABEL" + LABEL: "Label" + OPTIONS: + - VALUE: "" + DESC: "No label" + - VALUE: "[CI SKIP]" + DESC: "Skip continous integration pipeline" + - VALUE: "[WIP]" + DESC: "Work In Progress" +TEMPLATE: "{{CHANGE}}({{MODULE}}): {{MESSAGE}} {{LABEL}}" diff --git a/resources/jira.yaml b/resources/jira.yaml new file mode 100644 index 0000000..40e4abf --- /dev/null +++ b/resources/jira.yaml @@ -0,0 +1,35 @@ +PROMPT: + - KEY: "JIRA-TASK" + LABEL: "Jira task ID" + DEFAULT_VALUE: "{{BRANCH_NAME}}" + - KEY: "CHANGE" + LABEL: "Type of change" + OPTIONS: + - VALUE: "feat" + DESC: "Add new feature" + - VALUE: "fix" + DESC: "A bug fix" + - VALUE: "test" + DESC: "Adding missing tests or correcting ones" + - VALUE: "chore" + DESC: "Add non bussiness logic change" + - VALUE: "style" + DESC: "A code change to improve clean code" + - VALUE: "ci/cd" + DESC: "Changes on the build system or CI files" + - VALUE: "refactor" + DESC: "A code change" + - VALUE: "docs" + DESC: "Documentation changes" + - KEY: "MESSAGE" + LABEL: "Commit message" + - KEY: "LABEL" + LABEL: "Label" + OPTIONS: + - VALUE: "" + DESC: "No label" + - VALUE: "[CI SKIP]" + DESC: "Skip continous integration pipeline" + - VALUE: "[WIP]" + DESC: "Work In Progress" +TEMPLATE: "{{JIRA-TASK}} ({{CHANGE}}): {{MESSAGE}} {{LABEL}}" From 486b489bce3bbaa9f5ff349a383ec75a257876d7 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Sun, 13 Jun 2021 14:22:53 -0400 Subject: [PATCH 23/41] feat(cmf): add amend logic --- cmf/cmf.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/cmf/cmf.go b/cmf/cmf.go index d525ad3..6deaa2b 100644 --- a/cmf/cmf.go +++ b/cmf/cmf.go @@ -69,7 +69,18 @@ func (cmfInstance *cmf) CommitChanges() { // CommitAmend perform a commit amend over current repository func (cmfInstance *cmf) CommitAmend() { - fmt.Println("amend!!") + cmfInstance.repository.CheckWorkspaceChanges() + currentDirectory, _ := cmfInstance.fs.GetCurrentDirectory() + cmfFile, err := cmfInstance.fs.GetFileFromFS(currentDirectory + "/" + defaultCMFFile) + if err != nil { + cmfFile, _ = cmfInstance.fs.GetFileFromVirtualFS(defaultYamlFile) + } + + extra := map[string]string{ + "BRANCH_NAME": cmfInstance.repository.BranchName(), + } + message, _ := cmfInstance.templateManager.Run(cmfFile, extra) + cmfInstance.repository.Amend(message) } // InitializeProject initialize current directory with a inner cmf template From 00269802c089c4626db965f3cdeb17b0dacb49bb Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Mon, 14 Jun 2021 17:21:41 -0400 Subject: [PATCH 24/41] feat(cmf): add initializeProject logic, to create a cmf file on the working directory --- cmf/cmf.go | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/cmf/cmf.go b/cmf/cmf.go index 6deaa2b..c0ed261 100644 --- a/cmf/cmf.go +++ b/cmf/cmf.go @@ -1,7 +1,14 @@ package cmf import ( + "bufio" "fmt" + "io/ioutil" + "log" + "os" + "strings" + + color "github.com/logrusorgru/aurora/v3" ) const version = "3.0" @@ -38,6 +45,27 @@ type CMF interface { InitializeProject() } +func askForConfirmation(s string) bool { + reader := bufio.NewReader(os.Stdin) + + for { + fmt.Printf("%s [y/n]: ", s) + + response, err := reader.ReadString('\n') + if err != nil { + log.Fatal(err) + } + + response = strings.ToLower(strings.TrimSpace(response)) + + if response == "y" || response == "yes" { + return true + } else if response == "n" || response == "no" { + return false + } + } +} + func NewCMF(repository Repository, templateManager TemplateManager, fsManager FS) CMF { return &cmf{ repository: repository, @@ -85,5 +113,16 @@ func (cmfInstance *cmf) CommitAmend() { // InitializeProject initialize current directory with a inner cmf template func (cmfInstance *cmf) InitializeProject() { - fmt.Println("initialize!!") + if askForConfirmation("This action will create a new .cmf.yaml file on your working directory. Do you want to continue?") { + currentDirectory, _ := cmfInstance.fs.GetCurrentDirectory() + cmfFilePath := currentDirectory + "/" + defaultCMFFile + cmfFile, _ := cmfInstance.fs.GetFileFromVirtualFS(defaultYamlFile) + err := ioutil.WriteFile(cmfFilePath, []byte(cmfFile), 0644) + if err != nil { + fmt.Println(color.Red("Cannot create .cmf.yaml file")) + os.Exit(2) + } + + fmt.Println(color.Green("You can customize your flow, just visit: https://github.com/walmartdigital/commit-message-formatter. Enjoy!")) + } } From 676354ecb741086bc9c629ff1c93457e2c761a5a Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Mon, 14 Jun 2021 18:15:58 -0400 Subject: [PATCH 25/41] fix(go.mod): run go mod tidy --- go.mod | 12 ++++++------ go.sum | 9 +++++++-- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index a1e9207..f84ddec 100644 --- a/go.mod +++ b/go.mod @@ -3,11 +3,11 @@ module github.com/walmartdigital/commit-message-formatter go 1.16 require ( - github.com/golang/mock v1.6.0 // indirect - github.com/logrusorgru/aurora/v3 v3.0.0 // indirect - github.com/mritd/promptx v0.0.0-20201227060029-3c9bd8aa86dd // indirect - github.com/onsi/ginkgo v1.16.4 // indirect - github.com/onsi/gomega v1.13.0 // indirect + github.com/golang/mock v1.6.0 + github.com/logrusorgru/aurora/v3 v3.0.0 + github.com/mritd/promptx v0.0.0-20201227060029-3c9bd8aa86dd + github.com/onsi/ginkgo v1.16.4 + github.com/onsi/gomega v1.13.0 github.com/spf13/cobra v1.1.3 - gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v2 v2.4.0 ) diff --git a/go.sum b/go.sum index 895c465..7a223b5 100644 --- a/go.sum +++ b/go.sum @@ -24,7 +24,9 @@ github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+Ce github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= @@ -67,6 +69,7 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= @@ -118,11 +121,11 @@ github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvW 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 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= 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 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= -github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/logrusorgru/aurora/v3 v3.0.0 h1:R6zcoZZbvVcGMvDCKo45A9U/lzYyzl5NfYIvznmDfE4= github.com/logrusorgru/aurora/v3 v3.0.0/go.mod h1:vsR12bk5grlLvLXAYrBsb5Oc/N+LxAlxggSjiwMnCUc= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -357,9 +360,11 @@ google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miE google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= 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 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= From 77e9bf3d2bd5fb58a1b2466865eb78a4842b82d8 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Mon, 14 Jun 2021 18:17:01 -0400 Subject: [PATCH 26/41] feat(ci): add goreleaser yaml file --- .gitignore | 3 ++- .goreleaser.yml | 45 +++++++++++++++++++++++++++++++++++++-------- 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 0db082a..3cb9516 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ src dist node_modules -commit-message-formatter \ No newline at end of file +commit-message-formatter +dist/ diff --git a/.goreleaser.yml b/.goreleaser.yml index db10b2e..081bff6 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -1,12 +1,41 @@ -# Build customization -project_name: cmf +# This is an example .goreleaser.yml file with some sane defaults. +# Make sure to check the documentation at http://goreleaser.com +before: + hooks: + # You may remove this if you don't use go modules. + - go mod tidy builds: - - binary: cmf + - env: + - CGO_ENABLED=0 + binary: git-cmf + ldflags: + - -a -installsuffix goos: + - linux - windows - darwin - - linux - goarch: - - amd64 - ldflags: - - -a -installsuffix \ No newline at end of file +archives: + - replacements: + darwin: Darwin + linux: Linux + windows: Windows + 386: i386 + amd64: x86_64 +checksum: + name_template: 'checksums.txt' +snapshot: + name_template: "{{ .Tag }}-next" +changelog: + sort: asc + filters: + exclude: + - '^docs:' + - '^test:' +brews: + - name: git-cmf + github: + owner: walmartdigital + name: https://github.com/walmartdigital/homebrew-git-cmf + folder: Formula + homepage: https://github.com/walmartdigital/commit-message-formatter + description: A simple description of your application. \ No newline at end of file From ded73b068ae116a7647279558270694ccd7625bc Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Mon, 14 Jun 2021 18:17:23 -0400 Subject: [PATCH 27/41] feat(ci/cd): add goreleaser github action --- .github/workflows/goreleaser.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/goreleaser.yml diff --git a/.github/workflows/goreleaser.yml b/.github/workflows/goreleaser.yml new file mode 100644 index 0000000..8b263e7 --- /dev/null +++ b/.github/workflows/goreleaser.yml @@ -0,0 +1,31 @@ +name: goreleaser + +on: + pull_request: + push: + tags: + - '*' + +jobs: + goreleaser: + runs-on: ubuntu-latest + steps: + - + name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - + name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: 1.16 + - + name: Run GoReleaser + uses: goreleaser/goreleaser-action@v2 + with: + distribution: goreleaser + version: latest + args: release --rm-dist + env: + GITHUB_TOKEN: ${{ secrets.REPO_TOKEN }} \ No newline at end of file From fc337138655ce9cf80d0bb7b17a59380c461aee3 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Tue, 15 Jun 2021 09:17:53 -0400 Subject: [PATCH 28/41] feat(prompt): add ENV key to aad environment variables to the flow and regex capacity hover default values --- cmf/cmf.go | 18 ++++++++++-------- templaterunner/templaterunner.go | 30 ++++++++++++++++++++++++------ 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/cmf/cmf.go b/cmf/cmf.go index c0ed261..d91c083 100644 --- a/cmf/cmf.go +++ b/cmf/cmf.go @@ -74,6 +74,14 @@ func NewCMF(repository Repository, templateManager TemplateManager, fsManager FS } } +func (cmfInstance *cmf) getInnerVariables() map[string]string { + extra := map[string]string{ + "BRANCH_NAME": cmfInstance.repository.BranchName(), + } + + return extra +} + // GetVersion return current cmf version func (cmfInstance *cmf) GetVersion() { fmt.Println("Git - Commit Message Formatter v", version) @@ -88,10 +96,7 @@ func (cmfInstance *cmf) CommitChanges() { cmfFile, _ = cmfInstance.fs.GetFileFromVirtualFS(defaultYamlFile) } - extra := map[string]string{ - "BRANCH_NAME": cmfInstance.repository.BranchName(), - } - message, _ := cmfInstance.templateManager.Run(cmfFile, extra) + message, _ := cmfInstance.templateManager.Run(cmfFile, cmfInstance.getInnerVariables()) cmfInstance.repository.Commit(message) } @@ -104,10 +109,7 @@ func (cmfInstance *cmf) CommitAmend() { cmfFile, _ = cmfInstance.fs.GetFileFromVirtualFS(defaultYamlFile) } - extra := map[string]string{ - "BRANCH_NAME": cmfInstance.repository.BranchName(), - } - message, _ := cmfInstance.templateManager.Run(cmfFile, extra) + message, _ := cmfInstance.templateManager.Run(cmfFile, cmfInstance.getInnerVariables()) cmfInstance.repository.Amend(message) } diff --git a/templaterunner/templaterunner.go b/templaterunner/templaterunner.go index 47ee40b..72edbb3 100644 --- a/templaterunner/templaterunner.go +++ b/templaterunner/templaterunner.go @@ -2,6 +2,8 @@ package templaterunner import ( "errors" + "os" + "regexp" "strings" "gopkg.in/yaml.v2" @@ -24,6 +26,7 @@ type TemplateRunner interface { // Template main template struct type Template struct { + Env []string `yaml:"ENV"` Prompt []PromptItem `yaml:"PROMPT"` Template string `yaml:"TEMPLATE"` } @@ -34,6 +37,7 @@ type PromptItem struct { Label string `yaml:"LABEL"` ErrorLabel string `yaml:"ERROR_LABEL"` DefaultValue string `yaml:"DEFAULT_VALUE"` + Regex string `yaml:"REGEX"` Options []Options `yaml:"OPTIONS"` } @@ -67,17 +71,24 @@ func (tr *templateRunner) parseYaml(yamlData string) (Template, error) { } // Run return the result of run the template -func (tr *templateRunner) Run(yamlData string, injectedVariables map[string]string) (string, error) { +func (tr *templateRunner) Run(yamlData string, defaultVariables map[string]string) (string, error) { template, err := tr.parseYaml(yamlData) if err != nil { return "", err } - variables := tr.prompt(template) - for k, v := range injectedVariables { + variables := []keyValue{} + for k, v := range defaultVariables { variables = append(variables, keyValue{Key: k, Value: v}) } + for _, environmentVariable := range template.Env { + variables = append(variables, keyValue{Key: environmentVariable, Value: os.Getenv(environmentVariable)}) + } + + promptVariables := tr.prompt(template, variables) + variables = append(variables, promptVariables...) + message := tr.parseTemplate(template.Template, variables) return message, err @@ -91,10 +102,11 @@ func (tr *templateRunner) parseTemplate(template string, variables []keyValue) s return template } -func (tr *templateRunner) prompt(template Template) []keyValue { +func (tr *templateRunner) prompt(template Template, defaultVariables []keyValue) []keyValue { variables := []keyValue{} for _, step := range template.Prompt { result := "" + defaultValue := "" var errorMessage = "empty value" if step.ErrorLabel != "" { @@ -105,12 +117,18 @@ func (tr *templateRunner) prompt(template Template) []keyValue { var labelMessage = step.Label if step.DefaultValue != "" { - labelMessage += " (" + step.DefaultValue + ")" + defaultValue = tr.parseTemplate(step.DefaultValue, defaultVariables) + if step.Regex != "" { + r, _ := regexp.Compile(step.Regex) + defaultValue = r.FindStringSubmatch(defaultValue)[0] + } + + labelMessage += " (" + defaultValue + ")" } labelMessage += ":" - result = tr.promptManager.ReadValue(labelMessage, errorMessage, step.DefaultValue) + result = tr.promptManager.ReadValue(labelMessage, errorMessage, defaultValue) } else { result = tr.promptManager.ReadValueFromList(step.Label, step.Options) } From b48bddc0d877d43bfd02edeb5d2e701599e1f13a Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Tue, 15 Jun 2021 09:19:29 -0400 Subject: [PATCH 29/41] fix(cmf): fix amend command, removed check tree action in amend command --- cmf/cmf.go | 1 - 1 file changed, 1 deletion(-) diff --git a/cmf/cmf.go b/cmf/cmf.go index d91c083..c5f1cb6 100644 --- a/cmf/cmf.go +++ b/cmf/cmf.go @@ -102,7 +102,6 @@ func (cmfInstance *cmf) CommitChanges() { // CommitAmend perform a commit amend over current repository func (cmfInstance *cmf) CommitAmend() { - cmfInstance.repository.CheckWorkspaceChanges() currentDirectory, _ := cmfInstance.fs.GetCurrentDirectory() cmfFile, err := cmfInstance.fs.GetFileFromFS(currentDirectory + "/" + defaultCMFFile) if err != nil { From 06e628de8977a693fe64c626bf81667ce3600c31 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Tue, 15 Jun 2021 09:20:39 -0400 Subject: [PATCH 30/41] fix(resources): removed jira yaml flow --- resources/jira.yaml | 35 ----------------------------------- 1 file changed, 35 deletions(-) delete mode 100644 resources/jira.yaml diff --git a/resources/jira.yaml b/resources/jira.yaml deleted file mode 100644 index 40e4abf..0000000 --- a/resources/jira.yaml +++ /dev/null @@ -1,35 +0,0 @@ -PROMPT: - - KEY: "JIRA-TASK" - LABEL: "Jira task ID" - DEFAULT_VALUE: "{{BRANCH_NAME}}" - - KEY: "CHANGE" - LABEL: "Type of change" - OPTIONS: - - VALUE: "feat" - DESC: "Add new feature" - - VALUE: "fix" - DESC: "A bug fix" - - VALUE: "test" - DESC: "Adding missing tests or correcting ones" - - VALUE: "chore" - DESC: "Add non bussiness logic change" - - VALUE: "style" - DESC: "A code change to improve clean code" - - VALUE: "ci/cd" - DESC: "Changes on the build system or CI files" - - VALUE: "refactor" - DESC: "A code change" - - VALUE: "docs" - DESC: "Documentation changes" - - KEY: "MESSAGE" - LABEL: "Commit message" - - KEY: "LABEL" - LABEL: "Label" - OPTIONS: - - VALUE: "" - DESC: "No label" - - VALUE: "[CI SKIP]" - DESC: "Skip continous integration pipeline" - - VALUE: "[WIP]" - DESC: "Work In Progress" -TEMPLATE: "{{JIRA-TASK}} ({{CHANGE}}): {{MESSAGE}} {{LABEL}}" From 776a0d7c4c2c967d7fc302dbfb17692b701af8a3 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Tue, 15 Jun 2021 16:38:27 -0400 Subject: [PATCH 31/41] fix(resources): add more change type to default yaml file --- resources/default.yaml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/resources/default.yaml b/resources/default.yaml index 62a7e60..836413f 100644 --- a/resources/default.yaml +++ b/resources/default.yaml @@ -6,14 +6,16 @@ PROMPT: DESC: "Add new feature" - VALUE: "fix" DESC: "A bug fix" - - VALUE: "test" - DESC: "Adding missing tests or correcting ones" - VALUE: "chore" DESC: "Add non bussiness logic change" + - VALUE: "test" + DESC: "Adding missing tests or correcting ones" - VALUE: "style" DESC: "A code change to improve clean code" - - VALUE: "ci/cd" - DESC: "Changes on the build system or CI files" + - VALUE: "build" + DESC: "Changes on build files and flows" + - VALUE: "ci" + DESC: "Changes on CI files" - VALUE: "refactor" DESC: "A code change" - VALUE: "docs" From 8a4305b5e0ba18359acb5fc6374be2c301aa8781 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Tue, 15 Jun 2021 17:04:58 -0400 Subject: [PATCH 32/41] docs(readme): refactor readme according to v3 changes --- Readme.md | 116 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 60 insertions(+), 56 deletions(-) diff --git a/Readme.md b/Readme.md index 5e49391..ebf35aa 100644 --- a/Readme.md +++ b/Readme.md @@ -1,97 +1,94 @@ -# CMF Commit Message Formatter - V2 +# CMF Commit Message Formatter - V3 -CMF is a simple to use utility to standarize commit messages on projects. +CMF is a simple-to-use utility to standarized commit messages on projects. -## Getting started +## Migrating from V2 -Install via npm, just do `$ npm install -g go-cmf` +- Installation via npm command is now deprecated and no longer maintained on **V3**. +- You can still be using your `.cmf.yaml` file. Now you can extend this file with new attributes. -Or from Go `go install github.com/walmartdigital/commit-message-formatter` +## Major changes -Once installed, go to your project an run `$ cmf init` and select one of the flows, it will create a `.cmf.yaml`file on your project with your selected flow. +- .cmf.yaml file is no longer required if you want to use a simple flow. +- The default flow of v3 is now strongly forced to use [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/). +- CMF binary is renamed to git-cmf, so now you can use it directly from git as `git cmf` command. +- CMF is now available from Homebrew. +- `cmf init` is cleaner now, it just creates a .cmf.yaml file with +a simple flow to let you customize as you want. -## Flows +## Getting Started -CMF have three flows (for now) default, Jira and custom +### Install CMF -### Default +- Using go install: `go install github.com/walmartdigital/commit-message-formatter` +- Using Brew: + - `brew tap /walmartdigital/homebrew-git-cmf` + - `brew install homebrew-git-cmf` +- Download binaries from Github -Running `$ cmf init` and select default, you will get the default flow and prompted for: +### Initialize project (optional) - - Type of change you made to your code - - Module affected by this change - - Commit message or description of your change +If you want to customize your flow, you can run `git cmf init`, +this command will create a .cmf.yaml file with the default flow. -### Jira +Then you can change the flow as you want. -Running `$ cmf init` and select Jira, you will get the jira flow, this time you will be prompt for: +### Variables - - Jira task ID - - Type of change you made to your code - - Commit message or description of your change - -### Custom - -Running `$ cmf init`and select custom, you will get the custom flow, this time it will create a `.cmf.yaml`file with default flow but with annotations of how change it. - ---- - -## Variables - -CMF have inner variables and you can access it throw templates using `{{}}`: +CMF has inner variables and you can access it throw templates using `{{}}`: - {{BRANCH_NAME}} it will print the current branch name of your repository -## Configurations +Additionally, you can include external environment variables using the **ENV** +block described on the template. -It is possible to config CMF as you like, you can change **custom flows, templates or assign default flows**. You can do this using a local file on the root of your porject or setting as global preferences with a file on your Home directory called `.cmf.yaml`. +### Extending -### TEMPLATE +It is possible to config CMF as you like, you can change + **custom flows, templates, or assign default flows**. You can do this using + a local file on the root of your project or set as global + preferences with a file on your Home directory called `.cmf.yaml`. -Set a template string for commit messages. +### Template Structure -#### Default flow +A `.cmf.yaml` file is composite by 3 main blocks: + - ENV + - PROMPT + - TEMPLATE -Default template `{{CHANGE}}({{MODULE}}): {{MESSAGE}}`. You can use this variables: +#### ENV -- CHANGE _type of change: feature, fix, update_ -- MODULE _module affected_ -- MESSAGE _commit message_ +It is a list of environment variables names, that later are mappings to be +accessible from other blocks. ``` -TEMPLATE: "{{CHANGE}}({{MODULE}}): {{MESSAGE}}" +ENV: + - ENVIRONMENT_1 + - ENVIRONMENT_2 + ... + - ENVIRONMENT_10 ``` -#### Jira flow - -Default template `{{JIRA-TASK}} ({{CHANGE}}): {{MESSAGE}}`. You can use this variables: +#### PROMPT -- JIRA*TASK \_jira task id, by default {{BRANCH_NAME}}* -- CHANGE _type of change: feature, fix, update_ -- MESSAGE _commit message_ +Describe an input flow. -``` -TEMPLATE: "{{JIRA-TASK}} ({{CHANGE}}): {{MESSAGE}}" -``` +You can create your custom flows using this configuration attribute.` +Every `KEY` attribute is mapping as a variable within the flow. -### PROMPT - -You can create your custom flows using this configuration attribute. - -Prompt accept two types of prompts: +Prompt accepts two kinds of questions: - Single question: - KEY _variable name_ - LABEL _prompt title_ -- Select: + +- Select question: - KEY _variable name_ - LABEL _prompt title_ - OPTIONS _list of options_ - VALUE _variable value_ - DESC _variable description_ -_default .cmf.yaml sample file_ - ``` PROMPT: - KEY: "CHANGE" @@ -116,13 +113,20 @@ PROMPT: TEMPLATE: "{{CHANGE}}({{MODULE}}): {{MESSAGE}}" ``` +#### TEMPLATE + +Defines the way the commit message will be formatted using variables described on .cmf.yaml file. + +``` +TEMPLATE: "{{CHANGE}}({{MODULE}}): {{MESSAGE}}" +``` --- ## Contributions Use GitHub issues for requests. -I actively welcome pull requests; learn how to contribute. +I actively welcome pull requests; learn how to [contribute](CONTRIBUTING.md). --- From b2328e6f19be81ba0b13d0b39a206c7b8c4874d2 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Tue, 15 Jun 2021 17:05:15 -0400 Subject: [PATCH 33/41] docs(contributing): add contributing file --- CONTRIBUTING.md | 89 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..ed9cd4d --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,89 @@ +# Contributing + +When contributing to this repository, please first discuss the change you wish to make via issue, +email, or any other method with the owners of this repository before making a change. + +Please note we have a code of conduct, please follow it in all your interactions with the project. + +## Pull Request Process + +1. Ensure any install or build dependencies are removed before the end of the layer when doing a + build. +2. Update the README.md with details of changes to the interface, this includes new environment + variables, exposed ports, useful file locations and container parameters. +3. Increase the version numbers in any examples files and the README.md to the new version that this + Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/). +4. You may merge the Pull Request in once you have the sign-off of two other developers, or if you + do not have permission to do that, you may request the second reviewer to merge it for you. + +## Code of Conduct + +### Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +### Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +### Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +### Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +### Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at rodrigo.navarro@walmart.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +### Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] \ No newline at end of file From 7c207b23690d588dfe35be50d176159857e42049 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Tue, 15 Jun 2021 17:06:45 -0400 Subject: [PATCH 34/41] ci(action): removed on tag release --- .github/workflows/goreleaser.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/goreleaser.yml b/.github/workflows/goreleaser.yml index 8b263e7..6332c1c 100644 --- a/.github/workflows/goreleaser.yml +++ b/.github/workflows/goreleaser.yml @@ -3,8 +3,8 @@ name: goreleaser on: pull_request: push: - tags: - - '*' + # tags: + # - '*' jobs: goreleaser: From 4b7e7f86d5f5cfb9adb9bbe0642c25b8fff2cfa3 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Tue, 15 Jun 2021 17:17:33 -0400 Subject: [PATCH 35/41] fix(goreleaser): change invalid github attribute with valid tap attrbute on brews block --- .goreleaser.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.goreleaser.yml b/.goreleaser.yml index 081bff6..19aca09 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -33,7 +33,7 @@ changelog: - '^test:' brews: - name: git-cmf - github: + tap: owner: walmartdigital name: https://github.com/walmartdigital/homebrew-git-cmf folder: Formula From def0a458661a2664fff70d684bc7bf8acf1e08b3 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Tue, 15 Jun 2021 17:27:17 -0400 Subject: [PATCH 36/41] ci(actions): uncomment tag filter on github actions --- .github/workflows/goreleaser.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/goreleaser.yml b/.github/workflows/goreleaser.yml index 6332c1c..8b263e7 100644 --- a/.github/workflows/goreleaser.yml +++ b/.github/workflows/goreleaser.yml @@ -3,8 +3,8 @@ name: goreleaser on: pull_request: push: - # tags: - # - '*' + tags: + - '*' jobs: goreleaser: From 3a5d361d2a3c6ae69ebcf0be6ffd72f916bd9cb8 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Tue, 15 Jun 2021 17:34:45 -0400 Subject: [PATCH 37/41] fix(ci): fix goreleaser brew repo name --- .goreleaser.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.goreleaser.yml b/.goreleaser.yml index 19aca09..8cd21b9 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -35,7 +35,7 @@ brews: - name: git-cmf tap: owner: walmartdigital - name: https://github.com/walmartdigital/homebrew-git-cmf + name: homebrew-git-cmf folder: Formula homepage: https://github.com/walmartdigital/commit-message-formatter description: A simple description of your application. \ No newline at end of file From 5a4892f52540b994918eeef67b8d569b3c62efdb Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Tue, 15 Jun 2021 17:44:18 -0400 Subject: [PATCH 38/41] docs(readme): fix brew steps --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index ebf35aa..5ec50d7 100644 --- a/Readme.md +++ b/Readme.md @@ -22,7 +22,7 @@ a simple flow to let you customize as you want. - Using go install: `go install github.com/walmartdigital/commit-message-formatter` - Using Brew: - - `brew tap /walmartdigital/homebrew-git-cmf` + - `brew tap walmartdigital/homebrew-git-cmf` - `brew install homebrew-git-cmf` - Download binaries from Github From 15026a9caba290d23b5f1e9ec8640e021577b661 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Tue, 15 Jun 2021 17:44:59 -0400 Subject: [PATCH 39/41] ci(goreleaser): fix brew properties to install correctly --- .goreleaser.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.goreleaser.yml b/.goreleaser.yml index 8cd21b9..123f037 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -36,6 +36,9 @@ brews: tap: owner: walmartdigital name: homebrew-git-cmf + description: "CMF is a simple-to-use utility to standarized commit messages on projects." + license: "MIT" + install: | + bin.install "git-cmf" folder: Formula - homepage: https://github.com/walmartdigital/commit-message-formatter - description: A simple description of your application. \ No newline at end of file + homepage: https://github.com/walmartdigital/commit-message-formatter \ No newline at end of file From 985083ba0a8fbc678a49c1f1c4e32ea797031d79 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Tue, 15 Jun 2021 17:49:28 -0400 Subject: [PATCH 40/41] docs(readme): fix hombre install command --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 5ec50d7..c620afb 100644 --- a/Readme.md +++ b/Readme.md @@ -23,7 +23,7 @@ a simple flow to let you customize as you want. - Using go install: `go install github.com/walmartdigital/commit-message-formatter` - Using Brew: - `brew tap walmartdigital/homebrew-git-cmf` - - `brew install homebrew-git-cmf` + - `brew install git-cmf` - Download binaries from Github ### Initialize project (optional) From 07949245d776423b083445173e1aeef15abd8181 Mon Sep 17 00:00:00 2001 From: Rodrigo Navarro Date: Wed, 20 Oct 2021 14:36:59 -0300 Subject: [PATCH 41/41] chore(root): remove unused package json files --- package-lock.json | 488 ---------------------------------------------- package.json | 19 -- 2 files changed, 507 deletions(-) delete mode 100644 package-lock.json delete mode 100644 package.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index a37afc5..0000000 --- a/package-lock.json +++ /dev/null @@ -1,488 +0,0 @@ -{ - "name": "go-cmf", - "version": "2.0.8", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "ajv": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.8.1.tgz", - "integrity": "sha512-eqxCp82P+JfqL683wwsL73XmFs1eG6qjw+RD3YHx+Jll1r0jNd4dh8QG9NYAeNGA/hnZjeEDgtTskgJULbxpWQ==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "requires": { - "inherits": "~2.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "go-npm": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/go-npm/-/go-npm-0.1.9.tgz", - "integrity": "sha1-hcExXcsFVB7GOmAjjdOePAowcE8=", - "requires": { - "mkdirp": "^0.5.1", - "request": "^2.81.0", - "tar": "^2.2.1" - } - }, - "graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" - }, - "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", - "requires": { - "mime-db": "~1.37.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", - "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" - } - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index dd9229b..0000000 --- a/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "go-cmf", - "version": "2.0.8", - "description": "CMF is an utility to standarize commit messages on porjects", - "scripts": { - "postinstall": "go-npm install", - "preuninstall": "go-npm uninstall" - }, - "author": "Rodrigo Navarro", - "license": "MIT", - "goBinary": { - "name": "cmf", - "path": "../bin", - "url": "https://github.com/WalmartDigital/commit-message-formatter/releases/download/v{{version}}/cmf_{{version}}_{{platform}}_{{arch}}.tar.gz" - }, - "dependencies": { - "go-npm": "^0.1.9" - } -}