From 3d07eb6f166f44ec9e68f4adb2633fa1e84e53b0 Mon Sep 17 00:00:00 2001 From: Jan Piotrowski Date: Thu, 24 Feb 2022 20:10:42 +0100 Subject: [PATCH] feat: BuildPulse flaky test detection (#11967) Co-authored-by: Jason Rudolph --- .github/workflows/test.yml | 129 ++++++++++++++++++---- package.json | 1 + packages/cli/jest.config.js | 12 ++ packages/cli/package.json | 1 + packages/client/jest.config.js | 12 ++ packages/client/package.json | 1 + packages/debug/jest.config.js | 14 ++- packages/debug/package.json | 1 + packages/engine-core/jest.config.js | 14 ++- packages/engine-core/package.json | 1 + packages/generator-helper/jest.config.js | 12 ++ packages/generator-helper/package.json | 1 + packages/integration-tests/jest.config.js | 12 ++ packages/integration-tests/package.json | 1 + packages/migrate/jest.config.js | 14 ++- packages/migrate/package.json | 1 + packages/react-prisma/jest.config.js | 14 ++- packages/react-prisma/package.json | 1 + packages/sdk/jest.config.js | 12 ++ packages/sdk/package.json | 1 + pnpm-lock.yaml | 35 ++++++ 21 files changed, 264 insertions(+), 26 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f41a9158d153..392ccc0cd04d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -557,14 +557,14 @@ jobs: name: generator-helper-${{ matrix.os }} # - # Run all tests on macOS and Windows. + # Run (almost) 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 the 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 + # It also runs most tests for different packages sequentially (except client, + # see below) 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. # @@ -577,7 +577,6 @@ jobs: ${{ contains(needs.detect_jobs_to_run.outputs.jobs, '-all-') || contains(needs.detect_jobs_to_run.outputs.jobs, '-sdk-') || - contains(needs.detect_jobs_to_run.outputs.jobs, '-client-') || contains(needs.detect_jobs_to_run.outputs.jobs, '-migrate-') || contains(needs.detect_jobs_to_run.outputs.jobs, '-cli-') }} @@ -589,6 +588,9 @@ jobs: node: [16] queryEngine: ['library', 'binary'] + env: + JEST_JUNIT_SUITE_NAME: '${{ matrix.os }}/node-${{ matrix.node }}/${{ matrix.queryEngine }}/{title}' + steps: - uses: actions/checkout@v2 @@ -639,23 +641,6 @@ jobs: flags: sdk,${{ matrix.os }},${{ matrix.queryEngine }} name: sdk-${{ matrix.os }}-${{ matrix.queryEngine }} - - name: Test packages/client - if: ${{ contains(needs.detect_jobs_to_run.outputs.jobs, '-all-') || contains(needs.detect_jobs_to_run.outputs.jobs, '-client-') }} - run: pnpm run test-notypes - working-directory: packages/client - env: - CI: true - SKIP_GIT: true - GITHUB_CONTEXT: ${{ toJson(github) }} - NODE_OPTIONS: '--max-old-space-size=8096' - - - uses: codecov/codecov-action@v2 - if: ${{ contains(needs.detect_jobs_to_run.outputs.jobs, '-all-') || contains(needs.detect_jobs_to_run.outputs.jobs, '-client-') }} - with: - files: ./packages/client/src/__tests__/coverage/clover.xml - flags: client,${{ matrix.os }},${{ matrix.queryEngine }} - name: client-${{ matrix.os }}-${{ matrix.queryEngine }} - - name: Test packages/migrate if: ${{ contains(needs.detect_jobs_to_run.outputs.jobs, '-all-') || contains(needs.detect_jobs_to_run.outputs.jobs, '-migrate-') }} run: pnpm run test @@ -735,3 +720,103 @@ jobs: files: ./packages/generator-helper/src/__tests__/coverage/clover.xml flags: generator-helper,${{ matrix.os }},library,binary name: generator-helper-${{ matrix.os }} + + - name: Upload test results to BuildPulse for flaky test detection + # Only run this step for branches where where we have access to secrets. + # Only run this step on macOS for now. + # Run this step even when the tests fail. Skip if the workflow is cancelled. + if: startsWith(github.repository, 'prisma/') && runner.os == 'macOS' && !cancelled() + env: + BUILDPULSE_ACCESS_KEY_ID: ${{ secrets.BUILDPULSE_ACCESS_KEY_ID }} + BUILDPULSE_SECRET_ACCESS_KEY: ${{ secrets.BUILDPULSE_SECRET_ACCESS_KEY }} + run: | + curl -fsSL https://get.buildpulse.io/test-reporter-darwin-amd64 > ./buildpulse-test-reporter + chmod +x ./buildpulse-test-reporter + ./buildpulse-test-reporter submit packages --account-id 17219288 --repository-id 192925833 + + # + # Run Client tests on macOS and Windows. (Rasoning see above) + # + no-docker-client: + timeout-minutes: 40 + runs-on: ${{ matrix.os }} + needs: detect_jobs_to_run + + if: | + ${{ + contains(needs.detect_jobs_to_run.outputs.jobs, '-client-') + }} + + strategy: + fail-fast: false + matrix: + os: [macos-11, windows-latest] + node: [16] + queryEngine: ['library', 'binary'] + + env: + JEST_JUNIT_SUITE_NAME: '${{ matrix.os }}/node-${{ matrix.node }}/${{ matrix.queryEngine }}/{title}' + + steps: + - uses: actions/checkout@v2 + + - name: Prerequisites + shell: bash + run: | + echo "TEST_SKIP_MSSQL=true" >> $GITHUB_ENV + echo "TEST_SKIP_MONGODB=true" >> $GITHUB_ENV + echo "TEST_SKIP_COCKROACHDB=true" >> $GITHUB_ENV + echo "TEST_MONGO_URI_MIGRATE=mongodb://localhost:27017/tests-migrate" >> $GITHUB_ENV + echo "PRISMA_CLI_QUERY_ENGINE_TYPE=${{ matrix.queryEngine }}" >> $GITHUB_ENV + echo "PRISMA_CLIENT_ENGINE_TYPE=${{ matrix.queryEngine }}" >> $GITHUB_ENV + + - name: Setup PostgreSQL + run: bash .github/workflows/setup-postgres.sh + + - name: Setup MySQL + run: bash .github/workflows/setup-mysql.sh + + - uses: pnpm/action-setup@v2.1.0 + with: + version: latest + + - uses: actions/setup-node@v2 + with: + cache: 'pnpm' + node-version: ${{ matrix.node }} + + - run: bash .github/workflows/setup.sh + env: + CI: true + SKIP_GIT: true + GITHUB_CONTEXT: ${{ toJson(github) }} + + - name: Test packages/client + if: ${{ contains(needs.detect_jobs_to_run.outputs.jobs, '-all-') || contains(needs.detect_jobs_to_run.outputs.jobs, '-client-') }} + run: pnpm run test-notypes + working-directory: packages/client + env: + CI: true + SKIP_GIT: true + GITHUB_CONTEXT: ${{ toJson(github) }} + NODE_OPTIONS: '--max-old-space-size=8096' + + - uses: codecov/codecov-action@v2 + if: ${{ contains(needs.detect_jobs_to_run.outputs.jobs, '-all-') || contains(needs.detect_jobs_to_run.outputs.jobs, '-client-') }} + with: + files: ./packages/client/src/__tests__/coverage/clover.xml + flags: client,${{ matrix.os }},${{ matrix.queryEngine }} + name: client-${{ matrix.os }}-${{ matrix.queryEngine }} + + - name: Upload test results to BuildPulse for flaky test detection + # Only run this step for branches where where we have access to secrets. + # Only run this step on macOS for now. + # Run this step even when the tests fail. Skip if the workflow is cancelled. + if: startsWith(github.repository, 'prisma/') && runner.os == 'macOS' && !cancelled() + env: + BUILDPULSE_ACCESS_KEY_ID: ${{ secrets.BUILDPULSE_ACCESS_KEY_ID }} + BUILDPULSE_SECRET_ACCESS_KEY: ${{ secrets.BUILDPULSE_SECRET_ACCESS_KEY }} + run: | + curl -fsSL https://get.buildpulse.io/test-reporter-darwin-amd64 > ./buildpulse-test-reporter + chmod +x ./buildpulse-test-reporter + ./buildpulse-test-reporter submit packages/client --account-id 17219288 --repository-id 192925833 diff --git a/package.json b/package.json index a70169431fef..5c937df37612 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "graphviz-mit": "0.0.9", "husky": "7.0.4", "is-ci": "3.0.1", + "jest-junit": "13.0.0", "lint-staged": "12.3.4", "node-fetch": "2.6.7", "p-map": "4.0.0", diff --git a/packages/cli/jest.config.js b/packages/cli/jest.config.js index 108af9ef9670..a273045bc9e3 100644 --- a/packages/cli/jest.config.js +++ b/packages/cli/jest.config.js @@ -7,4 +7,16 @@ module.exports = { coverageDirectory: 'src/__tests__/coverage', collectCoverageFrom: ['src/**/*.ts', '!**/__tests__/**/*'], snapshotSerializers: ['@prisma/sdk/src/utils/jestSnapshotSerializer'], + reporters: [ + 'default', + [ + 'jest-junit', + { + addFileAttribute: 'true', + ancestorSeparator: ' › ', + classNameTemplate: '{classname}', + titleTemplate: '{title}', + }, + ], + ], } diff --git a/packages/cli/package.json b/packages/cli/package.json index db504340de3d..34ff6a0d200f 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -92,6 +92,7 @@ "global-dirs": "3.0.0", "is-installed-globally": "0.4.0", "jest": "27.5.1", + "jest-junit": "13.0.0", "line-replace": "2.0.1", "log-update": "4.0.0", "make-dir": "3.1.0", diff --git a/packages/client/jest.config.js b/packages/client/jest.config.js index 1a9c4c457cbd..a5f5a608c916 100644 --- a/packages/client/jest.config.js +++ b/packages/client/jest.config.js @@ -28,4 +28,16 @@ module.exports = { snapshotSerializers: ['@prisma/sdk/src/utils/jestSnapshotSerializer'], testTimeout: 90000, setupFiles: ['./helpers/jestSetup.js'], + reporters: [ + 'default', + [ + 'jest-junit', + { + addFileAttribute: 'true', + ancestorSeparator: ' › ', + classNameTemplate: '{classname}', + titleTemplate: '{title}', + }, + ], + ], } diff --git a/packages/client/package.json b/packages/client/package.json index 960a296766b7..50d2b9833547 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -89,6 +89,7 @@ "is-obj": "2.0.0", "is-regexp": "2.1.0", "jest": "27.5.1", + "jest-junit": "13.0.0", "js-levenshtein": "1.1.6", "klona": "2.0.5", "lz-string": "1.4.4", diff --git a/packages/debug/jest.config.js b/packages/debug/jest.config.js index 90066d6b0b74..1376a7a2e051 100644 --- a/packages/debug/jest.config.js +++ b/packages/debug/jest.config.js @@ -1,9 +1,21 @@ module.exports = { preset: 'ts-jest', testEnvironment: 'node', + testMatch: ['**/src/__tests__/**/*.test.ts'], collectCoverage: process.env.CI ? true : false, coverageReporters: ['clover'], coverageDirectory: 'src/__tests__/coverage', collectCoverageFrom: ['src/**/*.ts', '!**/__tests__/**/*'], - testMatch: ['**/src/__tests__/**/*.test.ts'], + reporters: [ + 'default', + [ + 'jest-junit', + { + addFileAttribute: 'true', + ancestorSeparator: ' › ', + classNameTemplate: '{classname}', + titleTemplate: '{title}', + }, + ], + ], } diff --git a/packages/debug/package.json b/packages/debug/package.json index 75a7a8b13c20..139d85594469 100644 --- a/packages/debug/package.json +++ b/packages/debug/package.json @@ -22,6 +22,7 @@ "@types/node": "12.20.46", "esbuild": "0.13.14", "jest": "27.5.1", + "jest-junit": "13.0.0", "ts-jest": "27.1.3", "typescript": "4.5.4" }, diff --git a/packages/engine-core/jest.config.js b/packages/engine-core/jest.config.js index 90066d6b0b74..1376a7a2e051 100644 --- a/packages/engine-core/jest.config.js +++ b/packages/engine-core/jest.config.js @@ -1,9 +1,21 @@ module.exports = { preset: 'ts-jest', testEnvironment: 'node', + testMatch: ['**/src/__tests__/**/*.test.ts'], collectCoverage: process.env.CI ? true : false, coverageReporters: ['clover'], coverageDirectory: 'src/__tests__/coverage', collectCoverageFrom: ['src/**/*.ts', '!**/__tests__/**/*'], - testMatch: ['**/src/__tests__/**/*.test.ts'], + reporters: [ + 'default', + [ + 'jest-junit', + { + addFileAttribute: 'true', + ancestorSeparator: ' › ', + classNameTemplate: '{classname}', + titleTemplate: '{title}', + }, + ], + ], } diff --git a/packages/engine-core/package.json b/packages/engine-core/package.json index fb0014414e7e..ae1d2e6967b5 100644 --- a/packages/engine-core/package.json +++ b/packages/engine-core/package.json @@ -23,6 +23,7 @@ "@types/node": "12.20.46", "esbuild": "0.13.14", "jest": "27.5.1", + "jest-junit": "13.0.0", "ts-jest": "27.1.3", "typescript": "4.5.4" }, diff --git a/packages/generator-helper/jest.config.js b/packages/generator-helper/jest.config.js index aeafe4757a4e..1376a7a2e051 100644 --- a/packages/generator-helper/jest.config.js +++ b/packages/generator-helper/jest.config.js @@ -6,4 +6,16 @@ module.exports = { coverageReporters: ['clover'], coverageDirectory: 'src/__tests__/coverage', collectCoverageFrom: ['src/**/*.ts', '!**/__tests__/**/*'], + reporters: [ + 'default', + [ + 'jest-junit', + { + addFileAttribute: 'true', + ancestorSeparator: ' › ', + classNameTemplate: '{classname}', + titleTemplate: '{title}', + }, + ], + ], } diff --git a/packages/generator-helper/package.json b/packages/generator-helper/package.json index 36f09ede4d1a..ee51a7fe7c8c 100644 --- a/packages/generator-helper/package.json +++ b/packages/generator-helper/package.json @@ -36,6 +36,7 @@ "@types/node": "12.20.46", "esbuild": "0.13.14", "jest": "27.5.1", + "jest-junit": "13.0.0", "ts-jest": "27.1.3", "ts-node": "10.4.0", "typescript": "4.5.4" diff --git a/packages/integration-tests/jest.config.js b/packages/integration-tests/jest.config.js index 108af9ef9670..a273045bc9e3 100644 --- a/packages/integration-tests/jest.config.js +++ b/packages/integration-tests/jest.config.js @@ -7,4 +7,16 @@ module.exports = { coverageDirectory: 'src/__tests__/coverage', collectCoverageFrom: ['src/**/*.ts', '!**/__tests__/**/*'], snapshotSerializers: ['@prisma/sdk/src/utils/jestSnapshotSerializer'], + reporters: [ + 'default', + [ + 'jest-junit', + { + addFileAttribute: 'true', + ancestorSeparator: ' › ', + classNameTemplate: '{classname}', + titleTemplate: '{title}', + }, + ], + ], } diff --git a/packages/integration-tests/package.json b/packages/integration-tests/package.json index 1e3f6169df17..3429f9d68805 100644 --- a/packages/integration-tests/package.json +++ b/packages/integration-tests/package.json @@ -25,6 +25,7 @@ "execa": "5.1.1", "fs-jetpack": "4.3.0", "jest": "27.5.1", + "jest-junit": "13.0.0", "mariadb": "2.5.5", "mssql": "8.0.1", "pg": "8.7.1", diff --git a/packages/migrate/jest.config.js b/packages/migrate/jest.config.js index c112ccd7025c..d9e24420bcdc 100644 --- a/packages/migrate/jest.config.js +++ b/packages/migrate/jest.config.js @@ -6,6 +6,7 @@ module.exports = { coverageReporters: ['clover'], coverageDirectory: 'src/__tests__/coverage', collectCoverageFrom: ['src/**/*.ts', '!**/__tests__/**/*'], + snapshotSerializers: ['@prisma/sdk/src/utils/jestSnapshotSerializer'], coveragePathIgnorePatterns: [ 'bin.ts', 'setupMysql.ts', @@ -14,7 +15,18 @@ module.exports = { 'test-handlePanic.ts', 'test-interactivelyCreateDatabase.ts', ], - snapshotSerializers: ['@prisma/sdk/src/utils/jestSnapshotSerializer'], // to get rid of "jest-haste-map: Haste module naming collision: package name" modulePathIgnorePatterns: ['/src/__tests__/fixtures/'], + reporters: [ + 'default', + [ + 'jest-junit', + { + addFileAttribute: 'true', + ancestorSeparator: ' › ', + classNameTemplate: '{classname}', + titleTemplate: '{title}', + }, + ], + ], } diff --git a/packages/migrate/package.json b/packages/migrate/package.json index 059e9fff7197..e93a30ce9e2b 100644 --- a/packages/migrate/package.json +++ b/packages/migrate/package.json @@ -31,6 +31,7 @@ "esbuild": "0.13.14", "fs-jetpack": "4.3.0", "jest": "27.5.1", + "jest-junit": "13.0.0", "make-dir": "3.1.0", "mock-stdin": "1.0.0", "tempy": "1.0.1", diff --git a/packages/react-prisma/jest.config.js b/packages/react-prisma/jest.config.js index 90066d6b0b74..1376a7a2e051 100644 --- a/packages/react-prisma/jest.config.js +++ b/packages/react-prisma/jest.config.js @@ -1,9 +1,21 @@ module.exports = { preset: 'ts-jest', testEnvironment: 'node', + testMatch: ['**/src/__tests__/**/*.test.ts'], collectCoverage: process.env.CI ? true : false, coverageReporters: ['clover'], coverageDirectory: 'src/__tests__/coverage', collectCoverageFrom: ['src/**/*.ts', '!**/__tests__/**/*'], - testMatch: ['**/src/__tests__/**/*.test.ts'], + reporters: [ + 'default', + [ + 'jest-junit', + { + addFileAttribute: 'true', + ancestorSeparator: ' › ', + classNameTemplate: '{classname}', + titleTemplate: '{title}', + }, + ], + ], } diff --git a/packages/react-prisma/package.json b/packages/react-prisma/package.json index 09f64ec66e7c..d27949375919 100644 --- a/packages/react-prisma/package.json +++ b/packages/react-prisma/package.json @@ -22,6 +22,7 @@ "@types/node": "16.11.25", "esbuild": "0.14.23", "jest": "27.5.1", + "jest-junit": "13.0.0", "react": "17.0.2", "ts-jest": "27.1.3", "typescript": "4.5.5" diff --git a/packages/sdk/jest.config.js b/packages/sdk/jest.config.js index cafac987242e..cd5d828ac1ed 100644 --- a/packages/sdk/jest.config.js +++ b/packages/sdk/jest.config.js @@ -7,4 +7,16 @@ module.exports = { coverageDirectory: 'src/__tests__/coverage', collectCoverageFrom: ['src/**/*.ts', '!**/__tests__/**/*'], // snapshotSerializers: ['./src/utils/jestSnapshotSerializer'], + reporters: [ + 'default', + [ + 'jest-junit', + { + addFileAttribute: 'true', + ancestorSeparator: ' › ', + classNameTemplate: '{classname}', + titleTemplate: '{title}', + }, + ], + ], } diff --git a/packages/sdk/package.json b/packages/sdk/package.json index e28533e6f8ba..1cff0c1cf53b 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -37,6 +37,7 @@ "@types/tar": "6.1.1", "esbuild": "0.13.14", "jest": "27.5.1", + "jest-junit": "13.0.0", "ts-jest": "27.1.3", "ts-node": "10.4.0", "typescript": "4.5.4" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba4d461e4a6a..a70d9ae1e9f3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,6 +35,7 @@ importers: graphviz-mit: 0.0.9 husky: 7.0.4 is-ci: 3.0.1 + jest-junit: 13.0.0 lint-staged: 12.3.4 node-fetch: 2.6.7 p-map: 4.0.0 @@ -87,6 +88,7 @@ importers: graphviz-mit: 0.0.9 husky: 7.0.4 is-ci: 3.0.1 + jest-junit: 13.0.0 lint-staged: 12.3.4 node-fetch: 2.6.7 p-map: 4.0.0 @@ -138,6 +140,7 @@ importers: global-dirs: 3.0.0 is-installed-globally: 0.4.0 jest: 27.5.1 + jest-junit: 13.0.0 line-replace: 2.0.1 log-update: 4.0.0 make-dir: 3.1.0 @@ -181,6 +184,7 @@ importers: global-dirs: 3.0.0 is-installed-globally: 0.4.0 jest: 27.5.1_ts-node@10.4.0 + jest-junit: 13.0.0 line-replace: 2.0.1 log-update: 4.0.0 make-dir: 3.1.0 @@ -228,6 +232,7 @@ importers: is-obj: 2.0.0 is-regexp: 2.1.0 jest: 27.5.1 + jest-junit: 13.0.0 js-levenshtein: 1.1.6 klona: 2.0.5 lz-string: 1.4.4 @@ -282,6 +287,7 @@ importers: is-obj: 2.0.0 is-regexp: 2.1.0 jest: 27.5.1_ts-node@10.4.0 + jest-junit: 13.0.0 js-levenshtein: 1.1.6 klona: 2.0.5 lz-string: 1.4.4 @@ -311,6 +317,7 @@ importers: '@types/node': 12.20.46 esbuild: 0.13.14 jest: 27.5.1 + jest-junit: 13.0.0 ms: 2.1.3 strip-ansi: 6.0.1 ts-jest: 27.1.3 @@ -324,6 +331,7 @@ importers: '@types/node': 12.20.46 esbuild: 0.13.14 jest: 27.5.1_ts-node@10.4.0 + jest-junit: 13.0.0 ts-jest: 27.1.3_077cd5ab94a1d592346e236574e4009d typescript: 4.5.4 @@ -341,6 +349,7 @@ importers: get-stream: 6.0.1 indent-string: 4.0.0 jest: 27.5.1 + jest-junit: 13.0.0 new-github-issue-url: 0.2.1 p-retry: 4.6.1 strip-ansi: 6.0.1 @@ -367,6 +376,7 @@ importers: '@types/node': 12.20.46 esbuild: 0.13.14 jest: 27.5.1_ts-node@10.4.0 + jest-junit: 13.0.0 ts-jest: 27.1.3_077cd5ab94a1d592346e236574e4009d typescript: 4.5.4 @@ -380,6 +390,7 @@ importers: cross-spawn: 7.0.3 esbuild: 0.13.14 jest: 27.5.1 + jest-junit: 13.0.0 ts-jest: 27.1.3 ts-node: 10.4.0 typescript: 4.5.4 @@ -393,6 +404,7 @@ importers: '@types/node': 12.20.46 esbuild: 0.13.14 jest: 27.5.1_ts-node@10.4.0 + jest-junit: 13.0.0 ts-jest: 27.1.3_077cd5ab94a1d592346e236574e4009d ts-node: 10.4.0_821f076c424ed09f3232bb5c565ae7fa typescript: 4.5.4 @@ -411,6 +423,7 @@ importers: execa: 5.1.1 fs-jetpack: 4.3.0 jest: 27.5.1 + jest-junit: 13.0.0 mariadb: 2.5.5 mssql: 8.0.1 pg: 8.7.1 @@ -436,6 +449,7 @@ importers: execa: 5.1.1 fs-jetpack: 4.3.0 jest: 27.5.1_ts-node@10.4.0 + jest-junit: 13.0.0 mariadb: 2.5.5 mssql: 8.0.1 pg: 8.7.1 @@ -470,6 +484,7 @@ importers: has-yarn: 2.1.0 indent-string: 4.0.0 jest: 27.5.1 + jest-junit: 13.0.0 log-update: 4.0.0 make-dir: 3.1.0 mariadb: 2.5.6 @@ -516,6 +531,7 @@ importers: esbuild: 0.13.14 fs-jetpack: 4.3.0 jest: 27.5.1_ts-node@10.4.0 + jest-junit: 13.0.0 make-dir: 3.1.0 mock-stdin: 1.0.0 tempy: 1.0.1 @@ -529,6 +545,7 @@ importers: '@types/node': 16.11.25 esbuild: 0.14.23 jest: 27.5.1 + jest-junit: 13.0.0 react: 17.0.2 ts-jest: 27.1.3 typescript: 4.5.5 @@ -538,6 +555,7 @@ importers: '@types/node': 16.11.25 esbuild: 0.14.23 jest: 27.5.1_ts-node@10.4.0 + jest-junit: 13.0.0 react: 17.0.2 ts-jest: 27.1.3_5261287214ed0bb2fe3ddc2f190d0a9e typescript: 4.5.5 @@ -572,6 +590,7 @@ importers: has-yarn: 2.1.0 is-ci: 3.0.1 jest: 27.5.1 + jest-junit: 13.0.0 make-dir: 3.1.0 node-fetch: 2.6.7 p-map: 4.0.0 @@ -639,6 +658,7 @@ importers: '@types/tar': 6.1.1 esbuild: 0.13.14 jest: 27.5.1_ts-node@10.4.0 + jest-junit: 13.0.0 ts-jest: 27.1.3_077cd5ab94a1d592346e236574e4009d ts-node: 10.4.0_821f076c424ed09f3232bb5c565ae7fa typescript: 4.5.4 @@ -5117,6 +5137,17 @@ packages: - supports-color dev: true + /jest-junit/13.0.0: + resolution: + { integrity: sha512-JSHR+Dhb32FGJaiKkqsB7AR3OqWKtldLd6ZH2+FJ8D4tsweb8Id8zEVReU4+OlrRO1ZluqJLQEETm+Q6/KilBg== } + engines: { node: '>=10.12.0' } + dependencies: + mkdirp: 1.0.4 + strip-ansi: 6.0.1 + uuid: 8.3.2 + xml: 1.0.1 + dev: true + /jest-leak-detector/27.5.1: resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -8192,6 +8223,10 @@ packages: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} dev: true + /xml/1.0.1: + resolution: { integrity: sha1-eLpyAgApxbyHuKgaPPzXS0ovweU= } + dev: true + /xml2js/0.4.23: resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} engines: {node: '>=4.0.0'}