@@ -25,7 +25,6 @@ import (
2525 "path/filepath"
2626
2727 "github.com/Masterminds/semver/v3"
28- "github.com/fluxcd/source-controller/internal/helm/repository"
2928 helmchart "helm.sh/helm/v3/pkg/chart"
3029 "helm.sh/helm/v3/pkg/chartutil"
3130 "helm.sh/helm/v3/pkg/repo"
@@ -37,22 +36,22 @@ import (
3736 "github.com/fluxcd/source-controller/internal/helm/chart/secureloader"
3837)
3938
40- // Remote is a repository.ChartRepository or a repository.OCIChartRepository.
39+ // Repository is a repository.ChartRepository or a repository.OCIChartRepository.
4140// 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 )
4544 // GetChartVersion returns a chart.ChartVersion from the remote repository.
4645 DownloadChart (chart * repo.ChartVersion ) (* bytes.Buffer , error )
4746}
4847
4948type remoteChartBuilder struct {
50- remote Remote
49+ remote Repository
5150}
5251
5352// NewRemoteBuilder returns a Builder capable of building a Helm
5453// chart with a RemoteReference in the given repository.ChartRepository.
55- func NewRemoteBuilder (repository Remote ) Builder {
54+ func NewRemoteBuilder (repository Repository ) Builder {
5655 return & remoteChartBuilder {
5756 remote : repository ,
5857 }
@@ -83,31 +82,12 @@ func (b *remoteChartBuilder) Build(_ context.Context, ref Reference, p string, o
8382 return nil , & BuildError {Reason : ErrChartReference , Err : err }
8483 }
8584
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
11191 }
11292
11393 requiresPackaging := len (opts .GetValuesFiles ()) != 0 || opts .VersionMetadata != ""
@@ -152,66 +132,31 @@ func (b *remoteChartBuilder) Build(_ context.Context, ref Reference, p string, o
152132 return result , nil
153133}
154134
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 ) {
190136 // 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 )
192138 if err != nil {
193139 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 }
195141 }
196142
197143 result , shouldReturn , err := generateBuildResult (cv , opts )
198144 if err != nil {
199- return nil , err
145+ return nil , nil , err
200146 }
201- * buildResult = * result
202147
203148 if shouldReturn {
204- return nil , nil
149+ return nil , result , nil
205150 }
206151
207152 // Download the package for the resolved version
208153 res , err := remote .DownloadChart (cv )
209154 if err != nil {
210155 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 }
212157 }
213158
214- return res , nil
159+ return res , result , nil
215160}
216161
217162// generateBuildResult returns a Build object generated from the given chart version and build options. It also returns
0 commit comments