@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.
- package/.env.example +6 -0
- package/LICENSE +15 -0
- package/README.md +698 -0
- package/config.example.yaml +118 -0
- package/dist/commands/hub-integration.d.ts +3 -0
- package/dist/commands/hub-integration.d.ts.map +1 -0
- package/dist/commands/hub-integration.js +107 -0
- package/dist/commands/hub-integration.js.map +1 -0
- package/dist/commands/setup.d.ts +3 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +282 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/update.d.ts +3 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +498 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/config-schema.d.ts +417 -0
- package/dist/config-schema.d.ts.map +1 -0
- package/dist/config-schema.js +152 -0
- package/dist/config-schema.js.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +17 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +260 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/environment-setup.d.ts +4 -0
- package/dist/prompts/environment-setup.d.ts.map +1 -0
- package/dist/prompts/environment-setup.js +689 -0
- package/dist/prompts/environment-setup.js.map +1 -0
- package/dist/prompts/hub-integration-step.d.ts +21 -0
- package/dist/prompts/hub-integration-step.d.ts.map +1 -0
- package/dist/prompts/hub-integration-step.js +104 -0
- package/dist/prompts/hub-integration-step.js.map +1 -0
- package/dist/prompts/hub-integration.d.ts +4 -0
- package/dist/prompts/hub-integration.d.ts.map +1 -0
- package/dist/prompts/hub-integration.js +141 -0
- package/dist/prompts/hub-integration.js.map +1 -0
- package/dist/prompts/prompt-helpers.d.ts +18 -0
- package/dist/prompts/prompt-helpers.d.ts.map +1 -0
- package/dist/prompts/prompt-helpers.js +50 -0
- package/dist/prompts/prompt-helpers.js.map +1 -0
- package/dist/types.d.ts +144 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +23 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/config-loader.d.ts +34 -0
- package/dist/utils/config-loader.d.ts.map +1 -0
- package/dist/utils/config-loader.js +377 -0
- package/dist/utils/config-loader.js.map +1 -0
- package/dist/utils/github.d.ts +38 -0
- package/dist/utils/github.d.ts.map +1 -0
- package/dist/utils/github.js +188 -0
- package/dist/utils/github.js.map +1 -0
- package/dist/utils/ui.d.ts +18 -0
- package/dist/utils/ui.d.ts.map +1 -0
- package/dist/utils/ui.js +62 -0
- package/dist/utils/ui.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|