@@ -3,7 +3,7 @@ package semver
3
3
import (
4
4
"context"
5
5
"fmt"
6
- "io/ioutil "
6
+ "io"
7
7
"sort"
8
8
9
9
"github.com/blang/semver/v4"
@@ -18,8 +18,8 @@ import (
18
18
19
19
// data passed into this module externally
20
20
type Veneer struct {
21
- Ref string
22
- Reg image.Registry
21
+ Data io. Reader
22
+ Registry image.Registry
23
23
}
24
24
25
25
// IO structs -- BEGIN
@@ -78,17 +78,23 @@ type semverRenderedChannelVersions map[string]map[string]semver.Version // e.g.
78
78
func (v Veneer ) Render (ctx context.Context ) (* declcfg.DeclarativeConfig , error ) {
79
79
var out declcfg.DeclarativeConfig
80
80
81
- sv , err := readFile (v .Ref )
81
+ sv , err := readFile (v .Data )
82
82
if err != nil {
83
83
return nil , fmt .Errorf ("semver-render: unable to read file: %v" , err )
84
84
}
85
85
86
86
var cfgs []declcfg.DeclarativeConfig
87
- for _ , b := range sv .Candidate .Bundles {
87
+
88
+ bundleDict := make (map [string ]struct {})
89
+ buildBundleList (& sv .Candidate .Bundles , & bundleDict )
90
+ buildBundleList (& sv .Fast .Bundles , & bundleDict )
91
+ buildBundleList (& sv .Stable .Bundles , & bundleDict )
92
+
93
+ for b , _ := range bundleDict {
88
94
r := action.Render {
89
95
AllowedRefMask : action .RefBundleImage ,
90
- Refs : []string {b . Image },
91
- Registry : v .Reg ,
96
+ Refs : []string {b },
97
+ Registry : v .Registry ,
92
98
}
93
99
c , err := r .Run (ctx )
94
100
if err != nil {
@@ -114,8 +120,16 @@ func (v Veneer) Render(ctx context.Context) (*declcfg.DeclarativeConfig, error)
114
120
return & out , nil
115
121
}
116
122
117
- func readFile (ref string ) (* semverVeneer , error ) {
118
- data , err := ioutil .ReadFile (ref )
123
+ func buildBundleList (bundles * []semverVeneerBundleEntry , dict * map [string ]struct {}) {
124
+ for _ , b := range * bundles {
125
+ if _ , ok := (* dict )[b .Image ]; ! ok {
126
+ (* dict )[b .Image ] = struct {}{}
127
+ }
128
+ }
129
+ }
130
+
131
+ func readFile (data io.Reader ) (* semverVeneer , error ) {
132
+ fileData , err := io .ReadAll (data )
119
133
if err != nil {
120
134
return nil , err
121
135
}
@@ -126,7 +140,7 @@ func readFile(ref string) (*semverVeneer, error) {
126
140
GenerateMinorChannels : true ,
127
141
AvoidSkipPatch : false ,
128
142
}
129
- if err := yaml .Unmarshal (data , & sv ); err != nil {
143
+ if err := yaml .Unmarshal (fileData , & sv ); err != nil {
130
144
return nil , err
131
145
}
132
146
return & sv , nil
0 commit comments