@aifabrix/builder 2.43.0 → 2.44.1
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/.cursor/rules/cli-layout.mdc +75 -0
- package/.cursor/rules/project-rules.mdc +8 -0
- package/.npmrc.token +1 -0
- package/.nyc_output/55e9d034-ddab-4579-a706-e02a91d75c91.json +1 -0
- package/.nyc_output/processinfo/55e9d034-ddab-4579-a706-e02a91d75c91.json +1 -0
- package/.nyc_output/processinfo/index.json +1 -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 +301 -0
- package/lib/api/certificates.api.js +62 -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 +11 -3
- package/lib/api/pipeline.api.js +67 -20
- package/lib/api/types/certificates.types.js +48 -0
- 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 +111 -0
- package/lib/api/validation-runner.js +109 -0
- package/lib/app/certification-show-enrich.js +129 -0
- package/lib/app/certification-verify-rows.js +60 -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 +44 -1
- package/lib/app/show.js +93 -9
- package/lib/build/index.js +13 -10
- package/lib/certification/cli-cert-sync-skip.js +21 -0
- package/lib/certification/merge-certification-from-artifact.js +185 -0
- package/lib/certification/post-unified-cert-sync.js +33 -0
- package/lib/certification/sync-after-external-command.js +52 -0
- package/lib/certification/sync-system-certification.js +197 -0
- package/lib/cli/index.js +2 -0
- package/lib/cli/setup-app.help.js +67 -0
- package/lib/cli/setup-app.js +61 -121
- package/lib/cli/setup-app.test-commands.js +195 -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 +84 -23
- package/lib/cli/setup-infra.js +126 -47
- package/lib/cli/setup-parameters.js +32 -0
- package/lib/cli/setup-secrets.js +137 -18
- package/lib/cli/setup-service-user.js +1 -1
- package/lib/cli/setup-utility.js +54 -22
- 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 +32 -11
- 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 +428 -0
- package/lib/commands/datasource-unified-test-cli.options.js +191 -0
- package/lib/commands/datasource-unified-test-e2e-cli-helpers.js +106 -0
- package/lib/commands/datasource-validation-cli.js +143 -0
- package/lib/commands/datasource.js +125 -95
- 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 +149 -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 +189 -67
- package/lib/datasource/resolve-app.js +4 -4
- package/lib/datasource/test-e2e.js +113 -146
- package/lib/datasource/test-integration.js +114 -122
- package/lib/datasource/unified-validation-run-body.js +68 -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 +93 -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 +166 -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 +70 -7
- package/lib/infrastructure/helpers-docker-check.js +67 -0
- package/lib/infrastructure/helpers.js +203 -42
- package/lib/infrastructure/index.js +31 -18
- package/lib/infrastructure/services.js +21 -67
- 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 +203 -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 +226 -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 +77 -17
- 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/configuration-env-resolver.js +11 -8
- package/lib/utils/controller-deployment-outcome.js +68 -0
- package/lib/utils/credential-display.js +2 -2
- package/lib/utils/credential-secrets-env.js +5 -5
- 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-certificate-tty.js +82 -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 +459 -0
- package/lib/utils/datasource-test-run-exit.js +83 -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 +242 -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-system-test-tty-overview.js +120 -0
- package/lib/utils/external-system-system-test-tty.js +417 -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 +148 -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 +112 -0
- package/lib/utils/validation-run-post-retry.js +85 -0
- package/lib/utils/validation-run-request.js +116 -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-external-cert-sync.js +23 -0
- package/lib/validation/validate.js +8 -14
- 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 +9 -4
- package/scripts/check-datasource-test-run-schema-sync.js +34 -0
- package/scripts/diagnose-cli.js +150 -0
- package/scripts/install-local.js +307 -55
- package/scripts/pnpm-global-remove.js +48 -0
- package/templates/README.md +15 -2
- package/templates/applications/dataplane/application.yaml +52 -2
- package/templates/applications/dataplane/env.template +79 -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 +33 -16
- package/templates/infra/servers.json.hbs +3 -1
- 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
|
@@ -10,118 +10,30 @@
|
|
|
10
10
|
|
|
11
11
|
const chalk = require('chalk');
|
|
12
12
|
const logger = require('./logger');
|
|
13
|
+
const { SEP, statusGlyph } = require('./datasource-test-run-display');
|
|
14
|
+
const { logEnvelopeForInteractiveCli } = require('./datasource-test-run-tty-log');
|
|
15
|
+
const { displayLocalExternalTestPlanLayout } = require('./external-system-local-test-tty');
|
|
16
|
+
const {
|
|
17
|
+
sectionTitle,
|
|
18
|
+
headerKeyValue,
|
|
19
|
+
formatStatusKeyValue,
|
|
20
|
+
formatDatasourceListRow,
|
|
21
|
+
integrationFooterLine,
|
|
22
|
+
formatSuccessParagraph,
|
|
23
|
+
formatBlockingError,
|
|
24
|
+
successGlyph,
|
|
25
|
+
failureGlyph
|
|
26
|
+
} = require('./cli-test-layout-chalk');
|
|
27
|
+
const { displaySystemAggregateDatasourceTestRuns } = require('./external-system-system-test-tty');
|
|
13
28
|
|
|
14
29
|
/**
|
|
15
|
-
* Displays
|
|
16
|
-
* @function displaySystemResults
|
|
17
|
-
* @param {Object[]} systemResults - System file results
|
|
18
|
-
*/
|
|
19
|
-
function displaySystemResults(systemResults) {
|
|
20
|
-
if (systemResults.length === 0) {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
logger.log(chalk.blue('System Files:'));
|
|
24
|
-
for (const systemResult of systemResults) {
|
|
25
|
-
if (systemResult.valid) {
|
|
26
|
-
logger.log(chalk.green(` ✓ ${systemResult.file}`));
|
|
27
|
-
} else {
|
|
28
|
-
logger.log(chalk.red(` ✗ ${systemResult.file}`));
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Displays verbose datasource details
|
|
35
|
-
* @function displayVerboseDatasourceDetails
|
|
36
|
-
* @param {Object} dsResult - Datasource result
|
|
37
|
-
*/
|
|
38
|
-
function displayVerboseDatasourceDetails(dsResult) {
|
|
39
|
-
if (dsResult.warnings.length > 0) {
|
|
40
|
-
dsResult.warnings.forEach(warn => logger.log(chalk.yellow(` ⚠ ${warn}`)));
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
if (dsResult.fieldMappingResults) {
|
|
44
|
-
const fm = dsResult.fieldMappingResults;
|
|
45
|
-
logger.log(chalk.gray(` Field mappings: ${Object.keys(fm.mappedFields || {}).length} fields`));
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (dsResult.metadataSchemaResults) {
|
|
49
|
-
const ms = dsResult.metadataSchemaResults;
|
|
50
|
-
const statusMsg = ms.valid ? ' Metadata schema: ✓ Valid' : ' Metadata schema: ✗ Invalid';
|
|
51
|
-
logger.log(ms.valid ? chalk.gray(statusMsg) : chalk.red(statusMsg));
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Displays datasource file results
|
|
57
|
-
* @function displayDatasourceResults
|
|
58
|
-
* @param {Object[]} datasourceResults - Datasource file results
|
|
59
|
-
* @param {boolean} verbose - Show detailed output
|
|
60
|
-
*/
|
|
61
|
-
function displayDatasourceResults(datasourceResults, verbose) {
|
|
62
|
-
if (datasourceResults.length === 0) {
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
logger.log(chalk.blue('\nDatasource Files:'));
|
|
66
|
-
for (const dsResult of datasourceResults) {
|
|
67
|
-
if (dsResult.valid) {
|
|
68
|
-
logger.log(chalk.green(` ✓ ${dsResult.key} (${dsResult.file})`));
|
|
69
|
-
} else {
|
|
70
|
-
logger.log(chalk.red(` ✗ ${dsResult.key} (${dsResult.file})`));
|
|
71
|
-
if (verbose && dsResult.errors.length > 0) {
|
|
72
|
-
dsResult.errors.forEach(err => logger.log(chalk.red(` - ${err}`)));
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
if (verbose) {
|
|
77
|
-
displayVerboseDatasourceDetails(dsResult);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Displays errors and warnings
|
|
84
|
-
* @function displayErrorsAndWarnings
|
|
85
|
-
* @param {string[]} errors - Error messages
|
|
86
|
-
* @param {string[]} warnings - Warning messages
|
|
87
|
-
*/
|
|
88
|
-
function displayErrorsAndWarnings(errors, warnings) {
|
|
89
|
-
if (errors.length > 0) {
|
|
90
|
-
logger.log(chalk.red('\n❌ Errors:'));
|
|
91
|
-
errors.forEach(err => logger.log(chalk.red(` - ${err}`)));
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if (warnings.length > 0) {
|
|
95
|
-
logger.log(chalk.yellow('\n⚠ Warnings:'));
|
|
96
|
-
warnings.forEach(warn => logger.log(chalk.yellow(` - ${warn}`)));
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Displays final test status
|
|
102
|
-
* @function displayFinalTestStatus
|
|
103
|
-
* @param {boolean} valid - Whether all tests passed
|
|
104
|
-
*/
|
|
105
|
-
function displayFinalTestStatus(valid) {
|
|
106
|
-
if (valid) {
|
|
107
|
-
logger.log(chalk.green('\n✅ All tests passed!'));
|
|
108
|
-
} else {
|
|
109
|
-
logger.log(chalk.red('\n❌ Some tests failed'));
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
* Displays formatted test results
|
|
30
|
+
* Displays formatted test results (local external `aifabrix test` — structured report layout).
|
|
115
31
|
* @param {Object} results - Test results
|
|
116
32
|
* @param {boolean} verbose - Show detailed output
|
|
33
|
+
* @param {string} [appName] - Integration folder / app key for header
|
|
117
34
|
*/
|
|
118
|
-
function displayTestResults(results, verbose = false) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
displaySystemResults(results.systemResults);
|
|
122
|
-
displayDatasourceResults(results.datasourceResults, verbose);
|
|
123
|
-
displayErrorsAndWarnings(results.errors, results.warnings);
|
|
124
|
-
displayFinalTestStatus(results.valid);
|
|
35
|
+
function displayTestResults(results, verbose = false, appName = '') {
|
|
36
|
+
displayLocalExternalTestPlanLayout(results, verbose, appName || results.appName || results.systemKey || 'unknown');
|
|
125
37
|
}
|
|
126
38
|
|
|
127
39
|
/**
|
|
@@ -131,9 +43,9 @@ function displayTestResults(results, verbose = false) {
|
|
|
131
43
|
*/
|
|
132
44
|
function displayVerboseValidationResults(vr) {
|
|
133
45
|
if (vr.isValid) {
|
|
134
|
-
logger.log(chalk.gray(' Validation:
|
|
46
|
+
logger.log(chalk.gray(' Validation: ✔ Valid'));
|
|
135
47
|
} else {
|
|
136
|
-
logger.log(chalk.red(' Validation:
|
|
48
|
+
logger.log(chalk.red(' Validation: ✖ Invalid'));
|
|
137
49
|
}
|
|
138
50
|
if (vr.errors && vr.errors.length > 0) {
|
|
139
51
|
vr.errors.forEach(err => logger.log(chalk.red(` - ${err}`)));
|
|
@@ -163,7 +75,7 @@ function displayVerboseFieldMappingResults(fmr) {
|
|
|
163
75
|
*/
|
|
164
76
|
function displayVerboseEndpointResults(etr) {
|
|
165
77
|
if (etr.endpointConfigured) {
|
|
166
|
-
logger.log(chalk.gray(' Endpoint:
|
|
78
|
+
logger.log(chalk.gray(' Endpoint: ✔ Configured'));
|
|
167
79
|
} else {
|
|
168
80
|
logger.log(chalk.gray(' Endpoint: Not configured'));
|
|
169
81
|
}
|
|
@@ -191,54 +103,244 @@ function displayVerboseIntegrationDetails(dsResult) {
|
|
|
191
103
|
}
|
|
192
104
|
|
|
193
105
|
/**
|
|
194
|
-
*
|
|
195
|
-
* @
|
|
106
|
+
* @param {Object} dsResult
|
|
107
|
+
* @returns {'ok'|'warn'|'fail'|'skipped'}
|
|
108
|
+
*/
|
|
109
|
+
function legacyIntegrationRowStatus(dsResult) {
|
|
110
|
+
if (dsResult.skipped) return 'skipped';
|
|
111
|
+
if (!dsResult.success) return 'fail';
|
|
112
|
+
const w = dsResult.validationResults && dsResult.validationResults.warnings;
|
|
113
|
+
if (Array.isArray(w) && w.length > 0) return 'warn';
|
|
114
|
+
return 'ok';
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function legacyIntegrationRowHint(dsResult) {
|
|
118
|
+
if (dsResult.skipped) return dsResult.reason || 'Skipped';
|
|
119
|
+
if (!dsResult.success) return 'Failed';
|
|
120
|
+
return legacyIntegrationRowStatus(dsResult) === 'warn' ? 'Partial' : 'Ready';
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Displays a single datasource integration test result (legacy pipeline row).
|
|
196
125
|
* @param {Object} dsResult - Datasource result
|
|
197
126
|
* @param {boolean} verbose - Show detailed output
|
|
198
127
|
*/
|
|
199
128
|
function displayDatasourceIntegrationResult(dsResult, verbose) {
|
|
129
|
+
const rowSt = legacyIntegrationRowStatus(dsResult);
|
|
130
|
+
const hint = legacyIntegrationRowHint(dsResult);
|
|
131
|
+
logger.log(formatDatasourceListRow(rowSt, dsResult.key, hint));
|
|
132
|
+
|
|
133
|
+
if (!dsResult.skipped && !dsResult.success && dsResult.error) {
|
|
134
|
+
logger.log(chalk.red(` Error: ${dsResult.error}`));
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
if (verbose) {
|
|
138
|
+
displayVerboseIntegrationDetails(dsResult);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Worst status across server runs (envelope.status or transport failure).
|
|
144
|
+
* @param {Object} results
|
|
145
|
+
* @returns {'ok'|'warn'|'fail'}
|
|
146
|
+
*/
|
|
147
|
+
function serverRowFails(r) {
|
|
148
|
+
if (r.skipped) return false;
|
|
149
|
+
if (r.datasourceTestRun && r.datasourceTestRun.status === 'fail') return true;
|
|
150
|
+
return !r.datasourceTestRun && r.success === false;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function serverRowWarns(r) {
|
|
154
|
+
if (r.skipped) return false;
|
|
155
|
+
return !!(r.datasourceTestRun && r.datasourceTestRun.status === 'warn');
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function deriveAggregateServerStatus(results) {
|
|
159
|
+
const ds = results.datasourceResults || [];
|
|
160
|
+
if (ds.length === 0) {
|
|
161
|
+
return results.success === false ? 'fail' : 'ok';
|
|
162
|
+
}
|
|
163
|
+
if (ds.some(serverRowFails)) return 'fail';
|
|
164
|
+
if (ds.some(serverRowWarns)) return 'warn';
|
|
165
|
+
return results.success === false ? 'fail' : 'ok';
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Aggregate status for legacy pipeline integration results (no DatasourceTestRun envelope).
|
|
170
|
+
* @param {Object} results
|
|
171
|
+
* @returns {'ok'|'warn'|'fail'}
|
|
172
|
+
*/
|
|
173
|
+
function deriveAggregateLegacyIntegrationStatus(results) {
|
|
174
|
+
const ds = results.datasourceResults || [];
|
|
175
|
+
if (ds.length === 0) {
|
|
176
|
+
return results.success === false ? 'fail' : 'ok';
|
|
177
|
+
}
|
|
178
|
+
if (ds.some(r => !r.skipped && r.success === false)) return 'fail';
|
|
179
|
+
if (ds.some(r => legacyIntegrationRowStatus(r) === 'warn')) return 'warn';
|
|
180
|
+
return results.success === false ? 'fail' : 'ok';
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
function integrationResultsHaveEnvelope(results) {
|
|
184
|
+
return (results.datasourceResults || []).some(
|
|
185
|
+
r => r.datasourceTestRun && typeof r.datasourceTestRun === 'object'
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* One datasource with DatasourceTestRun — same display path as `aifabrix datasource test` (no server wrapper).
|
|
191
|
+
* @param {Object} results
|
|
192
|
+
* @returns {boolean}
|
|
193
|
+
*/
|
|
194
|
+
function isSingleUnskippedEnvelopeRun(results) {
|
|
195
|
+
const rows = results.datasourceResults || [];
|
|
196
|
+
if (rows.length !== 1) return false;
|
|
197
|
+
const r = rows[0];
|
|
198
|
+
return Boolean(
|
|
199
|
+
r && !r.skipped && r.datasourceTestRun && typeof r.datasourceTestRun === 'object'
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
function runLabelForServerRun(runType) {
|
|
204
|
+
return runType === 'e2e' ? 'test-e2e (dataplane)' : 'test-integration (dataplane)';
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
function renderOneServerDatasourceRow(dsResult, verbose, opts) {
|
|
208
|
+
logger.log('');
|
|
209
|
+
if (!dsResult.datasourceTestRun) {
|
|
210
|
+
logger.log(headerKeyValue('Datasource:', dsResult.key));
|
|
211
|
+
}
|
|
200
212
|
if (dsResult.skipped) {
|
|
201
|
-
logger.log(
|
|
213
|
+
logger.log(formatDatasourceListRow('skipped', dsResult.key, dsResult.reason || 'Skipped'));
|
|
202
214
|
return;
|
|
203
215
|
}
|
|
216
|
+
if (dsResult.datasourceTestRun) {
|
|
217
|
+
logEnvelopeForInteractiveCli(dsResult.datasourceTestRun, {
|
|
218
|
+
json: false,
|
|
219
|
+
summary: false,
|
|
220
|
+
debug: opts.debug,
|
|
221
|
+
requestedCapabilityKey: opts.requestedCapabilityKey
|
|
222
|
+
});
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
displayDatasourceIntegrationResult(dsResult, verbose);
|
|
226
|
+
}
|
|
204
227
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
228
|
+
function logServerDatasourceTestRunHeader(results, runType, agg) {
|
|
229
|
+
logger.log('');
|
|
230
|
+
logger.log(sectionTitle('Server test results'));
|
|
231
|
+
logger.log('');
|
|
232
|
+
logger.log(headerKeyValue('System:', results.systemKey));
|
|
233
|
+
logger.log(headerKeyValue('Run:', runLabelForServerRun(runType)));
|
|
234
|
+
logger.log(formatStatusKeyValue(agg, statusGlyph(agg)));
|
|
235
|
+
logger.log('');
|
|
236
|
+
logger.log(chalk.gray(SEP));
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
function logServerDatasourceTestRunFooter(success, agg) {
|
|
240
|
+
logger.log(
|
|
241
|
+
integrationFooterLine(
|
|
242
|
+
success,
|
|
243
|
+
agg,
|
|
244
|
+
'All server tests passed.',
|
|
245
|
+
'Server tests completed with warnings.',
|
|
246
|
+
'Some server tests failed.'
|
|
247
|
+
)
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Dataplane DatasourceTestRun layout (multi- or single-datasource).
|
|
253
|
+
* @param {Object} results
|
|
254
|
+
* @param {boolean} verbose
|
|
255
|
+
* @param {Object} opts
|
|
256
|
+
* @param {boolean|string} [opts.debug]
|
|
257
|
+
* @param {'integration'|'e2e'} [opts.runType]
|
|
258
|
+
*/
|
|
259
|
+
function displayServerDatasourceTestRunResults(results, verbose, opts = {}) {
|
|
260
|
+
const runType = opts.runType === 'e2e' ? 'e2e' : 'integration';
|
|
261
|
+
|
|
262
|
+
if (isSingleUnskippedEnvelopeRun(results)) {
|
|
263
|
+
const row = results.datasourceResults[0];
|
|
264
|
+
logEnvelopeForInteractiveCli(row.datasourceTestRun, {
|
|
265
|
+
json: false,
|
|
266
|
+
summary: false,
|
|
267
|
+
debug: opts.debug,
|
|
268
|
+
requestedCapabilityKey: opts.requestedCapabilityKey
|
|
269
|
+
});
|
|
270
|
+
return;
|
|
212
271
|
}
|
|
213
272
|
|
|
214
|
-
|
|
215
|
-
|
|
273
|
+
// Plan §17: system-level overview for multi-datasource results (no full §16 dump per datasource by default).
|
|
274
|
+
// Keep legacy per-datasource full envelope available only via datasource commands.
|
|
275
|
+
if (integrationResultsHaveEnvelope(results)) {
|
|
276
|
+
displaySystemAggregateDatasourceTestRuns(results, { runType, verbose: Boolean(verbose) });
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
const agg = deriveAggregateServerStatus(results);
|
|
281
|
+
logServerDatasourceTestRunHeader(results, runType, agg);
|
|
282
|
+
|
|
283
|
+
if (results.datasourceResults.length === 0) {
|
|
284
|
+
logger.log('');
|
|
285
|
+
logger.log(chalk.yellow('No datasources tested'));
|
|
286
|
+
logger.log('');
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
for (const dsResult of results.datasourceResults) {
|
|
291
|
+
renderOneServerDatasourceRow(dsResult, verbose, opts);
|
|
292
|
+
logger.log('');
|
|
293
|
+
logger.log(chalk.gray(SEP));
|
|
216
294
|
}
|
|
295
|
+
|
|
296
|
+
logServerDatasourceTestRunFooter(results.success, agg);
|
|
217
297
|
}
|
|
218
298
|
|
|
219
299
|
/**
|
|
220
|
-
* Displays formatted integration test results
|
|
300
|
+
* Displays formatted integration / E2E test results (legacy or DatasourceTestRun TTY).
|
|
221
301
|
* @param {Object} results - Integration test results
|
|
222
302
|
* @param {boolean} verbose - Show detailed output
|
|
303
|
+
* @param {Object} [displayOpts]
|
|
304
|
+
* @param {boolean|string} [displayOpts.debug] - Debug appendix for each envelope
|
|
305
|
+
* @param {'integration'|'e2e'} [displayOpts.runType]
|
|
306
|
+
* @param {string} [displayOpts.requestedCapabilityKey]
|
|
223
307
|
*/
|
|
224
|
-
function displayIntegrationTestResults(results, verbose = false) {
|
|
225
|
-
|
|
226
|
-
|
|
308
|
+
function displayIntegrationTestResults(results, verbose = false, displayOpts = {}) {
|
|
309
|
+
if (integrationResultsHaveEnvelope(results)) {
|
|
310
|
+
displayServerDatasourceTestRunResults(results, verbose, displayOpts);
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
const agg = deriveAggregateLegacyIntegrationStatus(results);
|
|
315
|
+
logger.log('');
|
|
316
|
+
logger.log(sectionTitle('Integration test results'));
|
|
317
|
+
logger.log('');
|
|
318
|
+
logger.log(headerKeyValue('System:', results.systemKey));
|
|
319
|
+
logger.log(headerKeyValue('Run:', 'test-integration (pipeline)'));
|
|
320
|
+
logger.log(formatStatusKeyValue(agg, statusGlyph(agg)));
|
|
321
|
+
logger.log('');
|
|
322
|
+
logger.log(chalk.gray(SEP));
|
|
227
323
|
|
|
228
324
|
if (results.datasourceResults.length === 0) {
|
|
325
|
+
logger.log('');
|
|
229
326
|
logger.log(chalk.yellow('No datasources tested'));
|
|
230
327
|
return;
|
|
231
328
|
}
|
|
232
329
|
|
|
330
|
+
logger.log('');
|
|
233
331
|
for (const dsResult of results.datasourceResults) {
|
|
234
332
|
displayDatasourceIntegrationResult(dsResult, verbose);
|
|
235
333
|
}
|
|
236
334
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
335
|
+
logger.log(
|
|
336
|
+
integrationFooterLine(
|
|
337
|
+
results.success,
|
|
338
|
+
agg,
|
|
339
|
+
'All integration tests passed.',
|
|
340
|
+
'Integration tests completed with warnings.',
|
|
341
|
+
'Some integration tests failed.'
|
|
342
|
+
)
|
|
343
|
+
);
|
|
242
344
|
}
|
|
243
345
|
|
|
244
346
|
/**
|
|
@@ -256,7 +358,9 @@ function displayIntegrationTestResults(results, verbose = false) {
|
|
|
256
358
|
*/
|
|
257
359
|
/* eslint-disable max-statements,complexity -- Step iteration and status display */
|
|
258
360
|
function displayE2EResults(data, verbose = false) {
|
|
259
|
-
logger.log(
|
|
361
|
+
logger.log('');
|
|
362
|
+
logger.log(sectionTitle('E2E test results'));
|
|
363
|
+
logger.log('');
|
|
260
364
|
if (data.status) {
|
|
261
365
|
const statusLabel = data.status === 'running'
|
|
262
366
|
? chalk.yellow('running')
|
|
@@ -265,12 +369,12 @@ function displayE2EResults(data, verbose = false) {
|
|
|
265
369
|
: data.status === 'failed'
|
|
266
370
|
? chalk.red('failed')
|
|
267
371
|
: data.status;
|
|
268
|
-
logger.log(
|
|
372
|
+
logger.log(`${chalk.gray('Status:')} ${statusLabel}`);
|
|
269
373
|
}
|
|
270
374
|
const steps = data.steps || data.completedActions || [];
|
|
271
375
|
if (steps.length === 0) {
|
|
272
376
|
if (data.success === false) {
|
|
273
|
-
logger.log(
|
|
377
|
+
logger.log(formatBlockingError('E2E test failed.'));
|
|
274
378
|
if (data.error) logger.log(chalk.red(` Error: ${data.error}`));
|
|
275
379
|
} else if (data.status === 'running') {
|
|
276
380
|
logger.log(chalk.gray(' No steps completed yet'));
|
|
@@ -286,7 +390,7 @@ function displayE2EResults(data, verbose = false) {
|
|
|
286
390
|
for (const step of steps) {
|
|
287
391
|
const name = step.name || step.step || 'unknown';
|
|
288
392
|
const ok = step.success !== false && !step.error;
|
|
289
|
-
logger.log(` ${ok ?
|
|
393
|
+
logger.log(` ${ok ? successGlyph() : failureGlyph()} ${chalk.white(name)}`);
|
|
290
394
|
if (!ok && (step.error || step.message)) logger.log(chalk.red(` ${step.error || step.message}`));
|
|
291
395
|
if (verbose && step.message && ok) logger.log(chalk.gray(` ${step.message}`));
|
|
292
396
|
if (verbose && ok && (name === 'sync' || step.step === 'sync') && step.evidence && step.evidence.jobs) {
|
|
@@ -308,7 +412,9 @@ function displayE2EResults(data, verbose = false) {
|
|
|
308
412
|
return;
|
|
309
413
|
}
|
|
310
414
|
const allPassed = steps.every(s => s.success !== false && !s.error);
|
|
311
|
-
logger.log(
|
|
415
|
+
logger.log(
|
|
416
|
+
allPassed ? formatSuccessParagraph('E2E test passed.') : `\n${formatBlockingError('E2E test failed.')}`
|
|
417
|
+
);
|
|
312
418
|
}
|
|
313
419
|
|
|
314
420
|
/**
|