@@ -35,18 +35,20 @@ var (
35
35
)
36
36
37
37
const (
38
- varURL = "url"
39
- varToken = "token"
40
- varAgentToken = "agent-token"
41
- varAgentURL = "agent-url"
42
- varGlobalConfig = "global-config"
43
- varNoOpen = "no-open"
44
- varNoVersionCheck = "no-version-warning"
45
- varForceTty = "force-tty"
46
- varVerbose = "verbose"
47
- notLoggedInMessage = "You are not logged in. Try logging in using 'coder login <url>'."
48
-
49
- envNoVersionCheck = "CODER_NO_VERSION_WARNING"
38
+ varURL = "url"
39
+ varToken = "token"
40
+ varAgentToken = "agent-token"
41
+ varAgentURL = "agent-url"
42
+ varGlobalConfig = "global-config"
43
+ varNoOpen = "no-open"
44
+ varNoVersionCheck = "no-version-warning"
45
+ varNoFeatureWarning = "no-feature-warning"
46
+ varForceTty = "force-tty"
47
+ varVerbose = "verbose"
48
+ notLoggedInMessage = "You are not logged in. Try logging in using 'coder login <url>'."
49
+
50
+ envNoVersionCheck = "CODER_NO_VERSION_WARNING"
51
+ envNoFeatureWarning = "CODER_NO_FEATURE_WARNING"
50
52
)
51
53
52
54
var (
@@ -103,36 +105,33 @@ func Root(subcommands []*cobra.Command) *cobra.Command {
103
105
Long : `Coder — A tool for provisioning self-hosted development environments.
104
106
` ,
105
107
PersistentPreRun : func (cmd * cobra.Command , args []string ) {
106
- err := func () error {
107
- if cliflag .IsSetBool (cmd , varNoVersionCheck ) {
108
- return nil
109
- }
110
-
111
- // Login handles checking the versions itself since it
112
- // has a handle to an unauthenticated client.
113
- // Server is skipped for obvious reasons.
114
- if cmd .Name () == "login" || cmd .Name () == "server" || cmd .Name () == "gitssh" {
115
- return nil
116
- }
117
-
118
- client , err := CreateClient (cmd )
119
- // If the client is unauthenticated we can ignore the check.
120
- // The child commands should handle an unauthenticated client.
121
- if xerrors .Is (err , errUnauthenticated ) {
122
- return nil
123
- }
124
- if err != nil {
125
- return xerrors .Errorf ("create client: %w" , err )
126
- }
127
- return checkVersions (cmd , client )
128
- }()
108
+ if cliflag .IsSetBool (cmd , varNoVersionCheck ) &&
109
+ cliflag .IsSetBool (cmd , varNoFeatureWarning ) {
110
+ return
111
+ }
112
+
113
+ // Login handles checking the versions itself since it
114
+ // has a handle to an unauthenticated client.
115
+ // Server is skipped for obvious reasons.
116
+ if cmd .Name () == "login" || cmd .Name () == "server" || cmd .Name () == "gitssh" {
117
+ return
118
+ }
119
+
120
+ client , err := CreateClient (cmd )
121
+ // If we are unable to create a client, presumably the subcommand will fail as well
122
+ // so we can bail out here.
123
+ if err != nil {
124
+ return
125
+ }
126
+ err = checkVersions (cmd , client )
129
127
if err != nil {
130
128
// Just log the error here. We never want to fail a command
131
129
// due to a pre-run.
132
130
_ , _ = fmt .Fprintf (cmd .ErrOrStderr (),
133
131
cliui .Styles .Warn .Render ("check versions error: %s" ), err )
134
132
_ , _ = fmt .Fprintln (cmd .ErrOrStderr ())
135
133
}
134
+ checkWarnings (cmd , client )
136
135
},
137
136
Example : formatExamples (
138
137
example {
@@ -152,6 +151,7 @@ func Root(subcommands []*cobra.Command) *cobra.Command {
152
151
153
152
cmd .PersistentFlags ().String (varURL , "" , "Specify the URL to your deployment." )
154
153
cliflag .Bool (cmd .PersistentFlags (), varNoVersionCheck , "" , envNoVersionCheck , false , "Suppress warning when client and server versions do not match." )
154
+ cliflag .Bool (cmd .PersistentFlags (), varNoFeatureWarning , "" , envNoFeatureWarning , false , "Suppress warnings about unlicensed features." )
155
155
cliflag .String (cmd .PersistentFlags (), varToken , "" , envSessionToken , "" , fmt .Sprintf ("Specify an authentication token. For security reasons setting %s is preferred." , envSessionToken ))
156
156
cliflag .String (cmd .PersistentFlags (), varAgentToken , "" , "CODER_AGENT_TOKEN" , "" , "Specify an agent authentication token." )
157
157
_ = cmd .PersistentFlags ().MarkHidden (varAgentToken )
@@ -493,3 +493,16 @@ download the server version with: 'curl -L https://coder.com/install.sh | sh -s
493
493
494
494
return nil
495
495
}
496
+
497
+ func checkWarnings (cmd * cobra.Command , client * codersdk.Client ) {
498
+ if cliflag .IsSetBool (cmd , varNoFeatureWarning ) {
499
+ return
500
+ }
501
+ entitlements , err := client .Entitlements (cmd .Context ())
502
+ if err != nil {
503
+ return
504
+ }
505
+ for _ , w := range entitlements .Warnings {
506
+ _ , _ = fmt .Fprintln (cmd .ErrOrStderr (), cliui .Styles .Warn .Render (w ))
507
+ }
508
+ }
0 commit comments