@sembix/cli 1.5.0 → 1.6.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/README.md +556 -2267
- package/USAGE-EXAMPLES.md +466 -1
- package/config.example.yaml +16 -0
- package/dist/commands/customer-portal.d.ts +3 -0
- package/dist/commands/customer-portal.d.ts.map +1 -0
- package/dist/commands/customer-portal.js +146 -0
- package/dist/commands/customer-portal.js.map +1 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +80 -6
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +42 -2
- package/dist/commands/workflow.js.map +1 -1
- package/dist/config-schema.d.ts +13 -0
- package/dist/config-schema.d.ts.map +1 -1
- package/dist/config-schema.js +17 -0
- package/dist/config-schema.js.map +1 -1
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -1
- package/dist/prompts/customer-portal-step.d.ts +7 -0
- package/dist/prompts/customer-portal-step.d.ts.map +1 -0
- package/dist/prompts/customer-portal-step.js +154 -0
- package/dist/prompts/customer-portal-step.js.map +1 -0
- package/dist/prompts/customer-portal.d.ts +4 -0
- package/dist/prompts/customer-portal.d.ts.map +1 -0
- package/dist/prompts/customer-portal.js +210 -0
- package/dist/prompts/customer-portal.js.map +1 -0
- package/dist/prompts/workflow-inputs.d.ts.map +1 -1
- package/dist/prompts/workflow-inputs.js +6 -2
- package/dist/prompts/workflow-inputs.js.map +1 -1
- package/dist/sembix-cli-1.6.0.tgz +0 -0
- package/dist/services/studio-api-client.js +2 -2
- package/dist/services/studio-api-client.js.map +1 -1
- package/dist/types/studio.d.ts +1 -7
- package/dist/types/studio.d.ts.map +1 -1
- package/dist/types/studio.js.map +1 -1
- package/dist/types.d.ts +30 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +66 -0
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/input-parser.d.ts +30 -9
- package/dist/utils/input-parser.d.ts.map +1 -1
- package/dist/utils/input-parser.js +155 -24
- package/dist/utils/input-parser.js.map +1 -1
- package/dist/utils/studio-api.d.ts +2 -1
- package/dist/utils/studio-api.d.ts.map +1 -1
- package/dist/utils/studio-api.js +5 -36
- package/dist/utils/studio-api.js.map +1 -1
- package/package.json +12 -11
- package/dist/sembix-cli-1.5.0.tgz +0 -0
package/USAGE-EXAMPLES.md
CHANGED
|
@@ -869,4 +869,469 @@ sembix workflow run show --workflow-id wf_456 --run-id run_xyz789 --watch
|
|
|
869
869
|
|
|
870
870
|
---
|
|
871
871
|
|
|
872
|
-
|
|
872
|
+
## Workflow Input Formats & Validation
|
|
873
|
+
|
|
874
|
+
### Understanding Workflow Inputs
|
|
875
|
+
|
|
876
|
+
When starting a workflow, you can provide inputs in three formats. The CLI validates all inputs before starting the workflow.
|
|
877
|
+
|
|
878
|
+
### Format 1: Name-Based (Recommended)
|
|
879
|
+
|
|
880
|
+
Use input variable names from the workflow template:
|
|
881
|
+
|
|
882
|
+
```bash
|
|
883
|
+
sembix workflow start \
|
|
884
|
+
--project-id proj_abc123 \
|
|
885
|
+
--workflow-id wf_deploy \
|
|
886
|
+
--inputs '{"environment": "production", "version": "1.2.3", "dryRun": false}'
|
|
887
|
+
```
|
|
888
|
+
|
|
889
|
+
**Advantages:**
|
|
890
|
+
- Human-readable and self-documenting
|
|
891
|
+
- CLI auto-resolves names to IDs
|
|
892
|
+
- Validates required fields and data types
|
|
893
|
+
- Fills optional fields with empty strings automatically
|
|
894
|
+
|
|
895
|
+
**Example with required and optional fields:**
|
|
896
|
+
```bash
|
|
897
|
+
# Workflow has 4 inputs:
|
|
898
|
+
# - environment (string, required)
|
|
899
|
+
# - version (string, required)
|
|
900
|
+
# - dryRun (boolean, optional)
|
|
901
|
+
# - notes (string, optional)
|
|
902
|
+
|
|
903
|
+
# Only provide required fields:
|
|
904
|
+
sembix workflow start --project-id proj_123 --workflow-id wf_456 \
|
|
905
|
+
--inputs '{"environment": "production", "version": "1.2.3"}'
|
|
906
|
+
|
|
907
|
+
# CLI automatically adds optional fields as empty strings:
|
|
908
|
+
# Final payload sent to API:
|
|
909
|
+
# {
|
|
910
|
+
# "environment": "production",
|
|
911
|
+
# "version": "1.2.3",
|
|
912
|
+
# "dryRun": "",
|
|
913
|
+
# "notes": ""
|
|
914
|
+
# }
|
|
915
|
+
```
|
|
916
|
+
|
|
917
|
+
---
|
|
918
|
+
|
|
919
|
+
### Format 2: ID-Based
|
|
920
|
+
|
|
921
|
+
Use input variable IDs directly:
|
|
922
|
+
|
|
923
|
+
```bash
|
|
924
|
+
sembix workflow start \
|
|
925
|
+
--project-id proj_abc123 \
|
|
926
|
+
--workflow-id wf_deploy \
|
|
927
|
+
--inputs '[
|
|
928
|
+
{"id": "var_env_123", "instruction": "production"},
|
|
929
|
+
{"id": "var_ver_456", "instruction": "1.2.3"}
|
|
930
|
+
]'
|
|
931
|
+
```
|
|
932
|
+
|
|
933
|
+
**When to use:**
|
|
934
|
+
- You know the exact input variable IDs
|
|
935
|
+
- Building dynamic inputs programmatically
|
|
936
|
+
- Working with complex workflows
|
|
937
|
+
|
|
938
|
+
---
|
|
939
|
+
|
|
940
|
+
### Format 3: File-Based
|
|
941
|
+
|
|
942
|
+
Store inputs in a JSON file:
|
|
943
|
+
|
|
944
|
+
```bash
|
|
945
|
+
# inputs.json (name-based)
|
|
946
|
+
{
|
|
947
|
+
"environment": "production",
|
|
948
|
+
"version": "1.2.3",
|
|
949
|
+
"dryRun": false,
|
|
950
|
+
"notes": "Deploying hotfix"
|
|
951
|
+
}
|
|
952
|
+
|
|
953
|
+
# Or inputs.json (ID-based)
|
|
954
|
+
[
|
|
955
|
+
{"id": "var_env_123", "instruction": "production"},
|
|
956
|
+
{"id": "var_ver_456", "instruction": "1.2.3"}
|
|
957
|
+
]
|
|
958
|
+
|
|
959
|
+
# Use with @ prefix:
|
|
960
|
+
sembix workflow start \
|
|
961
|
+
--project-id proj_abc123 \
|
|
962
|
+
--workflow-id wf_deploy \
|
|
963
|
+
--inputs @inputs.json
|
|
964
|
+
```
|
|
965
|
+
|
|
966
|
+
**Advantages:**
|
|
967
|
+
- Reusable input configurations
|
|
968
|
+
- Version control your inputs
|
|
969
|
+
- Easier to manage complex inputs
|
|
970
|
+
- Good for CI/CD pipelines
|
|
971
|
+
|
|
972
|
+
---
|
|
973
|
+
|
|
974
|
+
### Input Validation Rules
|
|
975
|
+
|
|
976
|
+
The CLI validates all inputs before starting workflows:
|
|
977
|
+
|
|
978
|
+
#### 1. Required Fields Validation
|
|
979
|
+
|
|
980
|
+
```bash
|
|
981
|
+
# ✗ Missing required field
|
|
982
|
+
$ sembix workflow start --project-id proj_123 --workflow-id wf_456 \
|
|
983
|
+
--inputs '{"version": "1.2.3"}'
|
|
984
|
+
|
|
985
|
+
Error: Input validation failed:
|
|
986
|
+
- Required input "environment" is missing or empty
|
|
987
|
+
|
|
988
|
+
# ✗ Empty required field
|
|
989
|
+
$ sembix workflow start --project-id proj_123 --workflow-id wf_456 \
|
|
990
|
+
--inputs '{"environment": "", "version": "1.2.3"}'
|
|
991
|
+
|
|
992
|
+
Error: Input validation failed:
|
|
993
|
+
- Required input "environment" is missing or empty
|
|
994
|
+
|
|
995
|
+
# ✓ All required fields provided
|
|
996
|
+
$ sembix workflow start --project-id proj_123 --workflow-id wf_456 \
|
|
997
|
+
--inputs '{"environment": "prod", "version": "1.2.3"}'
|
|
998
|
+
```
|
|
999
|
+
|
|
1000
|
+
---
|
|
1001
|
+
|
|
1002
|
+
#### 2. Boolean Field Validation
|
|
1003
|
+
|
|
1004
|
+
Boolean fields must be `true`, `false`, or their string equivalents:
|
|
1005
|
+
|
|
1006
|
+
```bash
|
|
1007
|
+
# ✓ Valid boolean values
|
|
1008
|
+
--inputs '{"dryRun": true}'
|
|
1009
|
+
--inputs '{"dryRun": false}'
|
|
1010
|
+
--inputs '{"dryRun": "true"}'
|
|
1011
|
+
--inputs '{"dryRun": "false"}'
|
|
1012
|
+
|
|
1013
|
+
# ✗ Invalid boolean values
|
|
1014
|
+
--inputs '{"dryRun": "yes"}'
|
|
1015
|
+
# Error: Input "dryRun" must be true or false (got: yes)
|
|
1016
|
+
|
|
1017
|
+
--inputs '{"dryRun": 1}'
|
|
1018
|
+
# Error: Input "dryRun" must be true or false (got: 1)
|
|
1019
|
+
|
|
1020
|
+
--inputs '{"dryRun": "True"}' # Case sensitive!
|
|
1021
|
+
# Error: Input "dryRun" must be true or false (got: True)
|
|
1022
|
+
```
|
|
1023
|
+
|
|
1024
|
+
**Note:** The CLI converts boolean values to strings before sending to the API:
|
|
1025
|
+
- `true` → `"true"`
|
|
1026
|
+
- `false` → `"false"`
|
|
1027
|
+
|
|
1028
|
+
---
|
|
1029
|
+
|
|
1030
|
+
#### 3. Optional Field Handling
|
|
1031
|
+
|
|
1032
|
+
Optional fields are **always included** in the final payload, even if not provided:
|
|
1033
|
+
|
|
1034
|
+
```bash
|
|
1035
|
+
# Example: Workflow with 2 required + 2 optional fields
|
|
1036
|
+
|
|
1037
|
+
# Input provided:
|
|
1038
|
+
--inputs '{"environment": "prod", "version": "1.2.3"}'
|
|
1039
|
+
|
|
1040
|
+
# CLI validates and adds optional fields:
|
|
1041
|
+
{
|
|
1042
|
+
"environment": "prod",
|
|
1043
|
+
"version": "1.2.3",
|
|
1044
|
+
"dryRun": "", // Optional field added as empty string
|
|
1045
|
+
"notes": "" // Optional field added as empty string
|
|
1046
|
+
}
|
|
1047
|
+
```
|
|
1048
|
+
|
|
1049
|
+
This ensures the API always receives a complete set of inputs.
|
|
1050
|
+
|
|
1051
|
+
---
|
|
1052
|
+
|
|
1053
|
+
### Real-World Examples
|
|
1054
|
+
|
|
1055
|
+
#### Example 1: Simple Deployment
|
|
1056
|
+
|
|
1057
|
+
```bash
|
|
1058
|
+
# Workflow: Deploy Application
|
|
1059
|
+
# Inputs:
|
|
1060
|
+
# - environment (string, required)
|
|
1061
|
+
# - version (string, required)
|
|
1062
|
+
# - rollbackOnFailure (boolean, optional)
|
|
1063
|
+
|
|
1064
|
+
sembix workflow start \
|
|
1065
|
+
--project-id proj_abc123 \
|
|
1066
|
+
--workflow-id wf_deploy \
|
|
1067
|
+
--inputs '{
|
|
1068
|
+
"environment": "production",
|
|
1069
|
+
"version": "v2.3.1",
|
|
1070
|
+
"rollbackOnFailure": true
|
|
1071
|
+
}'
|
|
1072
|
+
```
|
|
1073
|
+
|
|
1074
|
+
---
|
|
1075
|
+
|
|
1076
|
+
#### Example 2: Database Migration
|
|
1077
|
+
|
|
1078
|
+
```bash
|
|
1079
|
+
# Workflow: Run Database Migration
|
|
1080
|
+
# Inputs:
|
|
1081
|
+
# - database (string, required)
|
|
1082
|
+
# - migrationVersion (string, required)
|
|
1083
|
+
# - dryRun (boolean, required)
|
|
1084
|
+
# - backupFirst (boolean, optional)
|
|
1085
|
+
# - notificationEmail (string, optional)
|
|
1086
|
+
|
|
1087
|
+
# Interactive mode (recommended for one-off operations):
|
|
1088
|
+
sembix workflow start --project-id proj_123 --workflow-id wf_migrate
|
|
1089
|
+
|
|
1090
|
+
# Non-interactive with file:
|
|
1091
|
+
cat > migration-inputs.json <<EOF
|
|
1092
|
+
{
|
|
1093
|
+
"database": "production",
|
|
1094
|
+
"migrationVersion": "20240115_001",
|
|
1095
|
+
"dryRun": false,
|
|
1096
|
+
"backupFirst": true,
|
|
1097
|
+
"notificationEmail": "ops@company.com"
|
|
1098
|
+
}
|
|
1099
|
+
EOF
|
|
1100
|
+
|
|
1101
|
+
sembix workflow start \
|
|
1102
|
+
--project-id proj_123 \
|
|
1103
|
+
--workflow-id wf_migrate \
|
|
1104
|
+
--inputs @migration-inputs.json
|
|
1105
|
+
```
|
|
1106
|
+
|
|
1107
|
+
---
|
|
1108
|
+
|
|
1109
|
+
#### Example 3: CI/CD Pipeline
|
|
1110
|
+
|
|
1111
|
+
```bash
|
|
1112
|
+
#!/bin/bash
|
|
1113
|
+
# deploy.sh - Automated deployment script
|
|
1114
|
+
|
|
1115
|
+
PROJECT_ID="proj_abc123"
|
|
1116
|
+
WORKFLOW_ID="wf_deploy"
|
|
1117
|
+
VERSION="${GITHUB_SHA:0:7}"
|
|
1118
|
+
ENVIRONMENT="${DEPLOY_ENV:-staging}"
|
|
1119
|
+
|
|
1120
|
+
# Build inputs JSON
|
|
1121
|
+
INPUTS=$(cat <<EOF
|
|
1122
|
+
{
|
|
1123
|
+
"environment": "${ENVIRONMENT}",
|
|
1124
|
+
"version": "${VERSION}",
|
|
1125
|
+
"dryRun": false,
|
|
1126
|
+
"gitCommit": "${GITHUB_SHA}",
|
|
1127
|
+
"triggeredBy": "${GITHUB_ACTOR}"
|
|
1128
|
+
}
|
|
1129
|
+
EOF
|
|
1130
|
+
)
|
|
1131
|
+
|
|
1132
|
+
# Start workflow
|
|
1133
|
+
sembix workflow start \
|
|
1134
|
+
--project-id "${PROJECT_ID}" \
|
|
1135
|
+
--workflow-id "${WORKFLOW_ID}" \
|
|
1136
|
+
--inputs "${INPUTS}" \
|
|
1137
|
+
--no-interactive
|
|
1138
|
+
```
|
|
1139
|
+
|
|
1140
|
+
---
|
|
1141
|
+
|
|
1142
|
+
#### Example 4: Handling Validation Errors
|
|
1143
|
+
|
|
1144
|
+
```bash
|
|
1145
|
+
# Script with error handling
|
|
1146
|
+
#!/bin/bash
|
|
1147
|
+
|
|
1148
|
+
PROJECT_ID="proj_abc123"
|
|
1149
|
+
WORKFLOW_ID="wf_456"
|
|
1150
|
+
|
|
1151
|
+
# Attempt to start workflow
|
|
1152
|
+
if ! sembix workflow start \
|
|
1153
|
+
--project-id "${PROJECT_ID}" \
|
|
1154
|
+
--workflow-id "${WORKFLOW_ID}" \
|
|
1155
|
+
--inputs '{"environment": "prod"}' 2>&1; then
|
|
1156
|
+
|
|
1157
|
+
echo "❌ Workflow start failed - checking for validation errors..."
|
|
1158
|
+
|
|
1159
|
+
# Try again with all required fields
|
|
1160
|
+
echo "Retrying with complete inputs..."
|
|
1161
|
+
sembix workflow start \
|
|
1162
|
+
--project-id "${PROJECT_ID}" \
|
|
1163
|
+
--workflow-id "${WORKFLOW_ID}" \
|
|
1164
|
+
--inputs '{
|
|
1165
|
+
"environment": "prod",
|
|
1166
|
+
"version": "1.2.3",
|
|
1167
|
+
"dryRun": false
|
|
1168
|
+
}'
|
|
1169
|
+
fi
|
|
1170
|
+
```
|
|
1171
|
+
|
|
1172
|
+
---
|
|
1173
|
+
|
|
1174
|
+
### Interactive vs Non-Interactive Mode
|
|
1175
|
+
|
|
1176
|
+
#### Interactive Mode (Default)
|
|
1177
|
+
|
|
1178
|
+
When `--inputs` is not provided, CLI prompts for each input:
|
|
1179
|
+
|
|
1180
|
+
```bash
|
|
1181
|
+
$ sembix workflow start --project-id proj_123 --workflow-id wf_456
|
|
1182
|
+
|
|
1183
|
+
This workflow requires 4 input(s):
|
|
1184
|
+
|
|
1185
|
+
environment
|
|
1186
|
+
The deployment environment
|
|
1187
|
+
|
|
1188
|
+
✔ environment (required): production
|
|
1189
|
+
|
|
1190
|
+
version
|
|
1191
|
+
The version to deploy
|
|
1192
|
+
|
|
1193
|
+
✔ version (required): 1.2.3
|
|
1194
|
+
|
|
1195
|
+
dryRun
|
|
1196
|
+
Run in dry-run mode?
|
|
1197
|
+
|
|
1198
|
+
✔ dryRun (optional): [y/n] n
|
|
1199
|
+
|
|
1200
|
+
notes
|
|
1201
|
+
Deployment notes
|
|
1202
|
+
|
|
1203
|
+
✔ notes (optional):
|
|
1204
|
+
|
|
1205
|
+
✓ Workflow started successfully!
|
|
1206
|
+
```
|
|
1207
|
+
|
|
1208
|
+
**Interactive mode benefits:**
|
|
1209
|
+
- See all input descriptions
|
|
1210
|
+
- Validation happens as you type
|
|
1211
|
+
- Guided experience for complex workflows
|
|
1212
|
+
- Required vs optional clearly marked
|
|
1213
|
+
|
|
1214
|
+
---
|
|
1215
|
+
|
|
1216
|
+
#### Non-Interactive Mode
|
|
1217
|
+
|
|
1218
|
+
Use `--no-interactive` to skip prompts (requires `--inputs`):
|
|
1219
|
+
|
|
1220
|
+
```bash
|
|
1221
|
+
sembix workflow start \
|
|
1222
|
+
--project-id proj_123 \
|
|
1223
|
+
--workflow-id wf_456 \
|
|
1224
|
+
--inputs '{"environment": "prod", "version": "1.2.3"}' \
|
|
1225
|
+
--no-interactive
|
|
1226
|
+
```
|
|
1227
|
+
|
|
1228
|
+
**Non-interactive benefits:**
|
|
1229
|
+
- Suitable for automation/CI/CD
|
|
1230
|
+
- Fast execution
|
|
1231
|
+
- Predictable behavior
|
|
1232
|
+
|
|
1233
|
+
---
|
|
1234
|
+
|
|
1235
|
+
### Best Practices
|
|
1236
|
+
|
|
1237
|
+
#### ✅ DO
|
|
1238
|
+
|
|
1239
|
+
- **Use name-based format** for readability
|
|
1240
|
+
```bash
|
|
1241
|
+
--inputs '{"environment": "prod", "version": "1.2.3"}'
|
|
1242
|
+
```
|
|
1243
|
+
|
|
1244
|
+
- **Store complex inputs in files**
|
|
1245
|
+
```bash
|
|
1246
|
+
--inputs @production-config.json
|
|
1247
|
+
```
|
|
1248
|
+
|
|
1249
|
+
- **Validate locally first** using interactive mode
|
|
1250
|
+
```bash
|
|
1251
|
+
sembix workflow start # Test interactively first
|
|
1252
|
+
```
|
|
1253
|
+
|
|
1254
|
+
- **Handle validation errors** in scripts
|
|
1255
|
+
```bash
|
|
1256
|
+
if ! sembix workflow start --inputs '{...}'; then
|
|
1257
|
+
echo "Validation failed"
|
|
1258
|
+
exit 1
|
|
1259
|
+
fi
|
|
1260
|
+
```
|
|
1261
|
+
|
|
1262
|
+
- **Use boolean true/false** (not strings)
|
|
1263
|
+
```bash
|
|
1264
|
+
--inputs '{"dryRun": true}' # ✓ Good
|
|
1265
|
+
--inputs '{"dryRun": false}' # ✓ Good
|
|
1266
|
+
```
|
|
1267
|
+
|
|
1268
|
+
---
|
|
1269
|
+
|
|
1270
|
+
#### ❌ DON'T
|
|
1271
|
+
|
|
1272
|
+
- **Don't use invalid boolean strings**
|
|
1273
|
+
```bash
|
|
1274
|
+
--inputs '{"enabled": "yes"}' # ✗ Error
|
|
1275
|
+
--inputs '{"enabled": "True"}' # ✗ Case sensitive
|
|
1276
|
+
```
|
|
1277
|
+
|
|
1278
|
+
- **Don't leave required fields empty**
|
|
1279
|
+
```bash
|
|
1280
|
+
--inputs '{"environment": ""}' # ✗ Validation error
|
|
1281
|
+
```
|
|
1282
|
+
|
|
1283
|
+
- **Don't assume optional fields can be omitted from payload**
|
|
1284
|
+
- CLI handles this automatically - optional fields are added as `""`
|
|
1285
|
+
|
|
1286
|
+
- **Don't hard-code sensitive values**
|
|
1287
|
+
```bash
|
|
1288
|
+
# ✗ Bad
|
|
1289
|
+
--inputs '{"apiKey": "secret123"}'
|
|
1290
|
+
|
|
1291
|
+
# ✓ Good - use environment variables
|
|
1292
|
+
--inputs "{\"apiKey\": \"${API_KEY}\"}"
|
|
1293
|
+
```
|
|
1294
|
+
|
|
1295
|
+
---
|
|
1296
|
+
|
|
1297
|
+
### Troubleshooting
|
|
1298
|
+
|
|
1299
|
+
#### "Input validation failed" errors
|
|
1300
|
+
|
|
1301
|
+
```bash
|
|
1302
|
+
Error: Input validation failed:
|
|
1303
|
+
- Required input "environment" is missing or empty
|
|
1304
|
+
- Required input "version" is missing or empty
|
|
1305
|
+
```
|
|
1306
|
+
|
|
1307
|
+
**Solution:** Provide all required fields with non-empty values.
|
|
1308
|
+
|
|
1309
|
+
---
|
|
1310
|
+
|
|
1311
|
+
#### "must be true or false" errors
|
|
1312
|
+
|
|
1313
|
+
```bash
|
|
1314
|
+
Error: Input validation failed:
|
|
1315
|
+
- Input "dryRun" must be true or false (got: yes)
|
|
1316
|
+
```
|
|
1317
|
+
|
|
1318
|
+
**Solution:** Use boolean `true`/`false` or strings `"true"`/`"false"`.
|
|
1319
|
+
|
|
1320
|
+
---
|
|
1321
|
+
|
|
1322
|
+
#### "Input variable name not found" errors
|
|
1323
|
+
|
|
1324
|
+
```bash
|
|
1325
|
+
Error: Input variable name "environemnt" not found in workflow template.
|
|
1326
|
+
|
|
1327
|
+
Available input variables:
|
|
1328
|
+
- environment
|
|
1329
|
+
- version
|
|
1330
|
+
- dryRun
|
|
1331
|
+
```
|
|
1332
|
+
|
|
1333
|
+
**Solution:** Fix the typo in the input name (check spelling and capitalization).
|
|
1334
|
+
|
|
1335
|
+
---
|
|
1336
|
+
|
|
1337
|
+
**Last Updated**: December 2024
|
package/config.example.yaml
CHANGED
|
@@ -119,3 +119,19 @@ frontend:
|
|
|
119
119
|
# appId: app-12345
|
|
120
120
|
# envId: env-67890
|
|
121
121
|
# profileId: profile-abcde
|
|
122
|
+
|
|
123
|
+
# ============================================================
|
|
124
|
+
# CUSTOMER PORTAL CONFIGURATION (OPTIONAL - Standalone command)
|
|
125
|
+
# ============================================================
|
|
126
|
+
# Use: sembix studio add-customer-portal [environment]
|
|
127
|
+
#
|
|
128
|
+
# customerPortal:
|
|
129
|
+
# # Required fields
|
|
130
|
+
# cloudfrontDomain: portal.acme.com
|
|
131
|
+
# cloudfrontCertArn: arn:aws:acm:us-east-1:123456789012:certificate/xyz789
|
|
132
|
+
# hostedZoneId: Z9876543210ZYX
|
|
133
|
+
# dataBucketName: acme-customer-portal-data
|
|
134
|
+
#
|
|
135
|
+
# # Optional fields
|
|
136
|
+
# cognitoPasswordMinLength: 12
|
|
137
|
+
# logLevel: INFO
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customer-portal.d.ts","sourceRoot":"","sources":["../../src/commands/customer-portal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAwB,cAAc,EAAE,MAAM,aAAa,CAAC;AAGxE,wBAAsB,iBAAiB,CACrC,WAAW,CAAC,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,EACxB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAkEf"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { confirm } from '@inquirer/prompts';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { GitHubClient } from '../utils/github.js';
|
|
4
|
+
import { promptCustomerPortal } from '../prompts/customer-portal.js';
|
|
5
|
+
import * as ui from '../utils/ui.js';
|
|
6
|
+
import { loadConfigFile, mergeConfig, getConfigFilePath } from '../utils/config-loader.js';
|
|
7
|
+
export async function addCustomerPortal(githubToken, environmentName, options = {}) {
|
|
8
|
+
try {
|
|
9
|
+
ui.banner();
|
|
10
|
+
console.log(chalk.white(' Add Customer Portal configuration to an environment'));
|
|
11
|
+
console.log();
|
|
12
|
+
const githubClient = new GitHubClient(githubToken);
|
|
13
|
+
// Load config file if provided
|
|
14
|
+
const configFilePath = getConfigFilePath(options);
|
|
15
|
+
let configFile;
|
|
16
|
+
if (configFilePath) {
|
|
17
|
+
const configResult = await loadConfigFile(configFilePath);
|
|
18
|
+
configFile = configResult?.data;
|
|
19
|
+
}
|
|
20
|
+
// Merge config file with CLI flags
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
22
|
+
const mergedConfig = mergeConfig(configFile, options);
|
|
23
|
+
// Extract customer portal config from merged config
|
|
24
|
+
const customerPortalFromConfig = mergedConfig.customerPortal;
|
|
25
|
+
// Create cliFlags object with customer portal fields for promptIfMissing helpers
|
|
26
|
+
const cliFlags = {
|
|
27
|
+
...options,
|
|
28
|
+
customerPortalCloudfrontDomain: customerPortalFromConfig?.cloudfrontDomain,
|
|
29
|
+
customerPortalCloudfrontCertArn: customerPortalFromConfig?.cloudfrontCertArn,
|
|
30
|
+
customerPortalHostedZoneId: customerPortalFromConfig?.hostedZoneId,
|
|
31
|
+
customerPortalDataBucketName: customerPortalFromConfig?.dataBucketName,
|
|
32
|
+
customerPortalCognitoPasswordMinLength: customerPortalFromConfig?.cognitoPasswordMinLength,
|
|
33
|
+
customerPortalLogLevel: customerPortalFromConfig?.logLevel,
|
|
34
|
+
};
|
|
35
|
+
// Collect configuration through interactive prompts (passing merged config for promptIfMissing)
|
|
36
|
+
const config = await promptCustomerPortal(githubClient, environmentName, options.repo, cliFlags);
|
|
37
|
+
// Confirm before proceeding
|
|
38
|
+
ui.section('Configuration Summary');
|
|
39
|
+
displayConfigurationSummary(config);
|
|
40
|
+
const proceed = await confirm({
|
|
41
|
+
message: 'Update environment with Customer Portal configuration?',
|
|
42
|
+
default: true,
|
|
43
|
+
});
|
|
44
|
+
if (!proceed) {
|
|
45
|
+
ui.warning('Customer Portal configuration cancelled.');
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// Execute customer portal configuration
|
|
49
|
+
await executeCustomerPortalConfiguration(githubClient, config);
|
|
50
|
+
// Display success message
|
|
51
|
+
displaySuccessMessage(config);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
55
|
+
ui.error(`Customer Portal configuration failed: ${message}`);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async function executeCustomerPortalConfiguration(githubClient, config) {
|
|
60
|
+
const { owner, repo } = config.repository;
|
|
61
|
+
// Validate environment exists
|
|
62
|
+
const spinner = ui.spinner('Validating environment...');
|
|
63
|
+
try {
|
|
64
|
+
const exists = await githubClient.environmentExists(owner, repo, config.environmentName);
|
|
65
|
+
if (!exists) {
|
|
66
|
+
spinner.fail(`Environment '${config.environmentName}' does not exist`);
|
|
67
|
+
throw new Error(`Environment '${config.environmentName}' not found in ${owner}/${repo}`);
|
|
68
|
+
}
|
|
69
|
+
spinner.succeed(`Environment '${config.environmentName}' validated`);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
73
|
+
spinner.fail(`Validation failed: ${message}`);
|
|
74
|
+
throw error;
|
|
75
|
+
}
|
|
76
|
+
// Add Customer Portal secrets (required fields)
|
|
77
|
+
const secretsSpinner = ui.spinner('Adding Customer Portal secrets...');
|
|
78
|
+
try {
|
|
79
|
+
await githubClient.createEnvironmentSecrets(owner, repo, config.environmentName, {
|
|
80
|
+
CUSTOMER_PORTAL_CLOUDFRONT_DOMAIN: config.cloudfrontDomain,
|
|
81
|
+
CUSTOMER_PORTAL_CF_ARN: config.cloudfrontCertArn,
|
|
82
|
+
CUSTOMER_PORTAL_HOSTED_ZONE_ID: config.hostedZoneId,
|
|
83
|
+
CUSTOMER_PORTAL_DATA_BUCKET_NAME: config.dataBucketName,
|
|
84
|
+
});
|
|
85
|
+
secretsSpinner.succeed('Customer Portal secrets added');
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
89
|
+
secretsSpinner.fail(`Failed to add Customer Portal secrets: ${message}`);
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
// Add Customer Portal variables (optional fields)
|
|
93
|
+
if (config.cognitoPasswordMinLength !== undefined || config.logLevel !== undefined) {
|
|
94
|
+
const varsSpinner = ui.spinner('Adding Customer Portal variables...');
|
|
95
|
+
try {
|
|
96
|
+
const variables = {};
|
|
97
|
+
if (config.cognitoPasswordMinLength !== undefined) {
|
|
98
|
+
variables.CUSTOMER_PORTAL_COGNITO_PASSWORD_MIN_LENGTH = config.cognitoPasswordMinLength.toString();
|
|
99
|
+
}
|
|
100
|
+
if (config.logLevel !== undefined) {
|
|
101
|
+
variables.CUSTOMER_PORTAL_LOG_LEVEL = config.logLevel;
|
|
102
|
+
}
|
|
103
|
+
await githubClient.createOrUpdateEnvironmentVariables(owner, repo, config.environmentName, variables);
|
|
104
|
+
varsSpinner.succeed('Customer Portal variables added');
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
108
|
+
varsSpinner.fail(`Failed to add Customer Portal variables: ${message}`);
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function displayConfigurationSummary(config) {
|
|
114
|
+
const data = {
|
|
115
|
+
'Repository': `${config.repository.owner}/${config.repository.repo}`,
|
|
116
|
+
'Environment': config.environmentName,
|
|
117
|
+
'CloudFront Domain': config.cloudfrontDomain,
|
|
118
|
+
'CloudFront Certificate': config.cloudfrontCertArn,
|
|
119
|
+
'Route53 Zone ID': config.hostedZoneId,
|
|
120
|
+
'Data Bucket': config.dataBucketName,
|
|
121
|
+
};
|
|
122
|
+
if (config.cognitoPasswordMinLength !== undefined) {
|
|
123
|
+
data['Password Min Length'] = config.cognitoPasswordMinLength.toString();
|
|
124
|
+
}
|
|
125
|
+
if (config.logLevel !== undefined) {
|
|
126
|
+
data['Log Level'] = config.logLevel;
|
|
127
|
+
}
|
|
128
|
+
ui.table(data);
|
|
129
|
+
}
|
|
130
|
+
function displaySuccessMessage(config) {
|
|
131
|
+
const { owner, repo } = config.repository;
|
|
132
|
+
console.log();
|
|
133
|
+
ui.success('Customer Portal configuration updated successfully!');
|
|
134
|
+
console.log();
|
|
135
|
+
ui.section('Next Steps');
|
|
136
|
+
console.log(ui.highlight('Deploy Customer Portal'));
|
|
137
|
+
console.log();
|
|
138
|
+
console.log(` 1. Go to GitHub Actions: ${ui.link(`https://github.com/${owner}/${repo}/actions`)}`);
|
|
139
|
+
console.log(` 2. Select the Customer Portal deployment workflow`);
|
|
140
|
+
console.log(` 3. Choose environment: ${ui.code(config.environmentName)}`);
|
|
141
|
+
console.log(` 4. Run the workflow to deploy Customer Portal`);
|
|
142
|
+
console.log();
|
|
143
|
+
console.log(` ${ui.dim('Your environment now has Customer Portal configured!')}`);
|
|
144
|
+
console.log();
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=customer-portal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customer-portal.js","sourceRoot":"","sources":["../../src/commands/customer-portal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAA0B,cAAc,EAAoC,MAAM,aAAa,CAAC;AAI5G,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,eAAe,CAAC,EAAE,MAAM,EACxB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA4If"}
|