@aifabrix/builder 2.45.0 → 2.46.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/cli-layout.mdc +2 -0
- package/.cursor/rules/cli-product-neutral.mdc +43 -0
- package/.cursor/rules/docs-rules.mdc +3 -1
- package/.cursor/rules/project-rules.mdc +1 -0
- package/README.md +43 -17
- package/integration/hubspot-test/wizard-hubspot-e2e.yaml +1 -1
- package/jest.config.default.js +2 -1
- package/jest.config.isolated.js +2 -1
- package/jest.global-live-fabrix-hooks.js +36 -0
- package/jest.isolated-projects.js +130 -0
- package/jest.projects.js +69 -121
- package/lib/api/agent-metadata-validation.api.js +93 -0
- package/lib/api/api-response-errors.js +124 -0
- package/lib/api/audit-api-helpers.js +68 -0
- package/lib/api/audit.api.js +119 -0
- package/lib/api/auth-cache.api.js +44 -0
- package/lib/api/certificates.api.js +4 -4
- package/lib/api/credential.api.js +2 -2
- package/lib/api/dataplane-health.api.js +137 -0
- package/lib/api/dataplane-sync.api.js +27 -0
- package/lib/api/datasources-core.api.js +21 -18
- package/lib/api/datasources-extended.api.js +22 -22
- package/lib/api/dimensions.api.js +3 -0
- package/lib/api/external-systems.api.js +13 -13
- package/lib/api/governance-scenario-pack.api.js +159 -0
- package/lib/api/governance-scenarios.api.js +39 -0
- package/lib/api/groups.api.js +79 -0
- package/lib/api/index.js +88 -5
- package/lib/api/lifecycle.api.js +77 -0
- package/lib/api/pipeline.api.js +7 -5
- package/lib/api/protection.api.js +157 -0
- package/lib/api/records-bulk.api.js +43 -0
- package/lib/api/records-search-parse.js +49 -0
- package/lib/api/records-search.api.js +29 -0
- package/lib/api/types/agent-metadata-validation.types.js +67 -0
- package/lib/api/types/audit.types.js +72 -0
- package/lib/api/types/dataplane-health.types.js +27 -0
- package/lib/api/types/dimensions.types.js +2 -0
- package/lib/api/types/governance-scenarios.types.js +39 -0
- package/lib/api/types/protection.types.js +69 -0
- package/lib/api/types/records-bulk.types.js +35 -0
- package/lib/api/types/records-search.types.js +28 -0
- package/lib/api/user-groups.api.js +50 -0
- package/lib/api/users.api.js +95 -0
- package/lib/api/validation-run.api.js +3 -3
- package/lib/api/validation-runner.js +5 -3
- package/lib/api/wizard-platform.api.js +3 -3
- package/lib/api/wizard.api.js +21 -21
- package/lib/app/deploy-config.js +4 -1
- package/lib/app/deploy.js +34 -19
- package/lib/app/down.js +20 -1
- package/lib/app/push.js +4 -5
- package/lib/app/register.js +7 -4
- package/lib/app/run-env-compose.js +84 -30
- package/lib/build/index.js +5 -0
- package/lib/certification/sync-system-certification.js +13 -6
- package/lib/cli/index.js +8 -2
- package/lib/cli/infra-guided-auth.js +109 -0
- package/lib/cli/infra-guided.js +91 -69
- package/lib/cli/setup-app.help.js +19 -2
- package/lib/cli/setup-app.js +58 -23
- package/lib/cli/setup-app.test-commands.js +28 -21
- package/lib/cli/setup-auth.js +55 -3
- package/lib/cli/setup-certification-commands.js +147 -0
- package/lib/cli/setup-certification.help.js +141 -0
- package/lib/cli/setup-environment.js +19 -2
- package/lib/cli/setup-external-system-help.js +62 -0
- package/lib/cli/setup-external-system.js +62 -6
- package/lib/cli/setup-infra.js +9 -1
- package/lib/cli/setup-platform.js +6 -1
- package/lib/cli/setup-secrets.js +33 -1
- package/lib/cli/setup-utility-help-after.js +65 -0
- package/lib/cli/setup-utility-repair.js +198 -0
- package/lib/cli/setup-utility-resolve.js +42 -6
- package/lib/cli/setup-utility-validate.js +197 -0
- package/lib/cli/setup-utility.js +41 -258
- package/lib/commands/auth-status-client-tokens.js +214 -0
- package/lib/commands/auth-status-dataplane-version.js +269 -0
- package/lib/commands/auth-status-display.js +94 -0
- package/lib/commands/auth-status.js +111 -53
- package/lib/commands/credential-push.js +10 -5
- package/lib/commands/datasource-load-export-cli.js +178 -0
- package/lib/commands/datasource-test-trust-cli.js +118 -0
- package/lib/commands/datasource-unified-test-cli.js +31 -20
- package/lib/commands/datasource-unified-test-cli.options.js +22 -3
- package/lib/commands/datasource-unified-test-e2e-cli-helpers.js +5 -5
- package/lib/commands/datasource-verify-audit-cli.js +96 -0
- package/lib/commands/datasource.js +68 -1
- package/lib/commands/dev-show-display.js +8 -1
- package/lib/commands/dimension-value.js +43 -13
- package/lib/commands/dimension.js +38 -7
- package/lib/commands/governance-cli-shared.js +94 -0
- package/lib/commands/governance-command-action.js +132 -0
- package/lib/commands/governance-download-external.js +34 -0
- package/lib/commands/governance-generate-external.js +71 -0
- package/lib/commands/governance-upload-external.js +36 -0
- package/lib/commands/governance-verify-external.js +64 -0
- package/lib/commands/governance.js +144 -0
- package/lib/commands/identity-apply-sync.js +131 -0
- package/lib/commands/identity-group-cli.js +146 -0
- package/lib/commands/identity-membership-role-cache.js +175 -0
- package/lib/commands/identity-shared.js +94 -0
- package/lib/commands/identity-user-cli.js +158 -0
- package/lib/commands/identity.js +43 -0
- package/lib/commands/lifecycle-command-action.js +123 -0
- package/lib/commands/lifecycle-external.js +268 -0
- package/lib/commands/login.js +56 -17
- package/lib/commands/protection-cli-leaves.js +286 -0
- package/lib/commands/protection.js +50 -0
- package/lib/commands/repair-auth-apply.js +127 -0
- package/lib/commands/repair-changed-files.js +41 -0
- package/lib/commands/repair-datasource-keys.js +4 -1
- package/lib/commands/repair-datasource-run.js +59 -0
- package/lib/commands/repair-datasource-test-payload.js +259 -0
- package/lib/commands/repair-datasource.js +1 -51
- package/lib/commands/repair-env-template.js +64 -13
- package/lib/commands/repair-external-run.js +216 -0
- package/lib/commands/repair-openapi-sync.js +23 -0
- package/lib/commands/repair-persist.js +4 -0
- package/lib/commands/repair-rbac.js +52 -1
- package/lib/commands/repair-steps.js +145 -0
- package/lib/commands/repair.js +29 -286
- package/lib/commands/secrets-get.js +184 -0
- package/lib/commands/secrets-remove-all.js +3 -1
- package/lib/commands/setup-image-refresh.js +146 -0
- package/lib/commands/setup-modes.js +158 -162
- package/lib/commands/setup-platform-auth.js +76 -0
- package/lib/commands/setup-prompts-admin.js +244 -0
- package/lib/commands/setup-prompts-platform-mode.js +67 -0
- package/lib/commands/setup-prompts-validators.js +36 -0
- package/lib/commands/setup-prompts.js +24 -76
- package/lib/commands/setup-run-context.js +45 -0
- package/lib/commands/setup-spinners.js +39 -0
- package/lib/commands/setup.js +27 -5
- package/lib/commands/teardown.js +39 -0
- package/lib/commands/test-e2e-external.js +61 -14
- package/lib/commands/test-governance-cli-options.js +47 -0
- package/lib/commands/test-governance-external.js +67 -0
- package/lib/commands/test-trust-cli-options.js +32 -0
- package/lib/commands/test-trust-external.js +126 -0
- package/lib/commands/up-common.js +25 -13
- package/lib/commands/up-dataplane.js +50 -13
- package/lib/commands/upload-publish-context.js +75 -0
- package/lib/commands/upload-sidecar-followups.js +89 -0
- package/lib/commands/upload.js +108 -105
- package/lib/commands/verify-governance-combined-external.js +61 -0
- package/lib/commands/verify-governance-command-action.js +64 -0
- package/lib/commands/verify-governance-db.js +102 -0
- package/lib/commands/verify-governance-external.js +77 -0
- package/lib/commands/verify-governance-result-builders.js +71 -0
- package/lib/commands/verify-operations-command-action.js +68 -0
- package/lib/commands/verify-operations-external.js +268 -0
- package/lib/commands/verify-operations-persist.js +75 -0
- package/lib/commands/verify-operations-step-plan.js +68 -0
- package/lib/commands/verify-operations-steps.js +111 -0
- package/lib/commands/verify-trust-command-action.js +70 -0
- package/lib/commands/verify-trust-external.js +67 -0
- package/lib/commands/wizard-config-normalizer.js +43 -23
- package/lib/commands/wizard-core.js +5 -0
- package/lib/core/admin-password-generator.js +38 -0
- package/lib/core/admin-secrets-bundle.js +111 -0
- package/lib/core/admin-secrets-env-overlay.js +62 -0
- package/lib/core/admin-secrets.js +32 -4
- package/lib/core/config-attach-extensions.js +3 -0
- package/lib/core/config-device-dataplane.js +185 -0
- package/lib/core/config-platform-controller.js +44 -0
- package/lib/core/config-setup-installation-profile.js +42 -0
- package/lib/core/config-setup-platform-mode.js +46 -0
- package/lib/core/config.js +46 -36
- package/lib/core/secrets-admin-env.js +6 -2
- package/lib/core/secrets-ensure.js +4 -0
- package/lib/core/secrets-env-content.js +54 -48
- package/lib/core/secrets-env-write.js +10 -1
- package/lib/core/secrets-infra-placeholder-sync.js +2 -0
- package/lib/core/setup-installation-profile.js +43 -0
- package/lib/core/setup-platform-mode.js +55 -0
- package/lib/datasource/agent-trust-debug-log.js +45 -0
- package/lib/datasource/agent-trust-fetch.js +115 -0
- package/lib/datasource/agent-trust-map.js +101 -0
- package/lib/datasource/agent-trust-mock.js +44 -0
- package/lib/datasource/agent-trust-run.js +95 -0
- package/lib/datasource/agent-trust-timeout.js +25 -0
- package/lib/datasource/audit-evidence-display.js +80 -0
- package/lib/datasource/audit-evidence-extract-debug.js +115 -0
- package/lib/datasource/audit-evidence-extract.js +180 -0
- package/lib/datasource/audit-evidence-matrix-rows.js +158 -0
- package/lib/datasource/audit-evidence-operation-aliases.js +63 -0
- package/lib/datasource/audit-evidence-poll.js +109 -0
- package/lib/datasource/audit-evidence-run.js +177 -0
- package/lib/datasource/audit-evidence-verify-helpers.js +167 -0
- package/lib/datasource/audit-evidence-verify-matrix.js +205 -0
- package/lib/datasource/audit-evidence-verify.js +108 -0
- package/lib/datasource/bulk-loader-run-batches.js +100 -0
- package/lib/datasource/bulk-loader-service-retry.js +52 -0
- package/lib/datasource/bulk-loader-service.js +127 -0
- package/lib/datasource/capability/run-capability-dimension.js +2 -1
- package/lib/datasource/datasource-exporter-resolve.js +82 -0
- package/lib/datasource/datasource-exporter-service.js +144 -0
- package/lib/datasource/datasource-identifier.js +148 -0
- package/lib/datasource/datasource-load-export-context.js +95 -0
- package/lib/datasource/integration-context.js +6 -4
- package/lib/datasource/local-data-paths.js +145 -0
- package/lib/datasource/log-cleaner.js +241 -0
- package/lib/datasource/log-viewer.js +111 -6
- package/lib/datasource/record-file-parser.js +85 -0
- package/lib/datasource/record-mapper.js +129 -0
- package/lib/datasource/resolve-app.js +74 -55
- package/lib/datasource/test-e2e.js +29 -2
- package/lib/datasource/unified-validation-run-body.js +3 -1
- package/lib/datasource/unified-validation-run-resolve.js +45 -12
- package/lib/datasource/unified-validation-run.js +47 -18
- package/lib/datasource/validate.js +37 -20
- package/lib/deployment/environment-poll-status.js +138 -0
- package/lib/deployment/environment.js +42 -34
- package/lib/external-system/download.js +21 -20
- package/lib/external-system/generator.js +5 -1
- package/lib/external-system/integration-auth-context.js +45 -0
- package/lib/external-system/test-auth.js +12 -5
- package/lib/external-system/test-system-level.js +25 -4
- package/lib/external-system/test.js +9 -7
- package/lib/generator/external-controller-manifest.js +15 -0
- package/lib/governance/governance-cli-errors.js +96 -0
- package/lib/governance/governance-download-display.js +38 -0
- package/lib/governance/governance-pack-loader.js +70 -0
- package/lib/governance/governance-run-display.js +309 -0
- package/lib/identity/identity-apply-core.js +108 -0
- package/lib/identity/identity-apply-phases.js +244 -0
- package/lib/identity/identity-apply-service.js +77 -0
- package/lib/identity/identity-csv-parser.js +114 -0
- package/lib/infrastructure/admin-secrets-apply.js +84 -0
- package/lib/infrastructure/admin-secrets-ensure.js +130 -0
- package/lib/infrastructure/admin-secrets-resolve.js +95 -0
- package/lib/infrastructure/admin-secrets-sync.js +91 -0
- package/lib/infrastructure/helpers.js +23 -129
- package/lib/infrastructure/index.js +5 -6
- package/lib/infrastructure/orphan-infra-docker-teardown.js +11 -5
- package/lib/internal/fs-real-sync.js +29 -1
- package/lib/lifecycle/certification-progress.js +231 -0
- package/lib/lifecycle/dataplane-ui-url.js +145 -0
- package/lib/lifecycle/exit-codes.js +24 -0
- package/lib/lifecycle/json-envelope.js +25 -0
- package/lib/lifecycle/lifecycle-governance-options.js +51 -0
- package/lib/lifecycle/logger-quiet.js +29 -0
- package/lib/lifecycle/open-api-published.js +59 -0
- package/lib/lifecycle/operations-readiness-metrics.js +101 -0
- package/lib/lifecycle/product-model.js +196 -0
- package/lib/lifecycle/report-display.js +471 -0
- package/lib/lifecycle/scenario-upload.js +191 -0
- package/lib/lifecycle/verify-step-progress.js +87 -0
- package/lib/parameters/infra-kv-discovery.js +27 -2
- package/lib/protection/auth-context.js +51 -0
- package/lib/protection/convert-batch.js +90 -0
- package/lib/protection/load.js +41 -0
- package/lib/protection/paths.js +158 -0
- package/lib/protection/preflight-datasource-ready.js +46 -0
- package/lib/protection/protection-create-probe-lines.js +142 -0
- package/lib/protection/protection-create-probes.js +95 -0
- package/lib/protection/protection-create-scaffold.js +281 -0
- package/lib/protection/protection-display-helpers.js +445 -0
- package/lib/protection/protection-display.js +215 -0
- package/lib/protection/protection-preset-registry.js +97 -0
- package/lib/protection/report-exit.js +62 -0
- package/lib/protection/resolve.js +202 -0
- package/lib/protection/run-commands-validate.js +130 -0
- package/lib/protection/run-commands.js +216 -0
- package/lib/protection/run-protection-create-helpers.js +134 -0
- package/lib/protection/run-protection-create-probes-flow.js +43 -0
- package/lib/protection/run-protection-create.js +191 -0
- package/lib/protection/scope.js +22 -0
- package/lib/protection/sync-after-upload.js +64 -0
- package/lib/protection/upload-batch.js +127 -0
- package/lib/protection/validate-batch.js +113 -0
- package/lib/protection/validate-local.js +65 -0
- package/lib/resolvers/dimension-file.js +29 -4
- package/lib/schema/application-schema.json +1 -1
- package/lib/schema/datasource-test-run.schema.json +89 -6
- package/lib/schema/external-datasource.schema.json +2636 -2588
- package/lib/schema/external-system.schema.json +1089 -761
- package/lib/schema/flag-map-validation-run.json +2 -2
- package/lib/schema/infra.parameter.yaml +45 -0
- package/lib/schema/protection.schema.json +374 -0
- package/lib/schema/type/credential-field-registry.json +642 -0
- package/lib/schema/wizard-config.schema.json +1 -1
- package/lib/utils/agent-trust-run-display.js +231 -0
- package/lib/utils/agent-trust-run-exit.js +59 -0
- package/lib/utils/agent-trust-wait-ui.js +94 -0
- package/lib/utils/aifabrix-test-runtime-guard.js +125 -0
- package/lib/utils/api.js +55 -31
- package/lib/utils/app-relative-path-env.js +112 -0
- package/lib/utils/cli-exit-codes.js +30 -0
- package/lib/utils/cli-secrets-error-format.js +83 -21
- package/lib/utils/cli-sync-options.js +33 -0
- package/lib/utils/cli-utils.js +16 -4
- package/lib/utils/compose-generate-docker-compose.js +4 -0
- package/lib/utils/compose-traefik-ingress-base.js +16 -1
- package/lib/utils/config-secrets-path.js +46 -0
- package/lib/utils/controller-url.js +88 -1
- package/lib/utils/credential-push-ui.js +90 -0
- package/lib/utils/credential-secrets-env.js +137 -9
- package/lib/utils/dataplane-cli-version-gate.js +202 -0
- package/lib/utils/dataplane-cli-version-help.js +74 -0
- package/lib/utils/dataplane-resolver.js +129 -2
- package/lib/utils/datasource-export-display.js +137 -0
- package/lib/utils/datasource-load-display.js +174 -0
- package/lib/utils/datasource-load-export-ui.js +120 -0
- package/lib/utils/datasource-test-run-capability-scope.js +3 -3
- package/lib/utils/datasource-test-run-display.js +3 -3
- package/lib/utils/datasource-test-run-tty-log.js +5 -1
- package/lib/utils/declarative-url-ports.js +3 -3
- package/lib/utils/deployment-auth-mode.js +41 -0
- package/lib/utils/developer-volume-id.js +33 -0
- package/lib/utils/env-copy.js +14 -9
- package/lib/utils/env-kv-orphan-lines.js +43 -0
- package/lib/utils/error-formatters/network-errors.js +13 -4
- package/lib/utils/external-env-template.js +1 -0
- package/lib/utils/external-system-readiness-core.js +10 -0
- package/lib/utils/external-system-readiness-display.js +80 -23
- package/lib/utils/health-check.js +4 -1
- package/lib/utils/help-builder.js +35 -26
- package/lib/utils/keycloak-realm-ready.js +101 -0
- package/lib/utils/load-cip-capacity-display-config.js +61 -15
- package/lib/utils/manifest-source-emit.js +24 -0
- package/lib/utils/pipeline-upload-auth-retry.js +82 -0
- package/lib/utils/platform-controller-url.js +156 -0
- package/lib/utils/postgres-platform-bootstrap.js +199 -0
- package/lib/utils/postgres-wipe.js +9 -2
- package/lib/utils/resolve-env-mode.js +47 -0
- package/lib/utils/secrets-generator.js +31 -25
- package/lib/utils/secrets-missing-error.js +164 -0
- package/lib/utils/semver-compare.js +127 -0
- package/lib/utils/service-url-label.js +81 -0
- package/lib/utils/setup-quiet-output.js +25 -0
- package/lib/utils/template-helpers.js +15 -0
- package/lib/utils/token-manager-client-credentials.js +201 -0
- package/lib/utils/token-manager-messages.js +8 -0
- package/lib/utils/token-manager-refresh.js +12 -2
- package/lib/utils/token-manager.js +86 -105
- package/lib/utils/upload-pipeline-ui.js +98 -0
- package/lib/utils/upload-sync-options.js +42 -0
- package/lib/utils/url-declarative-public-base.js +21 -3
- package/lib/utils/url-declarative-vdir-inactive-env.js +14 -4
- package/lib/utils/validation-poll-ui.js +22 -7
- package/lib/utils/validation-run-stage.js +45 -0
- package/lib/validation/wizard-config-validator.js +58 -19
- package/package.json +1 -1
- package/templates/applications/dataplane/application.yaml +2 -1
- package/templates/applications/dataplane/env.template +36 -1
- package/templates/applications/dataplane/rbac.yaml +4 -0
- package/templates/applications/miso-controller/env.template +16 -0
- package/templates/external-system/README.md.hbs +116 -11
- package/templates/python/docker-compose.hbs +19 -18
- package/templates/typescript/docker-compose.hbs +18 -17
|
@@ -7,6 +7,8 @@ alwaysApply: false
|
|
|
7
7
|
|
|
8
8
|
When you touch **CLI surface** (`bin/aifabrix.js`, `lib/cli.js`, `lib/cli/**`, `lib/commands/**`) or **shared CLI formatters**, you must keep behavior aligned with the canonical docs in this folder.
|
|
9
9
|
|
|
10
|
+
**Product-neutral copy:** User-facing help, errors, and warnings must not reference internal plan IDs or hardcode lab-only integration names in generic code. See [cli-product-neutral.mdc](./cli-product-neutral.mdc).
|
|
11
|
+
|
|
10
12
|
## Sources of truth (read before shipping)
|
|
11
13
|
|
|
12
14
|
| Document | Role |
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Apply when changing aifabrix CLI code, help text, errors, or user-facing docs under docs/commands. Keeps product output free of internal plans, training labs, and hardcoded integration names.
|
|
3
|
+
alwaysApply: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# CLI product-neutral output (Builder)
|
|
7
|
+
|
|
8
|
+
The **aifabrix** CLI is a **product**. User-visible strings must not encode internal engineering artifacts.
|
|
9
|
+
|
|
10
|
+
## Forbidden in product paths
|
|
11
|
+
|
|
12
|
+
Applies to **`lib/cli/**`**, **`lib/commands/**`**, CLI help (Commander `.description()` / `.option()` / `addHelpText`), **`lib/utils/*-error*.js`**, terminal messages from **`lib/utils/cli-*`**, and **`docs/commands/**`** (see [docs-rules.mdc](./docs-rules.mdc)).
|
|
13
|
+
|
|
14
|
+
| Do not use | Use instead |
|
|
15
|
+
| ---------- | ----------- |
|
|
16
|
+
| Internal plan IDs (`Plan 331`, `plan 148`, `BK-1`) | User terms: *active datasource schema guards*, *schema replacement*, *overlap* |
|
|
17
|
+
| Training / lab-only system keys baked into `if` branches (`sharepoint-e2e`, `hubspot-demo` in runtime logic) | **Dynamic** behavior from `systemKey`, `appName`, manifest, env.template, or secrets map |
|
|
18
|
+
| Hardcoded vendor or connector names in generic helpers | Generic rules (path suffix, namespace, configuration keys from disk) |
|
|
19
|
+
| Cursor plan file paths in errors or help | Link only in `.cursor/plans/` and contributor docs |
|
|
20
|
+
|
|
21
|
+
**Examples in docs/commands** may name real apps (`hubspot-e2e`) when illustrating a command; **library code** must not special-case those names unless the user passed them as arguments.
|
|
22
|
+
|
|
23
|
+
## Required patterns
|
|
24
|
+
|
|
25
|
+
- **Missing `kv://` secrets:** Compare requested paths to the loaded secrets map generically (e.g. same path segment under a different namespace). Never hardcode `sharepoint` / `sharepoint-e2e` (or any other lab pair) in `lib/`.
|
|
26
|
+
- **`--force` messaging:** Describe dataplane behavior (*bypass active-datasource schema replacement guards*), not internal plan numbers. Do **not** append extra CLI hints by matching English substrings on API errors — the dataplane pipeline already returns remediation in the 400 body when schema replacement is blocked.
|
|
27
|
+
- **No `upload-pipeline-error-hints`-style modules:** Prefer forwarding `formatApiError` output; optional hints belong in the API contract, not duplicated heuristics in the CLI.
|
|
28
|
+
- **Auth / pipeline errors:** Describe what the user can do (`aifabrix login`, `AIFABRIX_DEPLOYMENT_AUTH=client-credentials`), not ticket or plan IDs.
|
|
29
|
+
- **JSDoc `@fileoverview`:** No plan numbers; optional brief behavior description only.
|
|
30
|
+
|
|
31
|
+
## Verification
|
|
32
|
+
|
|
33
|
+
Before merging CLI UX changes:
|
|
34
|
+
|
|
35
|
+
1. `rg -i 'plan [0-9]|BK-[0-9]|sharepoint-e2e' lib/cli lib/commands lib/utils --glob '*.js'` → no matches in generic helpers (fixture strings in tests are OK).
|
|
36
|
+
2. New error hints must work for **any** integration folder name the user owns.
|
|
37
|
+
3. [cli-layout.mdc](./cli-layout.mdc) and [docs-rules.mdc](./docs-rules.mdc) still apply for glyphs and user-doc scope.
|
|
38
|
+
|
|
39
|
+
## Related
|
|
40
|
+
|
|
41
|
+
- [cli-layout.mdc](./cli-layout.mdc) — terminal layout and output profiles
|
|
42
|
+
- [docs-rules.mdc](./docs-rules.mdc) — public CLI documentation audience
|
|
43
|
+
- [project-rules.mdc](./project-rules.mdc) — ISO / security baseline
|
|
@@ -5,10 +5,12 @@ alwaysApply: true
|
|
|
5
5
|
|
|
6
6
|
## Audience
|
|
7
7
|
|
|
8
|
-
Documents under **docs/** (including **docs/commands/**) are **CLI
|
|
8
|
+
Documents under **docs/** (including **docs/commands/**) are **public CLI user documentation**. The audience is people who use the AI Fabrix Builder CLI or integrate it into workflows—they may **not** have access to private monorepos (dataplane, miso-controller, internal plans). They do not need to know how the CLI talks to the Controller or Dataplane over HTTP.
|
|
9
9
|
|
|
10
10
|
## Do Not Include in CLI User Docs
|
|
11
11
|
|
|
12
|
+
- **Links or paths into other product repos (FORBIDDEN)** – No markdown links, examples, or prerequisites that point at private/sibling repositories or their trees: `../../../aifabrix-dataplane/...`, `../../aifabrix-miso/...`, `packages/miso-controller/...`, `integration/<fixture>/README.md` in another repo, `.cursor/plans/` anywhere, `/workspace/...` monorepo layouts, or “see the dataplane/miso-controller repo”. **Only** cross-link within **`docs/`** and use on-disk paths the user owns (`integration/<systemKey>/...`, `builder/<appKey>/...`, `~/.aifabrix/...`).
|
|
13
|
+
- **Internal plan or ticket IDs** – No “Plan 407.1”, “plan section 2.3”, or similar; describe behavior in user terms.
|
|
12
14
|
- **REST API details** – No HTTP methods, URL paths, or endpoint names (e.g. `GET /api/v1/...`, `POST .../pipeline/upload`).
|
|
13
15
|
- **Request/response shapes** – No payload structures, status codes, or field names from backend APIs.
|
|
14
16
|
- **Backend implementation terms** – Avoid referring to “pipeline config endpoint”, “upload endpoint”, or similar; describe what the **command** does from the user’s perspective.
|
|
@@ -894,6 +894,7 @@ Define request/response types using JSDoc `@typedef`:
|
|
|
894
894
|
|
|
895
895
|
### Must Not Do (❌)
|
|
896
896
|
- ❌ Never hardcode secrets, passwords, or tokens
|
|
897
|
+
- ❌ Never hardcode lab/training integration names, vendor names, or internal plan IDs in generic CLI/helpers (`lib/commands/**`, `lib/cli/**`, shared `lib/utils/*-error*.js`); use dynamic keys from user input, manifests, and secrets — see [cli-product-neutral.mdc](cli-product-neutral.mdc)
|
|
897
898
|
- ❌ Never expose sensitive data in error messages
|
|
898
899
|
- ❌ Never use synchronous file operations in async functions (unless necessary)
|
|
899
900
|
- ❌ Never ignore errors or use empty catch blocks
|
package/README.md
CHANGED
|
@@ -23,12 +23,12 @@ Open developer runtime for AI Fabrix ecosystem. Install the AI Fabrix platform a
|
|
|
23
23
|
## Prerequisites
|
|
24
24
|
|
|
25
25
|
- **Node.js 18+** – Recommended for running the CLI.
|
|
26
|
-
- **
|
|
27
|
-
- **Secrets before platform:** Add
|
|
26
|
+
- **Docker Desktop** – Full access to Docker (containers for infra and platform).
|
|
27
|
+
- **Secrets before platform:** Add an AI tool key (OpenAI or Azure OpenAI) in setup or with `aifabrix secret set` **before** the platform needs them. See [Infrastructure](docs/infrastructure.md).
|
|
28
28
|
|
|
29
29
|
---
|
|
30
30
|
|
|
31
|
-
## Install
|
|
31
|
+
## Install the CLI
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
34
|
npm install -g @aifabrix/builder
|
|
@@ -38,33 +38,59 @@ npm install -g @aifabrix/builder
|
|
|
38
38
|
|
|
39
39
|
---
|
|
40
40
|
|
|
41
|
-
## Goal 1:
|
|
41
|
+
## Goal 1: Install the platform (one command)
|
|
42
42
|
|
|
43
|
-
Get
|
|
44
|
-
|
|
45
|
-
**One-shot install:**
|
|
43
|
+
Get Postgres, Redis, Keycloak, Miso Controller, and Dataplane running on your machine.
|
|
46
44
|
|
|
47
45
|
```bash
|
|
48
46
|
aifabrix setup
|
|
49
47
|
```
|
|
50
48
|
|
|
51
|
-
|
|
49
|
+
That is the whole story for most developers. The command detects whether infra is already running:
|
|
50
|
+
|
|
51
|
+
| Situation | What happens |
|
|
52
|
+
| --- | --- |
|
|
53
|
+
| **Fresh machine** | Short wizard → pull images → `up-infra` → `up-platform` |
|
|
54
|
+
| **Already installed** | Mode menu (3 choices): **re-install** (destroys volumes), **wipe data** (DBs only), or **update images** (keeps data) — each path pulls fresh Docker images before restart |
|
|
55
|
+
|
|
56
|
+
**Grab a coffee** — setup pulls infrastructure and platform images (a few minutes on first run or after image updates). When setup finishes, the CLI stores **`platform-controller`** in `config.yaml` (absolute Miso URL for your machine). Sign in with username **`admin`** and your admin password. If you were already logged in to that controller URL, setup keeps your session; otherwise it prompts for device login like a fresh install.
|
|
57
|
+
|
|
58
|
+
**Controller URL:** Local Docker without Traefik uses `http://localhost:` + port `3000 + developerId×100`. With Traefik and `remote-server`, use the public URL shown in the **Platform Ready** footer (path `/miso/*`). See [Infrastructure guide](docs/infrastructure.md#install-the-platform-one-command).
|
|
59
|
+
|
|
60
|
+
→ Step-by-step detail, ports, and **dev / pro** installation profiles: **[Infrastructure guide](docs/infrastructure.md#install-the-platform-one-command)**
|
|
61
|
+
|
|
62
|
+
### Dev vs pro installation (setup profile)
|
|
63
|
+
|
|
64
|
+
These names match how we talk about **environments** elsewhere (**dev**, **tst**, **pro**). Here they mean **how you install locally**, not which cloud environment you deploy to later.
|
|
65
|
+
|
|
66
|
+
| Profile | Best for | Admin email | Admin passwords |
|
|
67
|
+
| --- | --- | --- | --- |
|
|
68
|
+
| **dev** (default) | Local development, training, labs | You enter once | **One password** for Postgres, pgAdmin, Keycloak, and platform login |
|
|
69
|
+
| **pro** | Production-style or hardened installs | Same | **Autogenerate** strong passwords (shown once) **or** enter manually |
|
|
52
70
|
|
|
53
|
-
|
|
71
|
+
**Default:** **dev** (one email, one password). **Pro** is available in the setup wizard or non-interactively:
|
|
54
72
|
|
|
55
|
-
|
|
73
|
+
```bash
|
|
74
|
+
aifabrix setup --installation pro --pro-password-mode autogen
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Use `--pro-password-mode manual` to enter passwords yourself (one password for all roles, or separate infra / Keycloak / platform passwords via `up-infra` flags).
|
|
78
|
+
|
|
79
|
+
Admin credentials are stored in **`~/.aifabrix/admin-secrets.env`** (encrypted when you configure a secrets encryption key). App and integration secrets stay in **`~/.aifabrix/secrets.local.yaml`**.
|
|
80
|
+
|
|
81
|
+
### Optional: set AI keys outside the wizard
|
|
82
|
+
|
|
83
|
+
- **OpenAI:**
|
|
56
84
|
```bash
|
|
57
85
|
aifabrix secret set secrets-openaiApiKeyVault <your-openai-secret-key>
|
|
58
86
|
```
|
|
59
|
-
- **Azure OpenAI:**
|
|
87
|
+
- **Azure OpenAI:**
|
|
60
88
|
```bash
|
|
61
89
|
aifabrix secret set azure-openaiapi-urlKeyVault <your-azure-openai-endpoint-url>
|
|
62
90
|
aifabrix secret set secrets-azureOpenaiApiKeyVault <your-azure-openai-secret-key>
|
|
63
91
|
```
|
|
64
92
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
→ [Infrastructure guide](docs/infrastructure.md)
|
|
93
|
+
Remove the platform completely: `aifabrix teardown`. Command details: [Infrastructure commands](docs/commands/infrastructure.md#aifabrix-setup).
|
|
68
94
|
|
|
69
95
|
---
|
|
70
96
|
|
|
@@ -72,7 +98,7 @@ Secrets are stored in `~/.aifabrix/secrets.local.yaml` or the file from `aifabri
|
|
|
72
98
|
|
|
73
99
|
Create and deploy an external system (e.g. HubSpot): wizard or manual setup, then validate and deploy.
|
|
74
100
|
|
|
75
|
-
**Example: HubSpot
|
|
101
|
+
**Example: HubSpot:**
|
|
76
102
|
|
|
77
103
|
- Create: `aifabrix create hubspot-test` (external is the default; or `aifabrix wizard` for guided setup). For a web app use `aifabrix create my-app --type webapp`.
|
|
78
104
|
- Configure auth and datasources under `integration/hubspot-test/`.
|
|
@@ -96,7 +122,7 @@ Create, configure, and run your own AI Fabrix application locally or deploy it (
|
|
|
96
122
|
All guides and references are listed in **[docs/README.md](docs/README.md)** (table of contents).
|
|
97
123
|
|
|
98
124
|
- [CLI Commands Reference](docs/commands/README.md) – All commands
|
|
99
|
-
- [Infrastructure](docs/infrastructure.md) –
|
|
125
|
+
- [Infrastructure](docs/infrastructure.md) – Install the platform, services, dev/pro setup
|
|
100
126
|
- [Configuration reference](docs/configuration/README.md) – Config files (deployment key, application.yaml, env.template, secrets)
|
|
101
127
|
|
|
102
128
|
---
|
|
@@ -111,6 +137,6 @@ All guides and references are listed in **[docs/README.md](docs/README.md)** (ta
|
|
|
111
137
|
|
|
112
138
|
## License
|
|
113
139
|
|
|
114
|
-
© eSystems Nordic Ltd
|
|
140
|
+
© eSystems Nordic Ltd 2026 - All Rights Reserved
|
|
115
141
|
|
|
116
142
|
`@aifabrix/builder` is part of the AI Fabrix platform.
|
package/jest.config.default.js
CHANGED
package/jest.config.isolated.js
CHANGED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global Jest hooks and CI guard project for live ~/.aifabrix protection.
|
|
3
|
+
* @fileoverview
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/** Once per Jest process — protects live ~/.aifabrix (incl. /workspace/.aifabrix). */
|
|
7
|
+
const globalLiveFabrixHooks = {
|
|
8
|
+
globalSetup: '<rootDir>/tests/global-live-fabrix-backup.js',
|
|
9
|
+
globalTeardown: '<rootDir>/tests/global-live-fabrix-backup.js'
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @param {object} opts - CI flag and Babel transform config from jest.projects.js
|
|
14
|
+
* @param {boolean} opts.isCI - Whether CI or CI simulation is active
|
|
15
|
+
* @param {object} opts.sharedTransform - Shared babel-jest transform map
|
|
16
|
+
* @returns {object} Jest project configuration
|
|
17
|
+
*/
|
|
18
|
+
function createSetupCiLiveFabrixGuardProject({ isCI, sharedTransform }) {
|
|
19
|
+
return {
|
|
20
|
+
displayName: 'setup-ci-live-fabrix-guard',
|
|
21
|
+
testEnvironment: 'node',
|
|
22
|
+
transform: sharedTransform,
|
|
23
|
+
testMatch: ['**/tests/setup-ci-live-fabrix-guard.test.js'],
|
|
24
|
+
testPathIgnorePatterns: ['/node_modules/', '\\\\node_modules\\\\'],
|
|
25
|
+
setupFiles: ['<rootDir>/tests/capture-real-fs.js', '<rootDir>/tests/setup-ci-env.js'],
|
|
26
|
+
setupFilesAfterEnv: ['<rootDir>/tests/setup.js'],
|
|
27
|
+
testTimeout: isCI ? 15000 : 8000,
|
|
28
|
+
maxWorkers: 1,
|
|
29
|
+
...globalLiveFabrixHooks
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
module.exports = {
|
|
34
|
+
globalLiveFabrixHooks,
|
|
35
|
+
createSetupCiLiveFabrixGuardProject
|
|
36
|
+
};
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Jest isolated project list (separate process per suite when run via jest.config.isolated.js).
|
|
3
|
+
* @fileoverview
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
'use strict';
|
|
7
|
+
|
|
8
|
+
const { createSetupCiLiveFabrixGuardProject } = require('./jest.global-live-fabrix-hooks');
|
|
9
|
+
|
|
10
|
+
/** @type {[string, string[]][]} displayName and testMatch globs */
|
|
11
|
+
const ISOLATED_SUITE_ENTRIES = [
|
|
12
|
+
['cli-utils', ['**/tests/lib/utils/cli-utils.test.js']],
|
|
13
|
+
['external-system-display', ['**/tests/lib/utils/external-system-display.test.js']],
|
|
14
|
+
['dev-hosts-helper', ['**/tests/lib/utils/dev-hosts-helper.test.js']],
|
|
15
|
+
['parameters-validate', ['**/tests/lib/commands/parameters-validate.test.js']],
|
|
16
|
+
['test-e2e-external', ['**/tests/lib/commands/test-e2e-external.test.js']],
|
|
17
|
+
['repair-openapi-sync', ['**/tests/lib/commands/repair-openapi-sync.test.js']],
|
|
18
|
+
['paths-app-listing', ['**/tests/lib/utils/paths-app-listing.test.js']],
|
|
19
|
+
['paths-system-builder-resolution', ['**/tests/lib/utils/paths-system-builder-resolution.test.js']],
|
|
20
|
+
['manifest-location', ['**/tests/lib/utils/manifest-location.test.js']],
|
|
21
|
+
['installation-log', ['**/tests/lib/utils/installation-log.test.js']],
|
|
22
|
+
['secrets-ancestor-paths', ['**/tests/lib/utils/secrets-ancestor-paths.test.js']],
|
|
23
|
+
['datasource-validation-watch', ['**/tests/lib/utils/datasource-validation-watch.test.js']],
|
|
24
|
+
[
|
|
25
|
+
'log-viewer',
|
|
26
|
+
[
|
|
27
|
+
'**/tests/lib/datasource/log-viewer.test.js',
|
|
28
|
+
'**/tests/lib/datasource/log-viewer-structural.test.js',
|
|
29
|
+
'**/tests/lib/datasource/log-viewer-run.test.js'
|
|
30
|
+
]
|
|
31
|
+
],
|
|
32
|
+
['audit-evidence-extract', ['**/tests/lib/datasource/audit-evidence-extract.test.js']],
|
|
33
|
+
['manifest-source-emit', ['**/tests/lib/utils/manifest-source-emit.test.js']],
|
|
34
|
+
['register-aifabrix-shell-env', ['**/tests/lib/utils/register-aifabrix-shell-env.test.js']],
|
|
35
|
+
['datasource-test-run-schema-sync', ['**/tests/lib/utils/datasource-test-run-schema-sync.test.js']],
|
|
36
|
+
['infra-platform-contract', ['**/tests/lib/parameters/infra-platform-contract.test.js']],
|
|
37
|
+
[
|
|
38
|
+
'application-frontdoor-paths-contract',
|
|
39
|
+
['**/tests/lib/templates/application-frontdoor-paths.contract.test.js']
|
|
40
|
+
],
|
|
41
|
+
['database-secret-values', ['**/tests/lib/parameters/database-secret-values.test.js']],
|
|
42
|
+
['infra-parameter-validate', ['**/tests/lib/parameters/infra-parameter-validate.test.js']],
|
|
43
|
+
['infra-parameter-catalog', ['**/tests/lib/parameters/infra-parameter-catalog.test.js']],
|
|
44
|
+
['urls-local-registry', ['**/tests/lib/utils/urls-local-registry.test.js']],
|
|
45
|
+
['aifabrix-runtime-config-dir', ['**/tests/lib/utils/aifabrix-runtime-config-dir.test.js']],
|
|
46
|
+
['platform-env-template-kv-catalog', ['**/tests/lib/parameters/platform-env-template-kv-catalog.test.js']],
|
|
47
|
+
['resolve-infra-state-paths', ['**/tests/lib/infrastructure/resolve-infra-state-paths.test.js']],
|
|
48
|
+
['dev-ssh-config-helper', ['**/tests/lib/utils/dev-ssh-config-helper.test.js']],
|
|
49
|
+
['ssh-key-helper', ['**/tests/lib/utils/ssh-key-helper.test.js']],
|
|
50
|
+
['secrets-ensure-catalog-fallback', ['**/tests/lib/core/secrets-ensure-catalog-fallback.test.js']],
|
|
51
|
+
['secrets-ensure', ['**/tests/lib/core/secrets-ensure.test.js']],
|
|
52
|
+
['url-declarative-vdir-inactive-env', ['**/tests/lib/utils/url-declarative-vdir-inactive-env.test.js']],
|
|
53
|
+
[
|
|
54
|
+
'url-declarative-user-cfg-per-app-proxy',
|
|
55
|
+
['**/tests/lib/utils/url-declarative-user-cfg-per-app-proxy.test.js']
|
|
56
|
+
],
|
|
57
|
+
[
|
|
58
|
+
'declarative-url-paths-spy-suites',
|
|
59
|
+
[
|
|
60
|
+
'**/tests/lib/utils/url-declarative-expand-traefik-off-no-usercfg.test.js',
|
|
61
|
+
'**/tests/lib/core/secrets-env-declarative-show-urls.test.js',
|
|
62
|
+
'**/tests/lib/utils/url-declarative-registry-internal-docker-origin.test.js'
|
|
63
|
+
]
|
|
64
|
+
],
|
|
65
|
+
['platform-urls-registry-validation', ['**/tests/lib/commands/platform-urls-registry.validation.test.js']],
|
|
66
|
+
['env-copy-resolve-output', ['**/tests/lib/utils/env-copy-resolve-output.test.js']],
|
|
67
|
+
['write-env-output-reload', ['**/tests/lib/utils/write-env-output-reload.test.js']],
|
|
68
|
+
['app-service-env-from-builder', ['**/tests/lib/utils/app-service-env-from-builder.test.js']],
|
|
69
|
+
['infra-kv-discovery', ['**/tests/lib/parameters/infra-kv-discovery.test.js']],
|
|
70
|
+
['infra-env-defaults', ['**/tests/lib/utils/infra-env-defaults.test.js']],
|
|
71
|
+
['compose-traefik-template', ['**/tests/lib/infrastructure/compose-traefik-template.test.js']],
|
|
72
|
+
['generator-external-rbac', ['**/tests/lib/generator/generator-external-rbac.test.js']],
|
|
73
|
+
['helpers-ensure-admin-secrets', ['**/tests/lib/infrastructure/helpers-ensure-admin-secrets.test.js']],
|
|
74
|
+
['secrets-generator', ['**/tests/lib/utils/secrets-generator.test.js']],
|
|
75
|
+
['ensure-dev-certs-for-remote-docker', ['**/tests/lib/utils/ensure-dev-certs-for-remote-docker.test.js']],
|
|
76
|
+
['generator-error-paths', ['**/tests/lib/generator/generator-error-paths.test.js']],
|
|
77
|
+
['generator-validation', ['**/tests/lib/generator/generator-validation.test.js']],
|
|
78
|
+
['secrets-databaselog', ['**/tests/lib/core/secrets-databaselog.test.js']],
|
|
79
|
+
['schema-241-alignment', ['**/tests/lib/validation/schema-241-alignment.test.js']],
|
|
80
|
+
['schema-resolver-order', ['**/tests/lib/utils/schema-resolver-order.test.js']],
|
|
81
|
+
['app-module', ['**/tests/lib/app/app.test.js']],
|
|
82
|
+
['admin-secrets', ['**/tests/lib/core/admin-secrets.test.js']],
|
|
83
|
+
['validate-datasource-parsed', ['**/tests/lib/datasource/validate-datasource-parsed.test.js']],
|
|
84
|
+
[
|
|
85
|
+
'capability-run-real-fs',
|
|
86
|
+
[
|
|
87
|
+
'**/tests/lib/datasource/run-capability-copy.test.js',
|
|
88
|
+
'**/tests/lib/datasource/run-capability-diff.test.js',
|
|
89
|
+
'**/tests/lib/datasource/run-capability-edit.test.js',
|
|
90
|
+
'**/tests/lib/datasource/run-capability-remove.test.js'
|
|
91
|
+
]
|
|
92
|
+
],
|
|
93
|
+
['log-cleaner', ['**/tests/lib/datasource/log-cleaner.test.js']],
|
|
94
|
+
['datasource-exporter-service', ['**/tests/lib/datasource/datasource-exporter-service.test.js']],
|
|
95
|
+
['protection-paths', ['**/tests/lib/protection/paths.test.js']],
|
|
96
|
+
['protection-resolve', ['**/tests/lib/protection/protection-resolve.test.js']],
|
|
97
|
+
['protection-create-helpers', ['**/tests/lib/protection/run-protection-create-helpers.test.js']],
|
|
98
|
+
[
|
|
99
|
+
'governance-pack-loader',
|
|
100
|
+
[
|
|
101
|
+
'**/tests/lib/governance/governance-pack-loader.test.js',
|
|
102
|
+
'**/tests/lib/lifecycle/scenario-upload.test.js'
|
|
103
|
+
]
|
|
104
|
+
],
|
|
105
|
+
[
|
|
106
|
+
'governance-generate-external',
|
|
107
|
+
['**/tests/lib/commands/governance-generate-external.test.js']
|
|
108
|
+
],
|
|
109
|
+
['protection-validate-batch', ['**/tests/lib/protection/validate-batch.test.js']],
|
|
110
|
+
['aifabrix-runtime-sandbox', ['**/tests/helpers/aifabrix-runtime-sandbox.test.js']],
|
|
111
|
+
['aifabrix-runtime-backup', ['**/tests/helpers/aifabrix-runtime-backup.test.js']],
|
|
112
|
+
['paths-jest-sandbox-integration', ['**/tests/lib/utils/paths-jest-sandbox-integration.test.js']],
|
|
113
|
+
['secrets-remove-all-guard', ['**/tests/lib/commands/secrets-remove-all-guard.test.js']]
|
|
114
|
+
];
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* @param {Function} makeIsolatedProject - Factory from jest.projects.js
|
|
118
|
+
* @param {boolean} isCI - True when CI or CI_SIMULATION is set
|
|
119
|
+
* @param {object} sharedTransform - Babel-jest transform shared with default project
|
|
120
|
+
* @returns {object[]} Jest multi-project entries
|
|
121
|
+
*/
|
|
122
|
+
function buildIsolatedProjects(makeIsolatedProject, isCI, sharedTransform) {
|
|
123
|
+
const projects = ISOLATED_SUITE_ENTRIES.map(([name, testMatch]) =>
|
|
124
|
+
makeIsolatedProject(name, testMatch)
|
|
125
|
+
);
|
|
126
|
+
projects.push(createSetupCiLiveFabrixGuardProject({ isCI, sharedTransform }));
|
|
127
|
+
return projects;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
module.exports = { buildIsolatedProjects, ISOLATED_SUITE_ENTRIES };
|
package/jest.projects.js
CHANGED
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
* @fileoverview
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
const { globalLiveFabrixHooks } = require('./jest.global-live-fabrix-hooks');
|
|
8
|
+
const { buildIsolatedProjects } = require('./jest.isolated-projects');
|
|
9
|
+
|
|
7
10
|
// Detect CI environment (GitHub Actions, CI simulation, etc.)
|
|
8
11
|
const isCI = process.env.CI === 'true' || process.env.CI_SIMULATION === 'true';
|
|
9
12
|
|
|
@@ -31,7 +34,7 @@ function makeIsolatedProject(displayName, testMatch) {
|
|
|
31
34
|
testPathIgnorePatterns: ['/node_modules/', '\\\\node_modules\\\\'],
|
|
32
35
|
setupFiles: ['<rootDir>/tests/capture-real-fs.js'],
|
|
33
36
|
setupFilesAfterEnv: ['<rootDir>/tests/setup.js'],
|
|
34
|
-
testTimeout: isCI ?
|
|
37
|
+
testTimeout: isCI ? 15000 : 8000,
|
|
35
38
|
maxWorkers: 1
|
|
36
39
|
};
|
|
37
40
|
}
|
|
@@ -79,10 +82,18 @@ const defaultProject = {
|
|
|
79
82
|
'lib/datasource/log-viewer-structural.test.js',
|
|
80
83
|
'lib/datasource/log-viewer-run.test.js',
|
|
81
84
|
'log-viewer-run\\.test\\.js',
|
|
85
|
+
'/tests/lib/datasource/audit-evidence-extract.test.js',
|
|
86
|
+
'\\\\tests\\\\lib\\\\datasource\\\\audit-evidence-extract.test.js',
|
|
87
|
+
'lib/datasource/audit-evidence-extract.test.js',
|
|
88
|
+
'audit-evidence-extract\\.test\\.js',
|
|
82
89
|
'/tests/lib/commands/parameters-validate.test.js',
|
|
83
90
|
'\\\\tests\\\\lib\\\\commands\\\\parameters-validate.test.js',
|
|
84
91
|
'lib/commands/parameters-validate.test.js',
|
|
85
92
|
'parameters-validate\\.test\\.js',
|
|
93
|
+
'/tests/lib/commands/test-e2e-external.test.js',
|
|
94
|
+
'\\\\tests\\\\lib\\\\commands\\\\test-e2e-external.test.js',
|
|
95
|
+
'lib/commands/test-e2e-external.test.js',
|
|
96
|
+
'test-e2e-external\\.test\\.js',
|
|
86
97
|
'/tests/lib/commands/repair-openapi-sync.test.js',
|
|
87
98
|
'\\\\tests\\\\lib\\\\commands\\\\repair-openapi-sync.test.js',
|
|
88
99
|
'lib/commands/repair-openapi-sync.test.js',
|
|
@@ -221,10 +232,6 @@ const defaultProject = {
|
|
|
221
232
|
'\\\\tests\\\\lib\\\\utils\\\\secrets-generator.test.js',
|
|
222
233
|
'lib/utils/secrets-generator.test.js',
|
|
223
234
|
'secrets-generator\\.test\\.js',
|
|
224
|
-
'/tests/lib/app/app-uncovered-lines.test.js',
|
|
225
|
-
'\\\\tests\\\\lib\\\\app\\\\app-uncovered-lines.test.js',
|
|
226
|
-
'lib/app/app-uncovered-lines.test.js',
|
|
227
|
-
'app-uncovered-lines\\.test\\.js',
|
|
228
235
|
'/tests/lib/utils/ensure-dev-certs-for-remote-docker.test.js',
|
|
229
236
|
'\\\\tests\\\\lib\\\\utils\\\\ensure-dev-certs-for-remote-docker.test.js',
|
|
230
237
|
'lib/utils/ensure-dev-certs-for-remote-docker.test.js',
|
|
@@ -278,7 +285,59 @@ const defaultProject = {
|
|
|
278
285
|
'/tests/lib/datasource/run-capability-remove.test.js',
|
|
279
286
|
'\\\\tests\\\\lib\\\\datasource\\\\run-capability-remove.test.js',
|
|
280
287
|
'lib/datasource/run-capability-remove.test.js',
|
|
281
|
-
'run-capability-remove\\.test\\.js'
|
|
288
|
+
'run-capability-remove\\.test\\.js',
|
|
289
|
+
'/tests/lib/datasource/log-cleaner.test.js',
|
|
290
|
+
'\\\\tests\\\\lib\\\\datasource\\\\log-cleaner.test.js',
|
|
291
|
+
'lib/datasource/log-cleaner.test.js',
|
|
292
|
+
'log-cleaner\\.test\\.js',
|
|
293
|
+
'/tests/lib/datasource/datasource-exporter-service.test.js',
|
|
294
|
+
'\\\\tests\\\\lib\\\\datasource\\\\datasource-exporter-service.test.js',
|
|
295
|
+
'lib/datasource/datasource-exporter-service.test.js',
|
|
296
|
+
'datasource-exporter-service\\.test\\.js',
|
|
297
|
+
'/tests/lib/protection/paths.test.js',
|
|
298
|
+
'\\\\tests\\\\lib\\\\protection\\\\paths.test.js',
|
|
299
|
+
'lib/protection/paths.test.js',
|
|
300
|
+
'protection/paths\\.test\\.js',
|
|
301
|
+
'/tests/lib/protection/protection-resolve.test.js',
|
|
302
|
+
'\\\\tests\\\\lib\\\\protection\\\\protection-resolve.test.js',
|
|
303
|
+
'lib/protection/protection-resolve.test.js',
|
|
304
|
+
'protection-resolve\\.test\\.js',
|
|
305
|
+
'/tests/lib/protection/run-protection-create-helpers.test.js',
|
|
306
|
+
'\\\\tests\\\\lib\\\\protection\\\\run-protection-create-helpers.test.js',
|
|
307
|
+
'lib/protection/run-protection-create-helpers.test.js',
|
|
308
|
+
'run-protection-create-helpers\\.test\\.js',
|
|
309
|
+
'/tests/lib/governance/governance-pack-loader.test.js',
|
|
310
|
+
'\\\\tests\\\\lib\\\\governance\\\\governance-pack-loader.test.js',
|
|
311
|
+
'lib/governance/governance-pack-loader.test.js',
|
|
312
|
+
'governance-pack-loader\\.test\\.js',
|
|
313
|
+
'/tests/lib/lifecycle/scenario-upload.test.js',
|
|
314
|
+
'\\\\tests\\\\lib\\\\lifecycle\\\\scenario-upload.test.js',
|
|
315
|
+
'lib/lifecycle/scenario-upload.test.js',
|
|
316
|
+
'scenario-upload\\.test\\.js',
|
|
317
|
+
'/tests/lib/commands/governance-generate-external.test.js',
|
|
318
|
+
'\\\\tests\\\\lib\\\\commands\\\\governance-generate-external.test.js',
|
|
319
|
+
'lib/commands/governance-generate-external.test.js',
|
|
320
|
+
'governance-generate-external\\.test\\.js',
|
|
321
|
+
'/tests/lib/protection/validate-batch.test.js',
|
|
322
|
+
'\\\\tests\\\\lib\\\\protection\\\\validate-batch.test.js',
|
|
323
|
+
'lib/protection/validate-batch.test.js',
|
|
324
|
+
'validate-batch\\.test\\.js',
|
|
325
|
+
'/tests/helpers/aifabrix-runtime-sandbox.test.js',
|
|
326
|
+
'\\\\tests\\\\helpers\\\\aifabrix-runtime-sandbox.test.js',
|
|
327
|
+
'helpers/aifabrix-runtime-sandbox\\.test\\.js',
|
|
328
|
+
'/tests/helpers/aifabrix-runtime-backup.test.js',
|
|
329
|
+
'\\\\tests\\\\helpers\\\\aifabrix-runtime-backup.test.js',
|
|
330
|
+
'helpers/aifabrix-runtime-backup\\.test\\.js',
|
|
331
|
+
'/tests/lib/utils/paths-jest-sandbox-integration.test.js',
|
|
332
|
+
'\\\\tests\\\\lib\\\\utils\\\\paths-jest-sandbox-integration.test.js',
|
|
333
|
+
'paths-jest-sandbox-integration\\.test\\.js',
|
|
334
|
+
'/tests/lib/commands/secrets-remove-all-guard.test.js',
|
|
335
|
+
'\\\\tests\\\\lib\\\\commands\\\\secrets-remove-all-guard.test.js',
|
|
336
|
+
'lib/commands/secrets-remove-all-guard.test.js',
|
|
337
|
+
'secrets-remove-all-guard\\.test\\.js',
|
|
338
|
+
'/tests/setup-ci-live-fabrix-guard.test.js',
|
|
339
|
+
'\\\\tests\\\\setup-ci-live-fabrix-guard.test.js',
|
|
340
|
+
'setup-ci-live-fabrix-guard\\.test\\.js'
|
|
282
341
|
];
|
|
283
342
|
if (process.env.INCLUDE_LOCAL_TESTS !== 'true') {
|
|
284
343
|
patterns.push('/tests/local/');
|
|
@@ -288,124 +347,12 @@ const defaultProject = {
|
|
|
288
347
|
})(),
|
|
289
348
|
setupFiles: ['<rootDir>/tests/capture-real-fs.js'],
|
|
290
349
|
setupFilesAfterEnv: ['<rootDir>/tests/setup.js'],
|
|
291
|
-
testTimeout: isCI ?
|
|
350
|
+
testTimeout: isCI ? 15000 : 8000,
|
|
292
351
|
detectOpenHandles: true,
|
|
293
352
|
maxWorkers: 1
|
|
294
353
|
};
|
|
295
354
|
|
|
296
|
-
const isolatedProjects =
|
|
297
|
-
makeIsolatedProject('cli-utils', ['**/tests/lib/utils/cli-utils.test.js']),
|
|
298
|
-
makeIsolatedProject('external-system-display', ['**/tests/lib/utils/external-system-display.test.js']),
|
|
299
|
-
makeIsolatedProject('dev-hosts-helper', ['**/tests/lib/utils/dev-hosts-helper.test.js']),
|
|
300
|
-
makeIsolatedProject('parameters-validate', ['**/tests/lib/commands/parameters-validate.test.js']),
|
|
301
|
-
makeIsolatedProject('repair-openapi-sync', ['**/tests/lib/commands/repair-openapi-sync.test.js']),
|
|
302
|
-
makeIsolatedProject('paths-app-listing', ['**/tests/lib/utils/paths-app-listing.test.js']),
|
|
303
|
-
makeIsolatedProject('paths-system-builder-resolution', [
|
|
304
|
-
'**/tests/lib/utils/paths-system-builder-resolution.test.js'
|
|
305
|
-
]),
|
|
306
|
-
makeIsolatedProject('manifest-location', ['**/tests/lib/utils/manifest-location.test.js']),
|
|
307
|
-
makeIsolatedProject('installation-log', ['**/tests/lib/utils/installation-log.test.js']),
|
|
308
|
-
makeIsolatedProject('secrets-ancestor-paths', ['**/tests/lib/utils/secrets-ancestor-paths.test.js']),
|
|
309
|
-
makeIsolatedProject('datasource-validation-watch', [
|
|
310
|
-
'**/tests/lib/utils/datasource-validation-watch.test.js'
|
|
311
|
-
]),
|
|
312
|
-
makeIsolatedProject('log-viewer', [
|
|
313
|
-
'**/tests/lib/datasource/log-viewer.test.js',
|
|
314
|
-
'**/tests/lib/datasource/log-viewer-structural.test.js',
|
|
315
|
-
'**/tests/lib/datasource/log-viewer-run.test.js'
|
|
316
|
-
]),
|
|
317
|
-
makeIsolatedProject('manifest-source-emit', ['**/tests/lib/utils/manifest-source-emit.test.js']),
|
|
318
|
-
makeIsolatedProject('register-aifabrix-shell-env', [
|
|
319
|
-
'**/tests/lib/utils/register-aifabrix-shell-env.test.js'
|
|
320
|
-
]),
|
|
321
|
-
makeIsolatedProject('datasource-test-run-schema-sync', [
|
|
322
|
-
'**/tests/lib/utils/datasource-test-run-schema-sync.test.js'
|
|
323
|
-
]),
|
|
324
|
-
makeIsolatedProject('infra-platform-contract', [
|
|
325
|
-
'**/tests/lib/parameters/infra-platform-contract.test.js'
|
|
326
|
-
]),
|
|
327
|
-
makeIsolatedProject('application-frontdoor-paths-contract', [
|
|
328
|
-
'**/tests/lib/templates/application-frontdoor-paths.contract.test.js'
|
|
329
|
-
]),
|
|
330
|
-
makeIsolatedProject('database-secret-values', [
|
|
331
|
-
'**/tests/lib/parameters/database-secret-values.test.js'
|
|
332
|
-
]),
|
|
333
|
-
makeIsolatedProject('infra-parameter-validate', [
|
|
334
|
-
'**/tests/lib/parameters/infra-parameter-validate.test.js'
|
|
335
|
-
]),
|
|
336
|
-
makeIsolatedProject('infra-parameter-catalog', [
|
|
337
|
-
'**/tests/lib/parameters/infra-parameter-catalog.test.js'
|
|
338
|
-
]),
|
|
339
|
-
makeIsolatedProject('urls-local-registry', ['**/tests/lib/utils/urls-local-registry.test.js']),
|
|
340
|
-
makeIsolatedProject('aifabrix-runtime-config-dir', [
|
|
341
|
-
'**/tests/lib/utils/aifabrix-runtime-config-dir.test.js'
|
|
342
|
-
]),
|
|
343
|
-
makeIsolatedProject('platform-env-template-kv-catalog', [
|
|
344
|
-
'**/tests/lib/parameters/platform-env-template-kv-catalog.test.js'
|
|
345
|
-
]),
|
|
346
|
-
makeIsolatedProject('resolve-infra-state-paths', [
|
|
347
|
-
'**/tests/lib/infrastructure/resolve-infra-state-paths.test.js'
|
|
348
|
-
]),
|
|
349
|
-
makeIsolatedProject('dev-ssh-config-helper', [
|
|
350
|
-
'**/tests/lib/utils/dev-ssh-config-helper.test.js'
|
|
351
|
-
]),
|
|
352
|
-
makeIsolatedProject('ssh-key-helper', ['**/tests/lib/utils/ssh-key-helper.test.js']),
|
|
353
|
-
makeIsolatedProject('secrets-ensure-catalog-fallback', [
|
|
354
|
-
'**/tests/lib/core/secrets-ensure-catalog-fallback.test.js'
|
|
355
|
-
]),
|
|
356
|
-
makeIsolatedProject('secrets-ensure', ['**/tests/lib/core/secrets-ensure.test.js']),
|
|
357
|
-
makeIsolatedProject('url-declarative-vdir-inactive-env', [
|
|
358
|
-
'**/tests/lib/utils/url-declarative-vdir-inactive-env.test.js'
|
|
359
|
-
]),
|
|
360
|
-
makeIsolatedProject('url-declarative-user-cfg-per-app-proxy', [
|
|
361
|
-
'**/tests/lib/utils/url-declarative-user-cfg-per-app-proxy.test.js'
|
|
362
|
-
]),
|
|
363
|
-
makeIsolatedProject('declarative-url-paths-spy-suites', [
|
|
364
|
-
'**/tests/lib/utils/url-declarative-expand-traefik-off-no-usercfg.test.js',
|
|
365
|
-
'**/tests/lib/core/secrets-env-declarative-show-urls.test.js',
|
|
366
|
-
'**/tests/lib/utils/url-declarative-registry-internal-docker-origin.test.js'
|
|
367
|
-
]),
|
|
368
|
-
makeIsolatedProject('platform-urls-registry-validation', [
|
|
369
|
-
'**/tests/lib/commands/platform-urls-registry.validation.test.js'
|
|
370
|
-
]),
|
|
371
|
-
makeIsolatedProject('env-copy-resolve-output', ['**/tests/lib/utils/env-copy-resolve-output.test.js']),
|
|
372
|
-
makeIsolatedProject('write-env-output-reload', ['**/tests/lib/utils/write-env-output-reload.test.js']),
|
|
373
|
-
makeIsolatedProject('app-service-env-from-builder', [
|
|
374
|
-
'**/tests/lib/utils/app-service-env-from-builder.test.js'
|
|
375
|
-
]),
|
|
376
|
-
makeIsolatedProject('infra-kv-discovery', ['**/tests/lib/parameters/infra-kv-discovery.test.js']),
|
|
377
|
-
makeIsolatedProject('infra-env-defaults', ['**/tests/lib/utils/infra-env-defaults.test.js']),
|
|
378
|
-
makeIsolatedProject('compose-traefik-template', [
|
|
379
|
-
'**/tests/lib/infrastructure/compose-traefik-template.test.js'
|
|
380
|
-
]),
|
|
381
|
-
makeIsolatedProject('generator-external-rbac', [
|
|
382
|
-
'**/tests/lib/generator/generator-external-rbac.test.js'
|
|
383
|
-
]),
|
|
384
|
-
makeIsolatedProject('helpers-ensure-admin-secrets', [
|
|
385
|
-
'**/tests/lib/infrastructure/helpers-ensure-admin-secrets.test.js'
|
|
386
|
-
]),
|
|
387
|
-
makeIsolatedProject('secrets-generator', ['**/tests/lib/utils/secrets-generator.test.js']),
|
|
388
|
-
makeIsolatedProject('app-uncovered-lines', ['**/tests/lib/app/app-uncovered-lines.test.js']),
|
|
389
|
-
makeIsolatedProject('ensure-dev-certs-for-remote-docker', [
|
|
390
|
-
'**/tests/lib/utils/ensure-dev-certs-for-remote-docker.test.js'
|
|
391
|
-
]),
|
|
392
|
-
makeIsolatedProject('generator-error-paths', ['**/tests/lib/generator/generator-error-paths.test.js']),
|
|
393
|
-
makeIsolatedProject('generator-validation', ['**/tests/lib/generator/generator-validation.test.js']),
|
|
394
|
-
makeIsolatedProject('secrets-databaselog', ['**/tests/lib/core/secrets-databaselog.test.js']),
|
|
395
|
-
makeIsolatedProject('schema-241-alignment', ['**/tests/lib/validation/schema-241-alignment.test.js']),
|
|
396
|
-
makeIsolatedProject('schema-resolver-order', ['**/tests/lib/utils/schema-resolver-order.test.js']),
|
|
397
|
-
makeIsolatedProject('app-module', ['**/tests/lib/app/app.test.js']),
|
|
398
|
-
makeIsolatedProject('admin-secrets', ['**/tests/lib/core/admin-secrets.test.js']),
|
|
399
|
-
makeIsolatedProject('validate-datasource-parsed', [
|
|
400
|
-
'**/tests/lib/datasource/validate-datasource-parsed.test.js'
|
|
401
|
-
]),
|
|
402
|
-
makeIsolatedProject('capability-run-real-fs', [
|
|
403
|
-
'**/tests/lib/datasource/run-capability-copy.test.js',
|
|
404
|
-
'**/tests/lib/datasource/run-capability-diff.test.js',
|
|
405
|
-
'**/tests/lib/datasource/run-capability-edit.test.js',
|
|
406
|
-
'**/tests/lib/datasource/run-capability-remove.test.js'
|
|
407
|
-
])
|
|
408
|
-
];
|
|
355
|
+
const isolatedProjects = buildIsolatedProjects(makeIsolatedProject, isCI, sharedTransform);
|
|
409
356
|
|
|
410
357
|
const allProjects = [defaultProject, ...isolatedProjects];
|
|
411
358
|
|
|
@@ -415,5 +362,6 @@ module.exports = {
|
|
|
415
362
|
makeIsolatedProject,
|
|
416
363
|
defaultProject,
|
|
417
364
|
isolatedProjects,
|
|
418
|
-
allProjects
|
|
365
|
+
allProjects,
|
|
366
|
+
globalLiveFabrixHooks
|
|
419
367
|
};
|