From 786c86262e30eb2d84870e147476c52497eeff44 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 10 Dec 2025 10:22:00 -0300 Subject: [PATCH 1/6] test: move env vars to script --- ee/packages/federation-matrix/package.json | 2 +- .../tests/scripts/run-integration-tests.sh | 26 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/ee/packages/federation-matrix/package.json b/ee/packages/federation-matrix/package.json index 8b7b9c68adc2a..6b9a5ca9eac4b 100644 --- a/ee/packages/federation-matrix/package.json +++ b/ee/packages/federation-matrix/package.json @@ -14,7 +14,7 @@ "lint:fix": "eslint src --fix", "test": "jest", "test:integration": "./tests/scripts/run-integration-tests.sh", - "testend-to-end": "IS_EE=true NODE_EXTRA_CA_CERTS=$(pwd)/docker-compose/traefik/certs/ca/rootCA.crt jest --config jest.config.federation.ts --forceExit --testTimeout=30000", + "test:federation": "jest --config jest.config.federation.ts", "testunit": "jest", "typecheck": "tsc --noEmit --skipLibCheck" }, diff --git a/ee/packages/federation-matrix/tests/scripts/run-integration-tests.sh b/ee/packages/federation-matrix/tests/scripts/run-integration-tests.sh index 9f0351fc858b9..1963f4f87b771 100755 --- a/ee/packages/federation-matrix/tests/scripts/run-integration-tests.sh +++ b/ee/packages/federation-matrix/tests/scripts/run-integration-tests.sh @@ -110,7 +110,7 @@ cleanup() { echo "==========================================" echo "CONTAINER LOGS (Test Failed)" echo "==========================================" - + echo "" echo "ROCKET.CHAT (rc1) LOGS:" echo "----------------------------------------" @@ -119,7 +119,7 @@ cleanup() { else echo " Rocket.Chat container not found or no logs" fi - + echo "" echo "SYNAPSE (hs1) LOGS:" echo "----------------------------------------" @@ -128,11 +128,11 @@ cleanup() { else echo " Synapse container not found or no logs" fi - + echo "" echo "==========================================" fi - + if [ "$KEEP_RUNNING" = true ]; then log_info "Keeping Docker containers running (--keep-running flag set)" log_info "Services are available at:" @@ -158,12 +158,12 @@ cleanup() { fi log_success "Cleanup completed" fi - + # Remove temporary build directory if it exists if [ -n "${BUILD_DIR:-}" ] && [ -d "$BUILD_DIR" ]; then rm -rf "$BUILD_DIR" || true fi - + # Exit with the test result code if [ -n "${TEST_EXIT_CODE:-}" ]; then exit $TEST_EXIT_CODE @@ -186,21 +186,21 @@ fi if [ "$USE_PREBUILT_IMAGE" = false ]; then log_info "🚀 Building Rocket.Chat locally..." log_info "=====================================" - + # Clean up any existing build log_info "Cleaning up previous build..." rm -rf "$BUILD_DIR" - + # Build the project log_info "Building packages from project root..." cd "$ROCKETCHAT_ROOT" yarn build - + # Build the Meteor bundle (must be run from the meteor directory) log_info "Building Meteor bundle..." cd "$ROCKETCHAT_ROOT/apps/meteor" METEOR_DISABLE_OPTIMISTIC_CACHING=1 meteor build --server-only --directory "$BUILD_DIR" - + log_success "Build completed!" else log_info "🚀 Using pre-built image: $PREBUILT_IMAGE" @@ -289,7 +289,7 @@ wait_for_service() { # Capture curl output and error for debugging curl_output=$(curl -fsS --cacert "$ca_cert" --resolve "${host}:${port}:127.0.0.1" "$url" 2>&1) curl_exit_code=$? - + if [ $curl_exit_code -eq 0 ]; then log_success "$name is ready!" return 0 @@ -328,8 +328,8 @@ fi if [ "$NO_TEST" = false ]; then log_info "Running end-to-end tests..." cd "$PACKAGE_ROOT" - - yarn testend-to-end + + IS_EE=true NODE_EXTRA_CA_CERTS=$(pwd)/docker-compose/traefik/certs/ca/rootCA.crt yarn test:federation TEST_EXIT_CODE=$? else log_info "No-test mode: skipping test execution" From 5116dd8d35bda93dc9ad393857dd46f7160aa366 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 10 Dec 2025 10:47:52 -0300 Subject: [PATCH 2/6] test: use less env vars --- .../federation-matrix/tests/helper/config.ts | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/ee/packages/federation-matrix/tests/helper/config.ts b/ee/packages/federation-matrix/tests/helper/config.ts index 7ed86593c873d..0a06200e1cab4 100644 --- a/ee/packages/federation-matrix/tests/helper/config.ts +++ b/ee/packages/federation-matrix/tests/helper/config.ts @@ -20,8 +20,6 @@ export interface IFederationConfig { hs1: { url: string; adminMatrixUserId: string; - password: string; - homeserver: string; adminUser: string; adminPassword: string; additionalUser1: { @@ -65,45 +63,47 @@ function validateEnvVar(name: string, value: string | undefined, defaultValue?: * @throws Error if any required configuration is missing or invalid */ function getFederationConfig(): IFederationConfig { + const rcDomain = validateEnvVar('FEDERATION_RC1_DOMAIN', process.env.FEDERATION_RC1_DOMAIN, 'rc1'); + const rcAdminUser = validateEnvVar('FEDERATION_RC1_ADMIN_USER', process.env.FEDERATION_RC1_ADMIN_USER, 'admin'); + const rcAdditionalUser1 = validateEnvVar('FEDERATION_RC1_ADDITIONAL_USER1', process.env.FEDERATION_RC1_ADDITIONAL_USER1, 'user2'); + + const hs1Domain = validateEnvVar('FEDERATION_SYNAPSE_DOMAIN', process.env.FEDERATION_SYNAPSE_DOMAIN, 'hs1'); + const hs1AdminUser = validateEnvVar('FEDERATION_SYNAPSE_ADMIN_USER', process.env.FEDERATION_SYNAPSE_ADMIN_USER, 'admin'); + const hs1AdditionalUser1 = validateEnvVar( + 'FEDERATION_SYNAPSE_ADDITIONAL_USER1', + process.env.FEDERATION_SYNAPSE_ADDITIONAL_USER1, + 'alice', + ); + return { rc1: { - apiUrl: validateEnvVar('FEDERATION_RC1_API_URL', process.env.FEDERATION_RC1_API_URL, 'https://rc1'), - adminUser: validateEnvVar('FEDERATION_RC1_ADMIN_USER', process.env.FEDERATION_RC1_ADMIN_USER, 'admin'), + apiUrl: `https://${rcDomain}`, + adminUser: rcAdminUser, adminPassword: validateEnvVar('FEDERATION_RC1_ADMIN_PASSWORD', process.env.FEDERATION_RC1_ADMIN_PASSWORD, 'admin'), - adminMatrixUserId: validateEnvVar('FEDERATION_RC1_USER_ID', process.env.FEDERATION_RC1_USER_ID, '@admin:rc1'), + adminMatrixUserId: `@${rcAdminUser}:${rcDomain}`, additionalUser1: { - username: validateEnvVar('FEDERATION_RC1_ADDITIONAL_USER1', process.env.FEDERATION_RC1_ADDITIONAL_USER1, 'user2'), + username: rcAdditionalUser1, password: validateEnvVar( 'FEDERATION_RC1_ADDITIONAL_USER1_PASSWORD', process.env.FEDERATION_RC1_ADDITIONAL_USER1_PASSWORD, 'user2pass', ), - matrixUserId: validateEnvVar( - 'FEDERATION_RC1_ADDITIONAL_USER1_MATRIX_ID', - process.env.FEDERATION_RC1_ADDITIONAL_USER1_MATRIX_ID, - '@user2:rc1', - ), + matrixUserId: `@${rcAdditionalUser1}:${rcDomain}`, }, }, hs1: { - url: validateEnvVar('FEDERATION_SYNAPSE_URL', process.env.FEDERATION_SYNAPSE_URL, 'https://hs1'), - adminMatrixUserId: validateEnvVar('FEDERATION_SYNAPSE_USER', process.env.FEDERATION_SYNAPSE_USER, '@admin:hs1'), - password: validateEnvVar('FEDERATION_SYNAPSE_PASSWORD', process.env.FEDERATION_SYNAPSE_PASSWORD, 'admin'), - homeserver: validateEnvVar('FEDERATION_SYNAPSE_HOMESERVER', process.env.FEDERATION_SYNAPSE_HOMESERVER, 'hs1'), - adminUser: validateEnvVar('FEDERATION_SYNAPSE_ADMIN_USER', process.env.FEDERATION_SYNAPSE_ADMIN_USER, 'admin'), + url: `https://${hs1Domain}`, + adminUser: hs1AdminUser, + adminMatrixUserId: `@${hs1AdminUser}:${hs1Domain}`, adminPassword: validateEnvVar('FEDERATION_SYNAPSE_ADMIN_PASSWORD', process.env.FEDERATION_SYNAPSE_ADMIN_PASSWORD, 'admin'), additionalUser1: { - username: validateEnvVar('FEDERATION_SYNAPSE_ADDITIONAL_USER1', process.env.FEDERATION_SYNAPSE_ADDITIONAL_USER1, 'alice'), + username: hs1AdditionalUser1, password: validateEnvVar( 'FEDERATION_SYNAPSE_ADDITIONAL_USER1_PASSWORD', process.env.FEDERATION_SYNAPSE_ADDITIONAL_USER1_PASSWORD, 'alice', ), - matrixUserId: validateEnvVar( - 'FEDERATION_SYNAPSE_ADDITIONAL_USER1_MATRIX_ID', - process.env.FEDERATION_SYNAPSE_ADDITIONAL_USER1_MATRIX_ID, - '@alice:hs1', - ), + matrixUserId: `@${hs1AdditionalUser1}:${hs1Domain}`, }, }, }; From e2ec1f08e76ed015ff4a297dd45d674b770e2d1a Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Wed, 10 Dec 2025 17:29:23 -0300 Subject: [PATCH 3/6] unify config schema --- .../tests/end-to-end/messaging.spec.ts | 2 +- .../tests/end-to-end/room.spec.ts | 8 +- .../federation-matrix/tests/helper/config.ts | 82 ++++++++----------- 3 files changed, 39 insertions(+), 53 deletions(-) diff --git a/ee/packages/federation-matrix/tests/end-to-end/messaging.spec.ts b/ee/packages/federation-matrix/tests/end-to-end/messaging.spec.ts index fef26ad1678b5..bf4ba49cf6bea 100644 --- a/ee/packages/federation-matrix/tests/end-to-end/messaging.spec.ts +++ b/ee/packages/federation-matrix/tests/end-to-end/messaging.spec.ts @@ -22,7 +22,7 @@ import { SynapseClient } from '../helper/synapse-client'; beforeAll(async () => { // Create admin request config for RC1 rc1AdminRequestConfig = await getRequestConfig( - federationConfig.rc1.apiUrl, + federationConfig.rc1.url, federationConfig.rc1.adminUser, federationConfig.rc1.adminPassword, ); diff --git a/ee/packages/federation-matrix/tests/end-to-end/room.spec.ts b/ee/packages/federation-matrix/tests/end-to-end/room.spec.ts index 53e647beb7d82..ecbd82b2bae4f 100644 --- a/ee/packages/federation-matrix/tests/end-to-end/room.spec.ts +++ b/ee/packages/federation-matrix/tests/end-to-end/room.spec.ts @@ -30,7 +30,7 @@ import { SynapseClient } from '../helper/synapse-client'; beforeAll(async () => { // Create admin request config for RC1 rc1AdminRequestConfig = await getRequestConfig( - federationConfig.rc1.apiUrl, + federationConfig.rc1.url, federationConfig.rc1.adminUser, federationConfig.rc1.adminPassword, ); @@ -48,7 +48,7 @@ import { SynapseClient } from '../helper/synapse-client'; // Create user1 request config for RC1 rc1User1RequestConfig = await getRequestConfig( - federationConfig.rc1.apiUrl, + federationConfig.rc1.url, federationConfig.rc1.additionalUser1.username, federationConfig.rc1.additionalUser1.password, ); @@ -84,7 +84,7 @@ import { SynapseClient } from '../helper/synapse-client'; beforeAll(async () => { const user = { username: `user-${Date.now()}`, password: '123' }; createdUser = await createUser(user, rc1AdminRequestConfig); - userRequestConfig = await getRequestConfig(federationConfig.rc1.apiUrl, user.username, user.password); + userRequestConfig = await getRequestConfig(federationConfig.rc1.url, user.username, user.password); }); afterAll(async () => { @@ -256,7 +256,7 @@ import { SynapseClient } from '../helper/synapse-client'; describe('Go to the composer and use the /invite slash command to add a federated user', () => { it('It should not allow and show an error message', async () => { // Set up DDP listener to catch ephemeral messages - const ddpListener = createDDPListener(federationConfig.rc1.apiUrl, rc1AdminRequestConfig); + const ddpListener = createDDPListener(federationConfig.rc1.url, rc1AdminRequestConfig); // Connect to DDP and subscribe to ephemeral messages await ddpListener.connect(); diff --git a/ee/packages/federation-matrix/tests/helper/config.ts b/ee/packages/federation-matrix/tests/helper/config.ts index 0a06200e1cab4..b61b63bd5661b 100644 --- a/ee/packages/federation-matrix/tests/helper/config.ts +++ b/ee/packages/federation-matrix/tests/helper/config.ts @@ -5,29 +5,22 @@ * Rocket.Chat instances, Matrix homeservers, and user credentials needed * for end-to-end federation testing. */ -export interface IFederationConfig { - rc1: { - apiUrl: string; - adminUser: string; - adminPassword: string; - adminMatrixUserId: string; - additionalUser1: { - username: string; - password: string; - matrixUserId: string; - }; - }; - hs1: { - url: string; - adminMatrixUserId: string; - adminUser: string; - adminPassword: string; - additionalUser1: { - username: string; - password: string; - matrixUserId: string; - }; + +type FederationServerConfig = { + url: string; + domain: string; + adminUser: string; + adminPassword: string; + adminMatrixUserId: string; + additionalUser1: { + username: string; + password: string; + matrixUserId: string; }; +}; +export interface IFederationConfig { + rc1: FederationServerConfig; + hs1: FederationServerConfig; } /** @@ -38,13 +31,12 @@ export interface IFederationConfig { * Throws an error if a required variable is missing or empty. * * @param name - The name of the environment variable for error messages - * @param value - The environment variable value (may be undefined) * @param defaultValue - Optional default value to use if variable is not set * @returns The validated value (either the env var or default) * @throws Error if the variable is required but missing or empty */ -function validateEnvVar(name: string, value: string | undefined, defaultValue?: string): string { - const finalValue = value || defaultValue; +function validateEnvVar(name: string, defaultValue?: string): string { + const finalValue = process.env[name] || defaultValue; if (!finalValue || finalValue.trim() === '') { throw new Error(`Required environment variable ${name} is not set or is empty`); } @@ -63,46 +55,40 @@ function validateEnvVar(name: string, value: string | undefined, defaultValue?: * @throws Error if any required configuration is missing or invalid */ function getFederationConfig(): IFederationConfig { - const rcDomain = validateEnvVar('FEDERATION_RC1_DOMAIN', process.env.FEDERATION_RC1_DOMAIN, 'rc1'); - const rcAdminUser = validateEnvVar('FEDERATION_RC1_ADMIN_USER', process.env.FEDERATION_RC1_ADMIN_USER, 'admin'); - const rcAdditionalUser1 = validateEnvVar('FEDERATION_RC1_ADDITIONAL_USER1', process.env.FEDERATION_RC1_ADDITIONAL_USER1, 'user2'); + const rcDomain = validateEnvVar('FEDERATION_RC1_DOMAIN', 'rc1'); + const rcAdminUser = validateEnvVar('FEDERATION_RC1_ADMIN_USER', 'admin'); + const rcAdminPassword = validateEnvVar('FEDERATION_RC1_ADMIN_PASSWORD', 'admin'); + const rcAdditionalUser1 = validateEnvVar('FEDERATION_RC1_ADDITIONAL_USER1', 'user2'); + const rcAdditionalUser1Password = validateEnvVar('FEDERATION_RC1_ADDITIONAL_USER1_PASSWORD', 'user2pass'); - const hs1Domain = validateEnvVar('FEDERATION_SYNAPSE_DOMAIN', process.env.FEDERATION_SYNAPSE_DOMAIN, 'hs1'); - const hs1AdminUser = validateEnvVar('FEDERATION_SYNAPSE_ADMIN_USER', process.env.FEDERATION_SYNAPSE_ADMIN_USER, 'admin'); - const hs1AdditionalUser1 = validateEnvVar( - 'FEDERATION_SYNAPSE_ADDITIONAL_USER1', - process.env.FEDERATION_SYNAPSE_ADDITIONAL_USER1, - 'alice', - ); + const hs1Domain = validateEnvVar('FEDERATION_SYNAPSE_DOMAIN', 'hs1'); + const hs1AdminUser = validateEnvVar('FEDERATION_SYNAPSE_ADMIN_USER', 'admin'); + const hs1AdminPassword = validateEnvVar('FEDERATION_SYNAPSE_ADMIN_PASSWORD', 'admin'); + const hs1AdditionalUser1 = validateEnvVar('FEDERATION_SYNAPSE_ADDITIONAL_USER1', 'alice'); + const hs1AdditionalUser1Password = validateEnvVar('FEDERATION_SYNAPSE_ADDITIONAL_USER1_PASSWORD', 'alice'); return { rc1: { - apiUrl: `https://${rcDomain}`, + url: `https://${rcDomain}`, + domain: rcDomain, adminUser: rcAdminUser, - adminPassword: validateEnvVar('FEDERATION_RC1_ADMIN_PASSWORD', process.env.FEDERATION_RC1_ADMIN_PASSWORD, 'admin'), + adminPassword: rcAdminPassword, adminMatrixUserId: `@${rcAdminUser}:${rcDomain}`, additionalUser1: { username: rcAdditionalUser1, - password: validateEnvVar( - 'FEDERATION_RC1_ADDITIONAL_USER1_PASSWORD', - process.env.FEDERATION_RC1_ADDITIONAL_USER1_PASSWORD, - 'user2pass', - ), + password: rcAdditionalUser1Password, matrixUserId: `@${rcAdditionalUser1}:${rcDomain}`, }, }, hs1: { url: `https://${hs1Domain}`, + domain: hs1Domain, adminUser: hs1AdminUser, adminMatrixUserId: `@${hs1AdminUser}:${hs1Domain}`, - adminPassword: validateEnvVar('FEDERATION_SYNAPSE_ADMIN_PASSWORD', process.env.FEDERATION_SYNAPSE_ADMIN_PASSWORD, 'admin'), + adminPassword: hs1AdminPassword, additionalUser1: { username: hs1AdditionalUser1, - password: validateEnvVar( - 'FEDERATION_SYNAPSE_ADDITIONAL_USER1_PASSWORD', - process.env.FEDERATION_SYNAPSE_ADDITIONAL_USER1_PASSWORD, - 'alice', - ), + password: hs1AdditionalUser1Password, matrixUserId: `@${hs1AdditionalUser1}:${hs1Domain}`, }, }, From 8a12f71f6f47840715011370c55483f0ae529345 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Thu, 11 Dec 2025 15:07:08 -0300 Subject: [PATCH 4/6] test: improve qase run title --- .../jest.config.federation.ts | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/ee/packages/federation-matrix/jest.config.federation.ts b/ee/packages/federation-matrix/jest.config.federation.ts index b1dbdc1d1c83a..91d6355341a40 100644 --- a/ee/packages/federation-matrix/jest.config.federation.ts +++ b/ee/packages/federation-matrix/jest.config.federation.ts @@ -8,6 +8,22 @@ import server from '@rocket.chat/jest-presets/server'; import type { Config } from 'jest'; +function qaseRunTitle(): string { + const title = ['Federation E2E Tests']; + + if (process.env.PR_NUMBER) { + title.push(`PR ${process.env.PR_NUMBER}`); + } + + if (process.env.GITHUB_RUN_ID) { + title.push(`Run ${process.env.GITHUB_RUN_ID}`); + } + + title.push(new Date().toISOString()); + + return title.join(' - '); +} + export default { preset: server.preset, transformIgnorePatterns: [ @@ -36,7 +52,10 @@ export default { testops: { api: { token: process.env.QASE_TESTOPS_JEST_API_TOKEN }, project: 'RC', - run: { complete: true }, + run: { + title: qaseRunTitle(), + complete: true, + }, }, debug: true, }, From dbad394bf93b47204ea48cb5bc56ced41f89059e Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Thu, 11 Dec 2025 15:06:20 -0300 Subject: [PATCH 5/6] test: implement missing qase functions --- .../federation-matrix/tests/setup-qase.ts | 126 +++++++++++++----- 1 file changed, 93 insertions(+), 33 deletions(-) diff --git a/ee/packages/federation-matrix/tests/setup-qase.ts b/ee/packages/federation-matrix/tests/setup-qase.ts index 784af77fa44a5..029863d9eb7e0 100644 --- a/ee/packages/federation-matrix/tests/setup-qase.ts +++ b/ee/packages/federation-matrix/tests/setup-qase.ts @@ -51,43 +51,103 @@ function describeImpl(name: string, fn: () => void): void { const currentTest = global.test; // Wrap it() to automatically set suite at the very start - global.it = ((testName: any, fn?: any, timeout?: number) => { - // Handle qase-wrapped test names (qase returns a string) - if (typeof testName === 'string' && fn) { - return currentIt( - testName, - async () => { - // Set suite immediately at the start of the test - qase.suite(currentPath); - // Call the original test function and return the result - return fn(); - }, - timeout, - ); - } - // Handle cases where testName might be a number or other type - return currentIt(testName, fn, timeout); - }) as typeof global.it; + global.it = Object.assign( + (testName: any, fn?: any, timeout?: number) => { + // Handle qase-wrapped test names (qase returns a string) + if (typeof testName === 'string' && fn) { + return currentIt( + testName, + async () => { + // Set suite immediately at the start of the test + qase.suite(currentPath); + // Call the original test function and return the result + return fn(); + }, + timeout, + ); + } + // Handle cases where testName might be a number or other type + return currentIt(testName, fn, timeout); + }, + { + skip: (name: string, fn: () => void) => { + suitePathStack.push(name); + try { + currentIt.skip(name, fn); + } finally { + suitePathStack.pop(); + } + }, + only: (name: string, fn: () => void) => { + suitePathStack.push(name); + try { + currentIt.only(name, fn); + } finally { + suitePathStack.pop(); + } + }, + todo: (name: string) => { + suitePathStack.push(name); + try { + currentIt.todo(name); + } finally { + suitePathStack.pop(); + } + }, + }, + ) as typeof global.it; // Wrap test() to automatically set suite at the very start - global.test = ((testName: any, fn?: any, timeout?: number) => { - if (typeof testName === 'string' && fn) { - return currentTest( - testName, - async () => { - // Set suite immediately at the start of the test - qase.suite(currentPath); - // Call the original test function and return the result - return fn(); - }, - timeout, - ); - } - return currentTest(testName, fn, timeout); - }) as typeof global.test; + global.test = Object.assign( + (testName: any, fn?: any, timeout?: number) => { + if (typeof testName === 'string' && fn) { + return currentTest( + testName, + async () => { + // Set suite immediately at the start of the test + qase.suite(currentPath); + // Call the original test function and return the result + return fn(); + }, + timeout, + ); + } + return currentTest(testName, fn, timeout); + }, + { + skip: (name: string, fn: () => void) => { + suitePathStack.push(name); + try { + currentTest.skip(name, fn); + } finally { + suitePathStack.pop(); + } + }, + only: (name: string, fn: () => void) => { + suitePathStack.push(name); + try { + currentTest.only(name, fn); + } finally { + suitePathStack.pop(); + } + }, + todo: (name: string) => { + suitePathStack.push(name); + try { + currentTest.todo(name); + } finally { + suitePathStack.pop(); + } + }, + }, + ) as typeof global.test; // Execute the describe block - fn(); + try { + fn(); + } catch (error) { + console.error('Error in describe block:', error); + } // Restore previous wrappers global.it = currentIt; From 34826d176058cad24d9c4ebaf3918e9b258c92cb Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Thu, 11 Dec 2025 16:12:36 -0300 Subject: [PATCH 6/6] add PR number --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8a7642e97c28b..a76d282e20712 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -656,6 +656,7 @@ jobs: ROCKETCHAT_IMAGE: ghcr.io/${{ needs.release-versions.outputs.lowercase-repo }}/rocket.chat:${{ needs.release-versions.outputs.gh-docker-tag }} ENTERPRISE_LICENSE_RC1: ${{ secrets.ENTERPRISE_LICENSE_RC1 }} QASE_TESTOPS_JEST_API_TOKEN: ${{ secrets.QASE_TESTOPS_JEST_API_TOKEN }} + PR_NUMBER: ${{ github.event.number }} run: yarn test:integration --image "${ROCKETCHAT_IMAGE}" report-coverage: