Skip to content

Commit 991220d

Browse files
authored
Release/v3.1.2 changelog updated (#1793)
* change log modified
1 parent 87ed4c3 commit 991220d

10 files changed

Lines changed: 59 additions & 62 deletions

File tree

.changelog/1785.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
`helm_release`: Fix Windows apply failure when multiple releases reference the same OCI chart/version in a single run (#1623)
3+
```

.github/CODEOWNERS

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
* @hashicorp/tf-eco-hybrid-cloud
1+
* @iam404 @rigalGit @hashicorp/tf-eco-hybrid-cloud

CHANGELOG.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
1-
## 3.1.2 (Apr 24, 2026)
1+
## 3.1.2 (May 21, 2026)
22

33
ENHANCEMENT:
44

55
* Replace usage of `golang.org/x/crypto/sha3` with `crypto/sha3` from stdlib [[GH-1775](https://github.com/hashicorp/terraform-provider-helm/issues/1775)]
66

7+
BUG FIXES:
8+
9+
* `helm_release`: Fix Windows apply failure when multiple releases reference the same OCI chart/version in a single run (#1623) [[GH-1785](https://github.com/hashicorp/terraform-provider-helm/issues/1785)]
10+
711
DEPENDENCIES:
812

913
* Remove `golang.org/x/crypto` as a direct dependency [[GH-1775](https://github.com/hashicorp/terraform-provider-helm/issues/1775)]
1014
* Upgrade `go` from `1.24.5` to `1.25.8` [[GH-1775](https://github.com/hashicorp/terraform-provider-helm/issues/1775)]
11-
* Bump `github.com/cloudflare/circl` from `1.6.0` to `1.6.1` [[GH-1759](https://github.com/hashicorp/terraform-provider-helm/pull/1759)]
12-
* Bump `github.com/containerd/containerd` from `1.7.27` to `1.7.29` [[GH-1758](https://github.com/hashicorp/terraform-provider-helm/pull/1758)]
13-
* Bump `helm.sh/helm/v3` from `3.18.4` to `3.18.5` [[GH-1757](https://github.com/hashicorp/terraform-provider-helm/pull/1757)]
1415
* Bump `google.golang.org/grpc` from `1.75.1` to `1.79.3` [[GH-1769](https://github.com/hashicorp/terraform-provider-helm/pull/1769)]
1516

1617
## 3.1.1 (Nov 17, 2025)

_about/FAQ.md

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,5 @@
11
# Frequently Asked Questions
22

3-
### Who are the maintainers?
4-
5-
The HashiCorp Terraform Kubernetes provider team is :
6-
7-
* Vishnu Ravindra, Product Manager - [@vravind1](https://github.com/vravind1)
8-
* Alex Somesan, Engineer - [@alexsomesan](https://github.com/alexsomesan)
9-
* John Houston, Engineer - [@jrhouston](https://github.com/jrhouston)
10-
* Sacha Rybolovlev, Engineer - [@arybolovlev](https://github.com/arybolovlev)
11-
* Mauricio Alvarez Leon, Engineer - [@BBBmau](https://github.com/BBBmau)
12-
* Sheneska Williams, Engineer - [@sheneska](https://github.com/sheneska)
13-
* Brandy Jackson, Engineering Manager - [@ibrandyjackson](https://github.com/ibrandyjackson)
14-
15-
Our collaborators are:
16-
* Maximo Cuadros - [@mcuadros](https://github.com/mcuadros)
17-
183
### Why isn’t my PR merged yet?
194

205
Unfortunately, due to the volume of issues and new pull requests we receive, we are unable to give each one the full attention that we would like. We do our best to focus on the contributions that provide the greatest value to the most community members.

go.mod

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module github.com/hashicorp/terraform-provider-helm
33
go 1.25.8
44

55
require (
6-
github.com/hashicorp/go-version v1.7.0
6+
github.com/hashicorp/go-version v1.9.0
77
github.com/hashicorp/terraform-plugin-docs v0.20.1
88
github.com/hashicorp/terraform-plugin-framework v1.16.0
99
github.com/hashicorp/terraform-plugin-framework-timeouts v0.6.0
@@ -43,15 +43,15 @@ require (
4343
github.com/Masterminds/semver/v3 v3.3.0 // indirect
4444
github.com/Masterminds/sprig/v3 v3.3.0 // indirect
4545
github.com/Masterminds/squirrel v1.5.4 // indirect
46-
github.com/ProtonMail/go-crypto v1.1.6 // indirect
46+
github.com/ProtonMail/go-crypto v1.4.1 // indirect
4747
github.com/agext/levenshtein v1.2.3 // indirect
4848
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
4949
github.com/armon/go-radix v1.0.0 // indirect
5050
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
5151
github.com/bgentry/speakeasy v0.1.0 // indirect
5252
github.com/blang/semver/v4 v4.0.0 // indirect
5353
github.com/chai2010/gettext-go v1.0.2 // indirect
54-
github.com/cloudflare/circl v1.6.1 // indirect
54+
github.com/cloudflare/circl v1.6.3 // indirect
5555
github.com/containerd/containerd v1.7.29 // indirect
5656
github.com/containerd/errdefs v0.3.0 // indirect
5757
github.com/containerd/log v0.1.0 // indirect
@@ -89,9 +89,9 @@ require (
8989
github.com/hashicorp/go-hclog v1.6.3 // indirect
9090
github.com/hashicorp/go-multierror v1.1.1 // indirect
9191
github.com/hashicorp/go-plugin v1.7.0 // indirect
92-
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
92+
github.com/hashicorp/go-retryablehttp v0.7.8 // indirect
9393
github.com/hashicorp/go-uuid v1.0.3 // indirect
94-
github.com/hashicorp/hc-install v0.9.2 // indirect
94+
github.com/hashicorp/hc-install v0.9.5 // indirect
9595
github.com/hashicorp/hcl/v2 v2.23.0 // indirect
9696
github.com/hashicorp/logutils v1.0.0 // indirect
9797
github.com/hashicorp/terraform-exec v0.23.0 // indirect
@@ -154,15 +154,15 @@ require (
154154
go.yaml.in/yaml/v3 v3.0.3 // indirect
155155
golang.org/x/crypto v0.49.0 // indirect
156156
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
157-
golang.org/x/mod v0.33.0 // indirect
158-
golang.org/x/net v0.51.0 // indirect
157+
golang.org/x/mod v0.35.0 // indirect
158+
golang.org/x/net v0.52.0 // indirect
159159
golang.org/x/oauth2 v0.34.0 // indirect
160160
golang.org/x/sync v0.20.0 // indirect
161161
golang.org/x/sys v0.42.0 // indirect
162162
golang.org/x/term v0.41.0 // indirect
163163
golang.org/x/text v0.35.0 // indirect
164164
golang.org/x/time v0.12.0 // indirect
165-
golang.org/x/tools v0.42.0 // indirect
165+
golang.org/x/tools v0.43.0 // indirect
166166
google.golang.org/appengine v1.6.8 // indirect
167167
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
168168
google.golang.org/grpc v1.79.3 // indirect

go.sum

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8
2424
github.com/Masterminds/squirrel v1.5.4/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10=
2525
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
2626
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
27-
github.com/ProtonMail/go-crypto v1.1.6 h1:ZcV+Ropw6Qn0AX9brlQLAUXfqLBc7Bl+f/DmNxpLfdw=
28-
github.com/ProtonMail/go-crypto v1.1.6/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
27+
github.com/ProtonMail/go-crypto v1.4.1 h1:9RfcZHqEQUvP8RzecWEUafnZVtEvrBVL9BiF67IQOfM=
28+
github.com/ProtonMail/go-crypto v1.4.1/go.mod h1:e1OaTyu5SYVrO9gKOEhTc+5UcXtTUa+P3uLudwcgPqo=
2929
github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo=
3030
github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
3131
github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec=
@@ -55,8 +55,8 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF
5555
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
5656
github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk=
5757
github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA=
58-
github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0=
59-
github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs=
58+
github.com/cloudflare/circl v1.6.3 h1:9GPOhQGF9MCYUeXyMYlqTR6a5gTrgR/fBLXvUgtVcg8=
59+
github.com/cloudflare/circl v1.6.3/go.mod h1:2eXP6Qfat4O/Yhh8BznvKnJ+uzEoTQ6jVKJRn81BiS4=
6060
github.com/containerd/containerd v1.7.29 h1:90fWABQsaN9mJhGkoVnuzEY+o1XDPbg9BTC9QTAHnuE=
6161
github.com/containerd/containerd v1.7.29/go.mod h1:azUkWcOvHrWvaiUjSQH0fjzuHIwSPg1WL5PshGP4Szs=
6262
github.com/containerd/errdefs v0.3.0 h1:FSZgGOeK4yuT/+DnF07/Olde/q4KBoMsaamhXxIMDp4=
@@ -118,10 +118,10 @@ github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxI
118118
github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
119119
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
120120
github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
121-
github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM=
122-
github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU=
123-
github.com/go-git/go-git/v5 v5.14.0 h1:/MD3lCrGjCen5WfEAzKg00MJJffKhC8gzS80ycmCi60=
124-
github.com/go-git/go-git/v5 v5.14.0/go.mod h1:Z5Xhoia5PcWA3NF8vRLURn9E5FRhSl7dGj9ItW3Wk5k=
121+
github.com/go-git/go-billy/v5 v5.8.0 h1:I8hjc3LbBlXTtVuFNJuwYuMiHvQJDq1AT6u4DwDzZG0=
122+
github.com/go-git/go-billy/v5 v5.8.0/go.mod h1:RpvI/rw4Vr5QA+Z60c6d6LXH0rYJo0uD5SqfmrrheCY=
123+
github.com/go-git/go-git/v5 v5.18.0 h1:O831KI+0PR51hM2kep6T8k+w0/LIAD490gvqMCvL5hM=
124+
github.com/go-git/go-git/v5 v5.18.0/go.mod h1:pW/VmeqkanRFqR6AljLcs7EA7FbZaN5MQqO7oZADXpo=
125125
github.com/go-gorp/gorp/v3 v3.1.0 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs=
126126
github.com/go-gorp/gorp/v3 v3.1.0/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw=
127127
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
@@ -202,19 +202,19 @@ github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+l
202202
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
203203
github.com/hashicorp/go-plugin v1.7.0 h1:YghfQH/0QmPNc/AZMTFE3ac8fipZyZECHdDPshfk+mA=
204204
github.com/hashicorp/go-plugin v1.7.0/go.mod h1:BExt6KEaIYx804z8k4gRzRLEvxKVb+kn0NMcihqOqb8=
205-
github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU=
206-
github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk=
205+
github.com/hashicorp/go-retryablehttp v0.7.8 h1:ylXZWnqa7Lhqpk0L1P1LzDtGcCR0rPVUrx/c8Unxc48=
206+
github.com/hashicorp/go-retryablehttp v0.7.8/go.mod h1:rjiScheydd+CxvumBsIrFKlx3iS0jrZ7LvzFGFmuKbw=
207207
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
208208
github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8=
209209
github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
210-
github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY=
211-
github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
210+
github.com/hashicorp/go-version v1.9.0 h1:CeOIz6k+LoN3qX9Z0tyQrPtiB1DFYRPfCIBtaXPSCnA=
211+
github.com/hashicorp/go-version v1.9.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
212212
github.com/hashicorp/golang-lru/arc/v2 v2.0.5 h1:l2zaLDubNhW4XO3LnliVj0GXO3+/CGNJAg1dcN2Fpfw=
213213
github.com/hashicorp/golang-lru/arc/v2 v2.0.5/go.mod h1:ny6zBSQZi2JxIeYcv7kt2sH2PXJtirBN7RDhRpxPkxU=
214214
github.com/hashicorp/golang-lru/v2 v2.0.5 h1:wW7h1TG88eUIJ2i69gaE3uNVtEPIagzhGvHgwfx2Vm4=
215215
github.com/hashicorp/golang-lru/v2 v2.0.5/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
216-
github.com/hashicorp/hc-install v0.9.2 h1:v80EtNX4fCVHqzL9Lg/2xkp62bbvQMnvPQ0G+OmtO24=
217-
github.com/hashicorp/hc-install v0.9.2/go.mod h1:XUqBQNnuT4RsxoxiM9ZaUk0NX8hi2h+Lb6/c0OZnC/I=
216+
github.com/hashicorp/hc-install v0.9.5 h1:XHCjcMn2563ysuaQ9v9ec2FNc7c2PJOIEEGobAFeIx4=
217+
github.com/hashicorp/hc-install v0.9.5/go.mod h1:ihEW4LshrNkxq2bU/MpVbKyn+yt1is2hYqUTHDGhG84=
218218
github.com/hashicorp/hcl/v2 v2.23.0 h1:Fphj1/gCylPxHutVSEOf2fBOh1VE4AuLV7+kbJf3qos=
219219
github.com/hashicorp/hcl/v2 v2.23.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA=
220220
github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y=
@@ -498,16 +498,16 @@ golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbR
498498
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
499499
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
500500
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
501-
golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8=
502-
golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w=
501+
golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM=
502+
golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU=
503503
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
504504
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
505505
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
506506
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
507507
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
508508
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
509-
golang.org/x/net v0.51.0 h1:94R/GTO7mt3/4wIKpcR5gkGmRLOuE/2hNGeWq/GBIFo=
510-
golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y=
509+
golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0=
510+
golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw=
511511
golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw=
512512
golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
513513
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -552,8 +552,8 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn
552552
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
553553
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
554554
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
555-
golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k=
556-
golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0=
555+
golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s=
556+
golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0=
557557
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
558558
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
559559
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

helm/data_helm_template.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -916,7 +916,7 @@ func getChartModel(ctx context.Context, model *HelmTemplateModel, meta *Meta, na
916916

917917
tflog.Debug(ctx, fmt.Sprintf("Helm settings: %+v", meta.Settings))
918918

919-
path, err := cpo.LocateChart(name, meta.Settings)
919+
path, err := meta.LocateChart(cpo, name)
920920
if err != nil {
921921
diags.AddError("Error locating chart", fmt.Sprintf("Unable to locate chart %s: %s", name, err))
922922
return nil, "", diags

helm/provider.go

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,21 @@ type Meta struct {
4848
RegistryClient *registry.Client
4949
HelmDriver string
5050
// Experimental feature toggles
51-
Experiments map[string]bool
52-
Mutex sync.Mutex
51+
Experiments map[string]bool
52+
Mutex sync.Mutex
53+
loggedInOCIRegistries map[string]struct{}
54+
ChartPathMutex sync.Mutex
55+
}
56+
57+
// LocateChart serializes calls to cpo.LocateChart to avoid concurrent writes to Helm's shared repository cache.
58+
// Helm's chart downloader writes to a random temp file under the shared repository cache (e.g. %TEMP%\helm\repository\<chart>-<ver>.tgz<suffix>)
59+
// and then renames it to the canonical cache path. When multiple releases reference the same OCI chart/version in a single run, concurrent renames
60+
// of same file on Windows fail with "Access is denied" (see provider issue #1623). Serializing LocateChart avoids the race
61+
// while keeping a single cache entry per chart/version.
62+
func (m *Meta) LocateChart(cpo *action.ChartPathOptions, name string) (string, error) {
63+
m.ChartPathMutex.Lock()
64+
defer m.ChartPathMutex.Unlock()
65+
return cpo.LocateChart(name, m.Settings)
5366
}
5467

5568
// HelmProviderModel contains the configuration for the provider
@@ -590,6 +603,7 @@ func (p *HelmProvider) Configure(ctx context.Context, req provider.ConfigureRequ
590603
Experiments: map[string]bool{
591604
"manifest": manifestExperiment,
592605
},
606+
loggedInOCIRegistries: make(map[string]struct{}),
593607
}
594608
registryClient, err := registry.NewClient()
595609
if err != nil {
@@ -678,15 +692,14 @@ func OCIRegistryLogin(ctx context.Context, meta *Meta, actionConfig *action.Conf
678692

679693
// registryClient = client used to comm with the registry, oci urls, un, and pw used for authentication
680694
func OCIRegistryPerformLogin(ctx context.Context, meta *Meta, registryClient *registry.Client, ociURL, username, password string) error {
681-
loggedInOCIRegistries := make(map[string]string)
682695
// getting the oci url, and extracting the host.
683696
u, err := url.Parse(ociURL)
684697
if err != nil {
685698
return fmt.Errorf("could not parse OCI registry URL: %v", err)
686699
}
687700
meta.Mutex.Lock()
688701
defer meta.Mutex.Unlock()
689-
if _, ok := loggedInOCIRegistries[u.Host]; ok {
702+
if _, ok := meta.loggedInOCIRegistries[u.Host]; ok {
690703
tflog.Info(ctx, fmt.Sprintf("Already logged into OCI registry %q", u.Host))
691704
return nil
692705
}
@@ -695,7 +708,7 @@ func OCIRegistryPerformLogin(ctx context.Context, meta *Meta, registryClient *re
695708
if err != nil {
696709
return fmt.Errorf("could not login to OCI registry %q: %v", u.Host, err)
697710
}
698-
loggedInOCIRegistries[u.Host] = ""
711+
meta.loggedInOCIRegistries[u.Host] = struct{}{}
699712
tflog.Info(ctx, fmt.Sprintf("Logged into OCI registry %q", u.Host))
700713
return nil
701714
}

helm/provider_test.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,6 @@ func TestMain(m *testing.M) {
119119
os.Exit(ec)
120120
}
121121

122-
// todo
123122
func TestProvider(t *testing.T) {
124123
ctx := context.Background()
125124
provider := New("test")()
@@ -143,11 +142,7 @@ func TestProvider(t *testing.T) {
143142

144143
func createProviderServer(provider provider.Provider) (tfprotov6.ProviderServer, error) {
145144
providerServerFunc := providerserver.NewProtocol6WithError(provider)
146-
server, err := providerServerFunc()
147-
if err != nil {
148-
} else {
149-
}
150-
return server, err
145+
return providerServerFunc()
151146
}
152147

153148
func buildChartRepository() {

helm/resource_helm_release.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1392,7 +1392,7 @@ func getChart(ctx context.Context, model *HelmReleaseModel, m *Meta, name string
13921392

13931393
tflog.Debug(ctx, fmt.Sprintf("Helm settings: %+v", m.Settings))
13941394

1395-
path, err := cpo.LocateChart(name, m.Settings)
1395+
path, err := m.LocateChart(cpo, name)
13961396
if err != nil {
13971397
diags.AddError("Error locating chart", fmt.Sprintf("Unable to locate chart %s: %s", name, err))
13981398
return nil, "", diags
@@ -2334,7 +2334,7 @@ func resourceReleaseValidate(ctx context.Context, model *HelmReleaseModel, meta
23342334
}
23352335

23362336
func lintChart(m *Meta, name string, cpo *action.ChartPathOptions, values map[string]interface{}) error {
2337-
path, err := cpo.LocateChart(name, m.Settings)
2337+
path, err := m.LocateChart(cpo, name)
23382338
if err != nil {
23392339
return err
23402340
}

0 commit comments

Comments
 (0)