@@ -26,6 +26,7 @@ import {
2626 fileFrameworkQuery ,
2727 createDeploymentMutation ,
2828 cmsEnvironmentVariablesQuery ,
29+ environmentsQuery
2930} from '../graphql' ;
3031import {
3132 LogFn ,
@@ -36,6 +37,7 @@ import {
3637 EmitMessage ,
3738 DeploymentLogResp ,
3839 ServerLogResp ,
40+ Environment ,
3941} from '../types' ;
4042
4143export default class BaseClass {
@@ -85,14 +87,14 @@ export default class BaseClass {
8587 * @return {* } {Promise<void>}
8688 * @memberof GitHub
8789 */
88- async createNewDeployment ( skipGitData = false , uploadUid ?: string ) : Promise < void > {
90+ async createNewDeployment ( skipGitData = false , environmentUid : string , uploadUid ?: string ) : Promise < void > {
8991 const deployment : Record < string , any > = {
90- environment : ( first ( this . config . currentConfig . environments ) as Record < string , any > ) ?. uid ,
92+ environment : environmentUid
9193 } ;
9294
9395 if ( uploadUid ) {
9496 deployment . uploadUid = uploadUid ;
95- }
97+ }
9698
9799 await this . apolloClient
98100 . mutate ( {
@@ -394,7 +396,7 @@ export default class BaseClass {
394396 data . project = this . config . currentConfig ;
395397 }
396398
397- writeFileSync ( this . config . config , JSON . stringify ( data ) , {
399+ writeFileSync ( this . config . config , JSON . stringify ( data , null , 2 ) , {
398400 encoding : 'utf8' ,
399401 flag : 'w' ,
400402 } ) ;
@@ -675,7 +677,7 @@ export default class BaseClass {
675677 } ,
676678 baseUrl : this . config . manageApiBaseUrl ,
677679 } ) . apolloClient ;
678- this . config . environment = ( last ( this . config . currentConfig . environments ) as Record < string , any > ) ? .uid ;
680+ this . config . environment = ( await this . getEnvironment ( ) ) . uid ;
679681 this . config . deployment = ( last ( this . config . currentConfig . deployments ) as Record < string , any > ) ?. uid ;
680682 const logs = new LogPolling ( {
681683 config : this . config ,
@@ -744,6 +746,42 @@ export default class BaseClass {
744746 this . exit ( 1 ) ;
745747 }
746748
749+ async getEnvironment ( ) : Promise < Environment > | never {
750+ const environmentFlagInput = this . config [ 'environment' ] ;
751+
752+ if ( ! environmentFlagInput ) {
753+ const defaultEnvironment = ( first ( this . config . currentConfig . environments ) as Environment ) ;
754+ this . setEnvironmentOnConfig ( defaultEnvironment as Environment ) ;
755+ return defaultEnvironment ;
756+ }
757+ const environmentList = await this . fetchEnvironments ( ) ;
758+ let environment = environmentList . find ( ( env : Environment ) => env . name === environmentFlagInput || env . uid === environmentFlagInput ) ;
759+
760+ if ( ! environment ) {
761+ this . log ( `Environment "${ environmentFlagInput } " not found in this project. Please provide a valid environment name or UID.` , 'error' ) ;
762+ this . exit ( 1 ) ;
763+ }
764+
765+ environment = environment as Environment ;
766+ this . setEnvironmentOnConfig ( environment ) ;
767+ return environment ;
768+ }
769+
770+ async setEnvironmentOnConfig ( environment : Environment ) : Promise < void > {
771+ this . config . environment = environment . uid ;
772+ }
773+
774+ async fetchEnvironments ( ) : Promise < Environment [ ] > | never {
775+ try {
776+ const { data } = await this . apolloClient . query ( { query : environmentsQuery } ) ;
777+ const environments = map ( data . Environments . edges , 'node' ) ;
778+ return environments ;
779+ } catch ( error : unknown ) {
780+ this . log ( error instanceof Error ? error . message : String ( error ) , 'error' ) ;
781+ process . exit ( 1 ) ;
782+ }
783+ }
784+
747785 /**
748786 * @method showDeploymentUrl - show deployment URL and open it on browser
749787 *
@@ -791,4 +829,4 @@ export default class BaseClass {
791829 } ) ;
792830 }
793831 }
794- }
832+ }
0 commit comments