Skip to main content
Glama

Prisma MCP Server

Official
by prisma
test-template.yml39.9 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 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.19.0' 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: ./ - name: Run pnpm audit (production dependencies only) run: pnpm audit --prod # # CLIENT (legacy tests without types test) # client-unit: name: Client Legacy ${{ 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'] node: ['20.19.0', '22.12.0', '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: 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 # And run all non functional, non e2e 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 }} # This test suite is disabled until the problem is fixed. client-generator-prisma-client-js: name: Client Generator Prisma Client JS [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: shard: ['1/6', '2/6', '3/6', '4/6', '5/6', '6/6'] node: ['20.19.0', '22.12.0', '24'] flavor: ['js_pg'] 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 ${{ env.FUNCTIONAL_TEST_OPTIONS }} --adapter ${{ matrix.flavor }} --shard ${{ matrix.shard }} --generator-type prisma-client-js --client-runtime 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 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 # Note: the maximum number of matrix configurations on Github Actions is 256 matrix: # TODO: add `wasm-compiler-edge` to `clientRuntime` once Prisma 7 is ready clientRuntime: ['client'] flavor: [ 'js_pg', 'js_neon', 'js_libsql', 'js_planetscale', 'js_d1', 'js_better_sqlite3', 'js_mssql', 'js_mariadb', 'js_pg_cockroachdb', ] shard: ['1/4', '2/4', '3/4', '4/4'] node: ['20.19.0'] 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 }} --generator-type prisma-client-ts --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 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.19.0'] 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 }} --generator-type prisma-client-ts --client-runtime 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 - 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 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.19.0'] 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: ['20.19.0'] 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: ['20.19.0'] 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: ['20.19.0', '22.12.0', '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: ['20.19.0'] 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 # TODO: re-enable once they're ported to the Query Compiler architecture. # # 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: # node: ['20.19.0'] # 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 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: os: [ubuntu-latest] node: ['20.19.0', '22.12.0', '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: 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: os: [ubuntu-latest] node: ['20.19.0', '22.12.0', '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: 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: os: [ubuntu-latest] node: ['20.19.0', '22.12.0', '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: 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: ['20.19.0', '22.12.0', '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: ['20.19.0', '22.12.0', '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: ['20.19.0', '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: ['20.19.0'] 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" } >> "$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 }} 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: ['20.19.0'] 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" } >> "$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