From 4bf1fe83505dc6d0431f8b7c478c2158850a7f15 Mon Sep 17 00:00:00 2001 From: Omer Zidkoni <50792403+omerzi@users.noreply.github.com> Date: Tue, 13 Feb 2024 09:51:15 +0200 Subject: [PATCH 01/10] Export "isProcessRunning" (#1126) --- utils/lock/lock.go | 7 ++++--- utils/{lock => osutils}/utils_unix.go | 7 ++++--- utils/{lock => osutils}/utils_windows.go | 7 ++++--- 3 files changed, 12 insertions(+), 9 deletions(-) rename utils/{lock => osutils}/utils_unix.go (93%) rename utils/{lock => osutils}/utils_windows.go (93%) diff --git a/utils/lock/lock.go b/utils/lock/lock.go index 0e8358809..57c5281af 100644 --- a/utils/lock/lock.go +++ b/utils/lock/lock.go @@ -10,6 +10,7 @@ import ( "strings" "time" + "github.com/jfrog/jfrog-cli-core/v2/utils/osutils" "github.com/jfrog/jfrog-client-go/utils/errorutils" "github.com/jfrog/jfrog-client-go/utils/io/fileutils" "github.com/jfrog/jfrog-client-go/utils/log" @@ -129,9 +130,9 @@ func (lock *Lock) removeOtherLockOrWait(otherLock Lock, filesList *[]string) err log.Debug("Lock hasn't been acquired.") // Check if the process is running. - // There are two implementation of the 'isProcessRunning'. + // There are two implementation of the 'IsProcessRunning'. // One for Windows and one for Unix based systems. - running, err := isProcessRunning(otherLock.pid) + running, err := osutils.IsProcessRunning(otherLock.pid) if err != nil { return err } @@ -241,7 +242,7 @@ func GetLastLockTimestamp(lockDirPath string) (int64, error) { lastLock := locks[len(locks)-1] // If the lock isn't acquired by a running process, an unexpected error was occurred. - running, err := isProcessRunning(lastLock.pid) + running, err := osutils.IsProcessRunning(lastLock.pid) if err != nil { return 0, err } diff --git a/utils/lock/utils_unix.go b/utils/osutils/utils_unix.go similarity index 93% rename from utils/lock/utils_unix.go rename to utils/osutils/utils_unix.go index 476ac23ce..c70c907e5 100644 --- a/utils/lock/utils_unix.go +++ b/utils/osutils/utils_unix.go @@ -1,19 +1,20 @@ //go:build linux || darwin || freebsd // +build linux darwin freebsd -package lock +package osutils import ( - "github.com/jfrog/jfrog-client-go/utils/log" "os" "syscall" + + "github.com/jfrog/jfrog-client-go/utils/log" ) // This file will be compiled only on unix systems. // Checks if the process is running. // If error occurs, check if the error is part of the OS permission errors. This means the process is running. // Else means the process is not running. -func isProcessRunning(pid int) (bool, error) { +func IsProcessRunning(pid int) (bool, error) { process, err := os.FindProcess(pid) if err != nil { return false, err diff --git a/utils/lock/utils_windows.go b/utils/osutils/utils_windows.go similarity index 93% rename from utils/lock/utils_windows.go rename to utils/osutils/utils_windows.go index 504d1c97f..2711fcd1d 100644 --- a/utils/lock/utils_windows.go +++ b/utils/osutils/utils_windows.go @@ -1,15 +1,16 @@ -package lock +package osutils import ( - "github.com/jfrog/jfrog-client-go/utils/errorutils" "syscall" + + "github.com/jfrog/jfrog-client-go/utils/errorutils" ) // This file will be compiled on Windows. // Checks if the process can be reached. // If an error occurs, check if the error is part of the invalid parameter. This means the process is not running. // Else find the exit code. If the exit code 259 means the process is running. -func isProcessRunning(pid int) (bool, error) { +func IsProcessRunning(pid int) (bool, error) { process, err := syscall.OpenProcess(syscall.PROCESS_QUERY_INFORMATION, true, uint32(pid)) if err != nil { // Check if err is of type of syscall.Errno, which is a Windows error number. From bb1e61c953acc29b96858ccab2ae922afac571b3 Mon Sep 17 00:00:00 2001 From: Michael Sverdlov Date: Wed, 14 Feb 2024 16:22:46 +0200 Subject: [PATCH 02/10] Upload empty archive when all upload files were filtered out (#1124) --- go.mod | 24 ++++++++++++------------ go.sum | 47 ++++++++++++++++++++++++----------------------- 2 files changed, 36 insertions(+), 35 deletions(-) diff --git a/go.mod b/go.mod index 86d31bb69..3d86d8c15 100644 --- a/go.mod +++ b/go.mod @@ -9,11 +9,11 @@ require ( github.com/chzyer/readline v1.5.1 github.com/forPelevin/gomoji v1.1.8 github.com/gocarina/gocsv v0.0.0-20231116093920-b87c2d0e983a - github.com/google/uuid v1.4.0 + github.com/google/uuid v1.6.0 github.com/gookit/color v1.5.4 - github.com/jedib0t/go-pretty/v6 v6.5.3 + github.com/jedib0t/go-pretty/v6 v6.5.4 github.com/jfrog/build-info-go v1.9.21 - github.com/jfrog/gofrog v1.5.1 + github.com/jfrog/gofrog v1.6.0 github.com/jfrog/jfrog-client-go v1.36.0 github.com/magiconair/properties v1.8.7 github.com/manifoldco/promptui v0.9.0 @@ -22,10 +22,10 @@ require ( github.com/stretchr/testify v1.8.4 github.com/urfave/cli v1.22.14 github.com/vbauerster/mpb/v7 v7.5.3 - golang.org/x/exp v0.0.0-20240119083558-1b970713d09a - golang.org/x/mod v0.14.0 + golang.org/x/exp v0.0.0-20240213143201-ec583247a57a + golang.org/x/mod v0.15.0 golang.org/x/sync v0.6.0 - golang.org/x/term v0.16.0 + golang.org/x/term v0.17.0 golang.org/x/text v0.14.0 gopkg.in/yaml.v3 v3.0.1 ) @@ -39,7 +39,7 @@ require ( github.com/VividCortex/ewma v1.2.0 // indirect github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d // indirect github.com/andybalholm/brotli v1.1.0 // indirect - github.com/cloudflare/circl v1.3.3 // indirect + github.com/cloudflare/circl v1.3.7 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect @@ -88,15 +88,15 @@ require ( github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778 // indirect go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.9.0 // indirect - golang.org/x/crypto v0.18.0 // indirect - golang.org/x/net v0.20.0 // indirect - golang.org/x/sys v0.16.0 // indirect - golang.org/x/tools v0.17.0 // indirect + golang.org/x/crypto v0.19.0 // indirect + golang.org/x/net v0.21.0 // indirect + golang.org/x/sys v0.17.0 // indirect + golang.org/x/tools v0.18.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect ) -replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.28.1-0.20240204105421-dd3f7041f3df +replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.28.1-0.20240214141548-6691c4323f52 // replace github.com/jfrog/build-info-go => github.com/jfrog/build-info-go v1.8.9-0.20231220102935-c8776c613ad8 diff --git a/go.sum b/go.sum index a8c5e7684..3f9260691 100644 --- a/go.sum +++ b/go.sum @@ -32,8 +32,9 @@ github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObk github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= -github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= +github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= +github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= @@ -70,24 +71,24 @@ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4er github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0= github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jedib0t/go-pretty/v6 v6.5.3 h1:GIXn6Er/anHTkVUoufs7ptEvxdD6KIhR7Axa2wYCPF0= -github.com/jedib0t/go-pretty/v6 v6.5.3/go.mod h1:5LQIxa52oJ/DlDSLv0HEkWOFMDGoWkJb9ss5KqPpJBg= +github.com/jedib0t/go-pretty/v6 v6.5.4 h1:gOGo0613MoqUcf0xCj+h/V3sHDaZasfv152G6/5l91s= +github.com/jedib0t/go-pretty/v6 v6.5.4/go.mod h1:5LQIxa52oJ/DlDSLv0HEkWOFMDGoWkJb9ss5KqPpJBg= github.com/jfrog/archiver/v3 v3.6.0 h1:OVZ50vudkIQmKMgA8mmFF9S0gA47lcag22N13iV3F1w= github.com/jfrog/archiver/v3 v3.6.0/go.mod h1:fCAof46C3rAXgZurS8kNRNdSVMKBbZs+bNNhPYxLldI= github.com/jfrog/build-info-go v1.9.21 h1:bcD0SEC2lEilhjE+aDB3xlvA8zsr4Kw/bFzvr9Tcj9I= github.com/jfrog/build-info-go v1.9.21/go.mod h1:Vxv6zmx4e1NWsx40OHaDWCCYDeYAq2yXzpJ4nsDChbE= -github.com/jfrog/gofrog v1.5.1 h1:2AXL8hHu1jJFMIoCqTp2OyRUfEqEp4nC7J8fwn6KtwE= -github.com/jfrog/gofrog v1.5.1/go.mod h1:SZ1EPJUruxrVGndOzHd+LTiwWYKMlHqhKD+eu+v5Hqg= -github.com/jfrog/jfrog-client-go v1.28.1-0.20240204105421-dd3f7041f3df h1:7yQ7m0N3AQNqGnymRP+Fka6FZCEYr9GzkTbVkUcxwtQ= -github.com/jfrog/jfrog-client-go v1.28.1-0.20240204105421-dd3f7041f3df/go.mod h1:y1WF6eiZ7V2DortiwjpMEicEH6NIJH+hOXI5QI2W3NU= +github.com/jfrog/gofrog v1.6.0 h1:jOwb37nHY2PnxePNFJ6e6279Pgkr3di05SbQQw47Mq8= +github.com/jfrog/gofrog v1.6.0/go.mod h1:SZ1EPJUruxrVGndOzHd+LTiwWYKMlHqhKD+eu+v5Hqg= +github.com/jfrog/jfrog-client-go v1.28.1-0.20240214141548-6691c4323f52 h1:eDwEWEKfz9gigNJNF60ioZFG3R/33Qq2z+5lH/FfO9Q= +github.com/jfrog/jfrog-client-go v1.28.1-0.20240214141548-6691c4323f52/go.mod h1:fV5wrs86ihQkFKfMKpGxMbNf3mbVT4LUf320C1T9C2M= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= @@ -210,14 +211,14 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= -golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= -golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA= -golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08= +golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo= +golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/exp v0.0.0-20240213143201-ec583247a57a h1:HinSgX1tJRX3KsL//Gxynpw5CTOAIPhgL4W8PNiIpVE= +golang.org/x/exp v0.0.0-20240213143201-ec583247a57a/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= +golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -225,8 +226,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= -golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= +golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -259,15 +260,15 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= -golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= +golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= -golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= +golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= +golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -281,8 +282,8 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= -golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= +golang.org/x/tools v0.18.0 h1:k8NLag8AGHnn+PHbl7g43CtqZAwG60vZkLqgyZgIHgQ= +golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 28d9d204f1256b70baf29d51d6091a6e27807d79 Mon Sep 17 00:00:00 2001 From: Assaf Attias <49212512+attiasas@users.noreply.github.com> Date: Thu, 15 Feb 2024 16:46:16 +0200 Subject: [PATCH 03/10] Add Pnpm technology (#1122) --- artifactory/commands/repository/template.go | 6 ++-- utils/coreutils/techutils.go | 11 ++++++- utils/coreutils/techutils_test.go | 34 ++++++++++++++++++--- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/artifactory/commands/repository/template.go b/artifactory/commands/repository/template.go index 4f4a6f59f..435df31b0 100644 --- a/artifactory/commands/repository/template.go +++ b/artifactory/commands/repository/template.go @@ -856,9 +856,9 @@ var questionMap = map[string]ioutils.QuestionInfo{ Writer: ioutils.WriteStringAnswer, }, PrimaryKeyPairRef: ioutils.FreeStringQuestionInfo, - Username: ioutils.FreeStringQuestionInfo, - Password: ioutils.FreeStringQuestionInfo, - Proxy: ioutils.FreeStringQuestionInfo, + Username: ioutils.FreeStringQuestionInfo, + Password: ioutils.FreeStringQuestionInfo, + Proxy: ioutils.FreeStringQuestionInfo, RemoteRepoChecksumPolicyType: { Options: []prompt.Suggest{ {Text: GenerateIfAbsentPolicy}, diff --git a/utils/coreutils/techutils.go b/utils/coreutils/techutils.go index 78e2321e6..ca63dc653 100644 --- a/utils/coreutils/techutils.go +++ b/utils/coreutils/techutils.go @@ -24,6 +24,7 @@ const ( Maven Technology = "maven" Gradle Technology = "gradle" Npm Technology = "npm" + Pnpm Technology = "pnpm" Yarn Technology = "yarn" Go Technology = "go" Pip Technology = "pip" @@ -77,7 +78,7 @@ var technologiesData = map[Technology]TechData{ }, Npm: { indicators: []string{"package.json", "package-lock.json", "npm-shrinkwrap.json"}, - exclude: []string{".yarnrc.yml", "yarn.lock", ".yarn"}, + exclude: []string{"pnpm-lock.yaml", ".yarnrc.yml", "yarn.lock", ".yarn"}, ciSetupSupport: true, packageDescriptors: []string{"package.json"}, formal: string(Npm), @@ -85,8 +86,16 @@ var technologiesData = map[Technology]TechData{ packageInstallationCommand: "install", applicabilityScannable: true, }, + Pnpm: { + indicators: []string{"pnpm-lock.yaml"}, + exclude: []string{".yarnrc.yml", "yarn.lock", ".yarn"}, + packageDescriptors: []string{"package.json"}, + packageVersionOperator: "@", + applicabilityScannable: true, + }, Yarn: { indicators: []string{".yarnrc.yml", "yarn.lock", ".yarn", ".yarnrc"}, + exclude: []string{"pnpm-lock.yaml"}, packageDescriptors: []string{"package.json"}, packageVersionOperator: "@", applicabilityScannable: true, diff --git a/utils/coreutils/techutils_test.go b/utils/coreutils/techutils_test.go index 7d170b9da..c69d58ebe 100644 --- a/utils/coreutils/techutils_test.go +++ b/utils/coreutils/techutils_test.go @@ -17,6 +17,7 @@ func TestDetectTechnologiesByFilePaths(t *testing.T) { }{ {"simpleMavenTest", []string{"pom.xml"}, map[Technology]bool{Maven: true}}, {"npmTest", []string{"../package.json"}, map[Technology]bool{Npm: true}}, + {"pnpmTest", []string{"../package.json", "pnpm-lock.yaml"}, map[Technology]bool{Pnpm: true}}, {"yarnTest", []string{"./package.json", "./.yarn"}, map[Technology]bool{Yarn: true}}, {"windowsGradleTest", []string{"c:\\users\\test\\package\\build.gradle"}, map[Technology]bool{Gradle: true}}, {"windowsPipTest", []string{"c:\\users\\test\\package\\setup.py"}, map[Technology]bool{Pip: true}}, @@ -73,12 +74,19 @@ func TestMapFilesToRelevantWorkingDirectories(t *testing.T) { }, expectedExcluded: noExclude, }, + { + name: "pnpmTest", + paths: []string{filepath.Join("dir", "package.json"), filepath.Join("dir", "pnpm-lock.yaml")}, + requestedDescriptors: noRequest, + expectedWorkingDir: map[string][]string{"dir": {filepath.Join("dir", "package.json"), filepath.Join("dir", "pnpm-lock.yaml")}}, + expectedExcluded: map[string][]Technology{"dir": {Npm, Yarn}}, + }, { name: "yarnTest", paths: []string{filepath.Join("dir", "package.json"), filepath.Join("dir", ".yarn")}, requestedDescriptors: noRequest, expectedWorkingDir: map[string][]string{"dir": {filepath.Join("dir", "package.json"), filepath.Join("dir", ".yarn")}}, - expectedExcluded: map[string][]Technology{"dir": {Npm}}, + expectedExcluded: map[string][]Technology{"dir": {Npm, Pnpm}}, }, { name: "golangTest", @@ -138,13 +146,20 @@ func TestMapFilesToRelevantWorkingDirectories(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { detectedWd, detectedExcluded := mapFilesToRelevantWorkingDirectories(test.paths, test.requestedDescriptors) + // Assert working directories expectedKeys := maps.Keys(test.expectedWorkingDir) actualKeys := maps.Keys(detectedWd) assert.ElementsMatch(t, expectedKeys, actualKeys, "expected: %s, actual: %s", expectedKeys, actualKeys) for key, value := range test.expectedWorkingDir { assert.ElementsMatch(t, value, detectedWd[key], "expected: %s, actual: %s", value, detectedWd[key]) } - assert.True(t, reflect.DeepEqual(test.expectedExcluded, detectedExcluded), "expected: %s, actual: %s", test.expectedExcluded, detectedExcluded) + // Assert excluded + expectedKeys = maps.Keys(test.expectedExcluded) + actualKeys = maps.Keys(detectedExcluded) + assert.ElementsMatch(t, expectedKeys, actualKeys, "expected: %s, actual: %s", expectedKeys, actualKeys) + for key, value := range test.expectedExcluded { + assert.ElementsMatch(t, value, detectedExcluded[key], "expected: %s, actual: %s", value, detectedExcluded[key]) + } }) } } @@ -178,6 +193,7 @@ func TestMapWorkingDirectoriesToTechnologies(t *testing.T) { "dir": {filepath.Join("dir", "package.json"), filepath.Join("dir", "package-lock.json"), filepath.Join("dir", "build.gradle.kts"), filepath.Join("dir", "project.sln")}, "directory": {filepath.Join("directory", "npm-shrinkwrap.json")}, "dir3": {filepath.Join("dir3", "package.json"), filepath.Join("dir3", ".yarn")}, + filepath.Join("dir3", "dir"): {filepath.Join("dir3", "dir", "package.json"), filepath.Join("dir3", "dir", "pnpm-lock.yaml")}, filepath.Join("dir", "dir2"): {filepath.Join("dir", "dir2", "go.mod")}, filepath.Join("users_dir", "test", "package"): {filepath.Join("users_dir", "test", "package", "setup.py")}, filepath.Join("users_dir", "test", "package2"): {filepath.Join("users_dir", "test", "package2", "requirements.txt")}, @@ -186,7 +202,8 @@ func TestMapWorkingDirectoriesToTechnologies(t *testing.T) { }, excludedTechAtWorkingDir: map[string][]Technology{ filepath.Join("users", "test", "package"): {Pip}, - "dir3": {Npm}, + "dir3": {Npm}, + filepath.Join("dir3", "dir"): {Npm, Yarn}, }, requestedTechs: noRequestTech, requestedDescriptors: noRequestSpecialDescriptors, @@ -196,6 +213,7 @@ func TestMapWorkingDirectoriesToTechnologies(t *testing.T) { "dir": {filepath.Join("dir", "package.json")}, "directory": {}, }, + Pnpm: {filepath.Join("dir3", "dir"): {filepath.Join("dir3", "dir", "package.json")}}, Yarn: {"dir3": {filepath.Join("dir3", "package.json")}}, Go: {filepath.Join("dir", "dir2"): {filepath.Join("dir", "dir2", "go.mod")}}, Pip: { @@ -354,6 +372,7 @@ func TestGetTechInformationFromWorkingDir(t *testing.T) { "dir": {filepath.Join("dir", "package.json"), filepath.Join("dir", "package-lock.json"), filepath.Join("dir", "build.gradle.kts"), filepath.Join("dir", "project.sln"), filepath.Join("dir", "blabla.txt")}, "directory": {filepath.Join("directory", "npm-shrinkwrap.json")}, "dir3": {filepath.Join("dir3", "package.json"), filepath.Join("dir3", ".yarn")}, + filepath.Join("dir3", "dir"): {filepath.Join("dir3", "dir", "package.json"), filepath.Join("dir3", "dir", "pnpm-lock.yaml")}, filepath.Join("dir", "dir2"): {filepath.Join("dir", "dir2", "go.mod")}, filepath.Join("users_dir", "test", "package"): {filepath.Join("users_dir", "test", "package", "setup.py")}, filepath.Join("users_dir", "test", "package2"): {filepath.Join("users_dir", "test", "package2", "requirements.txt")}, @@ -362,7 +381,8 @@ func TestGetTechInformationFromWorkingDir(t *testing.T) { } excludedTechAtWorkingDir := map[string][]Technology{ filepath.Join("users", "test", "package"): {Pip}, - "dir3": {Npm}, + "dir3": {Npm, Pnpm}, + filepath.Join("dir3", "dir"): {Npm, Yarn}, } tests := []struct { @@ -392,6 +412,12 @@ func TestGetTechInformationFromWorkingDir(t *testing.T) { "directory": {}, }, }, + { + name: "pnpmTest", + tech: Pnpm, + requestedDescriptors: map[Technology][]string{}, + expected: map[string][]string{filepath.Join("dir3", "dir"): {filepath.Join("dir3", "dir", "package.json")}}, + }, { name: "yarnTest", tech: Yarn, From 40b164662f24ce653d012badf5d5a10ce67139d8 Mon Sep 17 00:00:00 2001 From: Michael Sverdlov Date: Thu, 15 Feb 2024 18:44:28 +0200 Subject: [PATCH 04/10] Improve interactive build config creation repositories fetch efficiency (#1110) --- artifactory/utils/repositoryutils.go | 7 +- common/commands/configfile.go | 129 +++++++++++---------------- 2 files changed, 55 insertions(+), 81 deletions(-) diff --git a/artifactory/utils/repositoryutils.go b/artifactory/utils/repositoryutils.go index 20efbdf7d..db8a46e69 100644 --- a/artifactory/utils/repositoryutils.go +++ b/artifactory/utils/repositoryutils.go @@ -65,16 +65,13 @@ func GetRepositories(artDetails *config.ServerDetails, repoTypes ...RepoType) ([ if err != nil { return nil, err } - if len(repoTypes) == 0 { - return GetFilteredRepositoriesByName(sm, nil, nil) - } repos := []string{} for _, repoType := range repoTypes { - repoKey, err := GetFilteredRepositoriesByNameAndType(sm, nil, nil, repoType) + filteredRepos, err := GetFilteredRepositoriesByNameAndType(sm, nil, nil, repoType) if err != nil { return repos, err } - repos = append(repos, repoKey...) + repos = append(repos, filteredRepos...) } return repos, nil diff --git a/common/commands/configfile.go b/common/commands/configfile.go index be265e761..a7e4518ba 100644 --- a/common/commands/configfile.go +++ b/common/commands/configfile.go @@ -152,27 +152,23 @@ func handleInteractiveConfigCreation(configFile *ConfigFile, confType project.Pr } switch confType { case project.Go: - err = configFile.configGo() - case project.Pip: - err = configFile.configPip() - case project.Pipenv: - err = configFile.configPipenv() - case project.Poetry: - err = configFile.configPoetry() + return configFile.setDeployerResolver() + case project.Pip, project.Pipenv, project.Poetry: + return configFile.setResolver(false) case project.Yarn: - err = configFile.configYarn() + return configFile.setResolver(false) case project.Npm: - err = configFile.configNpm() + return configFile.setDeployerResolver() case project.Nuget, project.Dotnet: - err = configFile.configDotnet() + return configFile.configDotnet() case project.Maven: - err = configFile.configMaven() + return configFile.configMaven() case project.Gradle: - err = configFile.configGradle() + return configFile.configGradle() case project.Terraform: - err = configFile.configTerraform() + return configFile.setResolver(false) } - return errorutils.CheckError(err) + return } func writeConfigFile(configFile *ConfigFile, destination string) (err error) { @@ -394,32 +390,8 @@ func (configFile *ConfigFile) VerifyConfigFile(configFilePath string) error { return errorutils.CheckError(os.Remove(configFilePath)) } -func (configFile *ConfigFile) configGo() error { - return configFile.setDeployerResolver() -} - -func (configFile *ConfigFile) configPip() error { - return configFile.setResolver() -} - -func (configFile *ConfigFile) configPipenv() error { - return configFile.setResolver() -} - -func (configFile *ConfigFile) configPoetry() error { - return configFile.setResolver() -} - -func (configFile *ConfigFile) configYarn() error { - return configFile.setResolver() -} - -func (configFile *ConfigFile) configNpm() error { - return configFile.setDeployerResolver() -} - func (configFile *ConfigFile) configDotnet() error { - if err := configFile.setResolver(); err != nil { + if err := configFile.setResolver(false); err != nil { return err } if configFile.Resolver.ServerId != "" { @@ -429,21 +401,10 @@ func (configFile *ConfigFile) configDotnet() error { } func (configFile *ConfigFile) configMaven() error { - // Set resolution repositories - if err := configFile.setResolverId(); err != nil { - return err - } - if configFile.Resolver.ServerId != "" { - configFile.setRepo(&configFile.Resolver.ReleaseRepo, "Set resolution repository for release dependencies", configFile.Resolver.ServerId, utils.Remote) - configFile.setRepo(&configFile.Resolver.SnapshotRepo, "Set resolution repository for snapshot dependencies", configFile.Resolver.ServerId, utils.Remote) - } - // Set deployment repositories - if err := configFile.setDeployerId(); err != nil { + if err := configFile.setDeployerResolverWithSnapshot(); err != nil { return err } if configFile.Deployer.ServerId != "" { - configFile.setRepo(&configFile.Deployer.ReleaseRepo, "Set repository for release artifacts deployment", configFile.Deployer.ServerId, utils.Local) - configFile.setRepo(&configFile.Deployer.SnapshotRepo, "Set repository for snapshot artifacts deployment", configFile.Deployer.ServerId, utils.Local) configFile.setIncludeExcludePatterns() } configFile.UseWrapper = coreutils.AskYesNo("Use Maven wrapper?", true) @@ -494,11 +455,7 @@ func (configFile *ConfigFile) readGradleGlobalConfig() { configFile.UseWrapper = coreutils.AskYesNo("Use Gradle wrapper?", true) } -func (configFile *ConfigFile) configTerraform() error { - return configFile.setDeployer() -} - -func (configFile *ConfigFile) setDeployer() error { +func (configFile *ConfigFile) setDeployer(withSnapshot bool) error { // Set deployer id if err := configFile.setDeployerId(); err != nil { return err @@ -506,28 +463,57 @@ func (configFile *ConfigFile) setDeployer() error { // Set deployment repository if configFile.Deployer.ServerId != "" { - configFile.setRepo(&configFile.Deployer.Repo, "Set repository for artifacts deployment", configFile.Deployer.ServerId, utils.Local) + deployerRepos, err := getRepositories(configFile.Deployer.ServerId, utils.Virtual, utils.Local) + if err != nil { + log.Error("failed getting repositories list: " + err.Error()) + // Continue without auto complete. + deployerRepos = []string{} + } + if withSnapshot { + configFile.setRepo(&configFile.Deployer.SnapshotRepo, "Set repository for release artifacts deployment", deployerRepos) + configFile.setRepo(&configFile.Deployer.SnapshotRepo, "Set repository for snapshot artifacts deployment", deployerRepos) + } else { + configFile.setRepo(&configFile.Deployer.Repo, "Set repository for artifacts deployment", deployerRepos) + } } return nil } -func (configFile *ConfigFile) setResolver() error { +func (configFile *ConfigFile) setResolver(withSnapshot bool) error { // Set resolver id if err := configFile.setResolverId(); err != nil { return err } // Set resolution repository if configFile.Resolver.ServerId != "" { - configFile.setRepo(&configFile.Resolver.Repo, "Set repository for dependencies resolution", configFile.Resolver.ServerId, utils.Remote) + resolverRepos, err := getRepositories(configFile.Resolver.ServerId, utils.Virtual, utils.Remote) + if err != nil { + log.Error("failed getting repositories list: " + err.Error()) + // Continue without auto complete. + resolverRepos = []string{} + } + if withSnapshot { + configFile.setRepo(&configFile.Resolver.SnapshotRepo, "Set resolution repository for release dependencies", resolverRepos) + configFile.setRepo(&configFile.Resolver.SnapshotRepo, "Set resolution repository for snapshot dependencies", resolverRepos) + } else { + configFile.setRepo(&configFile.Resolver.Repo, "Set resolution repository for dependencies resolution", resolverRepos) + } } return nil } func (configFile *ConfigFile) setDeployerResolver() error { - if err := configFile.setResolver(); err != nil { + if err := configFile.setResolver(false); err != nil { return err } - return configFile.setDeployer() + return configFile.setDeployer(false) +} + +func (configFile *ConfigFile) setDeployerResolverWithSnapshot() error { + if err := configFile.setResolver(true); err != nil { + return err + } + return configFile.setDeployer(true) } func (configFile *ConfigFile) setResolverId() error { @@ -544,9 +530,13 @@ func (configFile *ConfigFile) setServerId(serverId *string, useArtifactoryQuesti return err } -func (configFile *ConfigFile) setRepo(repo *string, message string, serverId string, repoType utils.RepoType) { +func (configFile *ConfigFile) setRepo(repo *string, promptPrefix string, availableRepos []string) { if *repo == "" { - *repo = readRepo(message+ioutils.PressTabMsg, serverId, repoType, utils.Virtual) + if len(availableRepos) > 0 { + *repo = ioutils.AskFromListWithMismatchConfirmation(promptPrefix, "Repository not found.", ioutils.ConvertToSuggests(availableRepos)) + } else { + *repo = ioutils.AskString("", promptPrefix, false, false) + } } } @@ -635,19 +625,6 @@ func readArtifactoryServer(useArtifactoryQuestion string) (string, error) { return ioutils.AskFromList("", "Set Artifactory server ID", false, ioutils.ConvertToSuggests(serversIds), defaultServer), nil } -func readRepo(promptPrefix string, serverId string, repoTypes ...utils.RepoType) string { - availableRepos, err := getRepositories(serverId, repoTypes...) - if err != nil { - log.Error("failed getting repositories list: " + err.Error()) - // Continue without auto complete. - availableRepos = []string{} - } - if len(availableRepos) > 0 { - return ioutils.AskFromListWithMismatchConfirmation(promptPrefix, "Repository not found.", ioutils.ConvertToSuggests(availableRepos)) - } - return ioutils.AskString("", promptPrefix, false, false) -} - func getServersIdAndDefault() ([]string, string, error) { allConfigs, err := config.GetAllServersConfigs() if err != nil { From 0ba95cf60956367f7980b3b4df48f84e1ec55200 Mon Sep 17 00:00:00 2001 From: Yahav Itzhak Date: Sun, 18 Feb 2024 10:48:34 +0200 Subject: [PATCH 05/10] Fix panic in build-scan without arguments (#1130) --- plugins/common/config.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/plugins/common/config.go b/plugins/common/config.go index 8e22a2f3e..a906321ab 100644 --- a/plugins/common/config.go +++ b/plugins/common/config.go @@ -14,10 +14,9 @@ import ( // Any empty configuration could be later overridden by environment variables if set. func CreateBuildConfiguration(c *components.Context) *build.BuildConfiguration { buildConfiguration := new(build.BuildConfiguration) - buildNameArg, buildNumberArg := c.Arguments[0], c.Arguments[1] - if buildNameArg == "" || buildNumberArg == "" { - buildNameArg = "" - buildNumberArg = "" + var buildNameArg, buildNumberArg string + if len(c.Arguments) > 1 && c.Arguments[0] != "" && c.Arguments[1] != "" { + buildNameArg, buildNumberArg = c.Arguments[0], c.Arguments[1] } buildConfiguration.SetBuildName(buildNameArg).SetBuildNumber(buildNumberArg).SetProject(c.GetStringFlagValue("project")).SetModule(c.GetStringFlagValue("module")) return buildConfiguration From d03c56e954c32e33917dc1e11051552c7715588b Mon Sep 17 00:00:00 2001 From: Michael Sverdlov Date: Sun, 18 Feb 2024 12:03:17 +0200 Subject: [PATCH 06/10] Add Terraform/Cargo repository creation commands (#1111) --- .github/workflows/test.yml | 2 +- artifactory/commands/repository/repository.go | 153 +++++++++++++++--- artifactory/commands/repository/template.go | 2 + go.mod | 2 +- go.sum | 4 +- 5 files changed, 134 insertions(+), 29 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4f356231f..a3026f842 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,7 +21,7 @@ jobs: - uses: actions/checkout@v4 - name: Setup Python3 - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: "3.x" diff --git a/artifactory/commands/repository/repository.go b/artifactory/commands/repository/repository.go index e8ba2cf7f..05e407872 100644 --- a/artifactory/commands/repository/repository.go +++ b/artifactory/commands/repository/repository.go @@ -239,6 +239,8 @@ var localRepoHandlers = map[string]repoHandler{ Alpine: localAlpineHandler, Generic: localGenericHandler, Swift: localSwiftHandler, + Terraform: localTerraformHandler, + Cargo: localCargoHandler, } func localMavenHandler(servicesManager artifactory.ArtifactoryServicesManager, jsonConfig []byte, isUpdate bool) error { @@ -620,6 +622,36 @@ func localSwiftHandler(servicesManager artifactory.ArtifactoryServicesManager, j return err } +func localTerraformHandler(servicesManager artifactory.ArtifactoryServicesManager, jsonConfig []byte, isUpdate bool) error { + params := services.NewTerraformLocalRepositoryParams() + err := json.Unmarshal(jsonConfig, ¶ms) + if errorutils.CheckError(err) != nil { + return err + } + + if isUpdate { + err = servicesManager.UpdateLocalRepository().Terraform(params) + } else { + err = servicesManager.CreateLocalRepository().Terraform(params) + } + return err +} + +func localCargoHandler(servicesManager artifactory.ArtifactoryServicesManager, jsonConfig []byte, isUpdate bool) error { + params := services.NewCargoLocalRepositoryParams() + err := json.Unmarshal(jsonConfig, ¶ms) + if errorutils.CheckError(err) != nil { + return err + } + + if isUpdate { + err = servicesManager.UpdateLocalRepository().Cargo(params) + } else { + err = servicesManager.CreateLocalRepository().Cargo(params) + } + return err +} + func localGenericHandler(servicesManager artifactory.ArtifactoryServicesManager, jsonConfig []byte, isUpdate bool) error { params := services.NewGenericLocalRepositoryParams() err := json.Unmarshal(jsonConfig, ¶ms) @@ -665,6 +697,8 @@ var remoteRepoHandlers = map[string]repoHandler{ Alpine: remoteAlpineHandler, Generic: remoteGenericHandler, Swift: remoteSwiftHandler, + Terraform: remoteTerraformHandler, + Cargo: remoteCargoHandler, } func remoteMavenHandler(servicesManager artifactory.ArtifactoryServicesManager, jsonConfig []byte, isUpdate bool) error { @@ -1059,6 +1093,34 @@ func remoteSwiftHandler(servicesManager artifactory.ArtifactoryServicesManager, return err } +func remoteCargoHandler(servicesManager artifactory.ArtifactoryServicesManager, jsonConfig []byte, isUpdate bool) error { + params := services.NewCargoRemoteRepositoryParams() + err := json.Unmarshal(jsonConfig, ¶ms) + if errorutils.CheckError(err) != nil { + return err + } + if isUpdate { + err = servicesManager.UpdateRemoteRepository().Cargo(params) + } else { + err = servicesManager.CreateRemoteRepository().Cargo(params) + } + return err +} + +func remoteTerraformHandler(servicesManager artifactory.ArtifactoryServicesManager, jsonConfig []byte, isUpdate bool) error { + params := services.NewTerraformRemoteRepositoryParams() + err := json.Unmarshal(jsonConfig, ¶ms) + if errorutils.CheckError(err) != nil { + return err + } + if isUpdate { + err = servicesManager.UpdateRemoteRepository().Terraform(params) + } else { + err = servicesManager.CreateRemoteRepository().Terraform(params) + } + return err +} + func remoteGenericHandler(servicesManager artifactory.ArtifactoryServicesManager, jsonConfig []byte, isUpdate bool) error { params := services.NewGenericRemoteRepositoryParams() err := json.Unmarshal(jsonConfig, ¶ms) @@ -1102,6 +1164,8 @@ var federatedRepoHandlers = map[string]repoHandler{ Generic: federatedGenericHandler, Yum: federatedYumHandler, Swift: federatedSwiftHandler, + Terraform: federatedTerraformHandler, + Cargo: federatedCargoHandler, } func federatedMavenHandler(servicesManager artifactory.ArtifactoryServicesManager, jsonConfig []byte, isUpdate bool) error { @@ -1430,6 +1494,30 @@ func federatedSwiftHandler(servicesManager artifactory.ArtifactoryServicesManage return servicesManager.CreateFederatedRepository().Swift(params) } +func federatedTerraformHandler(servicesManager artifactory.ArtifactoryServicesManager, jsonConfig []byte, isUpdate bool) error { + params := services.NewTerraformFederatedRepositoryParams() + err := json.Unmarshal(jsonConfig, ¶ms) + if errorutils.CheckError(err) != nil { + return err + } + if isUpdate { + return servicesManager.UpdateFederatedRepository().Terraform(params) + } + return servicesManager.CreateFederatedRepository().Terraform(params) +} + +func federatedCargoHandler(servicesManager artifactory.ArtifactoryServicesManager, jsonConfig []byte, isUpdate bool) error { + params := services.NewCargoFederatedRepositoryParams() + err := json.Unmarshal(jsonConfig, ¶ms) + if errorutils.CheckError(err) != nil { + return err + } + if isUpdate { + return servicesManager.UpdateFederatedRepository().Cargo(params) + } + return servicesManager.CreateFederatedRepository().Cargo(params) +} + func federatedYumHandler(servicesManager artifactory.ArtifactoryServicesManager, jsonConfig []byte, isUpdate bool) error { params := services.NewYumFederatedRepositoryParams() err := json.Unmarshal(jsonConfig, ¶ms) @@ -1443,31 +1531,32 @@ func federatedYumHandler(servicesManager artifactory.ArtifactoryServicesManager, } var virtualRepoHandlers = map[string]repoHandler{ - Maven: virtualMavenHandler, - Gradle: virtualGradleHandler, - Ivy: virtualIvyHandler, - Sbt: virtualSbtHandler, - Helm: virtualHelmHandler, - Rpm: virtualRpmHandler, - Nuget: virtualNugetHandler, - Cran: virtualCranHandler, - Gems: virtualGemsHandler, - Npm: virtualNpmHandler, - Bower: virtualBowerHandler, - Debian: virtualDebianHandler, - Pypi: virtualPypiHandler, - Docker: virtualDockerHandler, - Gitlfs: virtualGitLfsHandler, - Go: virtualGoHandler, - Yum: virtualYumHandler, - Conan: virtualConanHandler, - Chef: virtualChefHandler, - Puppet: virtualPuppetHandler, - Conda: virtualCondaHandler, - P2: virtualP2Handler, - Alpine: virtualAlpineHandler, - Generic: virtualGenericHandler, - Swift: virtualSwiftHandler, + Maven: virtualMavenHandler, + Gradle: virtualGradleHandler, + Ivy: virtualIvyHandler, + Sbt: virtualSbtHandler, + Helm: virtualHelmHandler, + Rpm: virtualRpmHandler, + Nuget: virtualNugetHandler, + Cran: virtualCranHandler, + Gems: virtualGemsHandler, + Npm: virtualNpmHandler, + Bower: virtualBowerHandler, + Debian: virtualDebianHandler, + Pypi: virtualPypiHandler, + Docker: virtualDockerHandler, + Gitlfs: virtualGitLfsHandler, + Go: virtualGoHandler, + Yum: virtualYumHandler, + Conan: virtualConanHandler, + Chef: virtualChefHandler, + Puppet: virtualPuppetHandler, + Conda: virtualCondaHandler, + P2: virtualP2Handler, + Alpine: virtualAlpineHandler, + Generic: virtualGenericHandler, + Swift: virtualSwiftHandler, + Terraform: virtualTerraformHandler, } func virtualMavenHandler(servicesManager artifactory.ArtifactoryServicesManager, jsonConfig []byte, isUpdate bool) error { @@ -1806,6 +1895,20 @@ func virtualSwiftHandler(servicesManager artifactory.ArtifactoryServicesManager, return err } +func virtualTerraformHandler(servicesManager artifactory.ArtifactoryServicesManager, jsonConfig []byte, isUpdate bool) error { + params := services.NewTerraformVirtualRepositoryParams() + err := json.Unmarshal(jsonConfig, ¶ms) + if errorutils.CheckError(err) != nil { + return err + } + if isUpdate { + err = servicesManager.UpdateVirtualRepository().Terraform(params) + } else { + err = servicesManager.CreateVirtualRepository().Terraform(params) + } + return err +} + func virtualGenericHandler(servicesManager artifactory.ArtifactoryServicesManager, jsonConfig []byte, isUpdate bool) error { params := services.NewGenericVirtualRepositoryParams() err := json.Unmarshal(jsonConfig, ¶ms) diff --git a/artifactory/commands/repository/template.go b/artifactory/commands/repository/template.go index 435df31b0..f046b1041 100644 --- a/artifactory/commands/repository/template.go +++ b/artifactory/commands/repository/template.go @@ -159,6 +159,8 @@ const ( Conda = "conda" P2 = "p2" Swift = "swift" + Terraform = "terraform" + Cargo = "cargo" // Repo layout Refs BowerDefaultRepoLayout = "bower-default" diff --git a/go.mod b/go.mod index 3d86d8c15..b2faee7a3 100644 --- a/go.mod +++ b/go.mod @@ -96,7 +96,7 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect ) -replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.28.1-0.20240214141548-6691c4323f52 +replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.28.1-0.20240218093454-1c352a93c23d // replace github.com/jfrog/build-info-go => github.com/jfrog/build-info-go v1.8.9-0.20231220102935-c8776c613ad8 diff --git a/go.sum b/go.sum index 3f9260691..2f8bea419 100644 --- a/go.sum +++ b/go.sum @@ -87,8 +87,8 @@ github.com/jfrog/build-info-go v1.9.21 h1:bcD0SEC2lEilhjE+aDB3xlvA8zsr4Kw/bFzvr9 github.com/jfrog/build-info-go v1.9.21/go.mod h1:Vxv6zmx4e1NWsx40OHaDWCCYDeYAq2yXzpJ4nsDChbE= github.com/jfrog/gofrog v1.6.0 h1:jOwb37nHY2PnxePNFJ6e6279Pgkr3di05SbQQw47Mq8= github.com/jfrog/gofrog v1.6.0/go.mod h1:SZ1EPJUruxrVGndOzHd+LTiwWYKMlHqhKD+eu+v5Hqg= -github.com/jfrog/jfrog-client-go v1.28.1-0.20240214141548-6691c4323f52 h1:eDwEWEKfz9gigNJNF60ioZFG3R/33Qq2z+5lH/FfO9Q= -github.com/jfrog/jfrog-client-go v1.28.1-0.20240214141548-6691c4323f52/go.mod h1:fV5wrs86ihQkFKfMKpGxMbNf3mbVT4LUf320C1T9C2M= +github.com/jfrog/jfrog-client-go v1.28.1-0.20240218093454-1c352a93c23d h1:59C2AOjdp5Wp/WoeQZkOGbAtKnhY1a9YhrnAdeVbVYs= +github.com/jfrog/jfrog-client-go v1.28.1-0.20240218093454-1c352a93c23d/go.mod h1:fV5wrs86ihQkFKfMKpGxMbNf3mbVT4LUf320C1T9C2M= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= From cc5c8b52169582b5fca748f750c931d0ad97845a Mon Sep 17 00:00:00 2001 From: Assaf Attias <49212512+attiasas@users.noreply.github.com> Date: Sun, 18 Feb 2024 13:50:31 +0200 Subject: [PATCH 07/10] Add Pnpm as project type for config (#1132) --- common/project/projectconfig.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common/project/projectconfig.go b/common/project/projectconfig.go index 89bc25309..19422aea6 100644 --- a/common/project/projectconfig.go +++ b/common/project/projectconfig.go @@ -31,6 +31,7 @@ const ( Pipenv Poetry Npm + Pnpm Yarn Nuget Maven @@ -53,6 +54,7 @@ var ProjectTypes = []string{ "pipenv", "poetry", "npm", + "pnpm", "yarn", "nuget", "maven", From 97305051f20354103293af82eeae7f2ba717439c Mon Sep 17 00:00:00 2001 From: Eran Turgeman <81029514+eranturgeman@users.noreply.github.com> Date: Sun, 18 Feb 2024 14:57:54 +0200 Subject: [PATCH 08/10] Moved Golang remote registry setting logic from security-cli to cli-core (#1128) --- artifactory/commands/golang/go.go | 18 ++++++++++++++++++ artifactory/commands/golang/go_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/artifactory/commands/golang/go.go b/artifactory/commands/golang/go.go index 87627aa31..b6950c50a 100644 --- a/artifactory/commands/golang/go.go +++ b/artifactory/commands/golang/go.go @@ -18,6 +18,7 @@ import ( "github.com/jfrog/jfrog-client-go/utils/io/fileutils" "github.com/jfrog/jfrog-client-go/utils/log" "net/http" + "os" "path" "path/filepath" "strings" @@ -328,3 +329,20 @@ func buildPackageVersionRequest(name, branchName string) string { // No version was given to "go get" command, so the latest version should be requested return path.Join(packageVersionRequest, "latest.info") } + +func SetArtifactoryAsResolutionServer(serverDetails *config.ServerDetails, depsRepo string) (err error) { + err = setGoProxy(serverDetails, depsRepo) + if err != nil { + err = fmt.Errorf("failed while setting Artifactory as a dependencies resolution registry: %s", err.Error()) + } + return +} + +func setGoProxy(server *config.ServerDetails, remoteGoRepo string) error { + repoUrl, err := goutils.GetArtifactoryRemoteRepoUrl(server, remoteGoRepo) + if err != nil { + return err + } + repoUrl += "|direct" + return os.Setenv("GOPROXY", repoUrl) +} diff --git a/artifactory/commands/golang/go_test.go b/artifactory/commands/golang/go_test.go index 974808889..ed899aad3 100644 --- a/artifactory/commands/golang/go_test.go +++ b/artifactory/commands/golang/go_test.go @@ -1,11 +1,14 @@ package golang import ( + "fmt" + "github.com/jfrog/jfrog-cli-core/v2/utils/config" goutils "github.com/jfrog/jfrog-cli-core/v2/utils/golang" testsutils "github.com/jfrog/jfrog-client-go/utils/tests" "github.com/stretchr/testify/assert" "os" "path/filepath" + "strings" "testing" ) @@ -42,3 +45,24 @@ func TestGetPackageFilesPath(t *testing.T) { assert.NoError(t, err) assert.Equal(t, expectedPackagePath, actualPackagePath) } + +func TestSetArtifactoryAsResolutionServer(t *testing.T) { + server := &config.ServerDetails{ + Url: "http://localhost:8080/", + ArtifactoryUrl: "http://localhost:8080/artifactory/", + User: "myUser", + Password: "myPassword", + ServerId: "myServer", + } + repo := "myRepo" + + // Setting the GOPROXY value to "" to ensure that the new value set in SetArtifactoryAsResolutionServer is correctly validated. + cleanup := testsutils.SetEnvWithCallbackAndAssert(t, "GOPROXY", "") + defer cleanup() + + assert.NoError(t, SetArtifactoryAsResolutionServer(server, repo)) + + serverUrlWithoutHttp := strings.TrimPrefix(server.ArtifactoryUrl, "http://") + expectedGoProxy := fmt.Sprintf("http://%s:%s@%sapi/go/%s|direct", server.User, server.Password, serverUrlWithoutHttp, repo) + assert.Equal(t, expectedGoProxy, os.Getenv("GOPROXY")) +} From a2e0f577fb5fb424a231af6e61f1b6827f82fc26 Mon Sep 17 00:00:00 2001 From: Yahav Itzhak Date: Tue, 20 Feb 2024 18:07:08 +0200 Subject: [PATCH 09/10] Update build-info-go and jfrog-client-go dependencies (#1133) --- go.mod | 8 ++++---- go.sum | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/go.mod b/go.mod index b2faee7a3..9110b805e 100644 --- a/go.mod +++ b/go.mod @@ -12,9 +12,9 @@ require ( github.com/google/uuid v1.6.0 github.com/gookit/color v1.5.4 github.com/jedib0t/go-pretty/v6 v6.5.4 - github.com/jfrog/build-info-go v1.9.21 + github.com/jfrog/build-info-go v1.9.22 github.com/jfrog/gofrog v1.6.0 - github.com/jfrog/jfrog-client-go v1.36.0 + github.com/jfrog/jfrog-client-go v1.37.0 github.com/magiconair/properties v1.8.7 github.com/manifoldco/promptui v0.9.0 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c @@ -33,7 +33,7 @@ require ( require ( dario.cat/mergo v1.0.0 // indirect github.com/BurntSushi/toml v1.3.2 // indirect - github.com/CycloneDX/cyclonedx-go v0.7.2 // indirect + github.com/CycloneDX/cyclonedx-go v0.8.0 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/ProtonMail/go-crypto v1.0.0 // indirect github.com/VividCortex/ewma v1.2.0 // indirect @@ -96,7 +96,7 @@ require ( gopkg.in/warnings.v0 v0.1.2 // indirect ) -replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.28.1-0.20240218093454-1c352a93c23d +// replace github.com/jfrog/jfrog-client-go => github.com/jfrog/jfrog-client-go v1.28.1-0.20240218093454-1c352a93c23d // replace github.com/jfrog/build-info-go => github.com/jfrog/build-info-go v1.8.9-0.20231220102935-c8776c613ad8 diff --git a/go.sum b/go.sum index 2f8bea419..d6555e914 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,8 @@ dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/CycloneDX/cyclonedx-go v0.7.2 h1:kKQ0t1dPOlugSIYVOMiMtFqeXI2wp/f5DBIdfux8gnQ= -github.com/CycloneDX/cyclonedx-go v0.7.2/go.mod h1:K2bA+324+Og0X84fA8HhN2X066K7Bxz4rpMQ4ZhjtSk= +github.com/CycloneDX/cyclonedx-go v0.8.0 h1:FyWVj6x6hoJrui5uRQdYZcSievw3Z32Z88uYzG/0D6M= +github.com/CycloneDX/cyclonedx-go v0.8.0/go.mod h1:K2bA+324+Og0X84fA8HhN2X066K7Bxz4rpMQ4ZhjtSk= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= @@ -83,12 +83,12 @@ github.com/jedib0t/go-pretty/v6 v6.5.4 h1:gOGo0613MoqUcf0xCj+h/V3sHDaZasfv152G6/ github.com/jedib0t/go-pretty/v6 v6.5.4/go.mod h1:5LQIxa52oJ/DlDSLv0HEkWOFMDGoWkJb9ss5KqPpJBg= github.com/jfrog/archiver/v3 v3.6.0 h1:OVZ50vudkIQmKMgA8mmFF9S0gA47lcag22N13iV3F1w= github.com/jfrog/archiver/v3 v3.6.0/go.mod h1:fCAof46C3rAXgZurS8kNRNdSVMKBbZs+bNNhPYxLldI= -github.com/jfrog/build-info-go v1.9.21 h1:bcD0SEC2lEilhjE+aDB3xlvA8zsr4Kw/bFzvr9Tcj9I= -github.com/jfrog/build-info-go v1.9.21/go.mod h1:Vxv6zmx4e1NWsx40OHaDWCCYDeYAq2yXzpJ4nsDChbE= +github.com/jfrog/build-info-go v1.9.22 h1:+RPM8OJvgBvOo+PYPnVYkg+S3hl1JlyCJn/aGxLqRMI= +github.com/jfrog/build-info-go v1.9.22/go.mod h1:QHcKuesY4MrBVBuEwwBz4uIsX6mwYuMEDV09ng4AvAU= github.com/jfrog/gofrog v1.6.0 h1:jOwb37nHY2PnxePNFJ6e6279Pgkr3di05SbQQw47Mq8= github.com/jfrog/gofrog v1.6.0/go.mod h1:SZ1EPJUruxrVGndOzHd+LTiwWYKMlHqhKD+eu+v5Hqg= -github.com/jfrog/jfrog-client-go v1.28.1-0.20240218093454-1c352a93c23d h1:59C2AOjdp5Wp/WoeQZkOGbAtKnhY1a9YhrnAdeVbVYs= -github.com/jfrog/jfrog-client-go v1.28.1-0.20240218093454-1c352a93c23d/go.mod h1:fV5wrs86ihQkFKfMKpGxMbNf3mbVT4LUf320C1T9C2M= +github.com/jfrog/jfrog-client-go v1.37.0 h1:ULHMGfST0ONH8Ur4dkfMMVsuvxLWBHral7Y1Oi7ub0k= +github.com/jfrog/jfrog-client-go v1.37.0/go.mod h1:kLlNc4BLpYtH2I0hHB5AcIwx6mEw1gQg65amvrY2DHM= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= From 3f31e60b3ebb3b0bd0827d52ed0eb5504a186e7d Mon Sep 17 00:00:00 2001 From: Yahav Itzhak Date: Wed, 21 Feb 2024 16:30:37 +0200 Subject: [PATCH 10/10] Upgrade jfrog-cli-core to 2.48.1 (#1134) --- go.mod | 4 ++-- go.sum | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 9110b805e..8811b05be 100644 --- a/go.mod +++ b/go.mod @@ -12,9 +12,9 @@ require ( github.com/google/uuid v1.6.0 github.com/gookit/color v1.5.4 github.com/jedib0t/go-pretty/v6 v6.5.4 - github.com/jfrog/build-info-go v1.9.22 + github.com/jfrog/build-info-go v1.9.23 github.com/jfrog/gofrog v1.6.0 - github.com/jfrog/jfrog-client-go v1.37.0 + github.com/jfrog/jfrog-client-go v1.37.1 github.com/magiconair/properties v1.8.7 github.com/manifoldco/promptui v0.9.0 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c diff --git a/go.sum b/go.sum index d6555e914..eab543fab 100644 --- a/go.sum +++ b/go.sum @@ -83,12 +83,12 @@ github.com/jedib0t/go-pretty/v6 v6.5.4 h1:gOGo0613MoqUcf0xCj+h/V3sHDaZasfv152G6/ github.com/jedib0t/go-pretty/v6 v6.5.4/go.mod h1:5LQIxa52oJ/DlDSLv0HEkWOFMDGoWkJb9ss5KqPpJBg= github.com/jfrog/archiver/v3 v3.6.0 h1:OVZ50vudkIQmKMgA8mmFF9S0gA47lcag22N13iV3F1w= github.com/jfrog/archiver/v3 v3.6.0/go.mod h1:fCAof46C3rAXgZurS8kNRNdSVMKBbZs+bNNhPYxLldI= -github.com/jfrog/build-info-go v1.9.22 h1:+RPM8OJvgBvOo+PYPnVYkg+S3hl1JlyCJn/aGxLqRMI= -github.com/jfrog/build-info-go v1.9.22/go.mod h1:QHcKuesY4MrBVBuEwwBz4uIsX6mwYuMEDV09ng4AvAU= +github.com/jfrog/build-info-go v1.9.23 h1:+TwUIBEJwRvz9skR8xBfY5ti8Vl4Z6iMCkFbkclnEN0= +github.com/jfrog/build-info-go v1.9.23/go.mod h1:QHcKuesY4MrBVBuEwwBz4uIsX6mwYuMEDV09ng4AvAU= github.com/jfrog/gofrog v1.6.0 h1:jOwb37nHY2PnxePNFJ6e6279Pgkr3di05SbQQw47Mq8= github.com/jfrog/gofrog v1.6.0/go.mod h1:SZ1EPJUruxrVGndOzHd+LTiwWYKMlHqhKD+eu+v5Hqg= -github.com/jfrog/jfrog-client-go v1.37.0 h1:ULHMGfST0ONH8Ur4dkfMMVsuvxLWBHral7Y1Oi7ub0k= -github.com/jfrog/jfrog-client-go v1.37.0/go.mod h1:kLlNc4BLpYtH2I0hHB5AcIwx6mEw1gQg65amvrY2DHM= +github.com/jfrog/jfrog-client-go v1.37.1 h1:BqIWGPajC5vhUo5dcQ9KEJr0EVANr/O4cfEqRYvzvRg= +github.com/jfrog/jfrog-client-go v1.37.1/go.mod h1:y+zeO0LeT2uHoHs4/fXHrm5dfF02bg6Dw3cNJxgJ5LY= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=