@aifabrix/builder 2.49.1 → 2.50.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/process/README.md +9 -0
- package/.cursor/rules/deploy-rules/docker-image-ip-policy.mdc +49 -0
- package/.cursor/rules/plan-rules/application-lifecycle.mdc +30 -0
- package/.cursor/rules/plan-rules/plan-frontmatter.mdc +35 -0
- package/.cursor/rules/plan-rules/plan-lifecycle.mdc +31 -0
- package/.cursor/rules/plan-rules/plan-validation-gate.mdc +34 -0
- package/.cursor/skills/README.md +1 -0
- package/.dockerignore +52 -0
- package/.eslintignore +22 -0
- package/README.md +2 -0
- package/bin/builder-api-cleanup.js +26 -0
- package/bin/builder-api-nest.js +10 -0
- package/bin/builder-api-spike.js +19 -0
- package/enterprise-knowledge/README.md +50 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/README.md +22 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/application.json +15 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/deploy.js +69 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-deploy.json +52 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/enterprise-integration-lifecycle-system.json +29 -0
- package/enterprise-knowledge/enterprise-integration-lifecycle/env.template +2 -0
- package/integration/README.md +81 -0
- package/integration/github/README.md +53 -0
- package/integration/github/application.json +21 -0
- package/integration/github/deploy.js +72 -0
- package/integration/github/env.template +11 -0
- package/integration/github/github-datasource-issue-comments.json +239 -0
- package/integration/github/github-datasource-issues.json +399 -0
- package/integration/github/github-datasource-repository.json +354 -0
- package/integration/github/github-deploy.json +1202 -0
- package/integration/github/github-system.json +82 -0
- package/integration/hubspot-test/README.md +1 -1
- package/jest.isolated-projects.js +31 -1
- package/jest.projects.js +87 -1
- package/lib/api/dev-server-https.js +1 -1
- package/lib/api/dev.api.js +1 -0
- package/lib/api/enterprise-knowledge.api.js +63 -0
- package/lib/api/evidence.api.js +172 -0
- package/lib/api/external-systems.api.js +8 -2
- package/lib/api/host-ops.api.js +69 -0
- package/lib/api/resource-types.api.js +1 -0
- package/lib/api/types/enterprise-knowledge.types.js +46 -0
- package/lib/api/types/evidence.types.js +67 -0
- package/lib/api/types/resource-types.types.js +2 -0
- package/lib/app/controller-application-filter.js +36 -0
- package/lib/app/deploy.js +1 -1
- package/lib/app/list-external-systems.js +130 -0
- package/lib/app/list.js +20 -8
- package/lib/app/run.js +3 -1
- package/lib/app/show-display.js +8 -3
- package/lib/app/show-online.js +178 -0
- package/lib/app/show.js +37 -88
- package/lib/build/builder-api-docker-staging.js +47 -0
- package/lib/build/miso-controller-npm-sdk-guard.js +2 -2
- package/lib/build/standard-docker-build.js +2 -0
- package/lib/certification/post-unified-cert-sync.js +4 -31
- package/lib/certification/sync-after-external-command.js +0 -1
- package/lib/certification/sync-system-certification.js +0 -3
- package/lib/channels/add-channel.js +40 -34
- package/lib/channels/approval-guides/chatgpt.js +33 -0
- package/lib/channels/approval-guides/credential-portal.js +38 -0
- package/lib/channels/approval-guides/index.js +110 -0
- package/lib/channels/approval-guides/microsoft-copilot.js +34 -0
- package/lib/channels/approval-guides/slack.js +34 -0
- package/lib/channels/approval-guides/teams-bot.js +35 -0
- package/lib/channels/approval-guides/web-embed.js +32 -0
- package/lib/channels/channel-approval-guide.js +11 -0
- package/lib/channels/channel-artifact-generator.js +16 -4
- package/lib/channels/channel-audit.js +3 -0
- package/lib/channels/channel-auth-context.js +1 -1
- package/lib/channels/channel-description.js +59 -0
- package/lib/channels/channel-integration-generator.js +13 -230
- package/lib/channels/channel-integration-template.js +94 -0
- package/lib/channels/channel-runtime-resolver.js +43 -3
- package/lib/channels/channel-status-display.js +66 -26
- package/lib/channels/channel-targets.js +3 -3
- package/lib/cli/index.js +27 -3
- package/lib/cli/infra-guided.js +5 -1
- package/lib/cli/setup-app-external-create.js +111 -0
- package/lib/cli/setup-app.help.js +1 -1
- package/lib/cli/setup-app.js +38 -125
- package/lib/cli/setup-app.test-commands.js +26 -52
- package/lib/cli/setup-certification-commands.js +4 -4
- package/lib/cli/setup-certification.help.js +9 -9
- package/lib/cli/setup-dev-path-commands.js +24 -0
- package/lib/cli/setup-dev.js +115 -16
- package/lib/cli/setup-external-system-help.js +4 -6
- package/lib/cli/setup-external-system.js +58 -52
- package/lib/cli/setup-infra-up-builder-api-action.js +64 -0
- package/lib/cli/setup-infra-up-platform-action.js +3 -1
- package/lib/cli/setup-infra.js +15 -0
- package/lib/cli/setup-list.js +43 -0
- package/lib/cli/setup-utility-repair.js +26 -7
- package/lib/cli/setup-utility.js +5 -3
- package/lib/commands/app.js +15 -43
- package/lib/commands/channel-add-setup.js +110 -0
- package/lib/commands/channel.js +42 -8
- package/lib/commands/datasource-sync-display.js +96 -0
- package/lib/commands/datasource-sync-policy.js +210 -0
- package/lib/commands/datasource-test-trust-cli.js +6 -6
- package/lib/commands/datasource-unified-test-cli.js +2 -1
- package/lib/commands/datasource-unified-test-cli.options.js +33 -23
- package/lib/commands/deploy-gate-failure-details.js +163 -0
- package/lib/commands/deploy-gate-orchestrator.js +322 -0
- package/lib/commands/dev-cli-handlers.js +64 -61
- package/lib/commands/dev-host-ops-params.js +91 -0
- package/lib/commands/dev-host-ops-poll.js +111 -0
- package/lib/commands/dev-host-ops.js +252 -0
- package/lib/commands/dev-init.js +3 -1
- package/lib/commands/enterprise-knowledge.js +284 -0
- package/lib/commands/evidence-cli-leaves.js +250 -0
- package/lib/commands/evidence.js +51 -0
- package/lib/commands/governance-cli-shared.js +2 -2
- package/lib/commands/governance-command-action.js +2 -2
- package/lib/commands/governance-fixture-subjects.js +85 -0
- package/lib/commands/governance.js +1 -1
- package/lib/commands/lifecycle-command-action.js +2 -2
- package/lib/commands/lifecycle-external.js +3 -3
- package/lib/commands/manifest-cli-auth.js +29 -0
- package/lib/commands/manifest-cli-commands.js +170 -0
- package/lib/commands/manifest-cli-integration-path.js +63 -0
- package/lib/commands/manifest.js +21 -0
- package/lib/commands/protection-cli-leaves.js +3 -3
- package/lib/commands/repair-auth-apply.js +15 -1
- package/lib/commands/repair-authentications-454.js +169 -0
- package/lib/commands/repair-capability-openapi-warnings.js +126 -0
- package/lib/commands/repair-datasource-apply.js +135 -0
- package/lib/commands/repair-datasource-auto-rbac.js +62 -1
- package/lib/commands/repair-datasource-http-service-contract.js +239 -0
- package/lib/commands/repair-datasource-operation-security.js +180 -0
- package/lib/commands/repair-datasource-run.js +7 -2
- package/lib/commands/repair-datasource-sync-operations.js +177 -0
- package/lib/commands/repair-datasource-webhooks-sync-bridge.js +133 -0
- package/lib/commands/repair-datasource.js +12 -68
- package/lib/commands/repair-env-template.js +11 -1
- package/lib/commands/repair-external-run.js +121 -31
- package/lib/commands/repair-internal.js +1 -1
- package/lib/commands/repair-openapi-export.js +156 -0
- package/lib/commands/repair-openapi-sync.js +19 -2
- package/lib/commands/repair-orchestration-datasource-split.js +259 -0
- package/lib/commands/repair-persist.js +22 -1
- package/lib/commands/repair-rbac-platform-preset.js +204 -0
- package/lib/commands/repair-rbac-reader-roles.js +191 -0
- package/lib/commands/repair-rbac.js +163 -86
- package/lib/commands/repair-steps.js +83 -18
- package/lib/commands/repair-system-permissions.js +1 -0
- package/lib/commands/repair.js +1 -1
- package/lib/commands/resource-type.js +65 -26
- package/lib/commands/run-post-publish-data-sync.js +68 -0
- package/lib/commands/setup-modes.js +1 -1
- package/lib/commands/test-e2e-external.js +21 -8
- package/lib/commands/test-governance-cli-options.js +2 -2
- package/lib/commands/test-trust-cli-options.js +2 -2
- package/lib/commands/up-builder-api-bootstrap.js +71 -0
- package/lib/commands/up-builder-api-provision.js +241 -0
- package/lib/commands/up-builder-api.js +88 -0
- package/lib/commands/up-common.js +25 -1
- package/lib/commands/upload-credential-push-log.js +117 -0
- package/lib/commands/upload-data-sync-finalize.js +60 -0
- package/lib/commands/upload-probe.js +66 -0
- package/lib/commands/upload-publish-context.js +4 -1
- package/lib/commands/upload-sidecar-followups.js +55 -27
- package/lib/commands/upload.js +116 -157
- package/lib/commands/verify-governance-combined-external.js +1 -1
- package/lib/commands/verify-governance-db.js +2 -2
- package/lib/commands/verify-operations-command-action.js +2 -2
- package/lib/commands/verify-operations-step-plan.js +2 -2
- package/lib/commands/verify-operations-steps.js +2 -2
- package/lib/commands/verify-trust-command-action.js +1 -1
- package/lib/commands/wizard-core.js +1 -1
- package/lib/commands/wizard-headless.js +2 -1
- package/lib/core/admin-secrets.js +2 -6
- package/lib/core/secrets-env-content.js +10 -4
- package/lib/core/secrets-env-write.js +2 -13
- package/lib/datasource/agent-trust-run.js +3 -3
- package/lib/datasource/deploy.js +3 -1
- package/lib/datasource/test-e2e.js +6 -1
- package/lib/datasource/unified-validation-run-body.js +4 -1
- package/lib/datasource/unified-validation-run.js +1 -1
- package/lib/deployment/deploy-poll-ui.js +73 -12
- package/lib/deployment/deployer-poll-run.js +113 -0
- package/lib/deployment/deployer.js +17 -87
- package/lib/evidence/dataplane-context.js +21 -0
- package/lib/evidence/evidence-display.js +78 -0
- package/lib/evidence/evidence-service.js +392 -0
- package/lib/external-system/deploy.js +290 -112
- package/lib/external-system/download.js +7 -3
- package/lib/external-system/test-execution.js +1 -1
- package/lib/external-system/test-system-level.js +8 -10
- package/lib/external-system/test.js +12 -6
- package/lib/generator/deploy-script.js +73 -0
- package/lib/generator/external.js +2 -1
- package/lib/generator/index.js +17 -2
- package/lib/generator/wizard.js +3 -36
- package/lib/internal/fs-real-sync.js +22 -1
- package/lib/internal/node-fs.js +2 -0
- package/lib/lifecycle/lifecycle-governance-options.js +1 -1
- package/lib/lifecycle/verify-step-progress.js +1 -1
- package/lib/programmatic/access-log.js +26 -0
- package/lib/programmatic/auth-config.js +44 -0
- package/lib/programmatic/bearer-auth.js +176 -0
- package/lib/programmatic/builder-api-request.js +175 -0
- package/lib/programmatic/builder-api-route-dispatch.js +82 -0
- package/lib/programmatic/builder-api-runtime-config.js +42 -0
- package/lib/programmatic/builder-api-server.js +230 -0
- package/lib/programmatic/builder-help-authentication-catalog.js +282 -0
- package/lib/programmatic/builder-help-connected-system-ui.js +266 -0
- package/lib/programmatic/builder-help-enterprise-sync-fabrix.js +60 -0
- package/lib/programmatic/builder-help-envelope.js +36 -0
- package/lib/programmatic/builder-help-fixtures.js +200 -0
- package/lib/programmatic/builder-help-governance.js +172 -0
- package/lib/programmatic/builder-help-schema-catalog.js +92 -0
- package/lib/programmatic/builder-help.js +361 -0
- package/lib/programmatic/capability-registry.js +77 -0
- package/lib/programmatic/command-options.js +32 -0
- package/lib/programmatic/enterprise-mcp-client.js +98 -0
- package/lib/programmatic/http-problem-details.js +99 -0
- package/lib/programmatic/http-route-match.js +40 -0
- package/lib/programmatic/idempotency-cache.js +69 -0
- package/lib/programmatic/index.js +53 -0
- package/lib/programmatic/integration-path-scope.js +39 -0
- package/lib/programmatic/log-redaction.js +66 -0
- package/lib/programmatic/manifest-get-section.js +146 -0
- package/lib/programmatic/manifest-patch-section.js +252 -0
- package/lib/programmatic/manifest-repair.js +122 -0
- package/lib/programmatic/manifest-section-dependency-graph.js +160 -0
- package/lib/programmatic/manifest-section-io.js +225 -0
- package/lib/programmatic/manifest-section-quality.js +171 -0
- package/lib/programmatic/manifest-section-registry-data.js +269 -0
- package/lib/programmatic/manifest-section-registry.js +205 -0
- package/lib/programmatic/nest-http-bridge.js +34 -0
- package/lib/programmatic/openapi-component-schemas.js +68 -0
- package/lib/programmatic/openapi-description-enricher.js +117 -0
- package/lib/programmatic/openapi-descriptions.js +190 -0
- package/lib/programmatic/openapi-docs-serving.js +123 -0
- package/lib/programmatic/openapi-help-schemas.js +63 -0
- package/lib/programmatic/openapi-manifest-schemas.js +141 -0
- package/lib/programmatic/openapi-operation-bindings.js +274 -0
- package/lib/programmatic/openapi-request-schemas.js +155 -0
- package/lib/programmatic/openapi-result-schemas.js +476 -0
- package/lib/programmatic/openapi-schema-descriptions-certify.js +139 -0
- package/lib/programmatic/openapi-schema-descriptions-core.js +159 -0
- package/lib/programmatic/openapi-schema-descriptions-help.js +40 -0
- package/lib/programmatic/openapi-schema-descriptions-manifest.js +143 -0
- package/lib/programmatic/openapi-schema-descriptions-mcp.js +118 -0
- package/lib/programmatic/openapi-schema-descriptions-operations.js +281 -0
- package/lib/programmatic/openapi-schema-helpers.js +93 -0
- package/lib/programmatic/openapi-spec.js +203 -0
- package/lib/programmatic/orchestration-openapi-meta.js +159 -0
- package/lib/programmatic/platform-rbac-catalog.js +90 -0
- package/lib/programmatic/request-timeout.js +53 -0
- package/lib/programmatic/route-handler-map.js +143 -0
- package/lib/programmatic/route-handlers-context.js +29 -0
- package/lib/programmatic/route-handlers.js +33 -0
- package/lib/programmatic/run-certify.js +57 -0
- package/lib/programmatic/run-enterprise-mcp.js +32 -0
- package/lib/programmatic/run-lifecycle.js +29 -0
- package/lib/programmatic/run-repair.js +41 -0
- package/lib/programmatic/run-repository-emcp.js +54 -0
- package/lib/programmatic/run-template-workspace.js +61 -0
- package/lib/programmatic/run-test.js +49 -0
- package/lib/programmatic/run-upload.js +63 -0
- package/lib/programmatic/run-validate.js +53 -0
- package/lib/programmatic/run-wizard.js +40 -0
- package/lib/programmatic/system-key.js +48 -0
- package/lib/programmatic/wizard-config-normalize.js +118 -0
- package/lib/programmatic/workspace-cleanup.js +128 -0
- package/lib/programmatic/workspace-context.js +145 -0
- package/lib/programmatic/workspace-lock.js +75 -0
- package/lib/programmatic/workspace-meta.js +64 -0
- package/lib/programmatic/workspace-ops.js +149 -0
- package/lib/protection/run-commands-upload-sync.js +35 -0
- package/lib/protection/run-commands.js +2 -20
- package/lib/protection/upload-batch.js +11 -7
- package/lib/resolvers/resource-type-file.js +22 -0
- package/lib/schema/external-datasource.schema.json +161 -1
- package/lib/schema/external-system.schema.json +242 -4
- package/lib/schema/flag-map-validation-run.json +3 -0
- package/lib/schema/type/credential-field-registry.json +2 -2
- package/lib/schema/type/document-storage.json +9 -0
- package/lib/utils/agent-trust-run-display.js +1 -1
- package/lib/utils/app-path-resolve.js +168 -0
- package/lib/utils/authentication-env-template.js +222 -0
- package/lib/utils/cli-sync-options.js +7 -11
- package/lib/utils/cli-utils.js +4 -0
- package/lib/utils/cli-workspace-options.js +29 -0
- package/lib/utils/compose-generate-docker-compose.js +102 -0
- package/lib/utils/configuration-env-resolver.js +203 -27
- package/lib/utils/datasource-test-run-certificate-tty.js +28 -2
- package/lib/utils/datasource-test-run-certification-debug.js +130 -0
- package/lib/utils/datasource-test-run-debug-display.js +2 -0
- package/lib/utils/datasource-test-run-debug-slice.js +7 -0
- package/lib/utils/datasource-test-run-display.js +2 -1
- package/lib/utils/dev-init-ssh-merge.js +165 -23
- package/lib/utils/dev-pin-share-instructions.js +110 -0
- package/lib/utils/dev-ssh-config-helper.js +177 -33
- package/lib/utils/enterprise-knowledge-paths.js +142 -0
- package/lib/utils/env-copy.js +2 -1
- package/lib/utils/env-dotenv-format.js +103 -0
- package/lib/utils/external-env-template.js +4 -1
- package/lib/utils/external-system-display.js +5 -1
- package/lib/utils/external-system-readiness-compact-blocks.js +221 -0
- package/lib/utils/external-system-readiness-compact-display.js +324 -0
- package/lib/utils/external-system-readiness-core.js +16 -0
- package/lib/utils/external-system-readiness-deploy-display.js +29 -11
- package/lib/utils/external-system-readiness-display-internals.js +3 -1
- package/lib/utils/external-system-readiness-display.js +20 -30
- package/lib/utils/external-system-system-test-tty-certification.js +135 -0
- package/lib/utils/external-system-system-test-tty.js +5 -41
- package/lib/utils/help-builder.js +6 -1
- package/lib/utils/host-ops-job-labels.js +236 -0
- package/lib/utils/host-ops-job-result.js +61 -0
- package/lib/utils/host-ops-poll-ui.js +163 -0
- package/lib/utils/integration-path-resolve.js +112 -0
- package/lib/utils/paths-reload-source.js +148 -0
- package/lib/utils/paths-system-builder-keys.js +25 -0
- package/lib/utils/paths.js +151 -26
- package/lib/utils/runtime-configuration-values.js +64 -2
- package/lib/utils/secrets-helpers.js +5 -1
- package/lib/utils/ssh-known-hosts.js +130 -0
- package/lib/utils/test-target-cli-options.js +75 -0
- package/lib/utils/upload-sync-options.js +4 -0
- package/lib/utils/validation-run-request.js +11 -2
- package/lib/validation/external-manifest-validator.js +11 -1
- package/lib/validation/openapi-contract-surface-validator.js +426 -0
- package/lib/validation/openapi-contract-vendor-validation.js +238 -0
- package/lib/validation/validate-external-file.js +160 -0
- package/lib/validation/validate.js +6 -117
- package/package.json +46 -29
- package/packages/builder-api/README.md +120 -0
- package/packages/builder-api/package.json +30 -0
- package/packages/builder-api/src/app.module.ts +7 -0
- package/packages/builder-api/src/auth/auth.module.ts +5 -0
- package/packages/builder-api/src/external-system/external-system.module.ts +5 -0
- package/packages/builder-api/src/main.ts +16 -0
- package/packages/builder-api/tsconfig.json +15 -0
- package/scripts/check-builder-api-architecture-grep.js +79 -0
- package/scripts/docker_image_content_gate.js +47 -0
- package/scripts/docker_image_content_gate.sh +5 -0
- package/scripts/export-builder-api-evidence.js +262 -0
- package/scripts/lib/builder-api-docker-staging-copy.js +60 -0
- package/scripts/lib/builder-api-docker-staging-core.js +183 -0
- package/scripts/lib/docker-image-content-gate-core.js +166 -0
- package/scripts/lib/plan-actor.js +109 -0
- package/scripts/lib/plan-config.js +20 -0
- package/scripts/lib/plan-gates.js +154 -0
- package/scripts/lib/plan-meta.js +104 -0
- package/scripts/lib/plan-parse.js +162 -0
- package/scripts/lib/plan-prevalidate-gates.js +326 -0
- package/scripts/lib/plan-run-core.js +125 -0
- package/scripts/lib/plan-run-report.js +108 -0
- package/scripts/plan-approve.js +24 -0
- package/scripts/plan-archive.js +49 -0
- package/scripts/plan-run.js +13 -0
- package/scripts/plan-set-actor.js +21 -0
- package/scripts/plan-validate.js +80 -0
- package/scripts/pnpm/af.mjs +110 -0
- package/scripts/pnpm/check-quiet.mjs +32 -0
- package/scripts/pnpm/dev-install.mjs +29 -0
- package/scripts/pnpm/dev-reload.mjs +18 -0
- package/scripts/pnpm/help.mjs +55 -0
- package/scripts/pnpm/lib/dev-reload-core.mjs +189 -0
- package/scripts/pnpm/lib/dev-reload-log-capture.mjs +67 -0
- package/scripts/pnpm/lib/dev-reload-log-utils.mjs +32 -0
- package/scripts/pnpm/lib/resolve-aifabrix-bin.mjs +124 -0
- package/scripts/pnpm/lib/resolve-app-url.mjs +183 -0
- package/scripts/pnpm/lib/spinner.mjs +42 -0
- package/scripts/stage_builder_api_for_docker.js +65 -0
- package/scripts/sync-builder-api-template.js +44 -0
- package/templates/README.md +3 -0
- package/templates/applications/builder-api/Dockerfile +38 -0
- package/templates/applications/builder-api/application.yaml +75 -0
- package/templates/applications/builder-api/env.template +48 -0
- package/templates/applications/dataplane/application.yaml +1 -1
- package/templates/applications/dataplane/env.template +10 -6
- package/templates/applications/dataplane/rbac.yaml +21 -1
- package/templates/applications/miso-controller/application.yaml +1 -1
- package/templates/applications/miso-controller/env.template +1 -3
- package/templates/channels/README.md +18 -0
- package/templates/channels/ai-fabrix-icon.jpg +0 -0
- package/templates/channels/chatgpt/install.template.md.hbs +21 -24
- package/templates/channels/chatgpt/integration/README.md +11 -0
- package/templates/channels/chatgpt/integration/application.json +15 -0
- package/templates/channels/chatgpt/integration/chatgpt-system.json +29 -0
- package/templates/channels/chatgpt/integration/env.template +4 -0
- package/templates/channels/microsoft-copilot/install.template.md.hbs +20 -25
- package/templates/channels/microsoft-copilot/integration/README.md +11 -0
- package/templates/channels/microsoft-copilot/integration/application.json +15 -0
- package/templates/channels/microsoft-copilot/integration/env.template +6 -0
- package/templates/channels/microsoft-copilot/integration/microsoft-copilot-system.json +34 -0
- package/templates/channels/slack/install.template.md.hbs +48 -18
- package/templates/channels/slack/integration/README.md +38 -0
- package/templates/channels/slack/integration/application.json +18 -0
- package/templates/channels/slack/integration/env.template +29 -0
- package/templates/channels/slack/integration/slack-datasource-conversations.json +226 -0
- package/templates/channels/slack/integration/slack-datasource-messages.json +269 -0
- package/templates/channels/slack/integration/slack-system.json +86 -0
- package/templates/channels/slack/manifest.template.json.hbs +20 -10
- package/templates/channels/teams-bot/install.template.md.hbs +31 -17
- package/templates/channels/teams-bot/integration/README.md +18 -0
- package/templates/channels/teams-bot/integration/application.json +17 -0
- package/templates/channels/teams-bot/integration/env.template +5 -0
- package/templates/channels/teams-bot/integration/teams-bot-system.json +55 -0
- package/templates/channels/teams-bot/manifest.template.json.hbs +27 -0
- package/templates/channels/web-embed/install.template.md.hbs +16 -26
- package/templates/channels/web-embed/integration/README.md +11 -0
- package/templates/channels/web-embed/integration/application.json +15 -0
- package/templates/channels/web-embed/integration/env.template +4 -0
- package/templates/channels/web-embed/integration/web-embed-system.json +29 -0
- package/templates/openapi/redoc_page.html +86 -0
- package/templates/python/docker-compose.hbs +11 -0
- package/templates/python/requirements.txt +1 -1
- package/templates/typescript/docker-compose.hbs +11 -0
- package/lib/certification/cli-cert-sync-skip.js +0 -21
package/lib/cli/setup-app.js
CHANGED
|
@@ -13,6 +13,10 @@ const app = require('../app');
|
|
|
13
13
|
const logger = require('../utils/logger');
|
|
14
14
|
const { handleCommandError } = require('../utils/cli-utils');
|
|
15
15
|
const { setupInstallTestE2eLintCommands } = require('./setup-app.test-commands');
|
|
16
|
+
const {
|
|
17
|
+
prepareExternalCreateOptions,
|
|
18
|
+
validateNonInteractiveExternalOptions
|
|
19
|
+
} = require('./setup-app-external-create');
|
|
16
20
|
|
|
17
21
|
const CREATE_HELP_AFTER = `
|
|
18
22
|
Examples:
|
|
@@ -46,13 +50,13 @@ Examples:
|
|
|
46
50
|
$ aifabrix push myapp --registry $ACR_REGISTRY --tag $IMAGE_TAG
|
|
47
51
|
$ aifabrix deploy myapp \\
|
|
48
52
|
--client-id "$DEV_MISO_CLIENTID" \\
|
|
49
|
-
--client-secret "$DEV_MISO_CLIENTSECRET"
|
|
50
|
-
--no-poll
|
|
53
|
+
--client-secret "$DEV_MISO_CLIENTSECRET"
|
|
51
54
|
|
|
52
55
|
# CI/CD — external integration (after upload/tests; promote to controller)
|
|
53
56
|
$ aifabrix validate hubspot-demo
|
|
54
57
|
$ aifabrix upload hubspot-demo --probe
|
|
55
|
-
$ aifabrix deploy hubspot-demo --probe
|
|
58
|
+
$ aifabrix deploy hubspot-demo --probe -v
|
|
59
|
+
$ aifabrix deploy ek-sales --gate full --subject-email ops@example.com
|
|
56
60
|
|
|
57
61
|
Notes:
|
|
58
62
|
- Login or set MISO_CONTROLLER_URL + environment (aifabrix login / aifabrix auth).
|
|
@@ -79,106 +83,6 @@ Notes:
|
|
|
79
83
|
- Use -t 0 (--tail 0) for the full buffered log; default is 100 lines.
|
|
80
84
|
`;
|
|
81
85
|
|
|
82
|
-
/**
|
|
83
|
-
* Normalize options for external system creation
|
|
84
|
-
* @param {Object} options - Raw CLI options
|
|
85
|
-
* @returns {Object} Normalized options
|
|
86
|
-
*/
|
|
87
|
-
const VALID_ENTITY_TYPES = ['recordStorage', 'documentStorage', 'vectorStore', 'messageService', 'none'];
|
|
88
|
-
|
|
89
|
-
function normalizeExternalOptions(options) {
|
|
90
|
-
const normalized = { ...options };
|
|
91
|
-
if (options.displayName) normalized.systemDisplayName = options.displayName;
|
|
92
|
-
if (options.description) normalized.systemDescription = options.description;
|
|
93
|
-
if (options.systemType) normalized.systemType = options.systemType;
|
|
94
|
-
if (options.authType) normalized.authType = options.authType;
|
|
95
|
-
if (options.entityType) {
|
|
96
|
-
if (!VALID_ENTITY_TYPES.includes(options.entityType)) {
|
|
97
|
-
throw new Error(`Invalid --entity-type. Must be one of: ${VALID_ENTITY_TYPES.join(', ')}`);
|
|
98
|
-
}
|
|
99
|
-
normalized.entityType = options.entityType;
|
|
100
|
-
}
|
|
101
|
-
if (options.datasources !== undefined) {
|
|
102
|
-
const parsedCount = parseInt(options.datasources, 10);
|
|
103
|
-
if (Number.isNaN(parsedCount) || parsedCount < 1 || parsedCount > 10) {
|
|
104
|
-
throw new Error('Datasources count must be a number between 1 and 10');
|
|
105
|
-
}
|
|
106
|
-
normalized.datasourceCount = parsedCount;
|
|
107
|
-
}
|
|
108
|
-
if (options.controller) {
|
|
109
|
-
normalized.controller = true;
|
|
110
|
-
normalized.controllerUrl = options.controller;
|
|
111
|
-
}
|
|
112
|
-
return normalized;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
* Whether normalized options include all external CLI fields for headless create.
|
|
117
|
-
* @param {Object} normalized - Normalized external create options
|
|
118
|
-
* @returns {boolean}
|
|
119
|
-
*/
|
|
120
|
-
function hasFullExternalCliOptions(normalized) {
|
|
121
|
-
return Boolean(
|
|
122
|
-
normalized.systemKey &&
|
|
123
|
-
normalized.systemDisplayName &&
|
|
124
|
-
normalized.systemDescription &&
|
|
125
|
-
normalized.systemType &&
|
|
126
|
-
normalized.authType &&
|
|
127
|
-
normalized.entityType &&
|
|
128
|
-
normalized.datasourceCount
|
|
129
|
-
);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* Map positional systemKey and apply headless defaults for external create.
|
|
134
|
-
* @param {string} appName - Positional appKey or systemKey from CLI
|
|
135
|
-
* @param {Object} options - Raw CLI options
|
|
136
|
-
* @returns {Object} Normalized options ready for createApp
|
|
137
|
-
*/
|
|
138
|
-
function prepareExternalCreateOptions(appName, options) {
|
|
139
|
-
const normalized = normalizeExternalOptions(options);
|
|
140
|
-
const isExternalType = options.type === 'external' || !options.type;
|
|
141
|
-
|
|
142
|
-
if (isExternalType && appName) {
|
|
143
|
-
normalized.systemKey = appName;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
if (isExternalType && hasFullExternalCliOptions(normalized)) {
|
|
147
|
-
if (!Object.prototype.hasOwnProperty.call(normalized, 'github')) {
|
|
148
|
-
normalized.github = false;
|
|
149
|
-
}
|
|
150
|
-
if (!Object.prototype.hasOwnProperty.call(normalized, 'controller')) {
|
|
151
|
-
normalized.controller = false;
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
return normalized;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
/**
|
|
159
|
-
* Validate required options for non-interactive external creation
|
|
160
|
-
* @param {Object} normalizedOptions - Normalized options
|
|
161
|
-
* @throws {Error} If required options are missing
|
|
162
|
-
*/
|
|
163
|
-
function validateNonInteractiveExternalOptions(normalizedOptions) {
|
|
164
|
-
const missing = [];
|
|
165
|
-
if (!normalizedOptions.systemDisplayName) missing.push('--display-name');
|
|
166
|
-
if (!normalizedOptions.systemDescription) missing.push('--description');
|
|
167
|
-
if (!normalizedOptions.systemType) missing.push('--system-type');
|
|
168
|
-
if (!normalizedOptions.authType) missing.push('--auth-type');
|
|
169
|
-
if (!normalizedOptions.entityType) missing.push('--entity-type');
|
|
170
|
-
if (!normalizedOptions.datasourceCount) missing.push('--datasources');
|
|
171
|
-
if (missing.length > 0) {
|
|
172
|
-
throw new Error(`Missing required options for non-interactive external create: ${missing.join(', ')}`);
|
|
173
|
-
}
|
|
174
|
-
if (!Object.prototype.hasOwnProperty.call(normalizedOptions, 'github')) {
|
|
175
|
-
normalizedOptions.github = false;
|
|
176
|
-
}
|
|
177
|
-
if (!Object.prototype.hasOwnProperty.call(normalizedOptions, 'controller')) {
|
|
178
|
-
normalizedOptions.controller = false;
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
|
|
182
86
|
/**
|
|
183
87
|
* Handle create command execution
|
|
184
88
|
* @async
|
|
@@ -419,21 +323,7 @@ function setupDockerfileGenerateCommand(program) {
|
|
|
419
323
|
});
|
|
420
324
|
}
|
|
421
325
|
|
|
422
|
-
function
|
|
423
|
-
program.command('push <appKey>')
|
|
424
|
-
.description('Push builder appKey image to Azure Container Registry')
|
|
425
|
-
.addHelpText('after', PUSH_HELP_AFTER)
|
|
426
|
-
.option('-r, --registry <registry>', 'ACR registry URL (overrides application.yaml)')
|
|
427
|
-
.option('-t, --tag <tag>', 'Image tag(s) - comma-separated for multiple (default: latest)')
|
|
428
|
-
.action(async(appName, options) => {
|
|
429
|
-
try {
|
|
430
|
-
await app.pushApp(appName, options);
|
|
431
|
-
} catch (error) {
|
|
432
|
-
handleCommandError(error, 'push');
|
|
433
|
-
process.exit(1);
|
|
434
|
-
}
|
|
435
|
-
});
|
|
436
|
-
|
|
326
|
+
function setupDeployCommand(program) {
|
|
437
327
|
program.command('deploy <appKey|systemKey>')
|
|
438
328
|
.description('Deploy builder app or external system via Miso Controller (Azure or --local)')
|
|
439
329
|
.addHelpText('after', DEPLOY_HELP_AFTER)
|
|
@@ -441,13 +331,20 @@ function setupPushDeployDockerfileCommands(program) {
|
|
|
441
331
|
.option('--client-id <id>', 'Client ID (overrides config)')
|
|
442
332
|
.option('--client-secret <secret>', 'Client Secret (overrides config)')
|
|
443
333
|
.option('--repository-url <url>', 'Repository URL for pipeline validation (default: application.yaml repository.repositoryUrl, else https://github.com/aifabrix/<appKey>)')
|
|
444
|
-
.option('--
|
|
445
|
-
.option('--no-poll', 'Do not poll for status')
|
|
334
|
+
.option('-v, --verbose', 'Expanded deploy summary and preflight progress')
|
|
446
335
|
.option('--probe', 'After external deploy, run dataplane runtime checks (validation/run); slower')
|
|
447
336
|
.option('--probe-timeout <ms>', 'Timeout for --probe on external deploy (default: 120000)', '120000')
|
|
448
337
|
.option(
|
|
449
|
-
'--
|
|
450
|
-
'
|
|
338
|
+
'--sync',
|
|
339
|
+
'After deploy, run full datasource data sync for every datasource on the system (default: bootstrap-if-empty only)'
|
|
340
|
+
)
|
|
341
|
+
.option(
|
|
342
|
+
'--gate <gates>',
|
|
343
|
+
'Optional pre-promote gates (comma-separated): operations, trust, governance, full'
|
|
344
|
+
)
|
|
345
|
+
.option(
|
|
346
|
+
'--subject-email <emails>',
|
|
347
|
+
'Subject email(s) for governance gate (comma-separated; used with --gate governance|full)'
|
|
451
348
|
)
|
|
452
349
|
.action(async(appName, options) => {
|
|
453
350
|
try {
|
|
@@ -458,6 +355,7 @@ function setupPushDeployDockerfileCommands(program) {
|
|
|
458
355
|
const opts = {
|
|
459
356
|
...options,
|
|
460
357
|
local: !!options.local,
|
|
358
|
+
verbose: options.verbose === true,
|
|
461
359
|
probeTimeout: Number.isFinite(probeTimeout) ? probeTimeout : 120000
|
|
462
360
|
};
|
|
463
361
|
const outcome = await app.deployApp(appName, opts);
|
|
@@ -470,7 +368,24 @@ function setupPushDeployDockerfileCommands(program) {
|
|
|
470
368
|
process.exit(1);
|
|
471
369
|
}
|
|
472
370
|
});
|
|
371
|
+
}
|
|
473
372
|
|
|
373
|
+
function setupPushDeployDockerfileCommands(program) {
|
|
374
|
+
program.command('push <appKey>')
|
|
375
|
+
.description('Push builder appKey image to Azure Container Registry')
|
|
376
|
+
.addHelpText('after', PUSH_HELP_AFTER)
|
|
377
|
+
.option('-r, --registry <registry>', 'ACR registry URL (overrides application.yaml)')
|
|
378
|
+
.option('-t, --tag <tag>', 'Image tag(s) - comma-separated for multiple (default: latest)')
|
|
379
|
+
.action(async(appName, options) => {
|
|
380
|
+
try {
|
|
381
|
+
await app.pushApp(appName, options);
|
|
382
|
+
} catch (error) {
|
|
383
|
+
handleCommandError(error, 'push');
|
|
384
|
+
process.exit(1);
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
setupDeployCommand(program);
|
|
474
389
|
setupDockerfileGenerateCommand(program);
|
|
475
390
|
}
|
|
476
391
|
|
|
@@ -489,7 +404,5 @@ function setupAppCommands(program) {
|
|
|
489
404
|
|
|
490
405
|
module.exports = {
|
|
491
406
|
setupAppCommands,
|
|
492
|
-
|
|
493
|
-
prepareExternalCreateOptions,
|
|
494
|
-
validateNonInteractiveExternalOptions
|
|
407
|
+
...require('./setup-app-external-create')
|
|
495
408
|
};
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
const chalk = require('chalk');
|
|
8
8
|
const logger = require('../utils/logger');
|
|
9
9
|
const { handleCommandError } = require('../utils/cli-utils');
|
|
10
|
-
const { cliOptsSkipCertSync } = require('../certification/cli-cert-sync-skip');
|
|
11
10
|
const {
|
|
12
11
|
TEST_HELP_AFTER,
|
|
13
12
|
TEST_E2E_HELP_AFTER
|
|
@@ -18,7 +17,7 @@ function setupTestCommand(program) {
|
|
|
18
17
|
.description('Tests: builder appKey in container; external systemKey = local validation')
|
|
19
18
|
.option('-e, --env <env>', 'For builder app: dev (running container) or tst (ephemeral)', 'dev')
|
|
20
19
|
.option('-v, --verbose', 'Verbose output')
|
|
21
|
-
.option('-d, --debug', '
|
|
20
|
+
.option('-d, --debug', 'Certification debug + log to integration/<systemKey>/logs/ (external only)')
|
|
22
21
|
.option(
|
|
23
22
|
'--sync',
|
|
24
23
|
'Not supported for this command (local validation only). Use aifabrix upload <systemKey> or dataplane test commands with --sync.'
|
|
@@ -58,45 +57,22 @@ function setupTestCommand(program) {
|
|
|
58
57
|
}
|
|
59
58
|
|
|
60
59
|
/**
|
|
61
|
-
*
|
|
62
|
-
* @param {Array<{ key?: string, datasourceTestRun?: { certificateIssuance?: { status?: string, reasonCode?: string, message?: string } } }>} results
|
|
63
|
-
* @returns {string|null}
|
|
64
|
-
*/
|
|
65
|
-
function firstIssuanceFailureHintFromE2eResults(results) {
|
|
66
|
-
const failed = [];
|
|
67
|
-
for (const row of results || []) {
|
|
68
|
-
const ci = row.datasourceTestRun && row.datasourceTestRun.certificateIssuance;
|
|
69
|
-
if (ci && ci.status === 'failed') {
|
|
70
|
-
failed.push({ key: row.key, ci });
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
if (failed.length === 0) return null;
|
|
74
|
-
const firstRc = failed[0].ci.reasonCode;
|
|
75
|
-
const sameAll = failed.every(f => f.ci.reasonCode === firstRc);
|
|
76
|
-
if (sameAll && failed.length > 1) {
|
|
77
|
-
const parts = [firstRc, failed[0].ci.message].filter(Boolean);
|
|
78
|
-
return `${parts.join(': ')} (${failed.length} datasource scopes; first: ${failed[0].key})`;
|
|
79
|
-
}
|
|
80
|
-
const parts = [failed[0].ci.reasonCode, failed[0].ci.message].filter(Boolean);
|
|
81
|
-
return `[${failed[0].key}] ${parts.join(': ')}`.trim();
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* External integration E2E: run, display, exit on aggregate, optional cert sync.
|
|
60
|
+
* External integration E2E: run, display, exit on aggregate.
|
|
86
61
|
* @param {string} appName
|
|
87
62
|
* @param {Object} options
|
|
88
63
|
* @returns {Promise<void>}
|
|
89
64
|
*/
|
|
90
|
-
async function
|
|
91
|
-
const {
|
|
65
|
+
async function runExternalIntegrationE2EAndExit(appName, options, cmd) {
|
|
66
|
+
const { cliOptsSkipPublish } = require('../utils/cli-sync-options');
|
|
92
67
|
const { runTestE2EForExternalSystem } = require('../commands/test-e2e-external');
|
|
93
|
-
const
|
|
68
|
+
const noPublish = cliOptsSkipPublish(options, cmd);
|
|
94
69
|
const { success, results } = await runTestE2EForExternalSystem(appName, {
|
|
95
70
|
env: options.env,
|
|
96
71
|
debug: options.debug,
|
|
97
72
|
verbose: options.verbose,
|
|
98
73
|
async: options.async !== false,
|
|
99
|
-
|
|
74
|
+
noPublish,
|
|
75
|
+
syncMode: options.syncMode
|
|
100
76
|
});
|
|
101
77
|
const { displayIntegrationTestResults } = require('../utils/external-system-display');
|
|
102
78
|
const datasourceResults = results.map(r => ({
|
|
@@ -117,25 +93,21 @@ async function runExternalIntegrationE2EAndCertSync(appName, options, cmd) {
|
|
|
117
93
|
requireCert: options.requireCert === true
|
|
118
94
|
});
|
|
119
95
|
if (exitCode !== 0) process.exit(exitCode);
|
|
120
|
-
if (cliOptsSkipCertSync(options)) return;
|
|
121
|
-
const { trySyncCertificationFromDataplaneForExternalApp } = require('../certification/sync-after-external-command');
|
|
122
|
-
const issuanceFailureHint = firstIssuanceFailureHintFromE2eResults(results);
|
|
123
|
-
await trySyncCertificationFromDataplaneForExternalApp(appName, 'test-e2e', { issuanceFailureHint });
|
|
124
96
|
}
|
|
125
97
|
|
|
126
98
|
async function runTestE2ECommand(appName, options, cmd) {
|
|
127
|
-
const {
|
|
128
|
-
const
|
|
99
|
+
const { cliOptsSkipPublish } = require('../utils/cli-sync-options');
|
|
100
|
+
const noPublish = cliOptsSkipPublish(options, cmd);
|
|
129
101
|
const pathsUtil = require('../utils/paths');
|
|
130
102
|
const appType = await pathsUtil.detectAppType(appName).catch(() => null);
|
|
131
|
-
if (
|
|
103
|
+
if (noPublish && appType && appType.baseDir === 'builder') {
|
|
132
104
|
throw new Error(
|
|
133
|
-
'Option --no-
|
|
134
|
-
'Remove --no-
|
|
105
|
+
'Option --no-publish applies only to external integration E2E (integration/<systemKey>/). ' +
|
|
106
|
+
'Remove --no-publish for builder app E2E.'
|
|
135
107
|
);
|
|
136
108
|
}
|
|
137
109
|
if (appType && appType.baseDir === 'integration') {
|
|
138
|
-
await
|
|
110
|
+
await runExternalIntegrationE2EAndExit(appName, options, cmd);
|
|
139
111
|
return;
|
|
140
112
|
}
|
|
141
113
|
const { runAppTestE2e } = require('../commands/app-test');
|
|
@@ -170,21 +142,24 @@ function setupTestE2eCommand(program) {
|
|
|
170
142
|
.description('E2E: builder appKey in container; external systemKey = all datasources via dataplane')
|
|
171
143
|
.option('-e, --env <env>', 'Environment: dev, tst, or pro (builder: dev/tst for container)', 'dev')
|
|
172
144
|
.option('-v, --verbose', 'Show detailed step output and poll progress')
|
|
173
|
-
.option('-d, --debug', '
|
|
174
|
-
.option(
|
|
175
|
-
'--no-sync',
|
|
176
|
-
'Skip publishing local integration files; E2E uses the system config already on the dataplane (external integration only)'
|
|
177
|
-
)
|
|
145
|
+
.option('-d, --debug', 'Certification debug + log to integration/<systemKey>/logs/')
|
|
146
|
+
.option('--no-publish', 'Skip publishing local integration files before E2E')
|
|
178
147
|
.option(
|
|
179
148
|
'--force',
|
|
180
149
|
'With default sync, pass force to upload (bypass active-datasource schema replacement guards; same as aifabrix upload --force)'
|
|
181
150
|
)
|
|
182
|
-
.option('--warnings-as-errors', 'Treat aggregate warn as failure (exit 1)')
|
|
183
|
-
.option('--require-cert', 'Require certification passed on every datasource (exit 2 if not)')
|
|
184
151
|
.option(
|
|
185
|
-
'--
|
|
186
|
-
'
|
|
152
|
+
'--version <target>',
|
|
153
|
+
'Manifest version for E2E (latest, running, or explicit version id)',
|
|
154
|
+
'latest'
|
|
187
155
|
)
|
|
156
|
+
.option(
|
|
157
|
+
'--sync-mode <mode>',
|
|
158
|
+
'Sync policy during E2E: auto (default), never, or force. Distinct from default pre-run publish.',
|
|
159
|
+
'auto'
|
|
160
|
+
)
|
|
161
|
+
.option('--warnings-as-errors', 'Treat aggregate warn as failure (exit 1)')
|
|
162
|
+
.option('--require-cert', 'Require certification passed on every datasource (exit 2 if not)')
|
|
188
163
|
.addHelpText('after', TEST_E2E_HELP_AFTER)
|
|
189
164
|
.action(async(appName, options, cmd) => {
|
|
190
165
|
try {
|
|
@@ -232,7 +207,6 @@ function setupInstallTestE2eLintCommands(program) {
|
|
|
232
207
|
}
|
|
233
208
|
|
|
234
209
|
module.exports = {
|
|
235
|
-
setupInstallTestE2eLintCommands
|
|
236
|
-
firstIssuanceFailureHintFromE2eResults
|
|
210
|
+
setupInstallTestE2eLintCommands
|
|
237
211
|
};
|
|
238
212
|
|
|
@@ -20,7 +20,7 @@ function setupVerifyOperationsCommand(program) {
|
|
|
20
20
|
.option('-e, --env <env>', 'Environment: dev, tst, or pro', 'dev')
|
|
21
21
|
.option('-v, --verbose', 'Readiness breakdown and verification step checklist')
|
|
22
22
|
.option('-d, --debug', 'Write debug logs under integration/<systemKey>/logs/')
|
|
23
|
-
.option('--no-
|
|
23
|
+
.option('--no-publish', 'Skip publishing local integration files before dataplane steps')
|
|
24
24
|
.option(
|
|
25
25
|
'--force',
|
|
26
26
|
'With default sync, pass force to upload (same as aifabrix upload --force)'
|
|
@@ -39,7 +39,7 @@ function setupVerifyTrustCommand(program) {
|
|
|
39
39
|
.option('-e, --env <env>', 'Environment: dev, tst, or pro', 'dev')
|
|
40
40
|
.option('-v, --verbose', 'Per-datasource breakdown')
|
|
41
41
|
.option('-d, --debug', 'Write debug log under integration/<systemKey>/logs/')
|
|
42
|
-
.option('--no-
|
|
42
|
+
.option('--no-publish', 'Skip publishing local integration files before validate')
|
|
43
43
|
.option(
|
|
44
44
|
'--force',
|
|
45
45
|
'With default sync, pass force to upload (same as aifabrix upload --force)'
|
|
@@ -61,7 +61,7 @@ function setupVerifyGovernanceCommand(program) {
|
|
|
61
61
|
.option('-e, --env <env>', 'Environment: dev, tst, or pro', 'dev')
|
|
62
62
|
.option('-v, --verbose', 'Per-datasource breakdown and pipeline detail')
|
|
63
63
|
.option('-d, --debug', 'Write debug logs under integration/<systemKey>/logs/')
|
|
64
|
-
.option('--no-
|
|
64
|
+
.option('--no-publish', 'Skip publishing local integration files before dataplane steps')
|
|
65
65
|
.option(
|
|
66
66
|
'--force',
|
|
67
67
|
'With default sync, pass force to upload (same as aifabrix upload --force)'
|
|
@@ -108,7 +108,7 @@ function setupLifecycleCommand(program) {
|
|
|
108
108
|
.option('-v, --verbose', 'Per-datasource breakdown in the report')
|
|
109
109
|
.option('-d, --debug', 'Write debug logs under integration/<systemKey>/logs/ when --run')
|
|
110
110
|
.option('--run', 'Run missing verify steps, then print certification report')
|
|
111
|
-
.option('--no-
|
|
111
|
+
.option('--no-publish', 'With --run, skip publishing local integration files before verify')
|
|
112
112
|
.option(
|
|
113
113
|
'--force',
|
|
114
114
|
'With default sync on --run, pass force to upload (same as aifabrix upload --force)'
|
|
@@ -8,7 +8,7 @@ const VERIFY_OPERATIONS_HELP_AFTER = `
|
|
|
8
8
|
Examples:
|
|
9
9
|
$ aifabrix verify-operations hubspot
|
|
10
10
|
$ aifabrix verify-operations hubspot -v
|
|
11
|
-
$ aifabrix verify-operations hubspot --no-
|
|
11
|
+
$ aifabrix verify-operations hubspot --no-publish
|
|
12
12
|
|
|
13
13
|
Notes:
|
|
14
14
|
- Orchestrates validate → test → test-integration → test-e2e for the system.
|
|
@@ -23,12 +23,12 @@ const VERIFY_TRUST_HELP_AFTER = `
|
|
|
23
23
|
Examples:
|
|
24
24
|
$ aifabrix verify-trust hubspot
|
|
25
25
|
$ aifabrix verify-trust hubspot -v --revalidate
|
|
26
|
-
$ aifabrix verify-trust hubspot --no-
|
|
26
|
+
$ aifabrix verify-trust hubspot --no-publish --json
|
|
27
27
|
|
|
28
28
|
Notes:
|
|
29
29
|
- For one datasource: aifabrix datasource verify-trust <datasourceKey>
|
|
30
30
|
- Does not call external vendor APIs (use verify-operations / test-e2e for connectivity).
|
|
31
|
-
- Local integration files are published before run unless --no-
|
|
31
|
+
- Local integration files are published before run unless --no-publish.
|
|
32
32
|
`;
|
|
33
33
|
|
|
34
34
|
const VERIFY_GOVERNANCE_HELP_AFTER = `
|
|
@@ -38,7 +38,7 @@ Examples:
|
|
|
38
38
|
$ aifabrix verify-governance hubspot-e2e --certification-profile gold --json
|
|
39
39
|
|
|
40
40
|
Notes:
|
|
41
|
-
- All-in-one: publishes local integration (unless --no-
|
|
41
|
+
- All-in-one: publishes local integration (unless --no-publish), generates packs on the dataplane,
|
|
42
42
|
then runs governance verification (dataplane-first; no local YAML upload).
|
|
43
43
|
- Requires at least one --subject-user-id or --subject-email (repeatable or comma-separated).
|
|
44
44
|
- Prefer this over separate generate + verify when certifying an integration.
|
|
@@ -50,12 +50,12 @@ const GOVERNANCE_GENERATE_HELP_AFTER = `
|
|
|
50
50
|
Examples:
|
|
51
51
|
$ aifabrix governance generate hubspot-e2e --subject-email us.sales@example.com
|
|
52
52
|
$ aifabrix governance generate hubspot-e2e --subject-user-id user-a --subject-user-id user-b -v
|
|
53
|
-
$ aifabrix governance generate hubspot-e2e --certification-profile gold --no-
|
|
53
|
+
$ aifabrix governance generate hubspot-e2e --certification-profile gold --no-publish
|
|
54
54
|
|
|
55
55
|
Notes:
|
|
56
56
|
- Dataplane generates keys, coverage, and generationState; the CLI never authors partitions locally.
|
|
57
57
|
- Requires at least one --subject-user-id or --subject-email per datasource fan-out.
|
|
58
|
-
- Publishes local integration files before generate unless --no-
|
|
58
|
+
- Publishes local integration files before generate unless --no-publish.
|
|
59
59
|
`;
|
|
60
60
|
|
|
61
61
|
const GOVERNANCE_VERIFY_HELP_AFTER = `
|
|
@@ -74,7 +74,7 @@ Notes:
|
|
|
74
74
|
const GOVERNANCE_UPLOAD_HELP_AFTER = `
|
|
75
75
|
Examples:
|
|
76
76
|
$ aifabrix governance upload hubspot-e2e
|
|
77
|
-
$ aifabrix governance upload hubspot-e2e --no-
|
|
77
|
+
$ aifabrix governance upload hubspot-e2e --no-publish
|
|
78
78
|
|
|
79
79
|
Notes:
|
|
80
80
|
- Expert path: pushes integration/<systemKey>/scenarios/*.yaml to the dataplane.
|
|
@@ -98,13 +98,13 @@ Examples:
|
|
|
98
98
|
$ aifabrix lifecycle hubspot
|
|
99
99
|
$ aifabrix lifecycle hubspot -v
|
|
100
100
|
$ aifabrix lifecycle hubspot --run
|
|
101
|
-
$ aifabrix lifecycle hubspot --run --no-
|
|
101
|
+
$ aifabrix lifecycle hubspot --run --no-publish
|
|
102
102
|
$ aifabrix lifecycle hubspot-e2e --run --subject-email us.sales@example.com
|
|
103
103
|
$ aifabrix lifecycle hubspot-e2e --run --subject-email a@x.com,b@y.com -v
|
|
104
104
|
|
|
105
105
|
Notes:
|
|
106
106
|
- Default: certification report only (GET persisted pillar results from dataplane).
|
|
107
|
-
- --run executes missing verify steps, then prints the report (publishes local files first unless --no-
|
|
107
|
+
- --run executes missing verify steps, then prints the report (publishes local files first unless --no-publish).
|
|
108
108
|
- With --run, --subject-email / --subject-user-id generate and verify governance packs (same as verify-governance).
|
|
109
109
|
- Repeat the flag or use comma-separated values: --subject-email a@x.com,b@y.com
|
|
110
110
|
- One-shot cert path: lifecycle <systemKey> --run --subject-email <email>
|
|
@@ -44,6 +44,29 @@ async function runShellEnvRegistration() {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
function addSetEnvConfigCommand(dev) {
|
|
48
|
+
dev
|
|
49
|
+
.command('set-env-config <path>')
|
|
50
|
+
.description('Set or clear aifabrix-env-config path in ~/.aifabrix/config.yaml')
|
|
51
|
+
.action(async(envConfigPath) => {
|
|
52
|
+
try {
|
|
53
|
+
const trimmed = (envConfigPath || '').trim();
|
|
54
|
+
await config.setAifabrixEnvConfigPath(trimmed);
|
|
55
|
+
logger.log(
|
|
56
|
+
trimmed === ''
|
|
57
|
+
? formatSuccessLine('Env config path cleared')
|
|
58
|
+
: formatSuccessLine(`Env config path set to ${trimmed}`)
|
|
59
|
+
);
|
|
60
|
+
const devId = await config.getDeveloperId();
|
|
61
|
+
const { displayDevConfig } = require('../commands/dev-show-display');
|
|
62
|
+
await displayDevConfig(devId);
|
|
63
|
+
} catch (error) {
|
|
64
|
+
handleCommandError(error, 'dev set-env-config');
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
|
|
47
70
|
function addSetHomeCommand(dev) {
|
|
48
71
|
dev
|
|
49
72
|
.command('set-home <path>')
|
|
@@ -162,6 +185,7 @@ function addSetFormatCommand(dev, handleSetFormat) {
|
|
|
162
185
|
* @returns {void}
|
|
163
186
|
*/
|
|
164
187
|
function setupDevPathAndFormatCommands(dev, handleSetFormat) {
|
|
188
|
+
addSetEnvConfigCommand(dev);
|
|
165
189
|
addSetHomeCommand(dev);
|
|
166
190
|
addSetWorkCommand(dev);
|
|
167
191
|
addPrintHomeWorkCommands(dev);
|