From 45bb8e1f2d8f6b4e7f9912f68511585451a08723 Mon Sep 17 00:00:00 2001 From: Harald Schilly Date: Fri, 4 Jul 2025 11:20:20 +0200 Subject: [PATCH] github test: create test results in jest and upload them for dorny/test-reporter --- .github/workflows/make-and-test.yml | 60 +++++++++++++++++++++++++---- .gitignore | 3 ++ src/package.json | 1 + src/packages/backend/package.json | 16 ++++++-- src/packages/database/package.json | 4 +- src/packages/hub/package.json | 4 +- src/packages/pnpm-lock.yaml | 50 ++++++++++++++++++------ src/packages/util/package.json | 2 + 8 files changed, 117 insertions(+), 23 deletions(-) diff --git a/.github/workflows/make-and-test.yml b/.github/workflows/make-and-test.yml index 96da238ff2..7f327e08d0 100644 --- a/.github/workflows/make-and-test.yml +++ b/.github/workflows/make-and-test.yml @@ -1,4 +1,4 @@ -name: Make all packages and run their tests +name: Test # newer commits in the same PR abort running ones for the same workflow concurrency: @@ -43,7 +43,7 @@ jobs: - name: Check doc links run: cd src/scripts && python3 check_doc_urls.py || sleep 5 || python3 check_doc_urls.py - build: + test: runs-on: ubuntu-latest services: @@ -94,7 +94,7 @@ jobs: - name: Download and install Valkey run: | VALKEY_VERSION=8.1.2 - curl -LO https://download.valkey.io/releases/valkey-${VALKEY_VERSION}-jammy-x86_64.tar.gz + curl -LOq https://download.valkey.io/releases/valkey-${VALKEY_VERSION}-jammy-x86_64.tar.gz tar -xzf valkey-${VALKEY_VERSION}-jammy-x86_64.tar.gz sudo cp valkey-${VALKEY_VERSION}-jammy-x86_64/bin/valkey-server /usr/local/bin/ @@ -106,7 +106,53 @@ jobs: pip install ipykernel python -m ipykernel install --prefix=./jupyter-local --name python3-local --display-name "Python 3 (Local)" - - run: cd src && npm install -g pnpm - - run: cd src && pnpm run make - - run: source venv/bin/activate && cd src && pnpm run test || pnpm run test || pnpm run test - - run: cd src && pnpm run depcheck + - name: install pnpm + #run: cd src && npm install -g pnpm + uses: pnpm/action-setup@v4 + with: + version: 10 + run_install: false + + - name: build + run: cd src && pnpm run make + + - name: test + run: source venv/bin/activate && cd src && pnpm run test:report + + - name: upload test results + uses: actions/upload-artifact@v4 # upload test results + if: ${{ !cancelled() }} # run this step even if previous step failed + with: + name: "test-results-node-${{ matrix.node-version }}-pg-${{ matrix.pg-version }}" + path: 'src/packages/*/junit.xml' + + - name: dependency check + run: cd src && pnpm run depcheck + + report: + runs-on: ubuntu-latest + + needs: [test] + + if: ${{ !cancelled() }} + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Download all test artifacts + uses: actions/download-artifact@v4 + with: + pattern: "test-results-*" + merge-multiple: true + path: test-results/ + + - name: Test Report + uses: dorny/test-reporter@v2 + with: + name: CoCalc Jest Tests + path: 'test-results/**/junit.xml' + reporter: jest-junit + use-actions-summary: 'true' + fail-on-error: false + diff --git a/.gitignore b/.gitignore index 7f06ad5a5c..331ad90a59 100644 --- a/.gitignore +++ b/.gitignore @@ -159,3 +159,6 @@ src/packages/frontend/i18n/trans/*.compiled.json **/*.db **/project-env.sh **/*.bash_history + +# test reports by jest-junit +junit.xml diff --git a/src/package.json b/src/package.json index 00cb8c6363..07b2e27ef8 100644 --- a/src/package.json +++ b/src/package.json @@ -18,6 +18,7 @@ "version-check": "pip3 install --break-system-packages typing_extensions mypy || pip3 install --break-system-packages typing_extensions mypy && ./workspaces.py version-check && mypy scripts/check_npm_packages.py", "test-parallel": "unset DEBUG && pnpm run version-check && cd packages && pnpm run -r --parallel test", "test": "unset DEBUG && pnpm run version-check && cd packages && pnpm run -r test", + "test:report": "unset DEBUG && pnpm run version-check && cd packages && pnpm run -r test:report", "depcheck": "cd packages && pnpm run -r --parallel depcheck", "prettier-all": "cd packages/", "local-ci": "./scripts/ci.sh", diff --git a/src/packages/backend/package.json b/src/packages/backend/package.json index a452132587..17750a3f3d 100644 --- a/src/packages/backend/package.json +++ b/src/packages/backend/package.json @@ -10,13 +10,17 @@ "./auth/*": "./dist/auth/*.js", "./auth/tokens/*": "./dist/auth/tokens/*.js" }, - "keywords": ["utilities", "cocalc"], + "keywords": [ + "utilities", + "cocalc" + ], "scripts": { "preinstall": "npx only-allow pnpm", "clean": "rm -rf dist node_modules", "build": "pnpm exec tsc --build", "tsc": "pnpm exec tsc --watch --pretty --preserveWatchOutput", "test": "pnpm exec jest --forceExit --maxWorkers=50%", + "test:report": "pnpm exec jest --forceExit --maxWorkers=50% --reporters=default --reporters=jest-junit", "depcheck": "pnpx depcheck --ignores events", "prepublishOnly": "pnpm test", "conat-watch": "node ./bin/conat-watch.cjs", @@ -25,7 +29,12 @@ "conat-inventory": "node ./bin/conat-inventory.cjs", "conat-persist": "DEBUG=cocalc:* node ./bin/conat-persist.cjs" }, - "files": ["dist/**", "bin/**", "README.md", "package.json"], + "files": [ + "dist/**", + "bin/**", + "README.md", + "package.json" + ], "author": "SageMath, Inc.", "license": "SEE LICENSE.md", "dependencies": { @@ -54,6 +63,7 @@ }, "homepage": "https://github.com/sagemathinc/cocalc/tree/master/src/packages/backend", "devDependencies": { - "@types/node": "^18.16.14" + "@types/node": "^18.16.14", + "jest-junit": "^16.0.0" } } diff --git a/src/packages/database/package.json b/src/packages/database/package.json index 15b29d94fe..210487d5ba 100644 --- a/src/packages/database/package.json +++ b/src/packages/database/package.json @@ -38,7 +38,8 @@ "@types/lodash": "^4.14.202", "@types/node": "^18.16.14", "@types/pg": "^8.6.1", - "coffeescript": "^2.5.1" + "coffeescript": "^2.5.1", + "jest-junit": "^16.0.0" }, "scripts": { "preinstall": "npx only-allow pnpm", @@ -46,6 +47,7 @@ "clean": "rm -rf dist", "tsc": "../node_modules/.bin/tsc --watch --pretty --preserveWatchOutput", "test": "pnpm exec jest --forceExit --runInBand", + "test:report": "pnpm exec jest --forceExit --runInBand --reporters=default --reporters=jest-junit", "depcheck": "pnpx depcheck | grep -Ev '\\.coffee|coffee$'", "prepublishOnly": "pnpm test" }, diff --git a/src/packages/hub/package.json b/src/packages/hub/package.json index b7d36d6aae..92ebd88d86 100644 --- a/src/packages/hub/package.json +++ b/src/packages/hub/package.json @@ -50,7 +50,8 @@ "devDependencies": { "@types/express": "^4.17.21", "@types/node": "^18.16.14", - "coffeescript": "^2.5.1" + "coffeescript": "^2.5.1", + "jest-junit": "^16.0.0" }, "scripts": { "preinstall": "npx only-allow pnpm", @@ -66,6 +67,7 @@ "hub-docker-prod-nossl": "export DEBUG=${DEBUG:='cocalc:*,-cocalc:silly:*'} && COCALC_DOCKER=true NODE_ENV=production PROJECTS=/projects/[project_id] PORT=80 NODE_OPTIONS='--max_old_space_size=8000 --enable-source-maps' cocalc-hub-server --mode=multi-user --all --hostname=0.0.0.0", "tsc": "tsc --watch --pretty --preserveWatchOutput", "test": "jest dist/", + "test:report": "jest dist/ --reporters=default --reporters=jest-junit", "depcheck": "pnpx depcheck | grep -Ev '\\.coffee|coffee$'", "prepublishOnly": "test" }, diff --git a/src/packages/pnpm-lock.yaml b/src/packages/pnpm-lock.yaml index 6a64c12aae..a4b5157088 100644 --- a/src/packages/pnpm-lock.yaml +++ b/src/packages/pnpm-lock.yaml @@ -133,6 +133,9 @@ importers: '@types/node': specifier: ^18.16.14 version: 18.19.112 + jest-junit: + specifier: ^16.0.0 + version: 16.0.0 cdn: devDependencies: @@ -292,6 +295,9 @@ importers: coffeescript: specifier: ^2.5.1 version: 2.7.0 + jest-junit: + specifier: ^16.0.0 + version: 16.0.0 file-server: dependencies: @@ -844,6 +850,9 @@ importers: coffeescript: specifier: ^2.5.1 version: 2.7.0 + jest-junit: + specifier: ^16.0.0 + version: 16.0.0 jupyter: dependencies: @@ -988,13 +997,13 @@ importers: version: 2.1.2 next: specifier: 15.3.4 - version: 15.3.4(@playwright/test@1.51.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2) + version: 15.3.4(@babel/core@7.26.9)(@playwright/test@1.51.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2) next-rest-framework: specifier: 6.0.0-beta.4 version: 6.0.0-beta.4(zod@3.25.67) next-translate: specifier: ^2.6.2 - version: 2.6.2(next@15.3.4(@playwright/test@1.51.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2))(react@19.1.0) + version: 2.6.2(next@15.3.4(@babel/core@7.26.9)(@playwright/test@1.51.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2))(react@19.1.0) password-hash: specifier: ^1.2.2 version: 1.2.2 @@ -1873,6 +1882,9 @@ importers: expect: specifier: ^26.6.2 version: 26.6.2 + jest-junit: + specifier: ^16.0.0 + version: 16.0.0 seedrandom: specifier: ^3.0.5 version: 3.0.5 @@ -7857,6 +7869,10 @@ packages: resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-junit@16.0.0: + resolution: {integrity: sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==} + engines: {node: '>=10.12.0'} + jest-leak-detector@29.7.0: resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -11645,6 +11661,9 @@ packages: resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} engines: {node: '>=4.0.0'} + xml@1.0.1: + resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} + xmlbuilder2@3.1.1: resolution: {integrity: sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==} engines: {node: '>=12.0'} @@ -15260,7 +15279,7 @@ snapshots: axios@1.10.0: dependencies: - follow-redirects: 1.15.9 + follow-redirects: 1.15.9(debug@4.4.1) form-data: 4.0.2 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -17515,8 +17534,6 @@ snapshots: dependencies: dtype: 2.0.0 - follow-redirects@1.15.9: {} - follow-redirects@1.15.9(debug@4.4.1): optionalDependencies: debug: 4.4.1 @@ -18967,6 +18984,13 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + jest-junit@16.0.0: + dependencies: + mkdirp: 1.0.4 + strip-ansi: 6.0.1 + uuid: 8.3.2 + xml: 1.0.1 + jest-leak-detector@29.7.0: dependencies: jest-get-type: 29.6.3 @@ -19152,7 +19176,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 24.0.4 + '@types/node': 18.19.112 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -20033,12 +20057,12 @@ snapshots: next-tick@1.1.0: {} - next-translate@2.6.2(next@15.3.4(@playwright/test@1.51.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2))(react@19.1.0): + next-translate@2.6.2(next@15.3.4(@babel/core@7.26.9)(@playwright/test@1.51.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2))(react@19.1.0): dependencies: - next: 15.3.4(@playwright/test@1.51.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2) + next: 15.3.4(@babel/core@7.26.9)(@playwright/test@1.51.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2) react: 19.1.0 - next@15.3.4(@playwright/test@1.51.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2): + next@15.3.4(@babel/core@7.26.9)(@playwright/test@1.51.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.89.2): dependencies: '@next/env': 15.3.4 '@swc/counter': 0.1.3 @@ -20048,7 +20072,7 @@ snapshots: postcss: 8.4.31 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - styled-jsx: 5.1.6(react@19.1.0) + styled-jsx: 5.1.6(@babel/core@7.26.9)(react@19.1.0) optionalDependencies: '@next/swc-darwin-arm64': 15.3.4 '@next/swc-darwin-x64': 15.3.4 @@ -22493,10 +22517,12 @@ snapshots: dependencies: inline-style-parser: 0.2.4 - styled-jsx@5.1.6(react@19.1.0): + styled-jsx@5.1.6(@babel/core@7.26.9)(react@19.1.0): dependencies: client-only: 0.0.1 react: 19.1.0 + optionalDependencies: + '@babel/core': 7.26.9 stylis@4.3.6: {} @@ -23505,6 +23531,8 @@ snapshots: sax: 1.4.1 xmlbuilder: 11.0.1 + xml@1.0.1: {} + xmlbuilder2@3.1.1: dependencies: '@oozcitak/dom': 1.15.10 diff --git a/src/packages/util/package.json b/src/packages/util/package.json index e9656ac1e3..4154f165da 100644 --- a/src/packages/util/package.json +++ b/src/packages/util/package.json @@ -20,6 +20,7 @@ "build": "pnpm exec tsc --build", "tsc": "pnpm exec tsc --watch --pretty --preserveWatchOutput", "test": "pnpm exec jest", + "test:report": "pnpm exec jest --reporters=default --reporters=jest-junit", "depcheck": "pnpx depcheck --ignores events", "prepublishOnly": "pnpm test" }, @@ -76,6 +77,7 @@ "@types/node": "^18.16.14", "@types/seedrandom": "^3.0.8", "@types/uuid": "^8.3.1", + "jest-junit": "^16.0.0", "expect": "^26.6.2", "seedrandom": "^3.0.5", "tsd": "^0.22.0"