@@ -27,6 +27,11 @@ interface PassThroughFlagsOptions {
27
27
// Only pass on flags that are relevant to CLI2
28
28
allowedFlags ?: string [ ]
29
29
}
30
+ interface ValidEnvironment {
31
+ environment : EnvironmentName
32
+ flags : FlagValues
33
+ requiresAuth : boolean
34
+ }
30
35
type EnvironmentName = string
31
36
/**
32
37
* Flags required to run a command in multiple environments
@@ -67,7 +72,7 @@ export default abstract class ThemeCommand extends Command {
67
72
68
73
async command (
69
74
_flags : FlagValues ,
70
- _session : AdminSession ,
75
+ _session ? : AdminSession ,
71
76
_multiEnvironment = false ,
72
77
_context ?: { stdout ?: Writable ; stderr ?: Writable } ,
73
78
) : Promise < void > { }
@@ -84,18 +89,17 @@ export default abstract class ThemeCommand extends Command {
84
89
}
85
90
const requiredFlags = klass . multiEnvironmentsFlags
86
91
const { flags} = await this . parse ( klass )
87
-
92
+ const commandRequiresAuth = 'password' in klass . flags
88
93
const environments = ( Array . isArray ( flags . environment ) ? flags . environment : [ flags . environment ] ) . filter ( Boolean )
89
94
90
95
// Single environment or no environment
91
96
if ( environments . length <= 1 ) {
92
- const session = await this . createSession ( flags )
97
+ const session = commandRequiresAuth ? await this . createSession ( flags ) : undefined
93
98
const commandName = this . constructor . name . toLowerCase ( )
94
99
95
100
recordEvent ( `theme-command:${ commandName } :single-env:authenticated` )
96
101
97
102
await this . command ( flags , session )
98
- await this . logAnalyticsData ( session )
99
103
return
100
104
}
101
105
@@ -112,7 +116,7 @@ export default abstract class ThemeCommand extends Command {
112
116
}
113
117
114
118
const environmentsMap = await this . loadEnvironments ( environments , flags , flagsWithoutDefaults )
115
- const validationResults = await this . validateEnvironments ( environmentsMap , requiredFlags )
119
+ const validationResults = await this . validateEnvironments ( environmentsMap , requiredFlags , commandRequiresAuth )
116
120
117
121
const commandAllowsForceFlag = 'force' in klass . flags
118
122
@@ -160,13 +164,15 @@ export default abstract class ThemeCommand extends Command {
160
164
* Split environments into valid and invalid based on flags
161
165
* @param environmentMap - The map of environments to validate
162
166
* @param requiredFlags - The required flags to check for
167
+ * @param requiresAuth - Whether the command requires authentication
163
168
* @returns An object containing valid and invalid environment arrays
164
169
*/
165
170
private async validateEnvironments (
166
171
environmentMap : Map < EnvironmentName , FlagValues > ,
167
172
requiredFlags : Exclude < RequiredFlags , null > ,
173
+ requiresAuth : boolean ,
168
174
) {
169
- const valid : { environment : EnvironmentName ; flags : FlagValues } [ ] = [ ]
175
+ const valid : ValidEnvironment [ ] = [ ]
170
176
const invalid : { environment : EnvironmentName ; reason : string } [ ] = [ ]
171
177
172
178
for ( const [ environmentName , environmentFlags ] of environmentMap ) {
@@ -176,8 +182,7 @@ export default abstract class ThemeCommand extends Command {
176
182
invalid . push ( { environment : environmentName , reason : `Missing flags: ${ missingFlagsText } ` } )
177
183
continue
178
184
}
179
-
180
- valid . push ( { environment : environmentName , flags : environmentFlags } )
185
+ valid . push ( { environment : environmentName , flags : environmentFlags , requiresAuth} )
181
186
}
182
187
183
188
return { valid, invalid}
@@ -194,7 +199,7 @@ export default abstract class ThemeCommand extends Command {
194
199
commandName : string ,
195
200
requiredFlags : Exclude < RequiredFlags , null > ,
196
201
validationResults : {
197
- valid : { environment : string ; flags : FlagValues } [ ]
202
+ valid : ValidEnvironment [ ]
198
203
invalid : { environment : string ; reason : string } [ ]
199
204
} ,
200
205
) {
@@ -234,7 +239,7 @@ export default abstract class ThemeCommand extends Command {
234
239
* Run the command in each valid environment concurrently
235
240
* @param validEnvironments - The valid environments to run the command in
236
241
*/
237
- private async runConcurrent ( validEnvironments : { environment : EnvironmentName ; flags : FlagValues } [ ] ) {
242
+ private async runConcurrent ( validEnvironments : ValidEnvironment [ ] ) {
238
243
const abortController = new AbortController ( )
239
244
240
245
const stores = validEnvironments . map ( ( env ) => env . flags . store as string )
@@ -245,13 +250,13 @@ export default abstract class ThemeCommand extends Command {
245
250
for ( const runGroup of runGroups ) {
246
251
// eslint-disable-next-line no-await-in-loop
247
252
await renderConcurrent ( {
248
- processes : runGroup . map ( ( { environment, flags} ) => ( {
253
+ processes : runGroup . map ( ( { environment, flags, requiresAuth } ) => ( {
249
254
prefix : environment ,
250
255
action : async ( stdout : Writable , stderr : Writable , _signal ) => {
251
256
try {
252
257
const store = flags . store as string
253
258
await useThemeStoreContext ( store , async ( ) => {
254
- const session = await this . createSession ( flags )
259
+ const session = requiresAuth ? await this . createSession ( flags ) : undefined
255
260
256
261
const commandName = this . constructor . name . toLowerCase ( )
257
262
recordEvent ( `theme-command:${ commandName } :multi-env:authenticated` )
@@ -280,8 +285,8 @@ export default abstract class ThemeCommand extends Command {
280
285
* @param environments - The environments to group
281
286
* @returns The environment groups
282
287
*/
283
- private createSequentialGroups ( environments : { environment : EnvironmentName ; flags : FlagValues } [ ] ) {
284
- const groups : { environment : EnvironmentName ; flags : FlagValues } [ ] [ ] = [ ]
288
+ private createSequentialGroups ( environments : ValidEnvironment [ ] ) {
289
+ const groups : ValidEnvironment [ ] [ ] = [ ]
285
290
286
291
environments . forEach ( ( environment ) => {
287
292
const groupWithoutStore = groups . find ( ( arr ) => ! arr . some ( ( env ) => env . flags . store === environment . flags . store ) )
0 commit comments