Skip to content

Commit 31bbeb3

Browse files
committed
adding --enable-alpha feature flag
Signed-off-by: Lance Galletti <[email protected]>
1 parent 962b95b commit 31bbeb3

File tree

6 files changed

+114
-8
lines changed

6 files changed

+114
-8
lines changed

cmd/opm/index/add.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,10 @@ func addIndexAddCmd(parent *cobra.Command) {
6868
if err := indexCmd.Flags().MarkHidden("overwrite-latest"); err != nil {
6969
logrus.Panic(err.Error())
7070
}
71+
indexCmd.Flags().Bool("enable-alpha", false, "enable unsupported alpha features of the OPM CLI")
72+
if err := indexCmd.Flags().MarkHidden("enable-alpha"); err != nil {
73+
logrus.Panic(err.Error())
74+
}
7175
if err := indexCmd.Flags().MarkHidden("debug"); err != nil {
7276
logrus.Panic(err.Error())
7377
}
@@ -129,6 +133,11 @@ func runIndexAddCmdFunc(cmd *cobra.Command, args []string) error {
129133
return err
130134
}
131135

136+
enableAlpha, err := cmd.Flags().GetBool("enable-alpha")
137+
if err != nil {
138+
return err
139+
}
140+
132141
modeEnum, err := registry.GetModeFromString(mode)
133142
if err != nil {
134143
return err
@@ -159,6 +168,7 @@ func runIndexAddCmdFunc(cmd *cobra.Command, args []string) error {
159168
Mode: modeEnum,
160169
SkipTLS: skipTLS,
161170
Overwrite: overwrite,
171+
EnableAlpha: enableAlpha,
162172
}
163173

164174
err = indexAdder.AddToIndex(request)

pkg/lib/indexer/indexer.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ type AddToIndexRequest struct {
6565
CaFile string
6666
SkipTLS bool
6767
Overwrite bool
68+
EnableAlpha bool
6869
}
6970

7071
// AddToIndex is an aggregate API used to generate a registry index image with additional bundles
@@ -89,6 +90,7 @@ func (i ImageIndexer) AddToIndex(request AddToIndexRequest) error {
8990
SkipTLS: request.SkipTLS,
9091
ContainerTool: i.PullTool,
9192
Overwrite: request.Overwrite,
93+
EnableAlpha: request.EnableAlpha,
9294
}
9395

9496
// Add the bundles to the registry

pkg/lib/registry/registry.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ type AddToRegistryRequest struct {
3131
Mode registry.Mode
3232
ContainerTool containertools.ContainerTool
3333
Overwrite bool
34+
EnableAlpha bool
3435
}
3536

3637
func (r RegistryUpdater) AddToRegistry(request AddToRegistryRequest) error {
@@ -40,10 +41,11 @@ func (r RegistryUpdater) AddToRegistry(request AddToRegistryRequest) error {
4041
}
4142
defer db.Close()
4243

43-
dbLoader, err := sqlite.NewSQLLiteLoader(db)
44+
dbLoader, err := sqlite.NewSQLLiteLoader(db, sqlite.WithEnableAlpha(request.EnableAlpha))
4445
if err != nil {
4546
return err
4647
}
48+
4749
if err := dbLoader.Migrate(context.TODO()); err != nil {
4850
return err
4951
}

pkg/registry/populator_test.go

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2085,7 +2085,7 @@ func TestSubstitutesFor(t *testing.T) {
20852085
db, cleanup := CreateTestDb(t)
20862086
defer cleanup()
20872087

2088-
load, err := sqlite.NewSQLLiteLoader(db)
2088+
load, err := sqlite.NewSQLLiteLoader(db, sqlite.WithEnableAlpha(true))
20892089
require.NoError(t, err)
20902090
err = load.Migrate(context.TODO())
20912091
require.NoError(t, err)
@@ -2157,3 +2157,80 @@ func getBundleSubstitution(ctx context.Context, db *sql.DB, name string) (string
21572157
}
21582158
return substitutesFor.String, nil
21592159
}
2160+
2161+
func TestEnableAlpha(t *testing.T) {
2162+
type args struct {
2163+
bundles []string
2164+
enableAlpha bool
2165+
}
2166+
type expected struct {
2167+
err error
2168+
}
2169+
tests := []struct {
2170+
description string
2171+
args args
2172+
expected expected
2173+
}{
2174+
{
2175+
description: "SubstitutesForTrue",
2176+
args: args{
2177+
bundles: []string{
2178+
"prometheus.0.22.2",
2179+
"prometheus.0.14.0",
2180+
"prometheus.0.15.0",
2181+
"prometheus.0.15.0.substitutesfor",
2182+
},
2183+
enableAlpha: true,
2184+
},
2185+
expected: expected{
2186+
err: nil,
2187+
},
2188+
},
2189+
{
2190+
description: "SubstitutesForFalse",
2191+
args: args{
2192+
bundles: []string{
2193+
"prometheus.0.22.2",
2194+
"prometheus.0.14.0",
2195+
"prometheus.0.15.0",
2196+
"prometheus.0.15.0.substitutesfor",
2197+
},
2198+
enableAlpha: false,
2199+
},
2200+
expected: expected{
2201+
err: errors.NewAggregate([]error{fmt.Errorf("SubstitutesFor is an alpha-only feature. You must enable alpha features with the flag --enable-alpha in order to use this feature.")}),
2202+
},
2203+
},
2204+
}
2205+
2206+
for _, tt := range tests {
2207+
t.Run(tt.description, func(t *testing.T) {
2208+
logrus.SetLevel(logrus.DebugLevel)
2209+
db, cleanup := CreateTestDb(t)
2210+
defer cleanup()
2211+
2212+
load, err := sqlite.NewSQLLiteLoader(db, sqlite.WithEnableAlpha(tt.args.enableAlpha))
2213+
require.NoError(t, err)
2214+
err = load.Migrate(context.TODO())
2215+
require.NoError(t, err)
2216+
query := sqlite.NewSQLLiteQuerierFromDb(db)
2217+
2218+
graphLoader, err := sqlite.NewSQLGraphLoaderFromDB(db)
2219+
require.NoError(t, err)
2220+
2221+
populate := func(names []string) error {
2222+
refMap := make(map[image.Reference]string, 0)
2223+
for _, name := range names {
2224+
refMap[image.SimpleReference("quay.io/test/"+name)] = "../../bundles/" + name
2225+
}
2226+
return registry.NewDirectoryPopulator(
2227+
load,
2228+
graphLoader,
2229+
query,
2230+
refMap,
2231+
make(map[string]map[image.Reference]string, 0), false).Populate(registry.ReplacesMode)
2232+
}
2233+
require.Equal(t, tt.expected.err, populate(tt.args.bundles))
2234+
})
2235+
}
2236+
}

pkg/sqlite/db_options.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@ import (
77
type DbOptions struct {
88
// MigratorBuilder is a function that returns a migrator instance
99
MigratorBuilder func(*sql.DB) (Migrator, error)
10+
EnableAlpha bool
1011
}
1112

1213
type DbOption func(*DbOptions)
1314

1415
func defaultDBOptions() *DbOptions {
1516
return &DbOptions{
1617
MigratorBuilder: NewSQLLiteMigrator,
18+
EnableAlpha: false,
1719
}
1820
}
1921

@@ -22,3 +24,9 @@ func WithMigratorBuilder(m func(loader *sql.DB) (Migrator, error)) DbOption {
2224
o.MigratorBuilder = m
2325
}
2426
}
27+
28+
func WithEnableAlpha(enableAlpha bool) DbOption {
29+
return func(o *DbOptions) {
30+
o.EnableAlpha = enableAlpha
31+
}
32+
}

pkg/sqlite/load.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ import (
1616
)
1717

1818
type sqlLoader struct {
19-
db *sql.DB
20-
migrator Migrator
19+
db *sql.DB
20+
migrator Migrator
21+
enableAlpha bool
2122
}
2223

2324
type MigratableLoader interface {
@@ -42,7 +43,7 @@ func NewSQLLiteLoader(db *sql.DB, opts ...DbOption) (MigratableLoader, error) {
4243
return nil, err
4344
}
4445

45-
return &sqlLoader{db: db, migrator: migrator}, nil
46+
return &sqlLoader{db: db, migrator: migrator, enableAlpha: options.EnableAlpha}, nil
4647
}
4748

4849
func (s *sqlLoader) Migrate(ctx context.Context) error {
@@ -111,6 +112,10 @@ func (s *sqlLoader) addOperatorBundle(tx *sql.Tx, bundle *registry.Bundle) error
111112
return err
112113
}
113114

115+
if substitutesFor != "" && !s.enableAlpha {
116+
return fmt.Errorf("SubstitutesFor is an alpha-only feature. You must enable alpha features with the flag --enable-alpha in order to use this feature.")
117+
}
118+
114119
if _, err := addBundle.Exec(csvName, csvBytes, bundleBytes, bundleImage, version, skiprange, replaces, strings.Join(skips, ","), substitutesFor); err != nil {
115120
return err
116121
}
@@ -136,9 +141,11 @@ func (s *sqlLoader) addOperatorBundle(tx *sql.Tx, bundle *registry.Bundle) error
136141
return err
137142
}
138143

139-
err = s.addSubstitutesFor(tx, bundle)
140-
if err != nil {
141-
return err
144+
if s.enableAlpha {
145+
err = s.addSubstitutesFor(tx, bundle)
146+
if err != nil {
147+
return err
148+
}
142149
}
143150

144151
return s.addAPIs(tx, bundle)

0 commit comments

Comments
 (0)