@memberjunction/cli 5.37.0 → 5.39.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.
Files changed (177) hide show
  1. package/README.md +74 -0
  2. package/dist/baseline/cli-helpers.d.ts +12 -0
  3. package/dist/baseline/cli-helpers.d.ts.map +1 -0
  4. package/dist/baseline/cli-helpers.js +40 -0
  5. package/dist/baseline/cli-helpers.js.map +1 -0
  6. package/dist/baseline/comparator.d.ts +26 -0
  7. package/dist/baseline/comparator.d.ts.map +1 -0
  8. package/dist/baseline/comparator.js +527 -0
  9. package/dist/baseline/comparator.js.map +1 -0
  10. package/dist/baseline/connection.d.ts +39 -0
  11. package/dist/baseline/connection.d.ts.map +1 -0
  12. package/dist/baseline/connection.js +104 -0
  13. package/dist/baseline/connection.js.map +1 -0
  14. package/dist/baseline/data-dumper.d.ts +23 -0
  15. package/dist/baseline/data-dumper.d.ts.map +1 -0
  16. package/dist/baseline/data-dumper.js +94 -0
  17. package/dist/baseline/data-dumper.js.map +1 -0
  18. package/dist/baseline/emitter.d.ts +36 -0
  19. package/dist/baseline/emitter.d.ts.map +1 -0
  20. package/dist/baseline/emitter.js +519 -0
  21. package/dist/baseline/emitter.js.map +1 -0
  22. package/dist/baseline/index.d.ts +18 -0
  23. package/dist/baseline/index.d.ts.map +1 -0
  24. package/dist/baseline/index.js +14 -0
  25. package/dist/baseline/index.js.map +1 -0
  26. package/dist/baseline/introspector-mssql.d.ts +15 -0
  27. package/dist/baseline/introspector-mssql.d.ts.map +1 -0
  28. package/dist/baseline/introspector-mssql.js +673 -0
  29. package/dist/baseline/introspector-mssql.js.map +1 -0
  30. package/dist/baseline/introspector-postgres.d.ts +14 -0
  31. package/dist/baseline/introspector-postgres.d.ts.map +1 -0
  32. package/dist/baseline/introspector-postgres.js +277 -0
  33. package/dist/baseline/introspector-postgres.js.map +1 -0
  34. package/dist/baseline/report.d.ts +7 -0
  35. package/dist/baseline/report.d.ts.map +1 -0
  36. package/dist/baseline/report.js +105 -0
  37. package/dist/baseline/report.js.map +1 -0
  38. package/dist/baseline/types.d.ts +286 -0
  39. package/dist/baseline/types.d.ts.map +1 -0
  40. package/dist/baseline/types.js +10 -0
  41. package/dist/baseline/types.js.map +1 -0
  42. package/dist/baseline/util.d.ts +112 -0
  43. package/dist/baseline/util.d.ts.map +1 -0
  44. package/dist/baseline/util.js +325 -0
  45. package/dist/baseline/util.js.map +1 -0
  46. package/dist/commands/baseline/build.d.ts +29 -0
  47. package/dist/commands/baseline/build.d.ts.map +1 -0
  48. package/dist/commands/baseline/build.js +188 -0
  49. package/dist/commands/baseline/build.js.map +1 -0
  50. package/dist/commands/baseline/compare.d.ts +19 -0
  51. package/dist/commands/baseline/compare.d.ts.map +1 -0
  52. package/dist/commands/baseline/compare.js +133 -0
  53. package/dist/commands/baseline/compare.js.map +1 -0
  54. package/dist/commands/baseline/roundtrip.d.ts +23 -0
  55. package/dist/commands/baseline/roundtrip.d.ts.map +1 -0
  56. package/dist/commands/baseline/roundtrip.js +245 -0
  57. package/dist/commands/baseline/roundtrip.js.map +1 -0
  58. package/dist/commands/bundle/index.d.ts +21 -0
  59. package/dist/commands/bundle/index.d.ts.map +1 -0
  60. package/dist/commands/bundle/index.js +62 -0
  61. package/dist/commands/bundle/index.js.map +1 -0
  62. package/dist/commands/migrate/index.d.ts +29 -0
  63. package/dist/commands/migrate/index.d.ts.map +1 -1
  64. package/dist/commands/migrate/index.js +111 -5
  65. package/dist/commands/migrate/index.js.map +1 -1
  66. package/dist/commands/test/compare.d.ts +3 -0
  67. package/dist/commands/test/compare.d.ts.map +1 -1
  68. package/dist/commands/test/compare.js +23 -3
  69. package/dist/commands/test/compare.js.map +1 -1
  70. package/dist/commands/test/regression/build.d.ts +14 -0
  71. package/dist/commands/test/regression/build.d.ts.map +1 -0
  72. package/dist/commands/test/regression/build.js +48 -0
  73. package/dist/commands/test/regression/build.js.map +1 -0
  74. package/dist/commands/test/regression/compare.d.ts +15 -0
  75. package/dist/commands/test/regression/compare.d.ts.map +1 -0
  76. package/dist/commands/test/regression/compare.js +66 -0
  77. package/dist/commands/test/regression/compare.js.map +1 -0
  78. package/dist/commands/test/regression/down.d.ts +10 -0
  79. package/dist/commands/test/regression/down.d.ts.map +1 -0
  80. package/dist/commands/test/regression/down.js +29 -0
  81. package/dist/commands/test/regression/down.js.map +1 -0
  82. package/dist/commands/test/regression/export.d.ts +11 -0
  83. package/dist/commands/test/regression/export.d.ts.map +1 -0
  84. package/dist/commands/test/regression/export.js +56 -0
  85. package/dist/commands/test/regression/export.js.map +1 -0
  86. package/dist/commands/test/regression/gen-forms.d.ts +7 -0
  87. package/dist/commands/test/regression/gen-forms.d.ts.map +1 -0
  88. package/dist/commands/test/regression/gen-forms.js +18 -0
  89. package/dist/commands/test/regression/gen-forms.js.map +1 -0
  90. package/dist/commands/test/regression/index.d.ts +7 -0
  91. package/dist/commands/test/regression/index.d.ts.map +1 -0
  92. package/dist/commands/test/regression/index.js +33 -0
  93. package/dist/commands/test/regression/index.js.map +1 -0
  94. package/dist/commands/test/regression/init.d.ts +21 -0
  95. package/dist/commands/test/regression/init.d.ts.map +1 -0
  96. package/dist/commands/test/regression/init.js +111 -0
  97. package/dist/commands/test/regression/init.js.map +1 -0
  98. package/dist/commands/test/regression/remote.d.ts +23 -0
  99. package/dist/commands/test/regression/remote.d.ts.map +1 -0
  100. package/dist/commands/test/regression/remote.js +140 -0
  101. package/dist/commands/test/regression/remote.js.map +1 -0
  102. package/dist/commands/test/regression/up.d.ts +21 -0
  103. package/dist/commands/test/regression/up.d.ts.map +1 -0
  104. package/dist/commands/test/regression/up.js +111 -0
  105. package/dist/commands/test/regression/up.js.map +1 -0
  106. package/dist/commands/test/run.d.ts +1 -0
  107. package/dist/commands/test/run.d.ts.map +1 -1
  108. package/dist/commands/test/run.js +6 -0
  109. package/dist/commands/test/run.js.map +1 -1
  110. package/dist/commands/test/suite.d.ts +5 -0
  111. package/dist/commands/test/suite.d.ts.map +1 -1
  112. package/dist/commands/test/suite.js +27 -0
  113. package/dist/commands/test/suite.js.map +1 -1
  114. package/dist/commands/translate-sql/index.d.ts.map +1 -1
  115. package/dist/commands/translate-sql/index.js +3 -2
  116. package/dist/commands/translate-sql/index.js.map +1 -1
  117. package/dist/config.d.ts +6 -0
  118. package/dist/config.d.ts.map +1 -1
  119. package/dist/config.js +13 -0
  120. package/dist/config.js.map +1 -1
  121. package/dist/init-templates/bring-your-own-app/README.md +74 -0
  122. package/dist/init-templates/bring-your-own-app/byo-metadata/.mj-sync.json +10 -0
  123. package/dist/init-templates/bring-your-own-app/byo-metadata/test-suites/.byo-suite.json +51 -0
  124. package/dist/init-templates/bring-your-own-app/byo-metadata/test-suites/.mj-sync.json +12 -0
  125. package/dist/init-templates/bring-your-own-app/byo-metadata/tests/.T01-counter-increment.json +63 -0
  126. package/dist/init-templates/bring-your-own-app/byo-metadata/tests/.T02-contact-form-submit.json +63 -0
  127. package/dist/init-templates/bring-your-own-app/byo-metadata/tests/.mj-sync.json +12 -0
  128. package/dist/init-templates/bring-your-own-app/docker-compose.app.yml +76 -0
  129. package/dist/init-templates/bring-your-own-app/target.json +23 -0
  130. package/dist/init-templates/generic-web/README.md +115 -0
  131. package/dist/init-templates/generic-web/metadata/.mj-sync.json +10 -0
  132. package/dist/init-templates/generic-web/metadata/test-suites/.generic-web-suite.json +48 -0
  133. package/dist/init-templates/generic-web/metadata/test-suites/.mj-sync.json +12 -0
  134. package/dist/init-templates/generic-web/metadata/tests/.GW01-home-loads.json +74 -0
  135. package/dist/init-templates/generic-web/metadata/tests/.GW02-search-array-map.json +82 -0
  136. package/dist/init-templates/generic-web/metadata/tests/.mj-sync.json +12 -0
  137. package/dist/init-templates/generic-web/oracles/mdn-oracles.cjs +121 -0
  138. package/dist/init-templates/generic-web/target.json +25 -0
  139. package/dist/init-templates/github-actions/README.md +26 -0
  140. package/dist/init-templates/github-actions/regression.yml +52 -0
  141. package/dist/init-templates/remote-mj/README.md +95 -0
  142. package/dist/init-templates/remote-mj/target.json +22 -0
  143. package/dist/init-templates/static-file-server/Dockerfile +23 -0
  144. package/dist/init-templates/static-file-server/README.md +88 -0
  145. package/dist/init-templates/static-file-server/docker-compose.app.yml +44 -0
  146. package/dist/init-templates/static-file-server/metadata/.mj-sync.json +10 -0
  147. package/dist/init-templates/static-file-server/metadata/test-suites/.mj-sync.json +12 -0
  148. package/dist/init-templates/static-file-server/metadata/test-suites/.static-server-suite.json +27 -0
  149. package/dist/init-templates/static-file-server/metadata/tests/.SS01-home-loads.json +45 -0
  150. package/dist/init-templates/static-file-server/metadata/tests/.SS02-navigate-about.json +45 -0
  151. package/dist/init-templates/static-file-server/metadata/tests/.mj-sync.json +12 -0
  152. package/dist/init-templates/static-file-server/public/about.html +12 -0
  153. package/dist/init-templates/static-file-server/public/index.html +27 -0
  154. package/dist/init-templates/static-file-server/target.json +16 -0
  155. package/dist/lib/db-preflight.d.ts +42 -0
  156. package/dist/lib/db-preflight.d.ts.map +1 -0
  157. package/dist/lib/db-preflight.js +113 -0
  158. package/dist/lib/db-preflight.js.map +1 -0
  159. package/dist/lib/db-version.d.ts +36 -0
  160. package/dist/lib/db-version.d.ts.map +1 -0
  161. package/dist/lib/db-version.js +45 -0
  162. package/dist/lib/db-version.js.map +1 -0
  163. package/dist/lib/migration-fetch.d.ts +49 -0
  164. package/dist/lib/migration-fetch.d.ts.map +1 -0
  165. package/dist/lib/migration-fetch.js +152 -0
  166. package/dist/lib/migration-fetch.js.map +1 -0
  167. package/dist/lib/regression/docker-helpers.d.ts +98 -0
  168. package/dist/lib/regression/docker-helpers.d.ts.map +1 -0
  169. package/dist/lib/regression/docker-helpers.js +184 -0
  170. package/dist/lib/regression/docker-helpers.js.map +1 -0
  171. package/dist/light-commands.d.ts.map +1 -1
  172. package/dist/light-commands.js +2 -0
  173. package/dist/light-commands.js.map +1 -1
  174. package/oclif.manifest.json +1635 -702
  175. package/package.json +22 -17
  176. package/regression-compose/docker-compose.bacpac-standalone.yml +109 -0
  177. package/regression-compose/docker-compose.standalone.yml +50 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@memberjunction/cli",
3
3
  "type": "module",
4
- "version": "5.37.0",
4
+ "version": "5.39.0",
5
5
  "description": "MemberJunction command line tools",
6
6
  "keywords": [
7
7
  "oclif"
@@ -24,10 +24,11 @@
24
24
  "files": [
25
25
  "/bin",
26
26
  "/dist",
27
- "/oclif.manifest.json"
27
+ "/oclif.manifest.json",
28
+ "/regression-compose"
28
29
  ],
29
30
  "scripts": {
30
- "build": "tsc && tsc-alias -f && oclif manifest",
31
+ "build": "tsc && tsc-alias -f && oclif manifest && node scripts/copy-regression-assets.mjs",
31
32
  "prepack": "npm run build && oclif readme",
32
33
  "postpack": "rimraf oclif.manifest.json",
33
34
  "version": "oclif readme && git add README.md",
@@ -54,23 +55,23 @@
54
55
  },
55
56
  "dependencies": {
56
57
  "@inquirer/prompts": "^8.2.0",
57
- "@memberjunction/ai-cli": "5.37.0",
58
- "@memberjunction/codegen-lib": "5.37.0",
59
- "@memberjunction/config": "5.37.0",
60
- "@memberjunction/core": "5.37.0",
61
- "@memberjunction/generic-database-provider": "5.37.0",
62
- "@memberjunction/installer": "5.37.0",
63
- "@memberjunction/db-auto-doc": "5.37.0",
64
- "@memberjunction/metadata-sync": "5.37.0",
65
- "@memberjunction/open-app-engine": "5.37.0",
66
- "@memberjunction/query-gen": "5.37.0",
67
- "@memberjunction/server-bootstrap-lite": "5.37.0",
58
+ "@memberjunction/ai-cli": "5.39.0",
59
+ "@memberjunction/codegen-lib": "5.39.0",
60
+ "@memberjunction/config": "5.39.0",
61
+ "@memberjunction/core": "5.39.0",
62
+ "@memberjunction/generic-database-provider": "5.39.0",
63
+ "@memberjunction/installer": "5.39.0",
64
+ "@memberjunction/db-auto-doc": "5.39.0",
65
+ "@memberjunction/metadata-sync": "5.39.0",
66
+ "@memberjunction/open-app-engine": "5.39.0",
67
+ "@memberjunction/query-gen": "5.39.0",
68
+ "@memberjunction/server-bootstrap-lite": "5.39.0",
68
69
  "@memberjunction/skyway-core": "^0.6.1",
69
70
  "@memberjunction/skyway-postgres": "^0.6.1",
70
71
  "@memberjunction/skyway-sqlserver": "^0.6.1",
71
- "@memberjunction/sql-converter": "5.37.0",
72
- "@memberjunction/sqlserver-dataprovider": "5.37.0",
73
- "@memberjunction/testing-cli": "5.37.0",
72
+ "@memberjunction/sql-converter": "5.39.0",
73
+ "@memberjunction/sqlserver-dataprovider": "5.39.0",
74
+ "@memberjunction/testing-cli": "5.39.0",
74
75
  "@oclif/core": "^3.27.0",
75
76
  "@oclif/plugin-help": "^6.2.37",
76
77
  "@oclif/plugin-version": "^2.2.36",
@@ -83,7 +84,10 @@
83
84
  "fast-glob": "^3.3.3",
84
85
  "figlet": "^1.10.0",
85
86
  "fs-extra": "^11.3.3",
87
+ "mssql": "^11.0.1",
86
88
  "ora-classic": "^5.4.2",
89
+ "pg": "^8.13.1",
90
+ "pg-query-stream": "~4.8.0",
87
91
  "recast": "^0.23.11",
88
92
  "simple-git": "^3.30.0",
89
93
  "zod": "~3.24.4"
@@ -92,6 +96,7 @@
92
96
  "@oclif/prettier-config": "^0.2.1",
93
97
  "@types/figlet": "^1.7.0",
94
98
  "@types/fs-extra": "^11.0.4",
99
+ "@types/pg": "^8.11.10",
95
100
  "oclif": "^4.22.73",
96
101
  "rimraf": "6.1.2",
97
102
  "tsx": "^4.21.0",
@@ -0,0 +1,109 @@
1
+ # Bacpac standalone — run the FULL MJ stack from PUBLISHED images (no monorepo)
2
+ # against a database imported from a .bacpac. Driven by `mj test regression up
3
+ # --bacpac=<file>` when outside the monorepo.
4
+ #
5
+ # ┌─ sqlserver ──┐
6
+ # │ └─ bacpac-import (one-shot, amd64) ── SqlPackage import into DB
7
+ # │ └─ api (memberjunction/api) ── boots → mj migrate + codegen (= upgrade)
8
+ # │ └─ explorer (memberjunction/explorer) ── nginx, /api→api, runtime Auth0
9
+ # │ └─ test-runner ── push prompts+suite, drive explorer URL, reports
10
+ #
11
+ # PREREQUISITE: `memberjunction/explorer` is not published yet (a separate
12
+ # workstream — runtime-configurable Explorer image). Until it exists, the
13
+ # `explorer` service can't pull and external bacpac stays dormant. Everything
14
+ # else (Mode B/C/D via docker-compose.standalone.yml) is independent of it.
15
+ name: mj-regression-bacpac
16
+
17
+ x-db: &db-conn
18
+ DB_HOST: sqlserver
19
+ DB_PORT: "1433"
20
+ DB_USERNAME: sa
21
+ DB_PASSWORD: "${TEST_SA_PASSWORD:-TestPassword123!}"
22
+ DB_DATABASE: "${DB_DATABASE:-MemberJunction_Imported}"
23
+ DB_TRUST_SERVER_CERTIFICATE: "true"
24
+ MJ_BASE_ENCRYPTION_KEY: "${MJ_BASE_ENCRYPTION_KEY:-}"
25
+
26
+ services:
27
+ sqlserver:
28
+ image: mcr.microsoft.com/mssql/server:2022-latest
29
+ platform: linux/amd64
30
+ environment:
31
+ ACCEPT_EULA: "Y"
32
+ MSSQL_SA_PASSWORD: "${TEST_SA_PASSWORD:-TestPassword123!}"
33
+ healthcheck:
34
+ test: /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "$$MSSQL_SA_PASSWORD" -Q "SELECT 1" -C -No
35
+ interval: 10s
36
+ timeout: 5s
37
+ retries: 15
38
+ start_period: 30s
39
+
40
+ bacpac-import:
41
+ image: ${MJ_IMAGE:-memberjunction/agentic-test-runner:latest}
42
+ platform: linux/amd64 # SqlPackage is x64-only
43
+ depends_on:
44
+ sqlserver:
45
+ condition: service_healthy
46
+ environment:
47
+ <<: *db-conn
48
+ BACPAC_FILE: "/app/bacpac/${BACPAC_FILE:-db.bacpac}"
49
+ BACPAC_UPGRADE: "${BACPAC_UPGRADE:-true}"
50
+ volumes:
51
+ - ${BACPAC_DIR:-./bacpac}:/app/bacpac:ro
52
+ command: ["import-bacpac"]
53
+
54
+ api:
55
+ image: ${MJ_API_IMAGE:-memberjunction/api:latest}
56
+ depends_on:
57
+ bacpac-import:
58
+ condition: service_completed_successfully
59
+ # MJAPI's entrypoint runs `mj migrate` + `mj codegen` on boot → this IS the
60
+ # bacpac "upgrade" step. (BACPAC_UPGRADE=false is advisory here; skipping
61
+ # migrate needs a SKIP_MIGRATIONS flag on the api image — see plan.)
62
+ environment:
63
+ <<: *db-conn
64
+ healthcheck:
65
+ test: ["CMD-SHELL", "curl -fsS http://localhost:4000/healthcheck || exit 1"]
66
+ interval: 10s
67
+ timeout: 5s
68
+ retries: 30
69
+ start_period: 60s
70
+
71
+ explorer:
72
+ image: ${MJ_EXPLORER_IMAGE:-memberjunction/explorer:latest} # ⟵ PREREQUISITE
73
+ depends_on:
74
+ api:
75
+ condition: service_healthy
76
+ environment:
77
+ # Runtime config consumed by the (future) runtime-configurable Explorer image.
78
+ AUTH0_DOMAIN: "${AUTH0_DOMAIN:-}"
79
+ AUTH0_CLIENTID: "${AUTH0_CLIENTID:-}"
80
+ API_SERVICE: "api" # nginx proxies /api/ → http://api:4000
81
+ healthcheck:
82
+ test: ["CMD-SHELL", "curl -fsS http://localhost:4200/ || exit 1"]
83
+ interval: 10s
84
+ timeout: 5s
85
+ retries: 30
86
+ start_period: 30s
87
+
88
+ test-runner:
89
+ image: ${MJ_IMAGE:-memberjunction/agentic-test-runner:latest}
90
+ depends_on:
91
+ explorer:
92
+ condition: service_healthy
93
+ env_file:
94
+ - path: ${USER_ENV_FILE:-/dev/null}
95
+ required: false
96
+ environment:
97
+ <<: *db-conn
98
+ # AI vendor keys (Gemini is the primary model; Anthropic is failover).
99
+ AI_VENDOR_API_KEY__GeminiLLM: "${AI_VENDOR_API_KEY__GeminiLLM:-}"
100
+ AI_VENDOR_API_KEY__AnthropicLLM: "${AI_VENDOR_API_KEY__AnthropicLLM:-}"
101
+ TEST_SUITE_NAME: "${TEST_SUITE_NAME:-}"
102
+ EXTRA_METADATA_DIRS: "/work/metadata"
103
+ MAX_PARALLEL_WORKERS: "${MAX_PARALLEL_WORKERS:-4}"
104
+ shm_size: '2gb'
105
+ volumes:
106
+ - ${TARGET_DIR:-./bacpac}:/work:ro
107
+ - ./test-results:/app/test-results
108
+ # baseUrl comes from the target; default points at the in-network explorer.
109
+ command: ["run", "--target=/work/${TARGET_FILE:-target.json}"]
@@ -0,0 +1,50 @@
1
+ # Standalone compose — run the regression suite from OUTSIDE the MJ monorepo,
2
+ # using the PUBLISHED agentic-test-runner image. No source build.
3
+ #
4
+ # Driven by `mj test regression remote --target=<file>` when not in the monorepo,
5
+ # or directly:
6
+ # TARGET_DIR=$(pwd)/my-suite TARGET_FILE=target.json USER_ENV_FILE=$(pwd)/.env \
7
+ # docker compose -f docker-compose.standalone.yml up
8
+ #
9
+ # Mode D (bring-your-own-app) — layer your app's compose so it boots on the same
10
+ # network; point the target's baseUrl at its in-network hostname:
11
+ # docker compose -f docker-compose.standalone.yml -f your-app.compose.yml up
12
+ #
13
+ # Provider DB: the test engine needs an MJ database (DB_*) to load test defs +
14
+ # Computer Use prompts and record results — your instance under test, or a
15
+ # throwaway. Auth `env:` references in the target resolve from USER_ENV_FILE.
16
+ name: mj-regression-standalone
17
+
18
+ services:
19
+ test-runner:
20
+ image: ${MJ_IMAGE:-memberjunction/agentic-test-runner:latest}
21
+ # Inject the user's whole .env (DB_*, auth env: refs, AI keys) into the
22
+ # container. Absolute path so it resolves regardless of cwd; optional so a
23
+ # missing file is fine (vars can come from the environment block below).
24
+ env_file:
25
+ - path: ${USER_ENV_FILE:-/dev/null}
26
+ required: false
27
+ environment:
28
+ # Provider DB (override via your .env / environment).
29
+ DB_HOST: "${DB_HOST:-host.docker.internal}"
30
+ DB_PORT: "${DB_PORT:-1433}"
31
+ DB_DATABASE: "${DB_DATABASE:-}"
32
+ DB_USERNAME: "${DB_USERNAME:-}"
33
+ DB_PASSWORD: "${DB_PASSWORD:-}"
34
+ DB_TRUST_SERVER_CERTIFICATE: "${DB_TRUST_SERVER_CERTIFICATE:-true}"
35
+ MJ_BASE_ENCRYPTION_KEY: "${MJ_BASE_ENCRYPTION_KEY:-}"
36
+ # AI vendor keys (Gemini is the primary model; Anthropic is failover).
37
+ AI_VENDOR_API_KEY__GeminiLLM: "${AI_VENDOR_API_KEY__GeminiLLM:-}"
38
+ AI_VENDOR_API_KEY__AnthropicLLM: "${AI_VENDOR_API_KEY__AnthropicLLM:-}"
39
+ TEST_SUITE_NAME: "${TEST_SUITE_NAME:-}"
40
+ MAX_PARALLEL_WORKERS: "${MAX_PARALLEL_WORKERS:-4}"
41
+ extra_hosts:
42
+ # Lets DB_HOST=host.docker.internal reach a DB published on the host (Linux too).
43
+ - "host.docker.internal:host-gateway"
44
+ shm_size: '2gb'
45
+ volumes:
46
+ # Your suite dir: target.json + metadata/ (tests + test-suites). Mounted at
47
+ # /work; the target's extraMetadataDirs should point at /work/metadata.
48
+ - ${TARGET_DIR:-./bacpac}:/work:ro
49
+ - ./test-results:/app/test-results
50
+ command: ["run", "--target=/work/${TARGET_FILE:-target.json}"]