From 9183a07ac9d7389a2821a71fa521ff99e81b2927 Mon Sep 17 00:00:00 2001 From: Mark Boyd Date: Tue, 17 Dec 2024 17:02:58 -0500 Subject: [PATCH 1/6] fix path in test --- out/out_suite_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/out/out_suite_test.go b/out/out_suite_test.go index dc41730..08ebccf 100644 --- a/out/out_suite_test.go +++ b/out/out_suite_test.go @@ -23,7 +23,7 @@ var _ = BeforeSuite(func() { if _, err = os.Stat("/opt/resource/out"); err == nil { binPath = "/opt/resource/out" } else { - binPath, err = gexec.Build("github.com/concourse/cf-resource/out/cmd/out") + binPath, err = gexec.Build("github.com/cloud-gov/cf-resource/out/cmd/out") Expect(err).NotTo(HaveOccurred()) } }) From 39cec7a4cda07c2e522f2c4d5c08aca706ff0a8b Mon Sep 17 00:00:00 2001 From: Mark Boyd Date: Tue, 17 Dec 2024 17:19:15 -0500 Subject: [PATCH 2/6] update go.mod files --- go.mod | 13 ++++++++----- go.sum | 36 ++++++++++++++++++------------------ 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/go.mod b/go.mod index b9a88de..f38466a 100644 --- a/go.mod +++ b/go.mod @@ -1,10 +1,12 @@ module github.com/cloud-gov/cf-resource -go 1.22 +go 1.23 + +toolchain go1.23.4 require ( github.com/onsi/ginkgo v1.16.5 - github.com/onsi/gomega v1.33.1 + github.com/onsi/gomega v1.34.2 gopkg.in/yaml.v2 v2.4.0 ) @@ -12,9 +14,10 @@ require ( github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/nxadm/tail v1.4.11 // indirect - golang.org/x/net v0.26.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/text v0.16.0 // indirect + golang.org/x/net v0.30.0 // indirect + golang.org/x/sys v0.26.0 // indirect + golang.org/x/text v0.19.0 // indirect + golang.org/x/tools v0.26.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 954351a..7984644 100644 --- a/go.sum +++ b/go.sum @@ -5,8 +5,8 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= +github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= @@ -23,8 +23,8 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 h1:k7nVchz72niMH6YLQNvHSdIE7iqsQxK1P41mySCvssg= -github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= +github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5 h1:5iH8iuqE5apketRbSFBy+X1V0o+l+8NF1avt4HWl7cA= +github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -39,12 +39,12 @@ github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.17.2 h1:7eMhcy3GimbsA3hEnVKdw/PQM9XN9krpKVXsZdph0/g= -github.com/onsi/ginkgo/v2 v2.17.2/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc= +github.com/onsi/ginkgo/v2 v2.20.1 h1:YlVIbqct+ZmnEph770q9Q7NVAz4wwIiVNahee6JyUzo= +github.com/onsi/ginkgo/v2 v2.20.1/go.mod h1:lG9ey2Z29hR41WMVthyJBGUBcBhGOtoPF2VFMvBXFCI= 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.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= -github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= +github.com/onsi/gomega v1.34.2 h1:pNCwDkzrsv7MS9kpaQvVb1aVLahQXyJ/Tv5oAZMI3i8= +github.com/onsi/gomega v1.34.2/go.mod h1:v1xfxRgk0KIsG+QOdm7p8UosrOzPYRo60fd3B/1Dukc= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= @@ -58,8 +58,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn 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.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= +golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/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= @@ -73,17 +73,17 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= 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.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= +golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 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.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= -golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= +golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= 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= @@ -94,8 +94,8 @@ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQ 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.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= From d485bc17b1ffe56d11546cdfdc6f06544e4343b7 Mon Sep 17 00:00:00 2001 From: Mark Boyd Date: Tue, 17 Dec 2024 17:19:32 -0500 Subject: [PATCH 3/6] add docs to README on re-generating test fakes --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b1eb8ae..c0bab02 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,7 @@ be specified. * `docker_password`: *Optional.* This should be the users password when authenticating against a protected docker registry. * `show_app_log`: *Optional.* Tails the app log during startup, useful to debug issues when using blue/green deploys together with the `current_app_name` option. * `no_start`: *Optional.* Deploys the app but does not start it. This parameter is ignored when `current_app_name` is specified. +* `tasks`: *Optional.* Stages the app but does not start it or give it a route. This parameter is ignored when `current_app_name` is specified. ## Pipeline example @@ -101,10 +102,17 @@ will stop the build. Run the tests with the following commands for both `alpine` and `ubuntu` images: ```sh -docker build -t cf-resource -f dockerfiles/alpine/Dockerfile . docker build -t cf-resource -f dockerfiles/ubuntu/Dockerfile . ``` +### Regenerate test fakes + +```shell +go install github.com/maxbrunsfeld/counterfeiter/v6 +cd out +go run github.com/maxbrunsfeld/counterfeiter/v6 . PAAS +``` + ### Contributing Please make all pull requests to the `main` branch and ensure tests pass locally. From c699f4a26e285c18149c1514e29cd2cab52cf596 Mon Sep 17 00:00:00 2001 From: Mark Boyd Date: Tue, 17 Dec 2024 17:19:44 -0500 Subject: [PATCH 4/6] add support for --task flag on push --- out/cloud_foundry.go | 12 +- out/command.go | 1 + out/command_test.go | 9 +- out/models.go | 1 + out/outfakes/fake_paas.go | 259 ++++++++++++++++++++++---------------- 5 files changed, 166 insertions(+), 116 deletions(-) diff --git a/out/cloud_foundry.go b/out/cloud_foundry.go index 123567f..dc9bfa0 100644 --- a/out/cloud_foundry.go +++ b/out/cloud_foundry.go @@ -12,7 +12,7 @@ import ( type PAAS interface { Login(api string, username string, password string, clientID string, clientSecret string, insecure bool) error Target(organization string, space string) error - PushApp(manifest string, path string, currentAppName string, vars map[string]interface{}, varsFiles []string, dockerUser string, showLogs bool, noStart bool) error + PushApp(manifest string, path string, currentAppName string, vars map[string]interface{}, varsFiles []string, dockerUser string, showLogs bool, noStart bool, task bool) error } type CloudFoundry struct { @@ -53,15 +53,16 @@ func (cf *CloudFoundry) PushApp( dockerUser string, showLogs bool, noStart bool, + task bool, ) error { if zdt.CanPush(cf.cf, currentAppName) { pushFunction := func() error { - return cf.simplePush(manifest, path, currentAppName, vars, varsFiles, dockerUser, noStart) + return cf.simplePush(manifest, path, currentAppName, vars, varsFiles, dockerUser, noStart, task) } return zdt.Push(cf.cf, currentAppName, pushFunction, showLogs) } else { - return cf.simplePush(manifest, path, currentAppName, vars, varsFiles, dockerUser, noStart) + return cf.simplePush(manifest, path, currentAppName, vars, varsFiles, dockerUser, noStart, task) } } @@ -73,6 +74,7 @@ func (cf *CloudFoundry) simplePush( varsFiles []string, dockerUser string, noStart bool, + task bool, ) error { args := []string{"push"} @@ -87,6 +89,10 @@ func (cf *CloudFoundry) simplePush( args = append(args, "--no-start") } + if task { + args = append(args, "--task") + } + for name, value := range vars { args = append(args, "--var", fmt.Sprintf("%s=%s", name, value)) } diff --git a/out/command.go b/out/command.go index 8c5e42d..2ef9fc0 100644 --- a/out/command.go +++ b/out/command.go @@ -58,6 +58,7 @@ func (command *Command) Run(request Request) (Response, error) { request.Params.DockerUsername, request.Params.ShowAppLog, request.Params.NoStart, + request.Params.Task, ) if err != nil { return Response{}, err diff --git a/out/command_test.go b/out/command_test.go index e9ae024..af79650 100644 --- a/out/command_test.go +++ b/out/command_test.go @@ -83,7 +83,7 @@ var _ = Describe("Out Command", func() { By("pushing the app") Expect(cloudFoundry.PushAppCallCount()).To(Equal(1)) - manifest, path, currentAppName, vars, varsFiles, dockerUser, showAppLog, noStart := cloudFoundry.PushAppArgsForCall(0) + manifest, path, currentAppName, vars, varsFiles, dockerUser, showAppLog, noStart, task := cloudFoundry.PushAppArgsForCall(0) Expect(manifest).To(Equal(request.Params.ManifestPath)) Expect(path).To(Equal("")) Expect(currentAppName).To(Equal("")) @@ -92,6 +92,7 @@ var _ = Describe("Out Command", func() { Expect(dockerUser).To(Equal("")) Expect(showAppLog).To(Equal(false)) Expect(noStart).To(Equal(false)) + Expect(task).To(Equal(false)) }) Describe("handling any errors", func() { @@ -133,7 +134,7 @@ var _ = Describe("Out Command", func() { _, err := command.Run(request) Expect(err).NotTo(HaveOccurred()) - _, _, _, _, _, _, _, noStart := cloudFoundry.PushAppArgsForCall(0) + _, _, _, _, _, _, _, noStart, _ := cloudFoundry.PushAppArgsForCall(0) Expect(noStart).To(Equal(true)) }) }) @@ -276,7 +277,7 @@ var _ = Describe("Out Command", func() { By("pushing the app") Expect(cloudFoundry.PushAppCallCount()).To(Equal(1)) - _, _, currentAppName, _, _, _, _, _ := cloudFoundry.PushAppArgsForCall(0) + _, _, currentAppName, _, _, _, _, _, _ := cloudFoundry.PushAppArgsForCall(0) Expect(currentAppName).To(Equal("cool-app-name")) }) @@ -302,7 +303,7 @@ var _ = Describe("Out Command", func() { By("pushing the app") Expect(cloudFoundry.PushAppCallCount()).To(Equal(1)) - _, _, _, _, _, dockerUser, _, _ := cloudFoundry.PushAppArgsForCall(0) + _, _, _, _, _, dockerUser, _, _, _ := cloudFoundry.PushAppArgsForCall(0) Expect(dockerUser).To(Equal("DOCKER_USER")) }) diff --git a/out/models.go b/out/models.go index cf6b01f..d4368cf 100644 --- a/out/models.go +++ b/out/models.go @@ -18,6 +18,7 @@ type Params struct { DockerPassword string `json:"docker_password"` ShowAppLog bool `json:"show_app_log"` NoStart bool `json:"no_start"` + Task bool `json:"task"` } type Response struct { diff --git a/out/outfakes/fake_paas.go b/out/outfakes/fake_paas.go index 4433893..935de04 100644 --- a/out/outfakes/fake_paas.go +++ b/out/outfakes/fake_paas.go @@ -8,15 +8,15 @@ import ( ) type FakePAAS struct { - LoginStub func(api string, username string, password string, clientID string, clientSecret string, insecure bool) error + LoginStub func(string, string, string, string, string, bool) error loginMutex sync.RWMutex loginArgsForCall []struct { - api string - username string - password string - clientID string - clientSecret string - insecure bool + arg1 string + arg2 string + arg3 string + arg4 string + arg5 string + arg6 bool } loginReturns struct { result1 error @@ -24,60 +24,63 @@ type FakePAAS struct { loginReturnsOnCall map[int]struct { result1 error } - TargetStub func(organization string, space string) error - targetMutex sync.RWMutex - targetArgsForCall []struct { - organization string - space string + PushAppStub func(string, string, string, map[string]interface{}, []string, string, bool, bool, bool) error + pushAppMutex sync.RWMutex + pushAppArgsForCall []struct { + arg1 string + arg2 string + arg3 string + arg4 map[string]interface{} + arg5 []string + arg6 string + arg7 bool + arg8 bool + arg9 bool } - targetReturns struct { + pushAppReturns struct { result1 error } - targetReturnsOnCall map[int]struct { + pushAppReturnsOnCall map[int]struct { result1 error } - PushAppStub func(manifest string, path string, currentAppName string, vars map[string]interface{}, varsFiles []string, dockerUser string, showLogs bool, noStart bool) error - pushAppMutex sync.RWMutex - pushAppArgsForCall []struct { - manifest string - path string - currentAppName string - vars map[string]interface{} - varsFiles []string - dockerUser string - showLogs bool - noStart bool + TargetStub func(string, string) error + targetMutex sync.RWMutex + targetArgsForCall []struct { + arg1 string + arg2 string } - pushAppReturns struct { + targetReturns struct { result1 error } - pushAppReturnsOnCall map[int]struct { + targetReturnsOnCall map[int]struct { result1 error } invocations map[string][][]interface{} invocationsMutex sync.RWMutex } -func (fake *FakePAAS) Login(api string, username string, password string, clientID string, clientSecret string, insecure bool) error { +func (fake *FakePAAS) Login(arg1 string, arg2 string, arg3 string, arg4 string, arg5 string, arg6 bool) error { fake.loginMutex.Lock() ret, specificReturn := fake.loginReturnsOnCall[len(fake.loginArgsForCall)] fake.loginArgsForCall = append(fake.loginArgsForCall, struct { - api string - username string - password string - clientID string - clientSecret string - insecure bool - }{api, username, password, clientID, clientSecret, insecure}) - fake.recordInvocation("Login", []interface{}{api, username, password, clientID, clientSecret, insecure}) + arg1 string + arg2 string + arg3 string + arg4 string + arg5 string + arg6 bool + }{arg1, arg2, arg3, arg4, arg5, arg6}) + stub := fake.LoginStub + fakeReturns := fake.loginReturns + fake.recordInvocation("Login", []interface{}{arg1, arg2, arg3, arg4, arg5, arg6}) fake.loginMutex.Unlock() - if fake.LoginStub != nil { - return fake.LoginStub(api, username, password, clientID, clientSecret, insecure) + if stub != nil { + return stub(arg1, arg2, arg3, arg4, arg5, arg6) } if specificReturn { return ret.result1 } - return fake.loginReturns.result1 + return fakeReturns.result1 } func (fake *FakePAAS) LoginCallCount() int { @@ -86,13 +89,22 @@ func (fake *FakePAAS) LoginCallCount() int { return len(fake.loginArgsForCall) } +func (fake *FakePAAS) LoginCalls(stub func(string, string, string, string, string, bool) error) { + fake.loginMutex.Lock() + defer fake.loginMutex.Unlock() + fake.LoginStub = stub +} + func (fake *FakePAAS) LoginArgsForCall(i int) (string, string, string, string, string, bool) { fake.loginMutex.RLock() defer fake.loginMutex.RUnlock() - return fake.loginArgsForCall[i].api, fake.loginArgsForCall[i].username, fake.loginArgsForCall[i].password, fake.loginArgsForCall[i].clientID, fake.loginArgsForCall[i].clientSecret, fake.loginArgsForCall[i].insecure + argsForCall := fake.loginArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3, argsForCall.arg4, argsForCall.arg5, argsForCall.arg6 } func (fake *FakePAAS) LoginReturns(result1 error) { + fake.loginMutex.Lock() + defer fake.loginMutex.Unlock() fake.LoginStub = nil fake.loginReturns = struct { result1 error @@ -100,6 +112,8 @@ func (fake *FakePAAS) LoginReturns(result1 error) { } func (fake *FakePAAS) LoginReturnsOnCall(i int, result1 error) { + fake.loginMutex.Lock() + defer fake.loginMutex.Unlock() fake.LoginStub = nil if fake.loginReturnsOnCall == nil { fake.loginReturnsOnCall = make(map[int]struct { @@ -111,111 +125,138 @@ func (fake *FakePAAS) LoginReturnsOnCall(i int, result1 error) { }{result1} } -func (fake *FakePAAS) Target(organization string, space string) error { - fake.targetMutex.Lock() - ret, specificReturn := fake.targetReturnsOnCall[len(fake.targetArgsForCall)] - fake.targetArgsForCall = append(fake.targetArgsForCall, struct { - organization string - space string - }{organization, space}) - fake.recordInvocation("Target", []interface{}{organization, space}) - fake.targetMutex.Unlock() - if fake.TargetStub != nil { - return fake.TargetStub(organization, space) +func (fake *FakePAAS) PushApp(arg1 string, arg2 string, arg3 string, arg4 map[string]interface{}, arg5 []string, arg6 string, arg7 bool, arg8 bool, arg9 bool) error { + var arg5Copy []string + if arg5 != nil { + arg5Copy = make([]string, len(arg5)) + copy(arg5Copy, arg5) + } + fake.pushAppMutex.Lock() + ret, specificReturn := fake.pushAppReturnsOnCall[len(fake.pushAppArgsForCall)] + fake.pushAppArgsForCall = append(fake.pushAppArgsForCall, struct { + arg1 string + arg2 string + arg3 string + arg4 map[string]interface{} + arg5 []string + arg6 string + arg7 bool + arg8 bool + arg9 bool + }{arg1, arg2, arg3, arg4, arg5Copy, arg6, arg7, arg8, arg9}) + stub := fake.PushAppStub + fakeReturns := fake.pushAppReturns + fake.recordInvocation("PushApp", []interface{}{arg1, arg2, arg3, arg4, arg5Copy, arg6, arg7, arg8, arg9}) + fake.pushAppMutex.Unlock() + if stub != nil { + return stub(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) } if specificReturn { return ret.result1 } - return fake.targetReturns.result1 + return fakeReturns.result1 } -func (fake *FakePAAS) TargetCallCount() int { - fake.targetMutex.RLock() - defer fake.targetMutex.RUnlock() - return len(fake.targetArgsForCall) +func (fake *FakePAAS) PushAppCallCount() int { + fake.pushAppMutex.RLock() + defer fake.pushAppMutex.RUnlock() + return len(fake.pushAppArgsForCall) } -func (fake *FakePAAS) TargetArgsForCall(i int) (string, string) { - fake.targetMutex.RLock() - defer fake.targetMutex.RUnlock() - return fake.targetArgsForCall[i].organization, fake.targetArgsForCall[i].space +func (fake *FakePAAS) PushAppCalls(stub func(string, string, string, map[string]interface{}, []string, string, bool, bool, bool) error) { + fake.pushAppMutex.Lock() + defer fake.pushAppMutex.Unlock() + fake.PushAppStub = stub } -func (fake *FakePAAS) TargetReturns(result1 error) { - fake.TargetStub = nil - fake.targetReturns = struct { +func (fake *FakePAAS) PushAppArgsForCall(i int) (string, string, string, map[string]interface{}, []string, string, bool, bool, bool) { + fake.pushAppMutex.RLock() + defer fake.pushAppMutex.RUnlock() + argsForCall := fake.pushAppArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2, argsForCall.arg3, argsForCall.arg4, argsForCall.arg5, argsForCall.arg6, argsForCall.arg7, argsForCall.arg8, argsForCall.arg9 +} + +func (fake *FakePAAS) PushAppReturns(result1 error) { + fake.pushAppMutex.Lock() + defer fake.pushAppMutex.Unlock() + fake.PushAppStub = nil + fake.pushAppReturns = struct { result1 error }{result1} } -func (fake *FakePAAS) TargetReturnsOnCall(i int, result1 error) { - fake.TargetStub = nil - if fake.targetReturnsOnCall == nil { - fake.targetReturnsOnCall = make(map[int]struct { +func (fake *FakePAAS) PushAppReturnsOnCall(i int, result1 error) { + fake.pushAppMutex.Lock() + defer fake.pushAppMutex.Unlock() + fake.PushAppStub = nil + if fake.pushAppReturnsOnCall == nil { + fake.pushAppReturnsOnCall = make(map[int]struct { result1 error }) } - fake.targetReturnsOnCall[i] = struct { + fake.pushAppReturnsOnCall[i] = struct { result1 error }{result1} } -func (fake *FakePAAS) PushApp(manifest string, path string, currentAppName string, vars map[string]interface{}, varsFiles []string, dockerUser string, showLogs bool, noStart bool) error { - var varsFilesCopy []string - if varsFiles != nil { - varsFilesCopy = make([]string, len(varsFiles)) - copy(varsFilesCopy, varsFiles) - } - fake.pushAppMutex.Lock() - ret, specificReturn := fake.pushAppReturnsOnCall[len(fake.pushAppArgsForCall)] - fake.pushAppArgsForCall = append(fake.pushAppArgsForCall, struct { - manifest string - path string - currentAppName string - vars map[string]interface{} - varsFiles []string - dockerUser string - showLogs bool - noStart bool - }{manifest, path, currentAppName, vars, varsFilesCopy, dockerUser, showLogs, noStart}) - fake.recordInvocation("PushApp", []interface{}{manifest, path, currentAppName, vars, varsFilesCopy, dockerUser, showLogs, noStart}) - fake.pushAppMutex.Unlock() - if fake.PushAppStub != nil { - return fake.PushAppStub(manifest, path, currentAppName, vars, varsFiles, dockerUser, showLogs, noStart) +func (fake *FakePAAS) Target(arg1 string, arg2 string) error { + fake.targetMutex.Lock() + ret, specificReturn := fake.targetReturnsOnCall[len(fake.targetArgsForCall)] + fake.targetArgsForCall = append(fake.targetArgsForCall, struct { + arg1 string + arg2 string + }{arg1, arg2}) + stub := fake.TargetStub + fakeReturns := fake.targetReturns + fake.recordInvocation("Target", []interface{}{arg1, arg2}) + fake.targetMutex.Unlock() + if stub != nil { + return stub(arg1, arg2) } if specificReturn { return ret.result1 } - return fake.pushAppReturns.result1 + return fakeReturns.result1 } -func (fake *FakePAAS) PushAppCallCount() int { - fake.pushAppMutex.RLock() - defer fake.pushAppMutex.RUnlock() - return len(fake.pushAppArgsForCall) +func (fake *FakePAAS) TargetCallCount() int { + fake.targetMutex.RLock() + defer fake.targetMutex.RUnlock() + return len(fake.targetArgsForCall) } -func (fake *FakePAAS) PushAppArgsForCall(i int) (string, string, string, map[string]interface{}, []string, string, bool, bool) { - fake.pushAppMutex.RLock() - defer fake.pushAppMutex.RUnlock() - return fake.pushAppArgsForCall[i].manifest, fake.pushAppArgsForCall[i].path, fake.pushAppArgsForCall[i].currentAppName, fake.pushAppArgsForCall[i].vars, fake.pushAppArgsForCall[i].varsFiles, fake.pushAppArgsForCall[i].dockerUser, fake.pushAppArgsForCall[i].showLogs, fake.pushAppArgsForCall[i].noStart +func (fake *FakePAAS) TargetCalls(stub func(string, string) error) { + fake.targetMutex.Lock() + defer fake.targetMutex.Unlock() + fake.TargetStub = stub } -func (fake *FakePAAS) PushAppReturns(result1 error) { - fake.PushAppStub = nil - fake.pushAppReturns = struct { +func (fake *FakePAAS) TargetArgsForCall(i int) (string, string) { + fake.targetMutex.RLock() + defer fake.targetMutex.RUnlock() + argsForCall := fake.targetArgsForCall[i] + return argsForCall.arg1, argsForCall.arg2 +} + +func (fake *FakePAAS) TargetReturns(result1 error) { + fake.targetMutex.Lock() + defer fake.targetMutex.Unlock() + fake.TargetStub = nil + fake.targetReturns = struct { result1 error }{result1} } -func (fake *FakePAAS) PushAppReturnsOnCall(i int, result1 error) { - fake.PushAppStub = nil - if fake.pushAppReturnsOnCall == nil { - fake.pushAppReturnsOnCall = make(map[int]struct { +func (fake *FakePAAS) TargetReturnsOnCall(i int, result1 error) { + fake.targetMutex.Lock() + defer fake.targetMutex.Unlock() + fake.TargetStub = nil + if fake.targetReturnsOnCall == nil { + fake.targetReturnsOnCall = make(map[int]struct { result1 error }) } - fake.pushAppReturnsOnCall[i] = struct { + fake.targetReturnsOnCall[i] = struct { result1 error }{result1} } @@ -225,10 +266,10 @@ func (fake *FakePAAS) Invocations() map[string][][]interface{} { defer fake.invocationsMutex.RUnlock() fake.loginMutex.RLock() defer fake.loginMutex.RUnlock() - fake.targetMutex.RLock() - defer fake.targetMutex.RUnlock() fake.pushAppMutex.RLock() defer fake.pushAppMutex.RUnlock() + fake.targetMutex.RLock() + defer fake.targetMutex.RUnlock() copiedInvocations := map[string][][]interface{}{} for key, value := range fake.invocations { copiedInvocations[key] = value From 9fc5e5152aacb86c372eab507170a491513e67c4 Mon Sep 17 00:00:00 2001 From: Mark Boyd Date: Tue, 17 Dec 2024 17:22:30 -0500 Subject: [PATCH 5/6] add test for new task flag --- out/command_test.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/out/command_test.go b/out/command_test.go index af79650..805171e 100644 --- a/out/command_test.go +++ b/out/command_test.go @@ -140,6 +140,22 @@ var _ = Describe("Out Command", func() { }) }) + Describe("task handling", func() { + Context("when task is specified", func() { + BeforeEach(func() { + request.Params.Task = true + }) + + It("sets noStart to true", func() { + _, err := command.Run(request) + Expect(err).NotTo(HaveOccurred()) + + _, _, _, _, _, _, _, _, task := cloudFoundry.PushAppArgsForCall(0) + Expect(task).To(Equal(true)) + }) + }) + }) + Context("setting environment variables provided as params", func() { var err error var tempFile *os.File From faebaf3c6652205618d15dac873fb53244579008 Mon Sep 17 00:00:00 2001 From: Mark Boyd Date: Tue, 17 Dec 2024 17:27:49 -0500 Subject: [PATCH 6/6] update README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c0bab02..6240c88 100644 --- a/README.md +++ b/README.md @@ -43,8 +43,8 @@ be specified. * `docker_username`: *Optional.* This is used as the username to authenticate against a protected docker registry. * `docker_password`: *Optional.* This should be the users password when authenticating against a protected docker registry. * `show_app_log`: *Optional.* Tails the app log during startup, useful to debug issues when using blue/green deploys together with the `current_app_name` option. -* `no_start`: *Optional.* Deploys the app but does not start it. This parameter is ignored when `current_app_name` is specified. -* `tasks`: *Optional.* Stages the app but does not start it or give it a route. This parameter is ignored when `current_app_name` is specified. +* `no_start`: *Optional.* Deploys the app but does not start it. +* `tasks`: *Optional.* Stages the app but does not start it or give it a route. ## Pipeline example