Procházet zdrojové kódy

[server-ce] tests: add junit integration for Jenkins (#28732)

GitOrigin-RevId: b4c96ad71a02bf57c184a8031f475e3d1548c58a
Jakob Ackermann před 10 měsíci
rodič
revize
a51ba7a7d5

+ 1 - 0
server-ce/test/.gitignore

@@ -1,2 +1,3 @@
+cypress-reports/
 data/
 docker-mailtrap/

+ 10 - 1
server-ce/test/Jenkinsfile

@@ -53,6 +53,11 @@ pipeline {
           job_server_ce_build_done = false
           job_server_pro_build_done = false
         }
+        // Reset the results folder.
+        // Use a folder that is not managed by cypress, as cypress will clear its results folder at the start of each individual run.
+        // I.e. we would loose the test results from finished/running test suites when the last test suite starts.
+        sh 'rm -rf server-ce/test/cypress-reports/'
+        sh 'mkdir -p server-ce/test/cypress-reports/'
       }
     }
     stage('Parallel') {
@@ -304,10 +309,14 @@ pipeline {
     }
   }
   post {
+    // Collect junit test results for both success and failure case.
+    always {
+      junit checksName: 'Server Pro E2E test results', testResults: 'server-ce/test/cypress-reports/junit-*.xml'
+    }
     // Ensure tear down of test containers, remove CE docker images, then run general Jenkins VM cleanup.
     cleanup {
       dir('server-ce/test') {
-        sh 'make clean'
+        sh 'make clean -j10'
       }
       dir('server-ce') {
         sh 'make clean'

+ 1 - 1
server-ce/test/Makefile

@@ -44,7 +44,7 @@ SHARD_PROJECT_NAMES = \
 	test-pro-custom-4
 CLEAN_SHARDS=$(addprefix clean/,$(SHARD_PROJECT_NAMES))
 clean: $(CLEAN_SHARDS)
-	-docker compose run --no-deps --rm --entrypoint rm host-admin -rf docker-compose.override.yml docker-compose.*_*.yml data/
+	-docker compose run --no-deps --rm --entrypoint rm host-admin -rf docker-compose.override.yml docker-compose.*_*.yml cypress-reports/ data/
 	-docker compose down --remove-orphans --rmi local --timeout 0 --volumes
 
 $(CLEAN_SHARDS): clean/%:

+ 11 - 0
server-ce/test/cypress.config.js

@@ -33,6 +33,16 @@ if (process.env.CYPRESS_SHARD && !process.env.SPEC_PATTERN) {
 
 const specPattern = process.env.SPEC_PATTERN || './**/*.spec.ts'
 
+let reporterOptions = {}
+if (process.env.CI) {
+  reporterOptions = {
+    reporter: '/overleaf/server-ce/test/node_modules/cypress-multi-reporters',
+    reporterOptions: {
+      configFile: 'cypress/cypress-multi-reporters.json',
+    },
+  }
+}
+
 module.exports = defineConfig({
   defaultCommandTimeout: 10_000,
   fixturesFolder: 'cypress/fixtures',
@@ -55,4 +65,5 @@ module.exports = defineConfig({
   retries: {
     runMode: 3,
   },
+  ...reporterOptions,
 })

+ 10 - 0
server-ce/test/cypress/cypress-multi-reporters.json

@@ -0,0 +1,10 @@
+{
+  "reporterEnabled": "spec, mocha-junit-reporter",
+  "mochaJunitReporterReporterOptions": {
+    "mochaFile": "cypress-reports/junit-[hash]-[suiteFilename].xml",
+    "includePending": true,
+    "useFullSuiteTitle": true,
+    "jenkinsMode": true,
+    "rootSuiteTitle": "Server Pro E2E tests"
+  }
+}

+ 2 - 2
server-ce/test/docker-compose.yml

@@ -70,9 +70,9 @@ services:
     stop_grace_period: 0s
     entrypoint: npm
     command: run cypress:run
-    working_dir: /e2e
+    working_dir: /overleaf/server-ce/test
     volumes:
-      - ./:/e2e
+      - ./:/overleaf/server-ce/test
     user: "${DOCKER_USER:-1000:1000}"
     environment:
       CYPRESS_SHARD:

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 769 - 0
server-ce/test/package-lock.json


+ 2 - 0
server-ce/test/package.json

@@ -18,9 +18,11 @@
     "body-parser": "^1.20.3",
     "celebrate": "^15.0.3",
     "cypress": "13.13.2",
+    "cypress-multi-reporters": "^2.0.5",
     "express": "^4.21.2",
     "isomorphic-git": "^1.33.1",
     "js-yaml": "^4.1.0",
+    "mocha-junit-reporter": "^2.2.1",
     "pdf-parse": "^1.1.1",
     "typescript": "^5.0.4",
     "uuid": "^9.0.1"

+ 1 - 1
services/web/Jenkinsfile

@@ -486,7 +486,7 @@ pipeline {
     // Ensure tear down of test containers, then run general Jenkins VM cleanup.
     cleanup {
       dir('services/web') {
-        sh 'make clean'
+        sh 'make clean -j10'
       }
       sh 'make clean_jenkins'
     }

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů