@aifabrix/builder 2.43.0 → 2.44.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/.cursor/rules/anchor-docs.mdc +15 -0
- package/README.md +1 -1
- package/anchor-docs/README.md +10 -0
- package/anchor-docs/_TEMPLATE +24 -0
- package/bin/aifabrix.js +13 -4
- package/integration/hubspot-test/README.md +31 -0
- package/integration/hubspot-test/create-hubspot.js +5 -5
- package/integration/hubspot-test/hubspot-test-datasource-company.json +58 -462
- package/integration/hubspot-test/hubspot-test-datasource-contact.json +61 -555
- package/integration/hubspot-test/hubspot-test-datasource-deal.json +63 -506
- package/integration/hubspot-test/hubspot-test-datasource-users.json +42 -83
- package/integration/hubspot-test/hubspot-test-deploy.json +3 -3
- package/integration/hubspot-test/test-dataplane-down-tests.js +1 -7
- package/integration/hubspot-test/test-dataplane-down.js +3 -3
- package/integration/hubspot-test/test.js +35 -43
- package/integration/hubspot-test/wizard-hubspot-test-headless.yaml +23 -0
- package/integration/roundtrip-test-local/README.md +144 -0
- package/integration/roundtrip-test-local/application.yaml +13 -0
- package/integration/roundtrip-test-local/env.template +15 -0
- package/integration/roundtrip-test-local/roundtrip-test-local-datasource-roundtrip-test-company.yaml +14 -0
- package/integration/roundtrip-test-local/roundtrip-test-local-deploy.json +61 -0
- package/integration/roundtrip-test-local/roundtrip-test-local-system.yaml +25 -0
- package/integration/roundtrip-test-local2/README.md +144 -0
- package/integration/roundtrip-test-local2/application.yaml +13 -0
- package/integration/roundtrip-test-local2/env.template +15 -0
- package/integration/roundtrip-test-local2/roundtrip-test-local2-datasource-company.yaml +31 -0
- package/integration/roundtrip-test-local2/roundtrip-test-local2-deploy.json +86 -0
- package/integration/roundtrip-test-local2/roundtrip-test-local2-system.yaml +25 -0
- package/integration/test/wizard.yaml +8 -0
- package/jest.config.default.js +10 -0
- package/jest.config.integration.fixtures.js +22 -0
- package/jest.config.integration.js +21 -18
- package/jest.config.isolated.js +10 -0
- package/jest.projects.js +288 -0
- package/lib/api/datasources-core.api.js +3 -3
- package/lib/api/dev-mtls-request.js +110 -0
- package/lib/api/dev-server-https.js +145 -0
- package/lib/api/dev.api.js +133 -144
- package/lib/api/index.js +0 -1
- package/lib/api/pipeline.api.js +67 -20
- package/lib/api/types/dev.types.js +4 -3
- package/lib/api/types/pipeline.types.js +8 -5
- package/lib/api/types/validation-run.types.js +56 -0
- package/lib/api/validation-run.api.js +99 -0
- package/lib/api/validation-runner.js +99 -0
- package/lib/app/config.js +1 -1
- package/lib/app/deploy-status-display.js +2 -2
- package/lib/app/deploy.js +7 -6
- package/lib/app/display.js +2 -1
- package/lib/app/dockerfile.js +3 -2
- package/lib/app/down.js +2 -1
- package/lib/app/helpers.js +6 -5
- package/lib/app/index.js +27 -8
- package/lib/app/list.js +7 -6
- package/lib/app/push.js +4 -3
- package/lib/app/register.js +16 -7
- package/lib/app/rotate-secret.js +14 -13
- package/lib/app/run-container-start.js +184 -0
- package/lib/app/run-docker-fallback.js +108 -0
- package/lib/app/run-env-compose.js +30 -42
- package/lib/app/run-helpers.js +49 -126
- package/lib/app/run-infra-requirements.js +30 -0
- package/lib/app/run-resolve-image.js +21 -0
- package/lib/app/run.js +74 -21
- package/lib/app/show-display.js +1 -1
- package/lib/app/show.js +1 -1
- package/lib/build/index.js +13 -10
- package/lib/cli/index.js +2 -0
- package/lib/cli/setup-app.help.js +67 -0
- package/lib/cli/setup-app.js +57 -121
- package/lib/cli/setup-app.test-commands.js +179 -0
- package/lib/cli/setup-auth.js +19 -5
- package/lib/cli/setup-credential-deployment.js +22 -8
- package/lib/cli/setup-dev-path-commands.js +124 -0
- package/lib/cli/setup-dev.js +170 -113
- package/lib/cli/setup-environment.js +7 -1
- package/lib/cli/setup-external-system.js +62 -22
- package/lib/cli/setup-infra.js +126 -47
- package/lib/cli/setup-parameters.js +32 -0
- package/lib/cli/setup-secrets.js +106 -8
- package/lib/cli/setup-service-user.js +1 -1
- package/lib/cli/setup-utility.js +36 -20
- package/lib/commands/app-down.js +5 -7
- package/lib/commands/app-install.js +14 -7
- package/lib/commands/app-logs.js +13 -10
- package/lib/commands/app-shell.js +4 -1
- package/lib/commands/app-test.js +25 -19
- package/lib/commands/app.js +22 -10
- package/lib/commands/auth-config.js +6 -6
- package/lib/commands/auth-status.js +4 -3
- package/lib/commands/credential-env.js +4 -3
- package/lib/commands/credential-list.js +5 -4
- package/lib/commands/credential-push.js +4 -3
- package/lib/commands/datasource-unified-test-cli.js +495 -0
- package/lib/commands/datasource-unified-test-cli.options.js +149 -0
- package/lib/commands/datasource-validation-cli.js +129 -0
- package/lib/commands/datasource.js +105 -98
- package/lib/commands/deployment-list.js +6 -5
- package/lib/commands/dev-cli-handlers.js +122 -18
- package/lib/commands/dev-down.js +4 -3
- package/lib/commands/dev-init.js +231 -116
- package/lib/commands/dev-show-display.js +473 -0
- package/lib/commands/login-credentials.js +3 -2
- package/lib/commands/login-device.js +4 -3
- package/lib/commands/login.js +5 -4
- package/lib/commands/logout.js +8 -7
- package/lib/commands/parameters-validate.js +54 -0
- package/lib/commands/repair-datasource.js +314 -68
- package/lib/commands/repair-env-template.js +2 -2
- package/lib/commands/repair.js +21 -3
- package/lib/commands/secrets-list.js +23 -12
- package/lib/commands/secrets-remove-all.js +220 -0
- package/lib/commands/secrets-remove.js +21 -12
- package/lib/commands/secrets-set.js +21 -12
- package/lib/commands/secrets-validate.js +4 -4
- package/lib/commands/secure.js +10 -9
- package/lib/commands/service-user.js +26 -25
- package/lib/commands/test-e2e-external.js +27 -1
- package/lib/commands/up-common.js +3 -2
- package/lib/commands/up-dataplane.js +29 -16
- package/lib/commands/up-miso.js +19 -29
- package/lib/commands/upload.js +138 -39
- package/lib/commands/wizard-core-helpers.js +1 -1
- package/lib/commands/wizard-dataplane.js +4 -3
- package/lib/commands/wizard-helpers.js +3 -3
- package/lib/commands/wizard.js +2 -2
- package/lib/core/admin-secrets.js +14 -5
- package/lib/core/audit-logger.js +12 -4
- package/lib/core/config-attach-extensions.js +46 -0
- package/lib/core/config-runtime-paths.js +29 -0
- package/lib/core/config.js +55 -56
- package/lib/core/diff.js +3 -2
- package/lib/core/ensure-encryption-key.js +1 -1
- package/lib/core/secrets-ensure-infra.js +77 -0
- package/lib/core/secrets-ensure.js +120 -64
- package/lib/core/secrets-env-write.js +35 -7
- package/lib/core/secrets-infra-placeholder-sync.js +61 -0
- package/lib/core/secrets.js +200 -37
- package/lib/core/templates-env.js +4 -3
- package/lib/datasource/abac-validator.js +1 -10
- package/lib/datasource/deploy.js +75 -53
- package/lib/datasource/field-reference-validator.js +9 -6
- package/lib/datasource/integration-context.js +63 -0
- package/lib/datasource/list.js +8 -7
- package/lib/datasource/log-viewer.js +84 -53
- package/lib/datasource/resolve-app.js +4 -4
- package/lib/datasource/test-e2e.js +95 -146
- package/lib/datasource/test-integration.js +114 -122
- package/lib/datasource/unified-validation-run-body.js +65 -0
- package/lib/datasource/unified-validation-run-post.js +23 -0
- package/lib/datasource/unified-validation-run-resolve.js +43 -0
- package/lib/datasource/unified-validation-run.js +92 -0
- package/lib/datasource/validate.js +157 -13
- package/lib/deployment/deployer.js +4 -3
- package/lib/deployment/environment.js +7 -6
- package/lib/deployment/push.js +17 -8
- package/lib/external-system/delete.js +4 -3
- package/lib/external-system/deploy.js +131 -53
- package/lib/external-system/download-helpers.js +1 -1
- package/lib/external-system/download.js +7 -6
- package/lib/external-system/generator.js +92 -6
- package/lib/external-system/integration-test-dispatch.js +26 -0
- package/lib/external-system/test-execution.js +5 -1
- package/lib/external-system/test-helpers.js +0 -4
- package/lib/external-system/test-system-level-helpers.js +110 -0
- package/lib/external-system/test-system-level.js +83 -44
- package/lib/external-system/test.js +59 -8
- package/lib/generator/builders.js +23 -11
- package/lib/generator/deploy-manifest-azure-kv.js +81 -0
- package/lib/generator/external.js +16 -4
- package/lib/generator/helpers.js +58 -3
- package/lib/generator/index.js +4 -0
- package/lib/generator/split-readme.js +12 -7
- package/lib/generator/split-variables.js +2 -1
- package/lib/generator/split.js +1 -1
- package/lib/generator/wizard-readme.js +3 -3
- package/lib/generator/wizard.js +8 -8
- package/lib/infrastructure/compose.js +60 -6
- package/lib/infrastructure/helpers.js +201 -29
- package/lib/infrastructure/index.js +28 -17
- package/lib/infrastructure/services.js +21 -15
- package/lib/internal/fs-real-sync.js +104 -0
- package/lib/internal/node-fs.js +98 -0
- package/lib/parameters/database-secret-values.js +173 -0
- package/lib/parameters/infra-kv-discovery.js +121 -0
- package/lib/parameters/infra-parameter-catalog.js +458 -0
- package/lib/parameters/infra-parameter-validate.js +64 -0
- package/lib/schema/application-schema.json +37 -17
- package/lib/schema/datasource-test-run.schema.json +493 -0
- package/lib/schema/deployment-rules.yaml +102 -63
- package/lib/schema/external-datasource.schema.json +1200 -442
- package/lib/schema/external-system.schema.json +181 -5
- package/lib/schema/flag-map-validation-run.json +31 -0
- package/lib/schema/infra-parameter.schema.json +106 -0
- package/lib/schema/infra.parameter.yaml +421 -0
- package/lib/schema/type/credential-auth-templates.json +40 -0
- package/lib/schema/type/document-storage.json +213 -0
- package/lib/schema/type/message-service.json +123 -0
- package/lib/schema/type/vector-store.json +88 -0
- package/lib/utils/aifabrix-runtime-config-dir.js +132 -0
- package/lib/utils/api-error-handler.js +2 -2
- package/lib/utils/api.js +49 -14
- package/lib/utils/app-register-api.js +3 -2
- package/lib/utils/app-register-auth.js +1 -1
- package/lib/utils/app-register-config.js +4 -4
- package/lib/utils/app-register-display.js +3 -2
- package/lib/utils/app-register-validator.js +3 -2
- package/lib/utils/app-run-containers.js +26 -22
- package/lib/utils/app-scoped-config.js +31 -0
- package/lib/utils/app-service-env-from-builder.js +164 -0
- package/lib/utils/build-copy.js +1 -1
- package/lib/utils/build-helpers.js +20 -20
- package/lib/utils/build-resolve-image.js +165 -0
- package/lib/utils/cli-layout-chalk.js +8 -0
- package/lib/utils/cli-test-layout-chalk.js +267 -0
- package/lib/utils/cli-utils.js +88 -11
- package/lib/utils/compose-db-passwords.js +138 -0
- package/lib/utils/compose-generate-docker-compose.js +216 -0
- package/lib/utils/compose-generator.js +197 -291
- package/lib/utils/compose-miso-env.js +18 -0
- package/lib/utils/compose-traefik-ingress-base.js +158 -0
- package/lib/utils/config-paths.js +166 -7
- package/lib/utils/config-scoped-resources-preference.js +41 -0
- package/lib/utils/controller-deployment-outcome.js +68 -0
- package/lib/utils/credential-display.js +2 -2
- package/lib/utils/dataplane-pipeline-warning.js +4 -3
- package/lib/utils/datasource-test-run-capability-scope.js +43 -0
- package/lib/utils/datasource-test-run-debug-display.js +137 -0
- package/lib/utils/datasource-test-run-debug-slice.js +93 -0
- package/lib/utils/datasource-test-run-display.js +442 -0
- package/lib/utils/datasource-test-run-exit.js +58 -0
- package/lib/utils/datasource-test-run-legacy-adapter.js +93 -0
- package/lib/utils/datasource-test-run-report-version.js +51 -0
- package/lib/utils/datasource-test-run-schema-sync.js +59 -0
- package/lib/utils/datasource-test-run-tty-log.js +81 -0
- package/lib/utils/datasource-validation-watch.js +266 -0
- package/lib/utils/declarative-url-ports.js +47 -0
- package/lib/utils/derive-env-key-from-client-id.js +41 -0
- package/lib/utils/dev-ca-install.js +185 -23
- package/lib/utils/dev-cert-helper.js +266 -17
- package/lib/utils/dev-hosts-helper.js +307 -0
- package/lib/utils/dev-init-cert-hints.js +37 -0
- package/lib/utils/dev-init-health-messages.js +52 -0
- package/lib/utils/dev-init-resolve.js +86 -0
- package/lib/utils/dev-init-ssh-merge.js +65 -0
- package/lib/utils/dev-ssh-config-helper.js +196 -0
- package/lib/utils/dev-user-groups.js +93 -0
- package/lib/utils/docker-build.js +42 -17
- package/lib/utils/docker-exec.js +28 -0
- package/lib/utils/docker-manifest-public-port.js +116 -0
- package/lib/utils/docker-not-running-hint.js +52 -0
- package/lib/utils/docker.js +98 -11
- package/lib/utils/ensure-dev-certs-for-remote-docker.js +192 -0
- package/lib/utils/env-config-loader.js +10 -91
- package/lib/utils/env-copy.js +19 -10
- package/lib/utils/env-map.js +35 -8
- package/lib/utils/env-template.js +2 -2
- package/lib/utils/environment-scoped-resources.js +144 -0
- package/lib/utils/error-formatter.js +92 -13
- package/lib/utils/error-formatters/http-status-errors.js +6 -5
- package/lib/utils/error-formatters/network-errors.js +2 -1
- package/lib/utils/error-formatters/permission-errors.js +2 -1
- package/lib/utils/error-formatters/validation-errors.js +2 -1
- package/lib/utils/external-readme.js +8 -1
- package/lib/utils/external-system-display.js +234 -136
- package/lib/utils/external-system-local-test-tty.js +389 -0
- package/lib/utils/external-system-readiness-core.js +377 -0
- package/lib/utils/external-system-readiness-deploy-display.js +270 -0
- package/lib/utils/external-system-readiness-display-internals.js +150 -0
- package/lib/utils/external-system-readiness-display.js +186 -0
- package/lib/utils/external-system-test-helpers.js +24 -6
- package/lib/utils/external-system-validators.js +30 -12
- package/lib/utils/health-check-url.js +119 -0
- package/lib/utils/health-check.js +59 -25
- package/lib/utils/help-builder.js +11 -8
- package/lib/utils/image-version.js +4 -8
- package/lib/utils/infra-containers.js +4 -7
- package/lib/utils/infra-env-defaults.js +162 -0
- package/lib/utils/infra-status-display.js +167 -0
- package/lib/utils/infra-status.js +16 -8
- package/lib/utils/local-secrets.js +3 -4
- package/lib/utils/paths.js +134 -47
- package/lib/utils/port-resolver.js +10 -23
- package/lib/utils/redis-env-scope.js +62 -0
- package/lib/utils/register-aifabrix-shell-env.js +204 -0
- package/lib/utils/remote-builder-validation.js +99 -0
- package/lib/utils/remote-dev-auth.js +117 -21
- package/lib/utils/remote-docker-env.js +67 -15
- package/lib/utils/remote-secrets-loader.js +13 -4
- package/lib/utils/resolve-docker-image-ref.js +124 -0
- package/lib/utils/schema-loader.js +22 -9
- package/lib/utils/secrets-bash-kv.js +25 -0
- package/lib/utils/secrets-generator.js +169 -49
- package/lib/utils/secrets-helpers.js +70 -59
- package/lib/utils/secrets-kv-scope.js +60 -0
- package/lib/utils/secrets-utils.js +32 -38
- package/lib/utils/secrets-validation.js +3 -1
- package/lib/utils/secrets-yaml-preserve.js +109 -0
- package/lib/utils/ssh-key-helper.js +4 -2
- package/lib/utils/template-helpers.js +2 -2
- package/lib/utils/test-log-writer.js +3 -3
- package/lib/utils/token-manager.js +1 -2
- package/lib/utils/url-declarative-public-base.js +188 -0
- package/lib/utils/url-declarative-resolve-build.js +493 -0
- package/lib/utils/url-declarative-resolve-load-doc.js +51 -0
- package/lib/utils/url-declarative-resolve.js +220 -0
- package/lib/utils/url-declarative-token-parse.js +74 -0
- package/lib/utils/url-declarative-url-flags.js +50 -0
- package/lib/utils/url-declarative-vdir-inactive-env.js +99 -0
- package/lib/utils/url-public-path-prefix.js +34 -0
- package/lib/utils/urls-local-registry.js +220 -0
- package/lib/utils/validation-report-tty-kit.js +77 -0
- package/lib/utils/validation-run-poll.js +89 -0
- package/lib/utils/validation-run-post-retry.js +73 -0
- package/lib/utils/validation-run-request.js +98 -0
- package/lib/utils/variable-transformer.js +21 -4
- package/lib/utils/yaml-preserve.js +33 -14
- package/lib/validation/datasource-warnings.js +56 -0
- package/lib/validation/env-template-auth.js +1 -1
- package/lib/validation/external-manifest-validator.js +27 -7
- package/lib/validation/validate-display.js +37 -31
- package/lib/validation/validate.js +4 -13
- package/lib/validation/validator-unresolved-placeholders.js +98 -0
- package/lib/validation/validator.js +22 -65
- package/lib/validation/wizard-config-validator.js +2 -1
- package/package.json +7 -3
- package/scripts/check-datasource-test-run-schema-sync.js +34 -0
- package/scripts/diagnose-cli.js +150 -0
- package/scripts/install-local.js +304 -55
- package/templates/README.md +15 -2
- package/templates/applications/dataplane/application.yaml +52 -2
- package/templates/applications/dataplane/env.template +75 -17
- package/templates/applications/dataplane/rbac.yaml +8 -0
- package/templates/applications/keycloak/application.yaml +9 -1
- package/templates/applications/keycloak/env.template +15 -6
- package/templates/applications/miso-controller/application.yaml +10 -2
- package/templates/applications/miso-controller/env.template +42 -12
- package/templates/applications/miso-controller/rbac.yaml +5 -0
- package/templates/external-system/README.md.hbs +20 -7
- package/templates/external-system/deploy.js.hbs +5 -5
- package/templates/external-system/external-datasource.yaml.hbs +197 -118
- package/templates/infra/compose.yaml.hbs +20 -4
- package/templates/python/docker-compose.hbs +16 -0
- package/templates/typescript/docker-compose.hbs +16 -0
- package/lib/api/external-test.api.js +0 -111
- package/lib/schema/env-config.yaml +0 -60
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dev subcommands: set-home, set-work, print-home, print-work, set-format.
|
|
3
|
+
*
|
|
4
|
+
* @fileoverview Path and format CLI registration for `aifabrix dev`
|
|
5
|
+
* @author AI Fabrix Team
|
|
6
|
+
* @version 2.0.0
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
'use strict';
|
|
10
|
+
const { formatSuccessLine } = require('../utils/cli-test-layout-chalk');
|
|
11
|
+
|
|
12
|
+
const chalk = require('chalk');
|
|
13
|
+
const config = require('../core/config');
|
|
14
|
+
const logger = require('../utils/logger');
|
|
15
|
+
const paths = require('../utils/paths');
|
|
16
|
+
const { registerAifabrixShellEnvFromConfig } = require('../utils/register-aifabrix-shell-env');
|
|
17
|
+
const { handleCommandError } = require('../utils/cli-utils');
|
|
18
|
+
|
|
19
|
+
async function runShellEnvRegistration() {
|
|
20
|
+
try {
|
|
21
|
+
await registerAifabrixShellEnvFromConfig(config.getConfig);
|
|
22
|
+
logger.log(
|
|
23
|
+
chalk.gray(' User/shell environment updated. Open a new terminal for AIFABRIX_HOME / AIFABRIX_WORK.')
|
|
24
|
+
);
|
|
25
|
+
} catch (regErr) {
|
|
26
|
+
throw new Error(`Config saved but environment registration failed: ${regErr.message}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function addSetHomeCommand(dev) {
|
|
31
|
+
dev
|
|
32
|
+
.command('set-home <path>')
|
|
33
|
+
.description('Set or clear aifabrix-home in config; register AIFABRIX_HOME for new shells unless --no-register-env')
|
|
34
|
+
.option('--no-register-env', 'Do not update Windows user env or POSIX shell profile hooks')
|
|
35
|
+
.action(async(homePath, cmdOpts) => {
|
|
36
|
+
try {
|
|
37
|
+
const trimmed = (homePath || '').trim();
|
|
38
|
+
await config.setAifabrixHomeOverride(trimmed);
|
|
39
|
+
logger.log(trimmed === '' ? formatSuccessLine('Home path cleared') : formatSuccessLine(`Home path set to ${trimmed}`));
|
|
40
|
+
if (cmdOpts?.registerEnv !== false) {
|
|
41
|
+
await runShellEnvRegistration();
|
|
42
|
+
}
|
|
43
|
+
} catch (error) {
|
|
44
|
+
handleCommandError(error, 'dev set-home');
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function addSetWorkCommand(dev) {
|
|
51
|
+
dev
|
|
52
|
+
.command('set-work <path>')
|
|
53
|
+
.description('Set or clear aifabrix-work (workspace root) in config; register AIFABRIX_WORK unless --no-register-env')
|
|
54
|
+
.option('--no-register-env', 'Do not update Windows user env or POSIX shell profile hooks')
|
|
55
|
+
.action(async(workPath, cmdOpts) => {
|
|
56
|
+
try {
|
|
57
|
+
const trimmed = (workPath || '').trim();
|
|
58
|
+
await config.setAifabrixWorkOverride(trimmed);
|
|
59
|
+
logger.log(trimmed === '' ? formatSuccessLine('Work path cleared') : formatSuccessLine(`Work path set to ${trimmed}`));
|
|
60
|
+
if (cmdOpts?.registerEnv !== false) {
|
|
61
|
+
await runShellEnvRegistration();
|
|
62
|
+
}
|
|
63
|
+
} catch (error) {
|
|
64
|
+
handleCommandError(error, 'dev set-work');
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function addPrintHomeWorkCommands(dev) {
|
|
71
|
+
dev
|
|
72
|
+
.command('print-home')
|
|
73
|
+
.description('Print resolved AIFABRIX_HOME path (stdout only; for scripts)')
|
|
74
|
+
.action(() => {
|
|
75
|
+
try {
|
|
76
|
+
process.stdout.write(`${paths.getAifabrixHome()}\n`);
|
|
77
|
+
} catch (error) {
|
|
78
|
+
handleCommandError(error, 'dev print-home');
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
dev
|
|
84
|
+
.command('print-work')
|
|
85
|
+
.description('Print resolved workspace path or empty line (stdout only; for scripts)')
|
|
86
|
+
.action(() => {
|
|
87
|
+
try {
|
|
88
|
+
const w = paths.getAifabrixWork();
|
|
89
|
+
process.stdout.write(w ? `${w}\n` : '\n');
|
|
90
|
+
} catch (error) {
|
|
91
|
+
handleCommandError(error, 'dev print-work');
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function addSetFormatCommand(dev, handleSetFormat) {
|
|
98
|
+
dev
|
|
99
|
+
.command('set-format <format>')
|
|
100
|
+
.description('Default json|yaml when --format is omitted (download/convert)')
|
|
101
|
+
.action(async(format) => {
|
|
102
|
+
try {
|
|
103
|
+
await handleSetFormat(format);
|
|
104
|
+
} catch (error) {
|
|
105
|
+
handleCommandError(error, 'dev set-format');
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Register dev set-home, set-work, print-*, set-format.
|
|
113
|
+
* @param {import('commander').Command} dev - dev subcommand group
|
|
114
|
+
* @param {function(string): Promise<void>} handleSetFormat - handler that updates format and refreshes display
|
|
115
|
+
* @returns {void}
|
|
116
|
+
*/
|
|
117
|
+
function setupDevPathAndFormatCommands(dev, handleSetFormat) {
|
|
118
|
+
addSetHomeCommand(dev);
|
|
119
|
+
addSetWorkCommand(dev);
|
|
120
|
+
addPrintHomeWorkCommands(dev);
|
|
121
|
+
addSetFormatCommand(dev, handleSetFormat);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
module.exports = { setupDevPathAndFormatCommands };
|
package/lib/cli/setup-dev.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const { formatSuccessLine } = require('../utils/cli-test-layout-chalk');
|
|
1
2
|
/**
|
|
2
3
|
* CLI developer configuration command setup (dev config, dev set-id, dev init, dev add/update/pin/delete/list).
|
|
3
4
|
*
|
|
@@ -8,10 +9,11 @@
|
|
|
8
9
|
|
|
9
10
|
const chalk = require('chalk');
|
|
10
11
|
const config = require('../core/config');
|
|
11
|
-
const devConfig = require('../utils/dev-config');
|
|
12
12
|
const logger = require('../utils/logger');
|
|
13
13
|
const { handleCommandError } = require('../utils/cli-utils');
|
|
14
|
+
const { setupDevPathAndFormatCommands } = require('./setup-dev-path-commands');
|
|
14
15
|
const { runDevInit, runDevRefresh } = require('../commands/dev-init');
|
|
16
|
+
const { displayDevConfig } = require('../commands/dev-show-display');
|
|
15
17
|
const {
|
|
16
18
|
handleDevList,
|
|
17
19
|
handleDevAdd,
|
|
@@ -20,45 +22,78 @@ const {
|
|
|
20
22
|
handleDevDelete
|
|
21
23
|
} = require('../commands/dev-cli-handlers');
|
|
22
24
|
|
|
23
|
-
/**
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
25
|
+
/** Appended to `dev update --help` (examples + partial-update behaviour). */
|
|
26
|
+
const DEV_UPDATE_HELP_AFTER = `
|
|
27
|
+
Examples:
|
|
28
|
+
$ aifabrix dev update 02 --name "Jane Doe"
|
|
29
|
+
$ aifabrix dev update --developer-id 02 --email jane@example.com
|
|
30
|
+
$ aifabrix dev update 01 --name "Admin" --groups admin,developer
|
|
31
|
+
$ aifabrix dev update 02 --groups admin,developer,docker
|
|
32
|
+
|
|
33
|
+
Partial update: only flags you pass are sent to the server. Omitted name, email, and groups are left unchanged.
|
|
34
|
+
`;
|
|
35
|
+
|
|
36
|
+
/** Appended to `dev add --help` (examples + workflow). */
|
|
37
|
+
const DEV_ADD_HELP_AFTER = `
|
|
38
|
+
Examples:
|
|
39
|
+
$ aifabrix dev add --developer-id 02 --name "Jane Doe" --email jane@example.com
|
|
40
|
+
$ aifabrix dev add --developer-id 03 --name "Build admin" --email admin@example.com --groups admin,developer
|
|
41
|
+
$ aifabrix dev add --developer-id 04 --name "CI user" --email ci@example.com --groups secret-manager,developer
|
|
42
|
+
|
|
43
|
+
Requires a configured remote Builder Server and an admin client certificate (same machine setup as dev list / dev pin). After add, run dev pin <id> once to create a PIN for aifabrix dev init.
|
|
44
|
+
`;
|
|
45
|
+
|
|
46
|
+
/** Appended to `aifabrix dev --help` (overview; keep subcommand .description lines short). */
|
|
47
|
+
const DEV_GROUP_HELP_AFTER = `
|
|
48
|
+
Categories:
|
|
49
|
+
Local config show, set-id, set-scoped-resources, set-env-config, set-home, set-work, set-format, print-home, print-work
|
|
50
|
+
Onboarding init (PIN onboarding), refresh (sync settings / renew cert)
|
|
51
|
+
Remote admin list, add, update, pin, delete (need remote-server + client cert in ~/.aifabrix)
|
|
52
|
+
Sync / stop down (Mutagen; optional --apps for containers)
|
|
53
|
+
|
|
54
|
+
Use: aifabrix dev <command> --help
|
|
55
|
+
`;
|
|
56
|
+
|
|
57
|
+
/** Appended to `dev init --help`. */
|
|
58
|
+
const DEV_INIT_HELP_AFTER = `
|
|
59
|
+
Examples:
|
|
60
|
+
Full (first machine or no config yet):
|
|
61
|
+
$ aifabrix dev init --developer-id 01 --server https://builder01.local --pin <one-time-pin>
|
|
62
|
+
|
|
63
|
+
When remote-server and developer-id are already in ~/.aifabrix/config.yaml (from settings or dev show):
|
|
64
|
+
$ aifabrix dev init --pin <one-time-pin>
|
|
65
|
+
|
|
66
|
+
Admin issues the PIN with: aifabrix dev pin <developer-id>
|
|
67
|
+
`;
|
|
68
|
+
|
|
69
|
+
/** Appended to `dev refresh --help`. */
|
|
70
|
+
const DEV_REFRESH_HELP_AFTER = `
|
|
71
|
+
Requires remote-server and saved client certificate (after dev init). Use --cert to force a new cert before expiry.
|
|
72
|
+
`;
|
|
73
|
+
|
|
74
|
+
/** Appended to `dev pin --help`. */
|
|
75
|
+
const DEV_PIN_HELP_AFTER = `
|
|
76
|
+
Examples:
|
|
77
|
+
$ aifabrix dev pin 02
|
|
78
|
+
$ aifabrix dev pin 02 --hosts-ip 192.168.1.25
|
|
79
|
+
$ aifabrix dev pin (uses developer-id from config)
|
|
80
|
+
|
|
81
|
+
Prints copy-paste commands for the developer: full dev init, hosts-file variant, and dev init --pin
|
|
82
|
+
when their config already has remote-server + developer-id.
|
|
83
|
+
`;
|
|
84
|
+
|
|
85
|
+
/** Appended to `dev delete --help`. */
|
|
86
|
+
const DEV_DELETE_HELP_AFTER = `
|
|
87
|
+
Example:
|
|
88
|
+
$ aifabrix dev delete 02
|
|
89
|
+
`;
|
|
90
|
+
|
|
91
|
+
/** Appended to `dev down --help`. */
|
|
92
|
+
const DEV_DOWN_HELP_AFTER = `
|
|
93
|
+
Examples:
|
|
94
|
+
$ aifabrix dev down
|
|
95
|
+
$ aifabrix dev down --apps
|
|
96
|
+
`;
|
|
62
97
|
|
|
63
98
|
/**
|
|
64
99
|
* Handle dev set-format command
|
|
@@ -67,7 +102,34 @@ async function displayDevConfig(devId) {
|
|
|
67
102
|
*/
|
|
68
103
|
async function handleSetFormat(format) {
|
|
69
104
|
await config.setFormat(format);
|
|
70
|
-
logger.log(
|
|
105
|
+
logger.log(formatSuccessLine(`Format set to ${format.toLowerCase()}`));
|
|
106
|
+
const devId = await config.getDeveloperId();
|
|
107
|
+
await displayDevConfig(devId);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Set useEnvironmentScopedResources in ~/.aifabrix/config.yaml
|
|
112
|
+
* @param {string} value - "true" or "false"
|
|
113
|
+
* @returns {Promise<void>}
|
|
114
|
+
*/
|
|
115
|
+
async function handleSetScopedResources(value) {
|
|
116
|
+
const b = String(value || '').trim().toLowerCase();
|
|
117
|
+
if (b !== 'true' && b !== 'false') {
|
|
118
|
+
throw new Error('Value must be true or false (example: aifabrix dev set-scoped-resources true)');
|
|
119
|
+
}
|
|
120
|
+
await config.setUseEnvironmentScopedResources(b === 'true');
|
|
121
|
+
if (b === 'true') {
|
|
122
|
+
logger.log(
|
|
123
|
+
formatSuccessLine('Environment-scoped resources activated in ~/.aifabrix/config.yaml')
|
|
124
|
+
);
|
|
125
|
+
} else {
|
|
126
|
+
logger.log(formatSuccessLine('Environment-scoped resources passivated (default local naming)'));
|
|
127
|
+
}
|
|
128
|
+
logger.log(
|
|
129
|
+
chalk.gray(
|
|
130
|
+
' Apps still need environmentScopedResources: true in application.yaml for prefixing when you run with --env dev or tst.'
|
|
131
|
+
)
|
|
132
|
+
);
|
|
71
133
|
const devId = await config.getDeveloperId();
|
|
72
134
|
await displayDevConfig(devId);
|
|
73
135
|
}
|
|
@@ -79,7 +141,7 @@ async function handleSetFormat(format) {
|
|
|
79
141
|
function setupDevShowAndSetId(dev) {
|
|
80
142
|
dev
|
|
81
143
|
.command('show')
|
|
82
|
-
.description('Show
|
|
144
|
+
.description('Show dev ports and ~/.aifabrix config')
|
|
83
145
|
.action(async() => {
|
|
84
146
|
try {
|
|
85
147
|
const devId = await config.getDeveloperId();
|
|
@@ -92,7 +154,7 @@ function setupDevShowAndSetId(dev) {
|
|
|
92
154
|
|
|
93
155
|
dev
|
|
94
156
|
.command('set-id <id>')
|
|
95
|
-
.description('Set developer ID (0 = default infra, >
|
|
157
|
+
.description('Set developer ID (0 = default infra, >0 = dev-specific ports)')
|
|
96
158
|
.action(async(id) => {
|
|
97
159
|
try {
|
|
98
160
|
const digitsOnly = /^[0-9]+$/.test(id);
|
|
@@ -101,56 +163,22 @@ function setupDevShowAndSetId(dev) {
|
|
|
101
163
|
}
|
|
102
164
|
await config.setDeveloperId(id);
|
|
103
165
|
process.env.AIFABRIX_DEVELOPERID = id;
|
|
104
|
-
logger.log(
|
|
166
|
+
logger.log(formatSuccessLine(`Developer ID set to ${id}`));
|
|
105
167
|
await displayDevConfig(id);
|
|
106
168
|
} catch (error) {
|
|
107
169
|
handleCommandError(error, 'dev set-id');
|
|
108
170
|
process.exit(1);
|
|
109
171
|
}
|
|
110
172
|
});
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Register dev set-env-config, set-home and set-format commands.
|
|
115
|
-
* @param {Command} dev - dev subcommand group
|
|
116
|
-
*/
|
|
117
|
-
function setupDevPathAndFormatCommands(dev) {
|
|
118
|
-
dev
|
|
119
|
-
.command('set-env-config <filePath>')
|
|
120
|
-
.description('Set aifabrix-env-config path in config.yaml (pass empty to clear; path is not checked for existence)')
|
|
121
|
-
.action(async(filePath) => {
|
|
122
|
-
try {
|
|
123
|
-
const trimmed = (filePath || '').trim();
|
|
124
|
-
await config.setAifabrixEnvConfigPath(trimmed);
|
|
125
|
-
logger.log(trimmed === '' ? chalk.green('✓ Env config path cleared') : chalk.green(`✓ Env config path set to ${trimmed}`));
|
|
126
|
-
} catch (error) {
|
|
127
|
-
handleCommandError(error, 'dev set-env-config');
|
|
128
|
-
process.exit(1);
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
173
|
|
|
132
174
|
dev
|
|
133
|
-
.command('set-
|
|
134
|
-
.description('Set
|
|
135
|
-
.action(async(
|
|
175
|
+
.command('set-scoped-resources <value>')
|
|
176
|
+
.description('Set useEnvironmentScopedResources to true|false in ~/.aifabrix/config.yaml')
|
|
177
|
+
.action(async(value) => {
|
|
136
178
|
try {
|
|
137
|
-
|
|
138
|
-
await config.setAifabrixHomeOverride(trimmed);
|
|
139
|
-
logger.log(trimmed === '' ? chalk.green('✓ Home path cleared') : chalk.green(`✓ Home path set to ${trimmed}`));
|
|
179
|
+
await handleSetScopedResources(value);
|
|
140
180
|
} catch (error) {
|
|
141
|
-
handleCommandError(error, 'dev set-
|
|
142
|
-
process.exit(1);
|
|
143
|
-
}
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
dev
|
|
147
|
-
.command('set-format <format>')
|
|
148
|
-
.description('Set default output format for download/convert (json | yaml); used when --format not passed')
|
|
149
|
-
.action(async(format) => {
|
|
150
|
-
try {
|
|
151
|
-
await handleSetFormat(format);
|
|
152
|
-
} catch (error) {
|
|
153
|
-
handleCommandError(error, 'dev set-format');
|
|
181
|
+
handleCommandError(error, 'dev set-scoped-resources');
|
|
154
182
|
process.exit(1);
|
|
155
183
|
}
|
|
156
184
|
});
|
|
@@ -162,7 +190,29 @@ function setupDevPathAndFormatCommands(dev) {
|
|
|
162
190
|
*/
|
|
163
191
|
function setupDevConfigCommands(dev) {
|
|
164
192
|
setupDevShowAndSetId(dev);
|
|
165
|
-
setupDevPathAndFormatCommands(dev);
|
|
193
|
+
setupDevPathAndFormatCommands(dev, handleSetFormat);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Shared Commander options for dev init (PIN onboarding).
|
|
198
|
+
* @param {object} cmd - Commander command to attach options to
|
|
199
|
+
* @returns {object} Same command for chaining
|
|
200
|
+
*/
|
|
201
|
+
function addDevOnboardingOptions(cmd) {
|
|
202
|
+
return cmd
|
|
203
|
+
.requiredOption('--pin <pin>', 'One-time PIN from your admin (see aifabrix dev pin)')
|
|
204
|
+
.option(
|
|
205
|
+
'--developer-id <id>',
|
|
206
|
+
'Developer ID (optional if set in ~/.aifabrix/config.yaml and not 0; e.g. 01)'
|
|
207
|
+
)
|
|
208
|
+
.option('--server <url>', 'Builder Server base URL (optional if remote-server is in config)')
|
|
209
|
+
.option('-y, --yes', 'Auto-install development CA without prompt when certificate is untrusted; with --add-hosts, skip hosts-file confirmation')
|
|
210
|
+
.option('--no-install-ca', 'Do not offer CA install; fail with manual instructions on untrusted certificate')
|
|
211
|
+
.option(
|
|
212
|
+
'--add-hosts',
|
|
213
|
+
'Offer to add the server hostname to this machine\'s hosts file (wildcard DNS must be configured separately; may require admin)'
|
|
214
|
+
)
|
|
215
|
+
.option('--hosts-ip <ip>', 'IPv4 for the hosts entry when using --add-hosts (skips lookup / IP prompt)');
|
|
166
216
|
}
|
|
167
217
|
|
|
168
218
|
/**
|
|
@@ -170,26 +220,26 @@ function setupDevConfigCommands(dev) {
|
|
|
170
220
|
* @param {Command} dev - dev subcommand group
|
|
171
221
|
*/
|
|
172
222
|
function setupDevInitCommand(dev) {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
});
|
|
223
|
+
const runOnboarding = async(options, label) => {
|
|
224
|
+
try {
|
|
225
|
+
await runDevInit(options);
|
|
226
|
+
} catch (error) {
|
|
227
|
+
handleCommandError(error, label);
|
|
228
|
+
process.exit(1);
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
addDevOnboardingOptions(
|
|
233
|
+
dev
|
|
234
|
+
.command('init')
|
|
235
|
+
.description('Onboard with Builder Server (cert, settings, SSH for Mutagen)')
|
|
236
|
+
.addHelpText('after', DEV_INIT_HELP_AFTER)
|
|
237
|
+
).action(async(options) => runOnboarding(options, 'dev init'));
|
|
189
238
|
|
|
190
239
|
dev
|
|
191
240
|
.command('refresh')
|
|
192
|
-
.description('
|
|
241
|
+
.description('Pull server settings into config; renew cert if due or --cert')
|
|
242
|
+
.addHelpText('after', DEV_REFRESH_HELP_AFTER)
|
|
193
243
|
.option('--cert', 'Force certificate refresh (create PIN + issue-cert) even when cert is still valid')
|
|
194
244
|
.action(async(options) => {
|
|
195
245
|
try {
|
|
@@ -208,7 +258,7 @@ function setupDevInitCommand(dev) {
|
|
|
208
258
|
function setupDevListAddCommands(dev) {
|
|
209
259
|
dev
|
|
210
260
|
.command('list')
|
|
211
|
-
.description('List
|
|
261
|
+
.description('List developers (remote Builder Server)')
|
|
212
262
|
.action(async() => {
|
|
213
263
|
try {
|
|
214
264
|
await handleDevList();
|
|
@@ -220,11 +270,12 @@ function setupDevListAddCommands(dev) {
|
|
|
220
270
|
|
|
221
271
|
dev
|
|
222
272
|
.command('add')
|
|
223
|
-
.description('
|
|
224
|
-
.requiredOption('--developer-id <id>', '
|
|
273
|
+
.description('Create developer on server (admin); then dev pin for onboarding')
|
|
274
|
+
.requiredOption('--developer-id <id>', 'Unique id, digits only (e.g. 02); used with dev init --developer-id')
|
|
225
275
|
.requiredOption('--name <name>', 'Display name')
|
|
226
276
|
.requiredOption('--email <email>', 'Email address')
|
|
227
|
-
.option('--groups <items>', 'Comma-separated
|
|
277
|
+
.option('--groups <items>', 'Comma-separated roles: admin, secret-manager, developer, docker', 'developer')
|
|
278
|
+
.addHelpText('after', DEV_ADD_HELP_AFTER)
|
|
228
279
|
.action(async(options) => {
|
|
229
280
|
try {
|
|
230
281
|
await handleDevAdd(options);
|
|
@@ -242,11 +293,12 @@ function setupDevListAddCommands(dev) {
|
|
|
242
293
|
function setupDevUpdatePinDeleteCommands(dev) {
|
|
243
294
|
dev
|
|
244
295
|
.command('update [developerId]')
|
|
245
|
-
.description('
|
|
296
|
+
.description('Patch name/email/groups (admin); only given flags change')
|
|
246
297
|
.option('--developer-id <id>', 'Developer ID (same as dev add)')
|
|
247
298
|
.option('--name <name>', 'Display name')
|
|
248
299
|
.option('--email <email>', 'Email address')
|
|
249
|
-
.option('--groups <items>', 'Comma-separated groups (admin, secret-manager, developer)')
|
|
300
|
+
.option('--groups <items>', 'Comma-separated groups (admin, secret-manager, developer, docker)')
|
|
301
|
+
.addHelpText('after', DEV_UPDATE_HELP_AFTER)
|
|
250
302
|
.action(async(developerId, options) => {
|
|
251
303
|
try {
|
|
252
304
|
await handleDevUpdate(developerId, options);
|
|
@@ -258,10 +310,12 @@ function setupDevUpdatePinDeleteCommands(dev) {
|
|
|
258
310
|
|
|
259
311
|
dev
|
|
260
312
|
.command('pin [developerId]')
|
|
261
|
-
.description('
|
|
262
|
-
.
|
|
313
|
+
.description('One-time onboarding PIN for dev init (admin)')
|
|
314
|
+
.option('--hosts-ip <ip>', 'Builder Server LAN IPv4 to embed in the hosts-file init command (optional)')
|
|
315
|
+
.addHelpText('after', DEV_PIN_HELP_AFTER)
|
|
316
|
+
.action(async(developerId, options) => {
|
|
263
317
|
try {
|
|
264
|
-
await handleDevPin(developerId);
|
|
318
|
+
await handleDevPin(developerId, options);
|
|
265
319
|
} catch (error) {
|
|
266
320
|
handleCommandError(error, 'dev pin');
|
|
267
321
|
process.exit(1);
|
|
@@ -270,7 +324,8 @@ function setupDevUpdatePinDeleteCommands(dev) {
|
|
|
270
324
|
|
|
271
325
|
dev
|
|
272
326
|
.command('delete <developerId>')
|
|
273
|
-
.description('Remove
|
|
327
|
+
.description('Remove developer from server (admin)')
|
|
328
|
+
.addHelpText('after', DEV_DELETE_HELP_AFTER)
|
|
274
329
|
.action(async(developerId) => {
|
|
275
330
|
try {
|
|
276
331
|
await handleDevDelete(developerId);
|
|
@@ -282,7 +337,8 @@ function setupDevUpdatePinDeleteCommands(dev) {
|
|
|
282
337
|
|
|
283
338
|
dev
|
|
284
339
|
.command('down')
|
|
285
|
-
.description('Stop Mutagen sync
|
|
340
|
+
.description('Stop Mutagen sync; --apps also stops app containers')
|
|
341
|
+
.addHelpText('after', DEV_DOWN_HELP_AFTER)
|
|
286
342
|
.option('--apps', 'Also stop running app containers for this developer')
|
|
287
343
|
.action(async(options) => {
|
|
288
344
|
try {
|
|
@@ -311,7 +367,8 @@ function setupDevUserCommands(dev) {
|
|
|
311
367
|
function setupDevCommands(program) {
|
|
312
368
|
const dev = program
|
|
313
369
|
.command('dev')
|
|
314
|
-
.description('
|
|
370
|
+
.description('Local dev config, Builder onboarding, remote admin, Mutagen/sync')
|
|
371
|
+
.addHelpText('after', DEV_GROUP_HELP_AFTER);
|
|
315
372
|
|
|
316
373
|
setupDevConfigCommands(dev);
|
|
317
374
|
setupDevInitCommand(dev);
|
|
@@ -29,9 +29,15 @@ Examples:
|
|
|
29
29
|
$ aifabrix env deploy tst --preset m
|
|
30
30
|
$ aifabrix env deploy dev --config ./env-config.json --no-poll`;
|
|
31
31
|
|
|
32
|
+
const ENV_GROUP_HELP_AFTER = `
|
|
33
|
+
Subcommands:
|
|
34
|
+
deploy <env> Provision/update environment in Miso Controller (see env deploy --help)
|
|
35
|
+
`;
|
|
36
|
+
|
|
32
37
|
const env = program
|
|
33
38
|
.command('env')
|
|
34
|
-
.description('
|
|
39
|
+
.description('Miso Controller environments (primary: env deploy <env>)')
|
|
40
|
+
.addHelpText('after', ENV_GROUP_HELP_AFTER);
|
|
35
41
|
|
|
36
42
|
env
|
|
37
43
|
.command('deploy <env>')
|