feat: add experimental flag (#4364)

This commit is contained in:
Garrett Delfosse
2022-10-04 19:45:00 +00:00
committed by GitHub
parent 18b282cabb
commit ffbaa93722
12 changed files with 55 additions and 9 deletions
+18
View File
@@ -48,10 +48,12 @@ const (
varNoFeatureWarning = "no-feature-warning"
varForceTty = "force-tty"
varVerbose = "verbose"
varExperimental = "experimental"
notLoggedInMessage = "You are not logged in. Try logging in using 'coder login <url>'."
envNoVersionCheck = "CODER_NO_VERSION_WARNING"
envNoFeatureWarning = "CODER_NO_FEATURE_WARNING"
envExperimental = "CODER_EXPERIMENTAL"
)
var (
@@ -184,6 +186,7 @@ func Root(subcommands []*cobra.Command) *cobra.Command {
cmd.PersistentFlags().Bool(varNoOpen, false, "Block automatically opening URLs in the browser.")
_ = cmd.PersistentFlags().MarkHidden(varNoOpen)
cliflag.Bool(cmd.PersistentFlags(), varVerbose, "v", "CODER_VERBOSE", false, "Enable verbose output.")
cliflag.Bool(cmd.PersistentFlags(), varExperimental, "", envExperimental, false, "Enable experimental features. Experimental features are not ready for production.")
return cmd
}
@@ -598,3 +601,18 @@ func (h *headerTransport) RoundTrip(req *http.Request) (*http.Response, error) {
}
return h.transport.RoundTrip(req)
}
// ExperimentalEnabled returns if the experimental feature flag is enabled.
func ExperimentalEnabled(cmd *cobra.Command) bool {
return cliflag.IsSetBool(cmd, varExperimental)
}
// EnsureExperimental will ensure that the experimental feature flag is set if the given flag is set.
func EnsureExperimental(cmd *cobra.Command, name string) error {
_, set := cliflag.IsSet(cmd, name)
if set && !ExperimentalEnabled(cmd) {
return xerrors.Errorf("flag %s is set but requires flag --experimental or environment variable CODER_EXPERIMENTAL=true.", name)
}
return nil
}
+16
View File
@@ -13,6 +13,7 @@ import (
"github.com/coder/coder/buildinfo"
"github.com/coder/coder/cli"
"github.com/coder/coder/cli/cliflag"
"github.com/coder/coder/cli/clitest"
"github.com/coder/coder/codersdk"
)
@@ -153,4 +154,19 @@ func TestRoot(t *testing.T) {
// This won't succeed, because we're using the login cmd to assert requests.
_ = cmd.Execute()
})
t.Run("Experimental", func(t *testing.T) {
t.Parallel()
cmd, _ := clitest.New(t, "--experimental")
err := cmd.Execute()
require.NoError(t, err)
require.True(t, cli.ExperimentalEnabled(cmd))
cmd, _ = clitest.New(t, "help", "--verbose")
_ = cmd.Execute()
_, set := cliflag.IsSet(cmd, "verbose")
require.True(t, set)
require.ErrorContains(t, cli.EnsureExperimental(cmd, "verbose"), "--experimental")
})
}
+1
View File
@@ -368,6 +368,7 @@ func Server(newAPI func(context.Context, *coderd.Options) (*coderd.API, error))
AutoImportTemplates: validatedAutoImportTemplates,
MetricsCacheRefreshInterval: metricsCacheRefreshInterval,
AgentStatsRefreshInterval: agentStatRefreshInterval,
Experimental: ExperimentalEnabled(cmd),
}
if oauth2GithubClientSecret != "" {