Skip to main content
Glama

Prisma MCP Server

Official
by prisma
Apache 2.0
4
44,192
  • Linux
  • Apple
test-template.yml•50.6 kB
name: CI Template job on: workflow_call: inputs: reason: description: | Reason why this workflow was called. Could be "buildpulse" for flaky tests detection or "daily-test" for scheduled full builds, "CI" for normal pushes/PRs type: string required: false default: CI jobTimeout: description: Timeout for the jobs. Default is 35 minutes type: number default: 35 required: false jobsToRun: description: Jobs to run. See .github/workflows/scripts/detect-jobs-to-run.js script type: string default: '-all-' required: false queryEngine: description: List of query engines to run tests on as JSON array type: string default: '["library", "binary"]' pnpmVersion: description: pnpm package manager version type: string default: '10' engineHash: description: Customly-built engine hash to use type: string required: false driverAdapterTestJobTimeout: description: Timeout for driver adapter tests. Default is 60 minutes type: number default: 60 required: false secrets: BUILDPULSE_ACCESS_KEY_ID: required: false BUILDPULSE_SECRET_ACCESS_KEY: required: false BOT_TOKEN: required: false env: HAS_BUILDPULSE_SECRETS: ${{ secrets.BUILDPULSE_ACCESS_KEY_ID != '' && secrets.BUILDPULSE_SECRET_ACCESS_KEY != '' }} PRISMA_TELEMETRY_INFORMATION: 'prisma test.yml' # To hide "Update available 0.0.0 -> x.x.x" PRISMA_HIDE_UPDATE_MESSAGE: true FUNCTIONAL_TEST_OPTIONS: --detectOpenHandles concurrency: group: ${{ github.workflow }}-${{ github.ref }} # Don't cancel if called from buildpulse workflow cancel-in-progress: ${{ inputs.reason != 'buildpulse' }} jobs: # # Linting # lint: name: Lint timeout-minutes: ${{ inputs.jobTimeout }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install & build uses: ./.github/actions/setup with: node-version: 20 engine-hash: ${{ inputs.engineHash }} skip-tsc: false # https://github.com/actions/toolkit/blob/master/docs/commands.md#problem-matchers # Matchers are added in setup-node # https://github.com/actions/setup-node/blob/bacd6b4b3ac3127b28a1e1920c23bf1c2cadbb85/src/main.ts#L54-L60 - name: Disable GitHub annotations from linting run: | echo "::remove-matcher owner=eslint-compact::" echo "::remove-matcher owner=eslint-stylish::" - name: Run eslint run: pnpm run lint working-directory: ./ - name: Run prettier-check run: pnpm run prettier-check working-directory: ./ - name: Run check-engines-override run: pnpm run check-engines-override working-directory: ./ # # CLIENT (functional and legacy tests without types test) # client: name: Client Legacy ${{ matrix.queryEngine }} ${{ matrix.previewFeatures }} [v${{ matrix.node }}] ${{ matrix.shard }} timeout-minutes: ${{ inputs.jobTimeout }} runs-on: ubuntu-latest if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-client-') strategy: fail-fast: false matrix: shard: ['1/5', '2/5', '3/5', '4/5', '5/5'] queryEngine: ${{ fromJson(inputs.queryEngine) }} node: [18, 20, 22, 24] previewFeatures: ['', 'relationJoins'] env: NODE_OPTIONS: '--max-old-space-size=8096' JEST_JUNIT_SUITE_NAME: 'client/functional' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true steps: - uses: actions/checkout@v4 - name: Set CLI Engine Type run: | echo "PRISMA_CLI_QUERY_ENGINE_TYPE=${{ matrix.queryEngine }}" >> "$GITHUB_ENV" - name: Set Client Engine Type run: | echo "PRISMA_CLIENT_ENGINE_TYPE=${{ matrix.queryEngine }}" >> "$GITHUB_ENV" - name: Start Docker Compose Services uses: nick-fields/retry@v3 with: timeout_minutes: 10 max_attempts: 5 retry_wait_seconds: 120 command: docker compose -f docker/docker-compose.yml up --wait --detach postgres postgres_isolated mysql mysql_isolated mssql mongo cockroachdb vitess-8 - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} # Fails if set to true skip-tsc: false # Run the functional test suite - run: pnpm run test:functional ${{ env.FUNCTIONAL_TEST_OPTIONS }} --silent --shard ${{ matrix.shard }} --engine-type ${{ matrix.queryEngine }} --preview-features "${{ matrix.previewFeatures }}" if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-client-') working-directory: packages/client # And run all the other tests (except the types tests) - run: pnpm run test-notypes ${{ env.FUNCTIONAL_TEST_OPTIONS }} --silent --shard ${{ matrix.shard }} if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-client-') working-directory: packages/client - name: Upload test results to BuildPulse for flaky test detection # Only run this step for branches where we have access to secrets. # Run this step even when the tests fail. Skip if the workflow is cancelled. if: env.HAS_BUILDPULSE_SECRETS == 'true' && !cancelled() && inputs.reason == 'buildpulse' && github.repository == 'prisma/prisma' uses: buildpulse/buildpulse-action@v0.11.0 with: account: 17219288 repository: 192925833 path: packages/*/junit*.xml key: ${{ secrets.BUILDPULSE_ACCESS_KEY_ID }} secret: ${{ secrets.BUILDPULSE_SECRET_ACCESS_KEY }} # # CLIENT (functional tests with mini-proxy) # client-miniproxy: name: Client Mini-Proxy [v${{ matrix.node }}] ${{ matrix.shard }} timeout-minutes: ${{ inputs.jobTimeout }} runs-on: ubuntu-latest if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-client-') strategy: fail-fast: false matrix: shard: ['1/6', '2/6', '3/6', '4/6', '5/6', '6/6'] node: [18, 20, 22, 24] steps: - uses: actions/checkout@v4 - name: Start Docker Compose Services uses: nick-fields/retry@v3 with: timeout_minutes: 10 max_attempts: 5 retry_wait_seconds: 120 command: docker compose -f docker/docker-compose.yml up --wait --detach postgres mysql mssql mongo cockroachdb vitess-8 - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} # Fails if set to true skip-tsc: false - run: pnpm run test:functional ${{ env.FUNCTIONAL_TEST_OPTIONS }} --data-proxy --shard ${{ matrix.shard }} working-directory: packages/client env: NODE_OPTIONS: '--max-old-space-size=8096' JEST_JUNIT_SUITE_NAME: 'client/functional' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true - run: pnpm run test:functional ${{ env.FUNCTIONAL_TEST_OPTIONS }} --data-proxy --client-runtime edge --shard ${{ matrix.shard }} working-directory: packages/client env: NODE_OPTIONS: '--max-old-space-size=8096' JEST_JUNIT_SUITE_NAME: 'client/functional' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true - name: Upload test results to BuildPulse for flaky test detection # Only run this step for branches where we have access to secrets. # Run this step even when the tests fail. Skip if the workflow is cancelled. if: env.HAS_BUILDPULSE_SECRETS == 'true' && !cancelled() && inputs.reason == 'buildpulse' && github.repository == 'prisma/prisma' uses: buildpulse/buildpulse-action@v0.11.0 with: account: 17219288 repository: 192925833 path: packages/*/junit*.xml key: ${{ secrets.BUILDPULSE_ACCESS_KEY_ID }} secret: ${{ secrets.BUILDPULSE_SECRET_ACCESS_KEY }} # # CLIENT (functional tests with driver adapters) # client-driveradapters: name: DA ${{ matrix.flavor }} ${{ matrix.clientRuntime }} ${{ matrix.previewFeatures }} [v${{ matrix.node }}] ${{ matrix.shard }} timeout-minutes: ${{ inputs.driverAdapterTestJobTimeout }} runs-on: ubuntu-latest if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-client-') strategy: fail-fast: false matrix: clientRuntime: ['node', 'wasm-engine-edge'] flavor: [ 'js_pg', 'js_neon', 'js_libsql', 'js_planetscale', 'js_d1', 'js_better_sqlite3', 'js_mssql', 'js_mariadb', 'js_pg_cockroachdb', ] shard: ['1/6', '2/6', '3/6', '4/6', '5/6', '6/6'] node: [20] previewFeatures: ['', 'relationJoins'] steps: - uses: actions/checkout@v4 - name: Start Docker Compose Services uses: nick-fields/retry@v3 with: timeout_minutes: 10 max_attempts: 5 retry_wait_seconds: 120 command: docker compose -f docker/docker-compose.yml up --wait --detach postgres neon_wsproxy planetscale_proxy mssql mysql cockroachdb - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} skip-tsc: false - run: pnpm run test:functional ${{ env.FUNCTIONAL_TEST_OPTIONS }} --adapter ${{ matrix.flavor }} --shard ${{ matrix.shard }} --client-runtime ${{ matrix.clientRuntime }} --preview-features "${{ matrix.previewFeatures }}" --runInBand working-directory: packages/client env: PRISMA_DISABLE_QUAINT_EXECUTORS: true, # ensures quaint runs no queries NODE_NO_WARNINGS: 1 # hides undici websocket warnings NODE_OPTIONS: '--max-old-space-size=8096' JEST_JUNIT_SUITE_NAME: 'client/functional' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true - name: Upload test results to BuildPulse for flaky test detection # Only run this step for branches where we have access to secrets. # Run this step even when the tests fail. Skip if the workflow is cancelled. if: env.HAS_BUILDPULSE_SECRETS == 'true' && !cancelled() && inputs.reason == 'buildpulse' && github.repository == 'prisma/prisma' uses: buildpulse/buildpulse-action@v0.11.0 with: account: 17219288 repository: 192925833 path: packages/*/junit*.xml key: ${{ secrets.BUILDPULSE_ACCESS_KEY_ID }} secret: ${{ secrets.BUILDPULSE_SECRET_ACCESS_KEY }} # # CLIENT (functional tests with TS aka ESM client) # client-ts-client: name: TS-Client ${{ matrix.provider }} [v${{ matrix.node }}] ${{ matrix.shard }} timeout-minutes: ${{ inputs.jobTimeout }} runs-on: ubuntu-latest if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-client-') strategy: fail-fast: false matrix: provider: ['postgresql'] # TODO: test on all providers once it becomes stable clientRuntime: ['node'] # TODO: test on wasm shard: ['1/6', '2/6', '3/6', '4/6', '5/6', '6/6'] node: [18] # TODO: test on all node versions once it becomes stable steps: - uses: actions/checkout@v4 - name: Start Docker Compose Services uses: nick-fields/retry@v3 with: timeout_minutes: 10 max_attempts: 5 retry_wait_seconds: 120 command: docker compose -f docker/docker-compose.yml up --wait --detach postgres - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} skip-tsc: false - run: pnpm run test:functional --generator-type=prisma-client-ts --provider ${{ matrix.provider }} --shard ${{ matrix.shard }} --client-runtime ${{ matrix.clientRuntime }} --runInBand working-directory: packages/client env: NODE_NO_WARNINGS: 1 # hides undici websocket warnings NODE_OPTIONS: '--max-old-space-size=8096' JEST_JUNIT_SUITE_NAME: 'client/functional' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true - name: Upload test results to BuildPulse for flaky test detection # Only run this step for branches where we have access to secrets. # Run this step even when the tests fail. Skip if the workflow is cancelled. if: env.HAS_BUILDPULSE_SECRETS == 'true' && !cancelled() && inputs.reason == 'buildpulse' && github.repository == 'prisma/prisma' uses: buildpulse/buildpulse-action@v0.11.0 with: account: 17219288 repository: 192925833 path: packages/*/junit*.xml key: ${{ secrets.BUILDPULSE_ACCESS_KEY_ID }} secret: ${{ secrets.BUILDPULSE_SECRET_ACCESS_KEY }} # # CLIENT (functional tests with client engine, query compiler and driver adapters) # client-query-compiler: name: QC ${{ matrix.flavor }} [v${{ matrix.node }}] ${{ matrix.shard }} timeout-minutes: ${{ inputs.driverAdapterTestJobTimeout }} runs-on: ubuntu-latest if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-client-') strategy: fail-fast: false matrix: flavor: [ 'js_pg', 'js_libsql', 'js_d1', 'js_better_sqlite3', 'js_planetscale', 'js_mssql', 'js_neon', 'js_mariadb', 'js_pg_cockroachdb', ] shard: ['1/6', '2/6', '3/6', '4/6', '5/6', '6/6'] node: [20] steps: - uses: actions/checkout@v4 - name: Start Docker Compose Services uses: nick-fields/retry@v3 with: timeout_minutes: 10 max_attempts: 5 retry_wait_seconds: 120 command: docker compose -f docker/docker-compose.yml up --wait --detach postgres planetscale_proxy mssql neon_wsproxy mysql cockroachdb - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} skip-tsc: false - run: pnpm run test:functional ${{ env.FUNCTIONAL_TEST_OPTIONS }} --adapter ${{ matrix.flavor }} --shard ${{ matrix.shard }} --client-runtime client --engine-type client --runInBand working-directory: packages/client env: PRISMA_DISABLE_QUAINT_EXECUTORS: true, # ensures quaint runs no queries NODE_NO_WARNINGS: 1 # hides undici websocket warnings NODE_OPTIONS: '--max-old-space-size=8096' JEST_JUNIT_SUITE_NAME: 'client/functional' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true - name: Upload test results to BuildPulse for flaky test detection # Only run this step for branches where we have access to secrets. # Run this step even when the tests fail. Skip if the workflow is cancelled. if: env.HAS_BUILDPULSE_SECRETS == 'true' && !cancelled() && inputs.reason == 'buildpulse' && github.repository == 'prisma/prisma' uses: buildpulse/buildpulse-action@v0.11.0 with: account: 17219288 repository: 192925833 path: packages/*/junit*.xml key: ${{ secrets.BUILDPULSE_ACCESS_KEY_ID }} secret: ${{ secrets.BUILDPULSE_SECRET_ACCESS_KEY }} # # CLIENT (functional tests with client engine, query compiler, driver adapters and Accelerate) # client-query-compiler-accelerate: name: QC+Accelerate ${{ matrix.provider }} [v${{ matrix.node }}] ${{ matrix.shard }} timeout-minutes: ${{ inputs.driverAdapterTestJobTimeout }} runs-on: ubuntu-latest if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-client-') || contains(inputs.jobsToRun, '-query-plan-executor-') strategy: fail-fast: false matrix: provider: ['postgresql', 'mysql'] shard: ['1/6', '2/6', '3/6', '4/6', '5/6', '6/6'] node: [20] steps: - uses: actions/checkout@v4 - name: Start Docker Compose Services uses: nick-fields/retry@v3 with: timeout_minutes: 10 max_attempts: 5 retry_wait_seconds: 120 command: docker compose -f docker/docker-compose.yml up --wait --detach postgres mssql mysql - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} skip-tsc: false - run: pnpm run test:functional ${{ env.FUNCTIONAL_TEST_OPTIONS }} --provider ${{ matrix.provider }} --shard ${{ matrix.shard }} --client-runtime client --engine-type client --remote-executor --runInBand working-directory: packages/client env: PRISMA_DISABLE_QUAINT_EXECUTORS: true, # ensures quaint runs no queries NODE_NO_WARNINGS: 1 # hides undici websocket warnings NODE_OPTIONS: '--max-old-space-size=8096' JEST_JUNIT_SUITE_NAME: 'client/functional-qpe' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true PRISMA_CLIENT_ENGINE_TYPE: client - name: Upload test results to BuildPulse for flaky test detection # Only run this step for branches where we have access to secrets. # Run this step even when the tests fail. Skip if the workflow is cancelled. if: env.HAS_BUILDPULSE_SECRETS == 'true' && !cancelled() && inputs.reason == 'buildpulse' && github.repository == 'prisma/prisma' uses: buildpulse/buildpulse-action@v0.11.0 with: account: 17219288 repository: 192925833 path: packages/*/junit*.xml key: ${{ secrets.BUILDPULSE_ACCESS_KEY_ID }} secret: ${{ secrets.BUILDPULSE_SECRET_ACCESS_KEY }} # # CLIENT (memory tests) # client-memory: name: Client (memory tests) [v${{ matrix.node }}] timeout-minutes: ${{ inputs.jobTimeout }} runs-on: ubuntu-latest if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-client-') strategy: fail-fast: false matrix: queryEngine: ['library'] # TODO: binary engine is leaking at the moment node: [18, 20, 22, 24] steps: - uses: actions/checkout@v4 - name: Start Docker Compose Services uses: nick-fields/retry@v3 with: timeout_minutes: 10 max_attempts: 5 retry_wait_seconds: 120 command: docker compose -f docker/docker-compose.yml up --wait --detach postgres # mysql mysql_isolated mssql mongo cockroachdb - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} skip-tsc: true - run: pnpm run test:memory working-directory: packages/client - uses: actions/github-script@v7 if: ${{ failure() && github.event_name == 'pull_request' }} id: upload-report env: NODE_VERSION: ${{ matrix.node }} with: github-token: ${{ secrets.BOT_TOKEN }} script: | const fs = require('fs') const nodeVersion = process.env.NODE_VERSION const reportPath = `client-memory-test/${context.issue.number}/${context.sha}.${nodeVersion}.html` const url = `https://prisma.github.io/ci-reports/${reportPath}` const localReport = './packages/client/tests/memory/memory-report.html' if (fs.existsSync(localReport)) { await github.rest.repos.createOrUpdateFileContents({ owner: 'prisma', repo: 'ci-reports', branch: 'gh-pages', path: reportPath, message: `Add memory results for PR ${context.issue.number}`, content: fs.readFileSync(localReport, 'base64'), }); core.setOutput('url', url); } - name: Find report comment uses: peter-evans/find-comment@v3 id: fc if: ${{ always() && github.event_name == 'pull_request' }} with: issue-number: ${{ github.event.pull_request.number }} comment-author: 'github-actions[bot]' body-includes: 'Client memory tests, node ${{ matrix.node}}, ${{ matrix.queryEngine }}:' - name: Create or update remote comment (failure) uses: peter-evans/create-or-update-comment@v4 if: ${{ failure() && steps.upload-report.outputs.url }} with: comment-id: ${{ steps.fc.outputs.comment-id }} issue-number: ${{ github.event.pull_request.number }} body: | Client memory tests, node ${{ matrix.node}}, ${{ matrix.queryEngine }}: āŒ Failure, [see report](${{ steps.upload-report.outputs.url }}). edit-mode: replace - name: Create or update remote comment (success) uses: peter-evans/create-or-update-comment@v4 if: ${{ success() && steps.fc.outputs.comment-id != '' }} with: comment-id: ${{ steps.fc.outputs.comment-id }} issue-number: ${{ github.event.pull_request.number }} body: | Client memory tests, node ${{ matrix.node}}, ${{ matrix.queryEngine }}: āœ… Success edit-mode: replace # # CLIENT test:e2e # client-e2e: name: Client E2E ${{ matrix.os }} [v${{ matrix.node }}] timeout-minutes: 35 runs-on: ${{ matrix.os }} if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-client-e2e-') strategy: fail-fast: false matrix: os: [ubuntu-latest] # The Node.js version here is only used for the GitHub Actions job # The version used by the tests is actually defined in # ./packages/client/tests/e2e/_utils/standard.dockerfile node: [20] steps: - uses: actions/checkout@v4 # Not currently needed, but we might need it in the future - name: Start Docker Compose Services uses: nick-fields/retry@v3 with: timeout_minutes: 10 max_attempts: 5 retry_wait_seconds: 120 command: docker compose -f docker/docker-compose.yml up --wait --detach postgres mysql mssql mongo cockroachdb vitess-8 - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} # Fails if set to true skip-tsc: false - run: pnpm run test:e2e --verbose --maxWorkers 3 working-directory: packages/client env: NODE_OPTIONS: '--max-old-space-size=8096' # # CLIENT test:functional:code --relation-mode-tests-only for `relationMode-in-separate-gh-action` tests # client-relationMode: name: Client relationMode:${{ matrix.relationMode }} timeout-minutes: 60 runs-on: ${{ matrix.os }} if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-client-') strategy: fail-fast: false matrix: relationMode: ['', 'foreignKeys', 'prisma'] os: [ubuntu-latest] node: [18] env: NODE_OPTIONS: '--max-old-space-size=8096' JEST_JUNIT_SUITE_NAME: 'client/functional' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true steps: - uses: actions/checkout@v4 - name: Set RELATION_MODE custom test env var run: | echo "RELATION_MODE=${{ matrix.relationMode }}" if [ -n "${{ matrix.relationMode }}" ]; then echo "RELATION_MODE=${{ matrix.relationMode }}" >> "$GITHUB_ENV"; fi - name: Start Docker Compose Services uses: nick-fields/retry@v3 with: timeout_minutes: 10 max_attempts: 5 retry_wait_seconds: 120 command: docker compose -f docker/docker-compose.yml up --wait --detach postgres mysql mssql mongo cockroachdb vitess-8 - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} skip-tsc: true # shouldn't take more than 15 minutes - name: 1 to 1 run: pnpm run test:functional:code ${{ env.FUNCTIONAL_TEST_OPTIONS }} --silent --relation-mode-tests-only relationMode-in-separate-gh-action/tests_1-to-1.ts working-directory: packages/client # shouldn't take more than 15 minutes - name: 1 to n run: pnpm run test:functional:code ${{ env.FUNCTIONAL_TEST_OPTIONS }} --silent --relation-mode-tests-only relationMode-in-separate-gh-action/tests_1-to-n.ts working-directory: packages/client # shouldn't take more than 15 minutes - name: m to n (SQL databases) run: pnpm run test:functional:code ${{ env.FUNCTIONAL_TEST_OPTIONS }} --silent --relation-mode-tests-only relationMode-in-separate-gh-action/tests_m-to-n.ts working-directory: packages/client - name: m to n (MongoDB) run: pnpm run test:functional:code ${{ env.FUNCTIONAL_TEST_OPTIONS }} --silent --relation-mode-tests-only relationMode-in-separate-gh-action/tests_m-to-n-MongoDB.ts working-directory: packages/client - name: Upload test results to BuildPulse for flaky test detection # Only run this step for branches where we have access to secrets. # Run this step even when the tests fail. Skip if the workflow is cancelled. if: env.HAS_BUILDPULSE_SECRETS == 'true' && !cancelled() && inputs.reason == 'buildpulse' && github.repository == 'prisma/prisma' uses: buildpulse/buildpulse-action@v0.11.0 with: account: 17219288 repository: 192925833 path: packages/*/junit*.xml key: ${{ secrets.BUILDPULSE_ACCESS_KEY_ID }} secret: ${{ secrets.BUILDPULSE_SECRET_ACCESS_KEY }} # # CLIENT (legacy types tests only) # client-legacy-types: name: Client (legacy types) timeout-minutes: 15 runs-on: ubuntu-latest if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-client-') strategy: fail-fast: false matrix: node: [18] steps: - uses: actions/checkout@v4 - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} # Fails if set to true skip-tsc: false - run: pnpm run test src/__tests__/types/types.test.ts working-directory: packages/client # # Client internals and generator packages # client-packages: name: Client internals and generators [v${{ matrix.node }}] timeout-minutes: 30 runs-on: ubuntu-latest if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-client-') strategy: fail-fast: false matrix: node: [18, 20, 22, 24] steps: - uses: actions/checkout@v4 - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} skip-tsc: false - run: pnpm run test name: 'client-common' working-directory: packages/client-common - run: pnpm run test name: 'client-engine-runtime' working-directory: packages/client-engine-runtime - run: pnpm run test name: 'ts-builders' working-directory: packages/ts-builders - run: pnpm run test name: 'client-generator-js' working-directory: packages/client-generator-js - run: pnpm run test name: 'client-generator-ts' working-directory: packages/client-generator-ts - run: pnpm run test name: 'client-generator-registry' working-directory: packages/client-generator-registry # # WORKSPACE-TYPES # workspace-types: name: Workspace types timeout-minutes: 15 runs-on: ubuntu-latest strategy: fail-fast: false matrix: node: [18] steps: - uses: actions/checkout@v4 - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} skip-tsc: true engine-hash: ${{ inputs.engineHash }} - run: pnpm tsc -p tsconfig.utils.typecheck.json # # INTEGRATION-TESTS # integration-tests: name: Integration tests timeout-minutes: 20 runs-on: ubuntu-latest if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-integration-tests-') strategy: fail-fast: false matrix: queryEngine: ${{ fromJson(inputs.queryEngine) }} node: [18] steps: - uses: actions/checkout@v4 - name: Set CLI Engine Type run: | echo "PRISMA_CLI_QUERY_ENGINE_TYPE=${{ matrix.queryEngine }}" >> "$GITHUB_ENV" - name: Set Client Engine Type run: | echo "PRISMA_CLIENT_ENGINE_TYPE=${{ matrix.queryEngine }}" >> "$GITHUB_ENV" - name: Start Docker Compose Services uses: nick-fields/retry@v3 with: timeout_minutes: 10 max_attempts: 5 retry_wait_seconds: 120 command: docker compose -f docker/docker-compose.yml up --wait --detach postgres mysql mariadb mssql - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} skip-tsc: true - run: pnpm run test working-directory: packages/integration-tests # # `@prisma/internals` # internals: name: '@prisma/internals [v${{ matrix.node }}]' timeout-minutes: 15 runs-on: ${{ matrix.os }} if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-internals-') strategy: fail-fast: false matrix: queryEngine: ${{ fromJson(inputs.queryEngine) }} os: [ubuntu-latest] node: [18, 20, 22, 24] steps: - uses: actions/checkout@v4 - name: Start Docker Compose Services uses: nick-fields/retry@v3 with: timeout_minutes: 10 max_attempts: 5 retry_wait_seconds: 120 command: docker compose -f docker/docker-compose.yml up --wait --detach postgres mysql mssql - name: Set CLI Engine Type run: | echo "PRISMA_CLI_QUERY_ENGINE_TYPE=${{ matrix.queryEngine }}" >> "$GITHUB_ENV" - name: Set Client Engine Type run: | echo "PRISMA_CLIENT_ENGINE_TYPE=${{ matrix.queryEngine }}" >> "$GITHUB_ENV" - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} skip-tsc: true - run: pnpm run test working-directory: packages/internals # # MIGRATE # migrate: name: Migrate ${{ matrix.driverAdapter }} [v${{ matrix.node }}] timeout-minutes: 15 runs-on: ${{ matrix.os }} if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-migrate-') strategy: fail-fast: false matrix: queryEngine: ${{ fromJson(inputs.queryEngine) }} os: [ubuntu-latest] node: [18, 20, 22, 24] # driverAdapter: ['', 'libsql'] # TODO: once we have all tests pass with driver adapters actually enable them on CI and add further adapters driverAdapter: [''] steps: - uses: actions/checkout@v4 - name: Start Docker Compose Services uses: nick-fields/retry@v3 with: timeout_minutes: 10 max_attempts: 5 retry_wait_seconds: 120 command: docker compose -f docker/docker-compose.yml up --wait --detach postgres mysql mssql mongodb_migrate cockroachdb - name: Set CLI Engine Type run: | echo "PRISMA_CLI_QUERY_ENGINE_TYPE=${{ matrix.queryEngine }}" >> "$GITHUB_ENV" - name: Set Client Engine Type run: | echo "PRISMA_CLIENT_ENGINE_TYPE=${{ matrix.queryEngine }}" >> "$GITHUB_ENV" - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} skip-tsc: true - run: pnpm run test working-directory: packages/migrate env: PRISMA_MIGRATE_TEST_ADAPTER: ${{ matrix.driverAdapter }} # # CLI-COMMANDS # cli-commands: name: CLI commands [v${{ matrix.node }}] timeout-minutes: 10 runs-on: ${{ matrix.os }} if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-cli-') strategy: fail-fast: false matrix: queryEngine: ${{ fromJson(inputs.queryEngine) }} os: [ubuntu-latest] node: [18, 20, 22, 24] steps: - uses: actions/checkout@v4 - name: Start Docker Compose Services uses: nick-fields/retry@v3 with: timeout_minutes: 10 max_attempts: 5 retry_wait_seconds: 120 command: docker compose -f docker/docker-compose.yml up --wait --detach postgres - name: Set CLI Engine Type run: | echo "PRISMA_CLI_QUERY_ENGINE_TYPE=${{ matrix.queryEngine }}" >> "$GITHUB_ENV" - name: Set Client Engine Type run: | echo "PRISMA_CLIENT_ENGINE_TYPE=${{ matrix.queryEngine }}" >> "$GITHUB_ENV" - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} skip-tsc: true - run: pnpm run test working-directory: packages/cli # # CLI-PLATFORM-COMMANDS (only) # cli-platform-commands: name: CLI platform [${{ matrix.os }}][v${{ matrix.node }}] timeout-minutes: 10 runs-on: ${{ matrix.os }} if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-cli-platform-') strategy: fail-fast: false matrix: os: [ubuntu-latest] node: [18, 20, 22, 24] include: - os: windows-latest version: 18 - os: macos-latest version: 18 steps: - uses: actions/checkout@v4 - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} skip-tsc: true - run: pnpm run test:platform working-directory: packages/cli # # All the other packages! # others: name: Others [v${{ matrix.node }}] timeout-minutes: 10 runs-on: ${{ matrix.os }} if: contains(inputs.jobsToRun, '-all-') strategy: fail-fast: false matrix: os: [ubuntu-latest] node: [18, 20, 22, 24] steps: - uses: actions/checkout@v4 - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} skip-tsc: true - run: pnpm run test name: 'debug' working-directory: packages/debug - run: pnpm run test name: 'generator-helper' working-directory: packages/generator-helper - run: pnpm run test name: 'get-platform' working-directory: packages/get-platform - run: pnpm run test name: 'fetch-engine' working-directory: packages/fetch-engine - run: pnpm run test name: 'engines' working-directory: packages/engines - run: pnpm run test name: 'instrumentation' working-directory: packages/instrumentation - run: pnpm run test name: 'schema-files-loader' working-directory: packages/schema-files-loader - run: pnpm run test name: 'config' working-directory: packages/config - run: pnpm run test name: 'dmmf' working-directory: packages/dmmf - run: pnpm run test name: 'generator' working-directory: packages/generator - run: pnpm run test name: 'credentials-store' working-directory: packages/credentials-store # # Driver Adapter Unit Tests # driver-adapter-unit-tests: name: DA Unit Tests [v${{ matrix.node }}] timeout-minutes: 10 runs-on: ${{ matrix.os }} if: contains(inputs.jobsToRun, '-all-') strategy: fail-fast: false matrix: os: [ubuntu-latest] node: [18, 24] steps: - uses: actions/checkout@v4 - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} skip-tsc: true - run: pnpm run test name: 'adapter-libsql' working-directory: packages/adapter-libsql - run: pnpm run test name: 'adapter-mariadb' working-directory: packages/adapter-mariadb - run: pnpm run test name: 'adapter-d1' working-directory: packages/adapter-d1 - run: pnpm run test name: 'adapter-pg' working-directory: packages/adapter-pg - run: pnpm run test name: 'adapter-planetscale' working-directory: packages/adapter-planetscale - run: pnpm run test name: 'adapter-mssql' working-directory: packages/adapter-mssql - run: pnpm run test name: 'adapter-neon' working-directory: packages/adapter-neon # # Query plan executor unit tests # qpe-unit-tests: name: QPE Unit Tests [v${{ matrix.node }}] timeout-minutes: 10 runs-on: ${{ matrix.os }} if: contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-query-plan-executor-') strategy: fail-fast: false matrix: os: [ubuntu-latest] node: [24] steps: - uses: actions/checkout@v4 - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} skip-tsc: true - run: pnpm run test name: 'query-plan-executor' working-directory: packages/query-plan-executor # # Run type performance benchmark tests # type-benchmark-tests: name: Type performance benchmarks timeout-minutes: 10 runs-on: ubuntu-latest if: contains(inputs.jobsToRun, '-all-') strategy: fail-fast: false steps: - uses: actions/checkout@v4 - name: Install & build uses: ./.github/actions/setup with: node-version: 22 engine-hash: ${{ inputs.engineHash }} skip-tsc: true - run: pnpm run test name: 'type-benchmark-tests' working-directory: packages/type-benchmark-tests # # Run all tests on macOS and Windows. # # Unlike the other jobs, this job doesn't use Docker (and thus skips some # tests that require dependencies not easily installable without Docker). # # It also runs most tests for different packages sequentially # to prevent the combinatorial explosion of the number of parallel jobs, # to minimize the number of times we need to install MySQL using the package manager # (PostgreSQL and MongoDB are provided by GitHub Actions out of the box), and # minimize the time spent waiting for a free runner. # no-docker-client-functional: name: Client (func/win+mac) timeout-minutes: 40 runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [macos-14, windows-latest] node: [18] queryEngine: ${{ fromJson(inputs.queryEngine) }} shard: ['1/2', '2/2'] if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-client-') steps: - uses: actions/checkout@v4 - name: Prerequisites shell: bash run: | { echo "TEST_SKIP_MSSQL=true" echo "TEST_SKIP_MONGODB=true" echo "TEST_SKIP_COCKROACHDB=true" echo "TEST_SKIP_VITESS=true" echo "PRISMA_CLI_QUERY_ENGINE_TYPE=${{ matrix.queryEngine }}" echo "PRISMA_CLIENT_ENGINE_TYPE=${{ matrix.queryEngine }}" } >> "$GITHUB_ENV" - name: Set up PostgreSQL run: bash .github/workflows/scripts/setup-postgres.sh - name: Set up MySQL run: bash .github/workflows/scripts/setup-mysql.sh - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} skip-tsc: true - name: Test packages/client run: pnpm run test:functional:code ${{ env.FUNCTIONAL_TEST_OPTIONS }} --silent --shard ${{ matrix.shard }} --engine-type ${{ matrix.queryEngine }} working-directory: packages/client env: # allow Node.js to allocate at most 14GB of heap on macOS and 7GB on Windows # https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources NODE_OPTIONS: "${{ matrix.os == 'macos-14' && '--max-old-space-size=14336' || '--max-old-space-size=7168' }}" JEST_JUNIT_SUITE_NAME: 'client/functional' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true - name: Upload test results to BuildPulse for flaky test detection # Only run this step for branches where we have access to secrets. # Run this step even when the tests fail. Skip if the workflow is cancelled. if: env.HAS_BUILDPULSE_SECRETS == 'true' && !cancelled() && inputs.reason =='buildpulse' && github.repository == 'prisma/prisma' uses: buildpulse/buildpulse-action@v0.11.0 with: account: 17219288 repository: 192925833 path: packages/*/junit*.xml key: ${{ secrets.BUILDPULSE_ACCESS_KEY_ID }} secret: ${{ secrets.BUILDPULSE_SECRET_ACCESS_KEY }} no-docker: name: All pkgs (win+mac) timeout-minutes: 60 runs-on: ${{ matrix.os }} if: | contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-internals-') || contains(inputs.jobsToRun, '-migrate-') || contains(inputs.jobsToRun, '-cli-') || contains(inputs.jobsToRun, '-client-') strategy: fail-fast: false matrix: os: [macos-14, windows-latest] node: [18] queryEngine: ${{ fromJson(inputs.queryEngine) }} steps: - uses: actions/checkout@v4 - name: Prerequisites shell: bash run: | { echo "TEST_SKIP_MSSQL=true" echo "TEST_SKIP_MONGODB=true" echo "TEST_SKIP_COCKROACHDB=true" echo "TEST_NO_DOCKER=true" echo "PRISMA_CLI_QUERY_ENGINE_TYPE=${{ matrix.queryEngine }}" echo "PRISMA_CLIENT_ENGINE_TYPE=${{ matrix.queryEngine }}" } >> "$GITHUB_ENV" - name: Set up PostgreSQL run: bash .github/workflows/scripts/setup-postgres.sh - name: Set up MySQL run: bash .github/workflows/scripts/setup-mysql.sh - name: Install & build uses: ./.github/actions/setup with: node-version: ${{ matrix.node }} engine-hash: ${{ inputs.engineHash }} # Fails if set to true skip-tsc: false - name: Test packages/internals if: contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-internals-') run: pnpm run test --testTimeout=40000 working-directory: packages/internals env: JEST_JUNIT_SUITE_NAME: 'internals' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true - name: Test packages/client (old suite) if: contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-client-') run: pnpm run test-notypes --silent --testTimeout=40000 working-directory: packages/client env: # Allow Node.js to allocate at most a certain amount heap on macOS and a different amount on Windows # Note that this value should be lower than the total amount of RAM available # https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources NODE_OPTIONS: "${{ matrix.os == 'macos-14' && '--max-old-space-size=14336' || '--max-old-space-size=3072' }}" JEST_JUNIT_SUITE_NAME: 'client/old' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true - name: Test packages/migrate if: contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-migrate-') run: pnpm run test --testTimeout=40000 working-directory: packages/migrate env: JEST_JUNIT_SUITE_NAME: 'migrate' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true - name: Test packages/cli if: contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-cli-') run: pnpm run test --testTimeout=40000 working-directory: packages/cli env: JEST_JUNIT_SUITE_NAME: 'cli' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true - name: Test packages/debug if: contains(inputs.jobsToRun, '-all-') run: pnpm run test working-directory: packages/debug env: JEST_JUNIT_SUITE_NAME: 'debug' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true - name: Test packages/generator-helper if: contains(inputs.jobsToRun, '-all-') run: pnpm run test working-directory: packages/generator-helper env: JEST_JUNIT_SUITE_NAME: 'generator-helper' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true - name: Test packages/get-platform continue-on-error: true # Can fail randomly and we don't want to fail the whole workflow if: success() && contains(inputs.jobsToRun, '-all-') run: pnpm run test working-directory: packages/get-platform env: JEST_JUNIT_SUITE_NAME: 'get-platform' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true - name: Test packages/fetch-engine continue-on-error: true # Can fail randomly and we don't want to fail the whole workflow if: success() && contains(inputs.jobsToRun, '-all-') run: pnpm run test working-directory: packages/fetch-engine env: JEST_JUNIT_SUITE_NAME: 'fetch-engine' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true - name: Test packages/engines if: contains(inputs.jobsToRun, '-all-') run: pnpm run test working-directory: packages/engines env: JEST_JUNIT_SUITE_NAME: 'engines' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true - name: Test packages/schema-files-loader if: contains(inputs.jobsToRun, '-all-') run: pnpm run test working-directory: packages/schema-files-loader env: JEST_JUNIT_SUITE_NAME: 'schema-files-loader' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true - name: Test packages/config if: contains(inputs.jobsToRun, '-all-') run: pnpm run test working-directory: packages/config env: JEST_JUNIT_SUITE_NAME: 'config' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true - name: Test packages/client-engine-runtime if: contains(inputs.jobsToRun, '-all-') run: pnpm run test working-directory: packages/client-engine-runtime env: JEST_JUNIT_SUITE_NAME: 'client-engine-runtime' JEST_JUNIT_UNIQUE_OUTPUT_NAME: true - run: pnpm run test if: contains(inputs.jobsToRun, '-all-') name: 'dmmf' working-directory: packages/dmmf - run: pnpm run test if: contains(inputs.jobsToRun, '-all-') name: 'generator' working-directory: packages/generator - run: pnpm run test if: contains(inputs.jobsToRun, '-all-') name: 'client-common' working-directory: packages/client-common - run: pnpm run test if: contains(inputs.jobsToRun, '-all-') name: 'ts-builders' working-directory: packages/ts-builders - run: pnpm run test if: contains(inputs.jobsToRun, '-all-') name: 'client-generator-js' working-directory: packages/client-generator-js - run: pnpm run test if: contains(inputs.jobsToRun, '-all-') name: 'client-generator-ts' working-directory: packages/client-generator-ts - run: pnpm run test if: contains(inputs.jobsToRun, '-all-') name: 'credentials-store' working-directory: packages/credentials-store - run: pnpm run test if: contains(inputs.jobsToRun, '-all-') name: 'client-generator-registry' working-directory: packages/client-generator-registry - run: pnpm run test if: contains(inputs.jobsToRun, '-all-') || contains(inputs.jobsToRun, '-query-plan-executor-') name: 'query-plan-executor' working-directory: packages/query-plan-executor - name: Upload test results to BuildPulse for flaky test detection # Only run this step for branches where we have access to secrets. # Run this step even when the tests fail. Skip if the workflow is cancelled. if: env.HAS_BUILDPULSE_SECRETS == 'true' && !cancelled() && inputs.reason == 'buildpulse' && github.repository == 'prisma/prisma' uses: buildpulse/buildpulse-action@v0.11.0 with: account: 17219288 repository: 192925833 path: packages/*/junit*.xml key: ${{ secrets.BUILDPULSE_ACCESS_KEY_ID }} secret: ${{ secrets.BUILDPULSE_SECRET_ACCESS_KEY }}

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/prisma/prisma'

If you have feedback or need assistance with the MCP directory API, please join our Discord server