@sembix/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/.env.example +6 -0
  2. package/LICENSE +15 -0
  3. package/README.md +698 -0
  4. package/config.example.yaml +118 -0
  5. package/dist/commands/hub-integration.d.ts +3 -0
  6. package/dist/commands/hub-integration.d.ts.map +1 -0
  7. package/dist/commands/hub-integration.js +107 -0
  8. package/dist/commands/hub-integration.js.map +1 -0
  9. package/dist/commands/setup.d.ts +3 -0
  10. package/dist/commands/setup.d.ts.map +1 -0
  11. package/dist/commands/setup.js +282 -0
  12. package/dist/commands/setup.js.map +1 -0
  13. package/dist/commands/update.d.ts +3 -0
  14. package/dist/commands/update.d.ts.map +1 -0
  15. package/dist/commands/update.js +498 -0
  16. package/dist/commands/update.js.map +1 -0
  17. package/dist/config-schema.d.ts +417 -0
  18. package/dist/config-schema.d.ts.map +1 -0
  19. package/dist/config-schema.js +152 -0
  20. package/dist/config-schema.js.map +1 -0
  21. package/dist/config.d.ts +6 -0
  22. package/dist/config.d.ts.map +1 -0
  23. package/dist/config.js +17 -0
  24. package/dist/config.js.map +1 -0
  25. package/dist/index.d.ts +3 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +260 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/prompts/environment-setup.d.ts +4 -0
  30. package/dist/prompts/environment-setup.d.ts.map +1 -0
  31. package/dist/prompts/environment-setup.js +689 -0
  32. package/dist/prompts/environment-setup.js.map +1 -0
  33. package/dist/prompts/hub-integration-step.d.ts +21 -0
  34. package/dist/prompts/hub-integration-step.d.ts.map +1 -0
  35. package/dist/prompts/hub-integration-step.js +104 -0
  36. package/dist/prompts/hub-integration-step.js.map +1 -0
  37. package/dist/prompts/hub-integration.d.ts +4 -0
  38. package/dist/prompts/hub-integration.d.ts.map +1 -0
  39. package/dist/prompts/hub-integration.js +141 -0
  40. package/dist/prompts/hub-integration.js.map +1 -0
  41. package/dist/prompts/prompt-helpers.d.ts +18 -0
  42. package/dist/prompts/prompt-helpers.d.ts.map +1 -0
  43. package/dist/prompts/prompt-helpers.js +50 -0
  44. package/dist/prompts/prompt-helpers.js.map +1 -0
  45. package/dist/types.d.ts +144 -0
  46. package/dist/types.d.ts.map +1 -0
  47. package/dist/types.js +23 -0
  48. package/dist/types.js.map +1 -0
  49. package/dist/utils/config-loader.d.ts +34 -0
  50. package/dist/utils/config-loader.d.ts.map +1 -0
  51. package/dist/utils/config-loader.js +377 -0
  52. package/dist/utils/config-loader.js.map +1 -0
  53. package/dist/utils/github.d.ts +38 -0
  54. package/dist/utils/github.d.ts.map +1 -0
  55. package/dist/utils/github.js +188 -0
  56. package/dist/utils/github.js.map +1 -0
  57. package/dist/utils/ui.d.ts +18 -0
  58. package/dist/utils/ui.d.ts.map +1 -0
  59. package/dist/utils/ui.js +62 -0
  60. package/dist/utils/ui.js.map +1 -0
  61. package/package.json +80 -0
@@ -0,0 +1,118 @@
1
+ # Sembix Studio CLI - Example Configuration File
2
+ #
3
+ # This file demonstrates the complete configuration schema for Sembix Studio environments.
4
+ # All fields are optional - you can provide a subset and fill in the rest via CLI flags or prompts.
5
+ #
6
+ # Priority: CLI flags > Config file > Interactive prompts
7
+ #
8
+ # Usage:
9
+ # sembix studio create --config config.yaml
10
+ # sembix studio update --config config.yaml
11
+
12
+ # ============================================================
13
+ # REPOSITORY CONFIGURATION
14
+ # ============================================================
15
+ repository:
16
+ owner: acme-corp
17
+ repo: sembix-deployment
18
+
19
+ # ============================================================
20
+ # BASIC CONFIGURATION
21
+ # ============================================================
22
+ environmentName: client-abc-production
23
+ awsAccountId: "123456789012"
24
+ awsRegion: us-east-1
25
+ customerRoleArn: arn:aws:iam::123456789012:role/GitHubActionsDeployRole
26
+ terraformStateBucket: my-terraform-state-bucket
27
+
28
+ # ============================================================
29
+ # DATABASE CONFIGURATION
30
+ # ============================================================
31
+ database:
32
+ name: sembix_studio
33
+ user: sembix_studio_user
34
+
35
+ # ============================================================
36
+ # NETWORKING & INFRASTRUCTURE
37
+ # ============================================================
38
+ networking:
39
+ enableVpcEndpoints: true
40
+ useCustomNetworking: false
41
+
42
+ # NEW VPC SETTINGS (when useCustomNetworking: false)
43
+ vpcCidr: "10.0.0.0/16"
44
+ publicSubnetCidrs: '["10.0.0.0/24","10.0.3.0/24"]'
45
+ privateSubnetCidrs: '["10.0.1.0/24","10.0.2.0/24"]'
46
+ azCount: "2"
47
+
48
+ # CUSTOM VPC SETTINGS (when useCustomNetworking: true)
49
+ # customVpcId: vpc-0123456789abcdef0
50
+ # customPublicSubnetIds: subnet-abc123,subnet-def456
51
+ # customPrivateSubnetIds: subnet-ghi789,subnet-jkl012
52
+
53
+ # ============================================================
54
+ # SECURITY & IAM (OPTIONAL)
55
+ # ============================================================
56
+ security:
57
+ # Optional KMS key for workflow runs
58
+ workflowRunsKeyAlias: ""
59
+
60
+ # Custom Security Groups
61
+ useCustomSecurityGroups: false
62
+ # customSecurityGroups:
63
+ # workflowEngine: sg-abc123
64
+ # aurora: sg-def456
65
+ # rdsProxy: sg-ghi789
66
+ # bffEcs: sg-jkl012
67
+ # bastion: sg-mno345
68
+ # bffAlb: sg-pqr678
69
+
70
+ # Custom IAM Roles
71
+ useCustomIamPolicies: false
72
+ # customIamRoles:
73
+ # workflowEngineExecutionRole: arn:aws:iam::123456789012:role/WorkflowEngineExec
74
+ # workflowEngineTaskRole: arn:aws:iam::123456789012:role/WorkflowEngineTask
75
+ # bffEcsTaskExecutionRole: arn:aws:iam::123456789012:role/BffEcsExec
76
+ # bffEcsTaskRole: arn:aws:iam::123456789012:role/BffEcsTask
77
+ # rdsProxyRole: arn:aws:iam::123456789012:role/RdsProxy
78
+ # sembixStudioMemoryRole: arn:aws:iam::123456789012:role/StudioMemory
79
+ # sembixStudioNotificationRole: arn:aws:iam::123456789012:role/StudioNotification
80
+
81
+ # ============================================================
82
+ # DNS & TLS CONFIGURATION
83
+ # ============================================================
84
+ tls:
85
+ cloudfrontDomain: studio.acme.com
86
+ cloudfrontCertArn: arn:aws:acm:us-east-1:123456789012:certificate/abc123
87
+ bffAlbCertificateArn: arn:aws:acm:us-east-1:123456789012:certificate/def456
88
+ hostedZoneId: Z1234567890ABC
89
+
90
+ # ============================================================
91
+ # FEATURE CONFIGURATION
92
+ # ============================================================
93
+ features:
94
+ deploySembixStudioMemory: true
95
+ deploySembixStudioNotifications: true
96
+ enableBffWaf: true
97
+
98
+ # ============================================================
99
+ # FRONTEND CONFIGURATION
100
+ # ============================================================
101
+ frontend:
102
+ githubAppClientId: Iv1.0123456789abcdef
103
+ githubAppName: sembix-studio-app
104
+ jiraClientId: abc123def456ghi789
105
+
106
+ # ============================================================
107
+ # HUB INTEGRATION (OPTIONAL - Step 9 in create flow)
108
+ # ============================================================
109
+ # hub:
110
+ # hubRoles:
111
+ # engineExecutionRole: arn:aws:iam::123456789012:role/HubEngineExecution
112
+ # consumerRole: arn:aws:iam::123456789012:role/HubConsumer
113
+ # adminRole: arn:aws:iam::123456789012:role/HubAdmin
114
+ # appConfig:
115
+ # roleArn: arn:aws:iam::123456789012:role/HubAppConfig
116
+ # appId: app-12345
117
+ # envId: env-67890
118
+ # profileId: profile-abcde
@@ -0,0 +1,3 @@
1
+ import type { CommandOptions } from '../types.js';
2
+ export declare function addHubIntegration(githubToken?: string, environmentName?: string, options?: CommandOptions): Promise<void>;
3
+ //# sourceMappingURL=hub-integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub-integration.d.ts","sourceRoot":"","sources":["../../src/commands/hub-integration.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAwB,cAAc,EAAE,MAAM,aAAa,CAAC;AAExE,wBAAsB,iBAAiB,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCnI"}
@@ -0,0 +1,107 @@
1
+ import { confirm } from '@inquirer/prompts';
2
+ import chalk from 'chalk';
3
+ import { GitHubClient } from '../utils/github.js';
4
+ import { promptHubIntegration } from '../prompts/hub-integration.js';
5
+ import * as ui from '../utils/ui.js';
6
+ export async function addHubIntegration(githubToken, environmentName, options = {}) {
7
+ try {
8
+ ui.banner();
9
+ console.log(chalk.white(' Add Sembix Hub integration to an environment'));
10
+ console.log();
11
+ const githubClient = new GitHubClient(githubToken);
12
+ // Collect configuration through interactive prompts (passing CLI flags for promptIfMissing)
13
+ const config = await promptHubIntegration(githubClient, environmentName, options.repo, options);
14
+ // Confirm before proceeding
15
+ ui.section('Configuration Summary');
16
+ displayConfigurationSummary(config);
17
+ const proceed = await confirm({
18
+ message: 'Update environment with Hub integration?',
19
+ default: true,
20
+ });
21
+ if (!proceed) {
22
+ ui.warning('Hub integration cancelled.');
23
+ return;
24
+ }
25
+ // Execute hub integration
26
+ await executeHubIntegration(githubClient, config);
27
+ // Display success message
28
+ displaySuccessMessage(config);
29
+ }
30
+ catch (error) {
31
+ const message = error instanceof Error ? error.message : 'Unknown error';
32
+ ui.error(`Hub integration failed: ${message}`);
33
+ process.exit(1);
34
+ }
35
+ }
36
+ async function executeHubIntegration(githubClient, config) {
37
+ const { owner, repo } = config.repository;
38
+ // Validate environment exists
39
+ const spinner = ui.spinner('Validating environment...');
40
+ try {
41
+ const exists = await githubClient.environmentExists(owner, repo, config.environmentName);
42
+ if (!exists) {
43
+ spinner.fail(`Environment '${config.environmentName}' does not exist`);
44
+ throw new Error(`Environment '${config.environmentName}' not found in ${owner}/${repo}`);
45
+ }
46
+ spinner.succeed(`Environment '${config.environmentName}' validated`);
47
+ }
48
+ catch (error) {
49
+ const message = error instanceof Error ? error.message : 'Unknown error';
50
+ spinner.fail(`Validation failed: ${message}`);
51
+ throw error;
52
+ }
53
+ // Add Hub secrets
54
+ const hubSpinner = ui.spinner('Adding Sembix Hub configuration...');
55
+ try {
56
+ await githubClient.createEnvironmentSecrets(owner, repo, config.environmentName, {
57
+ SEMBIX_HUB_ENGINE_EXECUTION_ROLE: config.hubRoles.engineExecutionRole || '',
58
+ SEMBIX_HUB_HUB_CONSUMER_ROLE_ARN: config.hubRoles.consumerRole || '',
59
+ SEMBIX_HUB_APP_CONFIG_ROLE_ARN: config.appConfig?.roleArn || '',
60
+ SEMBIX_HUB_APP_CONFIG_APP_ID: config.appConfig?.appId || '',
61
+ SEMBIX_HUB_APP_CONFIG_ENV_ID: config.appConfig?.envId || '',
62
+ SEMBIX_HUB_APP_CONFIG_PROFILE_ID: config.appConfig?.profileId || '',
63
+ });
64
+ hubSpinner.succeed('Sembix Hub configuration added');
65
+ }
66
+ catch (error) {
67
+ const message = error instanceof Error ? error.message : 'Unknown error';
68
+ hubSpinner.fail(`Failed to add Hub configuration: ${message}`);
69
+ throw error;
70
+ }
71
+ }
72
+ function displayConfigurationSummary(config) {
73
+ const data = {
74
+ 'Repository': `${config.repository.owner}/${config.repository.repo}`,
75
+ 'Environment': config.environmentName,
76
+ };
77
+ if (config.hubRoles.engineExecutionRole) {
78
+ data['Engine Execution Role'] = config.hubRoles.engineExecutionRole;
79
+ }
80
+ if (config.hubRoles.consumerRole) {
81
+ data['Consumer Role'] = config.hubRoles.consumerRole;
82
+ }
83
+ if (config.appConfig?.roleArn) {
84
+ data['AppConfig Role'] = config.appConfig.roleArn;
85
+ }
86
+ if (config.appConfig?.appId) {
87
+ data['AppConfig App ID'] = config.appConfig.appId;
88
+ }
89
+ ui.table(data);
90
+ }
91
+ function displaySuccessMessage(config) {
92
+ const { owner, repo } = config.repository;
93
+ console.log();
94
+ ui.success('Hub integration configuration updated successfully!');
95
+ console.log();
96
+ ui.section('Next Steps');
97
+ console.log(ui.highlight('Deploy with Hub Integration'));
98
+ console.log();
99
+ console.log(` 1. Go to GitHub Actions: ${ui.link(`https://github.com/${owner}/${repo}/actions`)}`);
100
+ console.log(` 2. Select the deployment workflow`);
101
+ console.log(` 3. Choose environment: ${ui.code(config.environmentName)}`);
102
+ console.log(` 4. Run the workflow to deploy with Hub integration`);
103
+ console.log();
104
+ console.log(` ${ui.dim('Your environment now has full Hub integration!')}`);
105
+ console.log();
106
+ }
107
+ //# sourceMappingURL=hub-integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub-integration.js","sourceRoot":"","sources":["../../src/commands/hub-integration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CommandOptions } from '../types.js';
2
+ export declare function setupEnvironment(githubToken: string, environmentName?: string, options?: CommandOptions): Promise<void>;
3
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAA0B,cAAc,EAAgB,MAAM,aAAa,CAAC;AAIxF,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,eAAe,CAAC,EAAE,MAAM,EACxB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA6Ef"}
@@ -0,0 +1,282 @@
1
+ import { GitHubClient } from '../utils/github.js';
2
+ import { promptEnvironmentSetup } from '../prompts/environment-setup.js';
3
+ import { promptHubIntegrationStep } from '../prompts/hub-integration-step.js';
4
+ import * as ui from '../utils/ui.js';
5
+ import { loadConfigFile, displayConfigErrors, mergeConfig, getConfigFilePath } from '../utils/config-loader.js';
6
+ export async function setupEnvironment(githubToken, environmentName, options = {}) {
7
+ try {
8
+ ui.banner();
9
+ console.log(chalk.white(' Create a new Sembix Studio environment'));
10
+ console.log();
11
+ const githubClient = new GitHubClient(githubToken);
12
+ // Step 1: Load config file if provided
13
+ let configFileData;
14
+ const configFilePath = getConfigFilePath(options);
15
+ if (configFilePath) {
16
+ console.log();
17
+ ui.info(`Loading configuration from: ${ui.highlight(configFilePath)}`);
18
+ console.log();
19
+ const configResult = await loadConfigFile(configFilePath);
20
+ if (!configResult.success) {
21
+ displayConfigErrors(configResult.errors || []);
22
+ process.exit(1);
23
+ }
24
+ configFileData = configResult.data;
25
+ ui.success('Configuration file loaded successfully');
26
+ console.log();
27
+ }
28
+ // Step 2: Merge config file with CLI flags
29
+ const mergedConfig = mergeConfig(configFileData, { ...options, environmentName });
30
+ // Step 3: Collect remaining configuration through interactive prompts
31
+ // Pass merged config to skip already-provided values
32
+ const config = await promptEnvironmentSetup(githubClient, mergedConfig.environmentName, mergedConfig.repository ? `${mergedConfig.repository.owner}/${mergedConfig.repository.repo}` : undefined, mergedConfig);
33
+ // Step 4: Hub Integration (Step 9 in interactive flow)
34
+ let hubConfig;
35
+ // Check if Hub config provided via CLI flags or config file
36
+ if (mergedConfig.hub && (mergedConfig.hub.hubRoles || mergedConfig.hub.appConfig)) {
37
+ ui.info('Using Hub configuration from CLI flags or config file');
38
+ hubConfig = mergedConfig.hub;
39
+ }
40
+ else {
41
+ // Interactive prompt for Hub integration
42
+ hubConfig = await promptHubIntegrationStep(options.skipHub);
43
+ }
44
+ // Confirm before proceeding
45
+ ui.section('Configuration Summary');
46
+ displayConfigurationSummary(config, hubConfig);
47
+ const proceed = await confirm({
48
+ message: 'Create GitHub environment with this configuration?',
49
+ default: true,
50
+ });
51
+ if (!proceed) {
52
+ ui.warning('Setup cancelled.');
53
+ return;
54
+ }
55
+ // Execute setup
56
+ await executeEnvironmentSetup(githubClient, config, hubConfig);
57
+ // Display success and next steps
58
+ displaySuccessMessage(config, hubConfig);
59
+ }
60
+ catch (error) {
61
+ const message = error instanceof Error ? error.message : 'Unknown error';
62
+ ui.error(`Setup failed: ${message}`);
63
+ process.exit(1);
64
+ }
65
+ }
66
+ async function executeEnvironmentSetup(githubClient, config, hubConfig) {
67
+ const { owner, repo } = config.repository;
68
+ // Step 1: Create environment
69
+ let spinner = ui.spinner('Creating GitHub environment...');
70
+ try {
71
+ await githubClient.createEnvironment(owner, repo, config.environmentName);
72
+ spinner.succeed(`GitHub environment '${config.environmentName}' created`);
73
+ }
74
+ catch (error) {
75
+ const message = error instanceof Error ? error.message : 'Unknown error';
76
+ spinner.fail(`Failed to create environment: ${message}`);
77
+ throw error;
78
+ }
79
+ // Step 2: Add environment variables
80
+ spinner = ui.spinner('Adding environment variables...');
81
+ try {
82
+ await githubClient.createEnvironmentVariables(owner, repo, config.environmentName, {
83
+ TF_BUCKET_NAME: config.terraformStateBucket,
84
+ CLOUDFRONT_DOMAIN: config.tls.cloudfrontDomain,
85
+ DEPLOY_SEMBIX_STUDIO_MEMORY: config.features.deploySembixStudioMemory ? 'true' : 'false',
86
+ DEPLOY_SEMBIX_STUDIO_NOTIFICATIONS: config.features.deploySembixStudioNotifications ? 'true' : 'false',
87
+ ENABLE_BFF_WAF: config.features.enableBffWaf ? 'true' : 'false',
88
+ VITE_GITHUB_APP_CLIENT_ID: config.frontend.githubAppClientId,
89
+ VITE_GITHUB_APP_NAME: config.frontend.githubAppName,
90
+ VITE_JIRA_CLIENT_ID: config.frontend.jiraClientId,
91
+ });
92
+ spinner.succeed('Environment variables added');
93
+ }
94
+ catch (error) {
95
+ const message = error instanceof Error ? error.message : 'Unknown error';
96
+ spinner.fail(`Failed to add variables: ${message}`);
97
+ throw error;
98
+ }
99
+ // Step 3: Add secrets in batches
100
+ spinner = ui.spinner('Adding AWS core secrets...');
101
+ try {
102
+ await githubClient.createEnvironmentSecrets(owner, repo, config.environmentName, {
103
+ AWS_REGION: config.awsRegion,
104
+ CUSTOMER_ROLE_ARN: config.customerRoleArn,
105
+ });
106
+ spinner.succeed('AWS core secrets added');
107
+ }
108
+ catch (error) {
109
+ const message = error instanceof Error ? error.message : 'Unknown error';
110
+ spinner.fail(`Failed to add AWS secrets: ${message}`);
111
+ throw error;
112
+ }
113
+ spinner = ui.spinner('Adding database secrets...');
114
+ try {
115
+ await githubClient.createEnvironmentSecrets(owner, repo, config.environmentName, {
116
+ SEMBIX_STUDIO_DB_NAME: config.database.name,
117
+ SEMBIX_STUDIO_USER: config.database.user,
118
+ });
119
+ spinner.succeed('Database secrets added');
120
+ }
121
+ catch (error) {
122
+ const message = error instanceof Error ? error.message : 'Unknown error';
123
+ spinner.fail(`Failed to add database secrets: ${message}`);
124
+ throw error;
125
+ }
126
+ spinner = ui.spinner('Adding networking secrets...');
127
+ try {
128
+ await githubClient.createEnvironmentSecrets(owner, repo, config.environmentName, {
129
+ USE_CUSTOM_NETWORKING: config.networking.useCustomNetworking ? 'true' : 'false',
130
+ CUSTOM_VPC_ID: config.networking.customVpcId || '',
131
+ CUSTOM_PUBLIC_SUBNET_IDS: config.networking.customPublicSubnetIds || '',
132
+ CUSTOM_PRIVATE_SUBNET_IDS: config.networking.customPrivateSubnetIds || '',
133
+ VPC_CIDR: config.networking.vpcCidr || '',
134
+ PUBLIC_SUBNET_CIDRS: config.networking.publicSubnetCidrs || '',
135
+ PRIVATE_SUBNET_CIDRS: config.networking.privateSubnetCidrs || '',
136
+ AZ_COUNT: config.networking.azCount || '2',
137
+ ENABLE_VPC_ENDPOINTS: config.networking.enableVpcEndpoints ? 'true' : 'false',
138
+ });
139
+ spinner.succeed('Networking secrets added');
140
+ }
141
+ catch (error) {
142
+ const message = error instanceof Error ? error.message : 'Unknown error';
143
+ spinner.fail(`Failed to add networking secrets: ${message}`);
144
+ throw error;
145
+ }
146
+ spinner = ui.spinner('Adding security group secrets...');
147
+ try {
148
+ await githubClient.createEnvironmentSecrets(owner, repo, config.environmentName, {
149
+ USE_CUSTOM_SECURITY_GROUPS: config.security.useCustomSecurityGroups ? 'true' : 'false',
150
+ CUSTOM_WORKFLOW_ENGINE_SG_ID: config.security.customSecurityGroups?.workflowEngine || '',
151
+ CUSTOM_AURORA_SG_ID: config.security.customSecurityGroups?.aurora || '',
152
+ CUSTOM_RDS_PROXY_SG_ID: config.security.customSecurityGroups?.rdsProxy || '',
153
+ CUSTOM_BFF_ECS_SG_ID: config.security.customSecurityGroups?.bffEcs || '',
154
+ CUSTOM_BASTION_SG_ID: config.security.customSecurityGroups?.bastion || '',
155
+ CUSTOM_BFF_ALB_SG_ID: config.security.customSecurityGroups?.bffAlb || '',
156
+ });
157
+ spinner.succeed('Security group secrets added');
158
+ }
159
+ catch (error) {
160
+ const message = error instanceof Error ? error.message : 'Unknown error';
161
+ spinner.fail(`Failed to add security group secrets: ${message}`);
162
+ throw error;
163
+ }
164
+ spinner = ui.spinner('Adding IAM role secrets...');
165
+ try {
166
+ await githubClient.createEnvironmentSecrets(owner, repo, config.environmentName, {
167
+ USE_CUSTOM_IAM_POLICIES: config.security.useCustomIamPolicies ? 'true' : 'false',
168
+ WORKFLOW_ENGINE_EXECUTION_ROLE_ARN: config.security.customIamRoles?.workflowEngineExecutionRole || '',
169
+ WORKFLOW_ENGINE_TASK_ROLE_ARN: config.security.customIamRoles?.workflowEngineTaskRole || '',
170
+ BFF_ECS_TASK_EXECUTION_ROLE_ARN: config.security.customIamRoles?.bffEcsTaskExecutionRole || '',
171
+ BFF_ECS_TASK_ROLE_ARN: config.security.customIamRoles?.bffEcsTaskRole || '',
172
+ RDS_PROXY_ROLE_ARN: config.security.customIamRoles?.rdsProxyRole || '',
173
+ SEMBIX_STUDIO_MEMORY_ROLE_ARN: config.security.customIamRoles?.sembixStudioMemoryRole || '',
174
+ SEMBIX_STUDIO_NOTIFICATION_ROLE_ARN: config.security.customIamRoles?.sembixStudioNotificationRole || '',
175
+ });
176
+ spinner.succeed('IAM role secrets added');
177
+ }
178
+ catch (error) {
179
+ const message = error instanceof Error ? error.message : 'Unknown error';
180
+ spinner.fail(`Failed to add IAM secrets: ${message}`);
181
+ throw error;
182
+ }
183
+ spinner = ui.spinner('Adding TLS/DNS configuration secrets...');
184
+ try {
185
+ await githubClient.createEnvironmentSecrets(owner, repo, config.environmentName, {
186
+ SEMBIX_STUDIO_CF_VIEWER_CERT: config.tls.cloudfrontCertArn,
187
+ BFF_ALB_CERTIFICATE_ARN: config.tls.bffAlbCertificateArn,
188
+ HOSTED_ZONE_ID: config.tls.hostedZoneId,
189
+ });
190
+ spinner.succeed('TLS/DNS configuration secrets added');
191
+ }
192
+ catch (error) {
193
+ const message = error instanceof Error ? error.message : 'Unknown error';
194
+ spinner.fail(`Failed to add TLS/DNS secrets: ${message}`);
195
+ throw error;
196
+ }
197
+ // Step 8: Add Hub Integration secrets (if provided)
198
+ if (hubConfig && (hubConfig.hubRoles || hubConfig.appConfig)) {
199
+ spinner = ui.spinner('Adding Sembix Hub integration secrets...');
200
+ try {
201
+ await githubClient.createEnvironmentSecrets(owner, repo, config.environmentName, {
202
+ SEMBIX_HUB_ENGINE_EXECUTION_ROLE: hubConfig.hubRoles?.engineExecutionRole || '',
203
+ SEMBIX_HUB_HUB_CONSUMER_ROLE_ARN: hubConfig.hubRoles?.consumerRole || '',
204
+ SEMBIX_HUB_APP_CONFIG_ROLE_ARN: hubConfig.appConfig?.roleArn || '',
205
+ SEMBIX_HUB_APP_CONFIG_APP_ID: hubConfig.appConfig?.appId || '',
206
+ SEMBIX_HUB_APP_CONFIG_ENV_ID: hubConfig.appConfig?.envId || '',
207
+ SEMBIX_HUB_APP_CONFIG_PROFILE_ID: hubConfig.appConfig?.profileId || '',
208
+ });
209
+ spinner.succeed('Sembix Hub integration secrets added');
210
+ }
211
+ catch (error) {
212
+ const message = error instanceof Error ? error.message : 'Unknown error';
213
+ spinner.fail(`Failed to add Hub secrets: ${message}`);
214
+ throw error;
215
+ }
216
+ }
217
+ }
218
+ function displayConfigurationSummary(config, hubConfig) {
219
+ const summary = {
220
+ 'Repository': `${config.repository.owner}/${config.repository.repo}`,
221
+ 'Environment': config.environmentName,
222
+ 'AWS Account': config.awsAccountId,
223
+ 'AWS Region': config.awsRegion,
224
+ 'Database': config.database.name,
225
+ 'CloudFront Domain': config.tls.cloudfrontDomain,
226
+ 'Custom Networking': config.networking.useCustomNetworking ? 'Yes' : 'No',
227
+ 'Custom Security Groups': config.security.useCustomSecurityGroups ? 'Yes' : 'No',
228
+ 'Custom IAM Roles': config.security.useCustomIamPolicies ? 'Yes' : 'No',
229
+ 'Studio Memory': config.features.deploySembixStudioMemory ? 'Enabled' : 'Disabled',
230
+ 'Notifications': config.features.deploySembixStudioNotifications ? 'Enabled' : 'Disabled',
231
+ 'WAF': config.features.enableBffWaf ? 'Enabled' : 'Disabled',
232
+ };
233
+ // Add Hub integration summary if provided
234
+ if (hubConfig) {
235
+ const hasHubRoles = hubConfig.hubRoles && (hubConfig.hubRoles.engineExecutionRole ||
236
+ hubConfig.hubRoles.consumerRole);
237
+ const hasAppConfig = hubConfig.appConfig && (hubConfig.appConfig.roleArn ||
238
+ hubConfig.appConfig.appId);
239
+ if (hasHubRoles || hasAppConfig) {
240
+ summary['Hub Integration'] = 'Configured';
241
+ }
242
+ }
243
+ ui.table(summary);
244
+ }
245
+ function displaySuccessMessage(config, hubConfig) {
246
+ const { owner, repo } = config.repository;
247
+ console.log();
248
+ ui.success('Environment created successfully!');
249
+ console.log();
250
+ ui.section('Next Steps');
251
+ console.log(ui.highlight('Step 1: Run Bootstrap Deployment'));
252
+ console.log();
253
+ console.log(` 1. Go to GitHub Actions: ${ui.link(`https://github.com/${owner}/${repo}/actions`)}`);
254
+ console.log(` 2. Select the deployment workflow`);
255
+ console.log(` 3. Choose environment: ${ui.code(config.environmentName)}`);
256
+ console.log(` 4. In 'Deployment phase to run' dropdown, select ${ui.highlight('bootstrap')}`);
257
+ console.log(` 5. Run the workflow to create IAM roles in your AWS account`);
258
+ console.log();
259
+ console.log(ui.dim(' The bootstrap phase creates IAM roles that you will send to Sembix'));
260
+ console.log(ui.dim(' for Hub integration before running the final deployment.'));
261
+ console.log();
262
+ if (!hubConfig || (!hubConfig.hubRoles && !hubConfig.appConfig)) {
263
+ console.log(ui.highlight('Step 2: Add Hub Integration (After Bootstrap)'));
264
+ console.log();
265
+ console.log(` After bootstrap completes, Sembix will provide Hub ARN details.`);
266
+ console.log(` Add them using:`);
267
+ console.log();
268
+ console.log(` ${ui.code(`sembix studio add-hub ${config.environmentName} --repo ${owner}/${repo}`)}`);
269
+ console.log();
270
+ console.log(` ${ui.dim('Or with all values at once:')}`);
271
+ console.log(` ${ui.code(`sembix studio add-hub ${config.environmentName} --repo ${owner}/${repo} --hub-engine-execution-role arn:... [other flags]`)}`);
272
+ console.log();
273
+ }
274
+ else {
275
+ console.log(` ${ui.success('Hub integration configured!')} Your environment is fully set up.`);
276
+ console.log();
277
+ }
278
+ }
279
+ // Add missing import
280
+ import { confirm } from '@inquirer/prompts';
281
+ import chalk from 'chalk';
282
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CommandOptions } from '../types.js';
2
+ export declare function updateEnvironment(githubToken: string, environmentName?: string, options?: CommandOptions): Promise<void>;
3
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAA0B,cAAc,EAAgB,MAAM,aAAa,CAAC;AAIxF,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,eAAe,CAAC,EAAE,MAAM,EACxB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAyIf"}