49
49
indexImage2 = dockerHost + "/olmtest/e2e-index:" + indexTag2
50
50
indexImage3 = dockerHost + "/olmtest/e2e-index:" + indexTag3
51
51
52
+ fbcIndexImageTag = dockerHost + "/olmtest/e2e-fbc"
53
+ fbcPackageName = "webhook-operator"
54
+
52
55
// publishedIndex is an index used to check for regressions in opm's behavior.
53
56
publishedIndex = os .Getenv ("PUBLISHED_INDEX" )
54
57
)
@@ -68,23 +71,26 @@ func (bl bundleLocations) images() []string {
68
71
return images
69
72
}
70
73
71
- func inTemporaryBuildContext (f func () error ) (rerr error ) {
74
+ func inTemporaryBuildContext (f func () error , fromDir , toDir string ) (rerr error ) {
72
75
td , err := ioutil .TempDir ("." , "opm-" )
73
76
if err != nil {
74
77
return err
75
78
}
76
- err = copy .Copy ("../../manifests" , filepath .Join (td , "manifests" ))
79
+ err = copy .Copy (fromDir , filepath .Join (td , toDir ))
77
80
if err != nil {
78
81
return err
79
82
}
83
+
80
84
wd , err := os .Getwd ()
81
85
if err != nil {
82
86
return err
83
87
}
88
+
84
89
err = os .Chdir (td )
85
90
if err != nil {
86
91
return err
87
92
}
93
+
88
94
defer func () {
89
95
err := os .Chdir (wd )
90
96
if rerr == nil {
@@ -94,6 +100,51 @@ func inTemporaryBuildContext(f func() error) (rerr error) {
94
100
return f ()
95
101
}
96
102
103
+ func executeCommand (cmd * exec.Cmd ) error {
104
+ cmd .Stdout = os .Stdout
105
+ cmd .Stderr = os .Stderr
106
+
107
+ if err := cmd .Run (); err != nil {
108
+ return fmt .Errorf ("Failed to exec %#v: %v" , cmd .Args , err )
109
+ }
110
+
111
+ return nil
112
+ }
113
+
114
+ // buildFBCWith builds a file based catalog image in the local registry
115
+ func buildFBCWith (containerTool , image string ) error {
116
+ err := inTemporaryBuildContext (func () error {
117
+ cmd , err := buildFBCImage (image , containerTool , "file-based-catalog.Dockerfile" )
118
+ if err != nil {
119
+ return err
120
+ }
121
+
122
+ return executeCommand (cmd )
123
+ }, "../../fbc-dir" , "" )
124
+
125
+ if err != nil {
126
+ return err
127
+ }
128
+
129
+ return nil
130
+ }
131
+
132
+ // buildFBCImagce uses docker or podman an executes the build command of a dockerfile
133
+ func buildFBCImage (imageTag , imageBuilder string , dockerFile string ) (* exec.Cmd , error ) {
134
+ var args []string
135
+
136
+ switch imageBuilder {
137
+ case "docker" , "podman" :
138
+ args = append (args , "build" , "-f" , dockerFile , "-t" , imageTag , "." )
139
+ case "buildah" :
140
+ args = append (args , "bud" , "--format=docker" , "-f" , dockerFile , "-t" , imageTag , "." )
141
+ default :
142
+ return nil , fmt .Errorf ("%s is not supported image builder" , imageBuilder )
143
+ }
144
+
145
+ return exec .Command (imageBuilder , args ... ), nil
146
+ }
147
+
97
148
func buildIndexWith (containerTool , fromIndexImage , toIndexImage string , bundleImages []string , mode registry.Mode , overwriteLatest bool ) error {
98
149
logger := logrus .WithFields (logrus.Fields {"bundles" : bundleImages })
99
150
indexAdder := indexer .NewIndexAdder (containertools .NewContainerTool (containerTool , containertools .NoneTool ), containertools .NewContainerTool (containerTool , containertools .NoneTool ), logger )
@@ -136,17 +187,17 @@ func buildFromIndexWith(containerTool string) error {
136
187
}
137
188
138
189
// TODO(djzager): make this more complete than what should be a simple no-op
139
- func pruneIndexWith (containerTool string ) error {
140
- logger := logrus .WithFields (logrus.Fields {"packages" : packageName })
190
+ func pruneIndexWith (containerTool string , fromIndex string , tag string , packageValue string ) error {
191
+ logger := logrus .WithFields (logrus.Fields {"packages" : packageValue })
141
192
indexAdder := indexer .NewIndexPruner (containertools .NewContainerTool (containerTool , containertools .NoneTool ), logger )
142
193
143
194
request := indexer.PruneFromIndexRequest {
144
195
Generate : false ,
145
- FromIndex : indexImage2 ,
196
+ FromIndex : fromIndex ,
146
197
BinarySourceImage : "" ,
147
198
OutDockerfile : "" ,
148
- Tag : indexImage3 ,
149
- Packages : []string {packageName },
199
+ Tag : tag ,
200
+ Packages : []string {packageValue },
150
201
Permissive : false ,
151
202
}
152
203
@@ -226,7 +277,7 @@ var _ = Describe("opm", func() {
226
277
img := bundleImage + ":" + bundleTag3
227
278
err := inTemporaryBuildContext (func () error {
228
279
return bundle .BuildFunc (bundlePath3 , "" , img , containerTool , packageName , channels , defaultChannel , false )
229
- })
280
+ }, "../../manifests" , "manifests" )
230
281
Expect (err ).NotTo (HaveOccurred ())
231
282
232
283
By ("pushing bundle" )
@@ -271,7 +322,7 @@ var _ = Describe("opm", func() {
271
322
for _ , b := range bundles {
272
323
err = inTemporaryBuildContext (func () error {
273
324
return bundle .BuildFunc (b .path , "" , b .image , containerTool , packageName , channels , defaultChannel , false )
274
- })
325
+ }, "../../manifests" , "manifests" )
275
326
Expect (err ).NotTo (HaveOccurred ())
276
327
}
277
328
@@ -296,10 +347,22 @@ var _ = Describe("opm", func() {
296
347
err = pushWith (containerTool , indexImage2 )
297
348
Expect (err ).NotTo (HaveOccurred ())
298
349
350
+ By ("building a fbc index" )
351
+ err = buildFBCWith (containerTool , fbcIndexImageTag )
352
+ Expect (err ).NotTo (HaveOccurred ())
353
+
354
+ By ("pushing a fbc index" )
355
+ err = pushWith (containerTool , fbcIndexImageTag )
356
+ Expect (err ).NotTo (HaveOccurred ())
357
+
299
358
By ("pruning an index" )
300
- err = pruneIndexWith (containerTool )
359
+ err = pruneIndexWith (containerTool , indexImage2 , indexImage3 , packageName )
301
360
Expect (err ).NotTo (HaveOccurred ())
302
361
362
+ By ("pruning a fbc index" )
363
+ err = pruneIndexWith (containerTool , fbcIndexImageTag , indexImage3 , fbcPackageName )
364
+ Expect (err ).To (MatchError (indexer .ErrFileBasedCatalogPrune ))
365
+
303
366
By ("pushing an index" )
304
367
err = pushWith (containerTool , indexImage3 )
305
368
Expect (err ).NotTo (HaveOccurred ())
0 commit comments