Skip to content

Commit 6af6c8f

Browse files
author
Unnati Mishra
committed
Update go mod for cli dir
Signed-off-by: Unnati Mishra <unnati.mishra@broadcom.com> Resolve build failures Signed-off-by: Unnati Mishra <unnati.mishra@broadcom.com> Update go mod Update go mod + vendor Signed-off-by: Unnati Mishra <unnati.mishra@broadcom.com> Add kctrl with blank imports Signed-off-by: Unnati Mishra <unnati.mishra@broadcom.com> Update go mod for cli dir Signed-off-by: Unnati Mishra <unnati.mishra@broadcom.com>
1 parent 394f837 commit 6af6c8f

61 files changed

Lines changed: 1964 additions & 789 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/golangci-lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,5 @@ jobs:
2828
- name: golangci-lint
2929
uses: golangci/golangci-lint-action@v6.0.1
3030
with:
31-
version: v1.58.1
31+
version: v1.64
3232
args: -v

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM --platform=$BUILDPLATFORM golang:1.23.8 AS deps
1+
FROM --platform=$BUILDPLATFORM golang:1.24.10 AS deps
22

33
ARG TARGETOS TARGETARCH KCTRL_VER=development
44
WORKDIR /workspace

cli/go.mod

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
module carvel.dev/kapp-controller/cli
22

3-
go 1.23.8
3+
go 1.24.10
44

55
require (
6-
carvel.dev/kapp-controller v0.57.0
6+
carvel.dev/kapp-controller v0.59.0
77
carvel.dev/vendir v0.45.0
88
github.com/cppforlife/cobrautil v0.0.0-20221130162803-acdfead391ef
99
github.com/cppforlife/color v1.9.1-0.20200716202919-6706ac40b835
1010
github.com/cppforlife/go-cli-ui v0.0.0-20220520125801-e45d9169a663
1111
github.com/getkin/kin-openapi v0.131.0
1212
github.com/google/gnostic-models v0.6.8
13-
github.com/google/go-containerregistry v0.20.3
13+
github.com/google/go-containerregistry v0.20.6
1414
github.com/k14s/difflib v0.0.0-20201117154628-0c031775bf57
1515
github.com/mitchellh/go-wordwrap v1.0.1
1616
github.com/otiai10/copy v1.2.0
@@ -36,15 +36,15 @@ require (
3636
github.com/evanphx/json-patch v5.6.0+incompatible // indirect
3737
github.com/evanphx/json-patch/v5 v5.9.0 // indirect
3838
github.com/fsnotify/fsnotify v1.7.0 // indirect
39-
github.com/go-logr/logr v1.4.2 // indirect
39+
github.com/go-logr/logr v1.4.3 // indirect
4040
github.com/go-logr/zapr v1.3.0 // indirect
4141
github.com/go-openapi/jsonpointer v0.21.0 // indirect
4242
github.com/go-openapi/jsonreference v0.20.2 // indirect
4343
github.com/go-openapi/swag v0.23.0 // indirect
4444
github.com/gogo/protobuf v1.3.2 // indirect
4545
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
4646
github.com/golang/protobuf v1.5.4 // indirect
47-
github.com/google/go-cmp v0.6.0 // indirect
47+
github.com/google/go-cmp v0.7.0 // indirect
4848
github.com/google/gofuzz v1.2.0 // indirect
4949
github.com/google/uuid v1.6.0 // indirect
5050
github.com/hashicorp/go-version v1.2.1 // indirect
@@ -74,13 +74,13 @@ require (
7474
github.com/vito/go-interact v1.0.1 // indirect
7575
go.uber.org/multierr v1.11.0 // indirect
7676
go.uber.org/zap v1.26.0 // indirect
77-
golang.org/x/crypto v0.36.0 // indirect
77+
golang.org/x/crypto v0.39.0 // indirect
7878
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect
79-
golang.org/x/net v0.38.0 // indirect
80-
golang.org/x/oauth2 v0.25.0 // indirect
81-
golang.org/x/sys v0.32.0 // indirect
82-
golang.org/x/term v0.30.0 // indirect
83-
golang.org/x/text v0.23.0 // indirect
79+
golang.org/x/net v0.41.0 // indirect
80+
golang.org/x/oauth2 v0.30.0 // indirect
81+
golang.org/x/sys v0.33.0 // indirect
82+
golang.org/x/term v0.32.0 // indirect
83+
golang.org/x/text v0.26.0 // indirect
8484
golang.org/x/time v0.3.0 // indirect
8585
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
8686
google.golang.org/protobuf v1.36.4 // indirect

cli/go.sum

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
carvel.dev/kapp-controller v0.57.0 h1:rUnmE/Iry9gr5I5KxJ+P1tzj4kDPjRB1TI9Lf9PgTIs=
2-
carvel.dev/kapp-controller v0.57.0/go.mod h1:YMe5fTTKQfT6gGNfoPPF3tgoJn9BuIR5W6V/D9uBQgY=
3-
carvel.dev/vendir v0.44.0 h1:vfq5KgGbbLlxHrE0prY7gZgiEQpjwo4lS2akCaVkcxA=
4-
carvel.dev/vendir v0.44.0/go.mod h1:gslrJ0HPiy8gtJYsQZHzIVuGfOG0nfDKDupEm7uBWVQ=
1+
carvel.dev/kapp-controller v0.59.0 h1:Y2KUJbC1lYiWJk/56SKResvhVSDkoAuM1lagewZS8LE=
2+
carvel.dev/kapp-controller v0.59.0/go.mod h1:EHK86H6qYe0pBhA0QuW4lkO9KL3p0RseAZ81PR9LwNc=
3+
carvel.dev/vendir v0.45.0 h1:OWFKkn6Rfi2zPZKS/z68SeIYGrlSgKBXn4DYR178PGk=
4+
carvel.dev/vendir v0.45.0/go.mod h1:I3xaoQUBf20tQOjW2A0eXC1Hn94tYCL9VTmWHas4VKE=
55
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
66
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
77
github.com/carvel-dev/semver/v4 v4.0.1-0.20240402203627-beb83fbf25e4 h1:F4rZiMGZyC66j9VB7doVOE4tFHF1yNEihQlOuht4jmM=
@@ -33,8 +33,8 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos
3333
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
3434
github.com/getkin/kin-openapi v0.131.0 h1:NO2UeHnFKRYhZ8wg6Nyh5Cq7dHk4suQQr72a4pMrDxE=
3535
github.com/getkin/kin-openapi v0.131.0/go.mod h1:3OlG51PCYNsPByuiMB0t4fjnNlIDnaEDsjiKUV8nL58=
36-
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
37-
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
36+
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
37+
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
3838
github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ=
3939
github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg=
4040
github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
@@ -68,10 +68,10 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
6868
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
6969
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
7070
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
71-
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
72-
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
73-
github.com/google/go-containerregistry v0.20.3 h1:oNx7IdTI936V8CQRveCjaxOiegWwvM7kqkbXTpyiovI=
74-
github.com/google/go-containerregistry v0.20.3/go.mod h1:w00pIgBRDVUDFM6bq+Qx8lwNWK+cxgCuX1vd3PIBDNI=
71+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
72+
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
73+
github.com/google/go-containerregistry v0.20.6 h1:cvWX87UxxLgaH76b4hIvya6Dzz9qHB31qAwjAohdSTU=
74+
github.com/google/go-containerregistry v0.20.6/go.mod h1:T0x8MuoAoKX/873bkeSfLD2FAkwCDf9/HZgsFJ02E2Y=
7575
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
7676
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
7777
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -199,8 +199,8 @@ go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
199199
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
200200
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
201201
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
202-
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
203-
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
202+
golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=
203+
golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=
204204
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e h1:+WEEuIdZHnUeJJmEUjyYC2gfUMj69yZXw17EnHg/otA=
205205
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA=
206206
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
@@ -211,10 +211,10 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
211211
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
212212
golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
213213
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
214-
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
215-
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
216-
golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70=
217-
golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
214+
golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
215+
golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
216+
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
217+
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
218218
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
219219
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
220220
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -232,24 +232,24 @@ golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7w
232232
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
233233
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
234234
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
235-
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
236-
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
235+
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
236+
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
237237
golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
238-
golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y=
239-
golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=
238+
golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
239+
golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
240240
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
241241
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
242242
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
243-
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
244-
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
243+
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
244+
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
245245
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
246246
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
247247
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
248248
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
249249
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
250250
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
251-
golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE=
252-
golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588=
251+
golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo=
252+
golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg=
253253
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
254254
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
255255
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

cli/vendor/carvel.dev/kapp-controller/pkg/app/crd_app.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,18 @@ func (a *CRDApp) updateStatusOnce() error {
100100
func (a *CRDApp) updateApp(updateFunc func(*kcv1alpha1.App)) error {
101101
a.log.Info("Updating app")
102102

103+
var lastErr error
104+
for i := 0; i < 5; i++ {
105+
lastErr = a.updateAppOnce(updateFunc)
106+
if lastErr == nil {
107+
return nil
108+
}
109+
}
110+
111+
return lastErr
112+
}
113+
114+
func (a *CRDApp) updateAppOnce(updateFunc func(*kcv1alpha1.App)) error {
103115
existingApp, err := a.appClient.KappctrlV1alpha1().Apps(a.appModel.Namespace).Get(context.Background(), a.appModel.Name, metav1.GetOptions{})
104116
if err != nil {
105117
return fmt.Errorf("Updating app: %s", err)

cli/vendor/carvel.dev/kapp-controller/pkg/packageinstall/packageinstall.go

Lines changed: 65 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -181,22 +181,25 @@ func (pi *PackageInstallCR) reconcile(modelStatus *reconciler.Status) (reconcile
181181
return reconcile.Result{Requeue: true}, err
182182
}
183183

184-
if existingApp.Generation != existingApp.Status.ObservedGeneration {
185-
modelStatus.SetReconciling(pi.model.ObjectMeta)
186-
} else {
187-
appStatus := reconciler.Status{S: existingApp.Status.GenericStatus}
188-
switch {
189-
case appStatus.IsReconciling():
184+
// Create a status updater closure that sets PackageInstall status based on App state
185+
statusUpdater := func(app *kcv1alpha1.App) {
186+
if app.Generation != app.Status.ObservedGeneration {
190187
modelStatus.SetReconciling(pi.model.ObjectMeta)
191-
case appStatus.IsReconcileSucceeded():
192-
modelStatus.SetReconcileCompleted(nil)
193-
case appStatus.IsReconcileFailed():
194-
modelStatus.SetUsefulErrorMessage(existingApp.Status.UsefulErrorMessage)
195-
modelStatus.SetReconcileCompleted(fmt.Errorf("Error (see .status.usefulErrorMessage for details)"))
188+
} else {
189+
appStatus := reconciler.Status{S: app.Status.GenericStatus}
190+
switch {
191+
case appStatus.IsReconciling():
192+
modelStatus.SetReconciling(pi.model.ObjectMeta)
193+
case appStatus.IsReconcileSucceeded():
194+
modelStatus.SetReconcileCompleted(nil)
195+
case appStatus.IsReconcileFailed():
196+
modelStatus.SetUsefulErrorMessage(app.Status.UsefulErrorMessage)
197+
modelStatus.SetReconcileCompleted(fmt.Errorf("Error (see .status.usefulErrorMessage for details)"))
198+
}
196199
}
197200
}
198201

199-
return pi.reconcileAppWithPackage(existingApp, pkg)
202+
return pi.reconcileAppWithPackage(existingApp, pkg, statusUpdater)
200203
}
201204

202205
func (pi *PackageInstallCR) createAppFromPackage(pkg datapkgingv1alpha1.Package) (reconcile.Result, error) {
@@ -213,7 +216,7 @@ func (pi *PackageInstallCR) createAppFromPackage(pkg datapkgingv1alpha1.Package)
213216
return reconcile.Result{}, nil
214217
}
215218

216-
func (pi *PackageInstallCR) reconcileAppWithPackage(existingApp *kcv1alpha1.App, pkg datapkgingv1alpha1.Package) (reconcile.Result, error) {
219+
func (pi *PackageInstallCR) reconcileAppWithPackage(existingApp *kcv1alpha1.App, pkg datapkgingv1alpha1.Package, statusUpdater func(*kcv1alpha1.App)) (reconcile.Result, error) {
217220
pkgWithPlaceholderSecrets, err := pi.reconcileFetchPlaceholderSecrets(pkg)
218221
if err != nil {
219222
return reconcile.Result{}, err
@@ -224,14 +227,21 @@ func (pi *PackageInstallCR) reconcileAppWithPackage(existingApp *kcv1alpha1.App,
224227
return reconcile.Result{Requeue: true}, err
225228
}
226229

230+
var appToCheckStatus *kcv1alpha1.App = existingApp
231+
227232
if !equality.Semantic.DeepEqual(desiredApp, existingApp) {
228-
_, err = pi.kcclient.KappctrlV1alpha1().Apps(desiredApp.Namespace).Update(
229-
context.Background(), desiredApp, metav1.UpdateOptions{})
233+
updatedApp, err := pi.updateAppWithRetry(existingApp, func(app *kcv1alpha1.App) (*kcv1alpha1.App, error) {
234+
return NewApp(app, pi.model, pkgWithPlaceholderSecrets, pi.opts)
235+
})
230236
if err != nil {
231237
return reconcile.Result{Requeue: true}, err
232238
}
239+
appToCheckStatus = updatedApp
233240
}
234241

242+
// Call the status updater with the current app state (either existing or updated)
243+
statusUpdater(appToCheckStatus)
244+
235245
return reconcile.Result{}, nil
236246
}
237247

@@ -395,14 +405,22 @@ func (pi *PackageInstallCR) reconcileDelete(modelStatus *reconciler.Status) (rec
395405
existingApp.Spec.DefaultNamespace = pi.model.Spec.DefaultNamespace
396406

397407
if !equality.Semantic.DeepEqual(existingApp, unchangeExistingApp) {
398-
existingApp, err = pi.kcclient.KappctrlV1alpha1().Apps(existingApp.Namespace).Update(
399-
context.Background(), existingApp, metav1.UpdateOptions{})
408+
updatedApp, err := pi.updateAppWithRetry(existingApp, func(app *kcv1alpha1.App) (*kcv1alpha1.App, error) {
409+
app.Spec.ServiceAccountName = existingApp.Spec.ServiceAccountName
410+
app.Spec.Cluster = existingApp.Spec.Cluster
411+
app.Spec.NoopDelete = existingApp.Spec.NoopDelete
412+
app.Spec.Paused = existingApp.Spec.Paused
413+
app.Spec.Canceled = existingApp.Spec.Canceled
414+
app.Spec.DefaultNamespace = existingApp.Spec.DefaultNamespace
415+
return app, nil
416+
})
400417
if err != nil {
401418
if errors.IsNotFound(err) {
402419
return reconcile.Result{}, pi.unblockDeletion()
403420
}
404421
return reconcile.Result{Requeue: true}, err
405422
}
423+
existingApp = updatedApp
406424
}
407425

408426
if existingApp.DeletionTimestamp == nil {
@@ -540,3 +558,33 @@ func (pi PackageInstallCR) createSecretForSecretgenController(iteration int) (st
540558
}
541559
return secretName, nil
542560
}
561+
562+
// updateAppWithRetry updates an App CR with retry logic to handle conflicts
563+
func (pi *PackageInstallCR) updateAppWithRetry(app *kcv1alpha1.App, updateFunc func(*kcv1alpha1.App) (*kcv1alpha1.App, error)) (*kcv1alpha1.App, error) {
564+
var lastErr error
565+
for i := 0; i < 5; i++ {
566+
desiredApp, err := updateFunc(app)
567+
if err != nil {
568+
return nil, fmt.Errorf("update function failed: %s", err)
569+
}
570+
571+
updatedApp, err := pi.kcclient.KappctrlV1alpha1().Apps(desiredApp.Namespace).Update(
572+
context.Background(), desiredApp, metav1.UpdateOptions{})
573+
if err == nil {
574+
return updatedApp, nil
575+
}
576+
lastErr = err
577+
578+
if !errors.IsConflict(err) {
579+
return nil, err
580+
}
581+
582+
app, err = pi.kcclient.KappctrlV1alpha1().Apps(app.Namespace).Get(
583+
context.Background(), app.Name, metav1.GetOptions{})
584+
if err != nil {
585+
return nil, err
586+
}
587+
}
588+
589+
return nil, fmt.Errorf("updating app after 5 retries: %s", lastErr)
590+
}

cli/vendor/github.com/go-logr/logr/.golangci.yaml

Lines changed: 9 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cli/vendor/github.com/google/go-cmp/cmp/internal/function/func.go

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)