Skip to content

Commit f0c8bc3

Browse files
committed
fix: reorder experiment loading so flags have highest priority
Reorder experiment source precedence so that higher-priority sources override lower ones: permanently enabled < system config < project config < flags.
1 parent a70d3ee commit f0c8bc3

1 file changed

Lines changed: 16 additions & 16 deletions

File tree

internal/config/experiments.go

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,11 @@ func (c *Config) LoadExperiments(
3232
printDebug func(ctx context.Context, format string, a ...interface{}),
3333
) {
3434
experiments := map[experiment.Experiment]bool{}
35-
// Load from flags
36-
for _, flagValue := range c.ExperimentsFlag {
37-
experiments[experiment.Experiment(flagValue)] = true
38-
}
39-
printDebug(ctx, fmt.Sprintf("active flag experiments: %s", formatExperimentMap(experiments)))
40-
// Load from project config file
41-
projectConfig, err := ReadProjectConfigFile(ctx, c.fs, c.os)
42-
if err != nil && slackerror.ToSlackError(err).Code != slackerror.ErrInvalidAppDirectory {
43-
printDebug(ctx, fmt.Sprintf("failed to parse project-level config file: %s", err))
44-
} else if err == nil {
45-
printDebug(ctx, fmt.Sprintf("active project experiments: %s", formatExperimentMap(toExperimentMap(projectConfig.Experiments))))
46-
maps.Copy(experiments, toExperimentMap(projectConfig.Experiments))
35+
// Load from permanently enabled list (lowest priority)
36+
for _, exp := range experiment.EnabledExperiments {
37+
experiments[exp] = true
4738
}
39+
printDebug(ctx, fmt.Sprintf("active permanently enabled experiments: %s", experiment.EnabledExperiments))
4840
// Load from system config file
4941
userConfig, err := c.SystemConfig.UserConfig(ctx)
5042
if err != nil {
@@ -53,11 +45,19 @@ func (c *Config) LoadExperiments(
5345
printDebug(ctx, fmt.Sprintf("active system experiments: %s", formatExperimentMap(toExperimentMap(userConfig.Experiments))))
5446
maps.Copy(experiments, toExperimentMap(userConfig.Experiments))
5547
}
56-
// Load from permanently enabled list
57-
for _, exp := range experiment.EnabledExperiments {
58-
experiments[exp] = true
48+
// Load from project config file
49+
projectConfig, err := ReadProjectConfigFile(ctx, c.fs, c.os)
50+
if err != nil && slackerror.ToSlackError(err).Code != slackerror.ErrInvalidAppDirectory {
51+
printDebug(ctx, fmt.Sprintf("failed to parse project-level config file: %s", err))
52+
} else if err == nil {
53+
printDebug(ctx, fmt.Sprintf("active project experiments: %s", formatExperimentMap(toExperimentMap(projectConfig.Experiments))))
54+
maps.Copy(experiments, toExperimentMap(projectConfig.Experiments))
5955
}
60-
printDebug(ctx, fmt.Sprintf("active permanently enabled experiments: %s", experiment.EnabledExperiments))
56+
// Load from flags (highest priority)
57+
for _, flagValue := range c.ExperimentsFlag {
58+
experiments[experiment.Experiment(flagValue)] = true
59+
}
60+
printDebug(ctx, fmt.Sprintf("active flag experiments: %s", formatExperimentMap(experiments)))
6161
// Audit the experiments
6262
c.experiments = experiments
6363
for name := range c.experiments {

0 commit comments

Comments
 (0)