@@ -25,7 +25,6 @@ import (
25
25
"path/filepath"
26
26
27
27
"github.com/Masterminds/semver/v3"
28
- "github.com/fluxcd/source-controller/internal/helm/repository"
29
28
helmchart "helm.sh/helm/v3/pkg/chart"
30
29
"helm.sh/helm/v3/pkg/chartutil"
31
30
"helm.sh/helm/v3/pkg/repo"
@@ -37,22 +36,22 @@ import (
37
36
"github.com/fluxcd/source-controller/internal/helm/chart/secureloader"
38
37
)
39
38
40
- // Remote is a repository.ChartRepository or a repository.OCIChartRepository.
39
+ // Repository is a repository.ChartRepository or a repository.OCIChartRepository.
41
40
// It is used to download a chart from a remote Helm repository or OCI registry.
42
- type Remote interface {
43
- // GetChart returns a chart.Chart from the remote repository .
44
- Get (name , version string ) (* repo.ChartVersion , error )
41
+ type Repository interface {
42
+ // GetChartVersion returns the repo.ChartVersion for the given name and version .
43
+ GetChartVersion (name , version string ) (* repo.ChartVersion , error )
45
44
// GetChartVersion returns a chart.ChartVersion from the remote repository.
46
45
DownloadChart (chart * repo.ChartVersion ) (* bytes.Buffer , error )
47
46
}
48
47
49
48
type remoteChartBuilder struct {
50
- remote Remote
49
+ remote Repository
51
50
}
52
51
53
52
// NewRemoteBuilder returns a Builder capable of building a Helm
54
53
// chart with a RemoteReference in the given repository.ChartRepository.
55
- func NewRemoteBuilder (repository Remote ) Builder {
54
+ func NewRemoteBuilder (repository Repository ) Builder {
56
55
return & remoteChartBuilder {
57
56
remote : repository ,
58
57
}
@@ -83,31 +82,12 @@ func (b *remoteChartBuilder) Build(_ context.Context, ref Reference, p string, o
83
82
return nil , & BuildError {Reason : ErrChartReference , Err : err }
84
83
}
85
84
86
- var (
87
- res * bytes.Buffer
88
- err error
89
- )
90
-
91
- result := & Build {}
92
- switch b .remote .(type ) {
93
- case * repository.ChartRepository :
94
- res , err = b .downloadFromRepository (b .remote .(* repository.ChartRepository ), remoteRef , result , opts )
95
- if err != nil {
96
- return nil , & BuildError {Reason : ErrChartPull , Err : err }
97
- }
98
- if res == nil {
99
- return result , nil
100
- }
101
- case * repository.OCIChartRepository :
102
- res , err = b .downloadFromOCIRepository (b .remote .(* repository.OCIChartRepository ), remoteRef , result , opts )
103
- if err != nil {
104
- return nil , & BuildError {Reason : ErrChartPull , Err : err }
105
- }
106
- if res == nil {
107
- return result , nil
108
- }
109
- default :
110
- return nil , & BuildError {Reason : ErrChartReference , Err : fmt .Errorf ("unsupported remote type %T" , b .remote )}
85
+ res , result , err := b .downloadFromRepository (b .remote , remoteRef , opts )
86
+ if err != nil {
87
+ return nil , & BuildError {Reason : ErrChartPull , Err : err }
88
+ }
89
+ if res == nil {
90
+ return result , nil
111
91
}
112
92
113
93
requiresPackaging := len (opts .GetValuesFiles ()) != 0 || opts .VersionMetadata != ""
@@ -152,66 +132,31 @@ func (b *remoteChartBuilder) Build(_ context.Context, ref Reference, p string, o
152
132
return result , nil
153
133
}
154
134
155
- func (b * remoteChartBuilder ) downloadFromOCIRepository (remote * repository.OCIChartRepository , remoteRef RemoteReference , buildResult * Build , opts BuildOptions ) (* bytes.Buffer , error ) {
156
- cv , err := remote .Get (remoteRef .Name , remoteRef .Version )
157
- if err != nil {
158
- err = fmt .Errorf ("failed to get chart version for remote reference: %w" , err )
159
- return nil , & BuildError {Reason : ErrChartPull , Err : err }
160
- }
161
-
162
- result , shouldReturn , err := generateBuildResult (cv , opts )
163
- if err != nil {
164
- return nil , err
165
- }
166
-
167
- if shouldReturn {
168
- * buildResult = * result
169
- return nil , nil
170
- }
171
-
172
- // Download the package for the resolved version
173
- res , err := remote .DownloadChart (cv )
174
- if err != nil {
175
- err = fmt .Errorf ("failed to download chart for remote reference: %w" , err )
176
- return nil , & BuildError {Reason : ErrChartPull , Err : err }
177
- }
178
-
179
- * buildResult = * result
180
-
181
- return res , nil
182
- }
183
-
184
- func (b * remoteChartBuilder ) downloadFromRepository (remote * repository.ChartRepository , remoteRef RemoteReference , buildResult * Build , opts BuildOptions ) (* bytes.Buffer , error ) {
185
- if err := remote .StrategicallyLoadIndex (); err != nil {
186
- err = fmt .Errorf ("could not load repository index for remote chart reference: %w" , err )
187
- return nil , & BuildError {Reason : ErrChartPull , Err : err }
188
- }
189
-
135
+ func (b * remoteChartBuilder ) downloadFromRepository (remote Repository , remoteRef RemoteReference , opts BuildOptions ) (* bytes.Buffer , * Build , error ) {
190
136
// Get the current version for the RemoteReference
191
- cv , err := remote .Get (remoteRef .Name , remoteRef .Version )
137
+ cv , err := remote .GetChartVersion (remoteRef .Name , remoteRef .Version )
192
138
if err != nil {
193
139
err = fmt .Errorf ("failed to get chart version for remote reference: %w" , err )
194
- return nil , & BuildError {Reason : ErrChartReference , Err : err }
140
+ return nil , nil , & BuildError {Reason : ErrChartReference , Err : err }
195
141
}
196
142
197
143
result , shouldReturn , err := generateBuildResult (cv , opts )
198
144
if err != nil {
199
- return nil , err
145
+ return nil , nil , err
200
146
}
201
- * buildResult = * result
202
147
203
148
if shouldReturn {
204
- return nil , nil
149
+ return nil , result , nil
205
150
}
206
151
207
152
// Download the package for the resolved version
208
153
res , err := remote .DownloadChart (cv )
209
154
if err != nil {
210
155
err = fmt .Errorf ("failed to download chart for remote reference: %w" , err )
211
- return nil , & BuildError {Reason : ErrChartPull , Err : err }
156
+ return nil , nil , & BuildError {Reason : ErrChartPull , Err : err }
212
157
}
213
158
214
- return res , nil
159
+ return res , result , nil
215
160
}
216
161
217
162
// generateBuildResult returns a Build object generated from the given chart version and build options. It also returns
0 commit comments