wire-webapp icon indicating copy to clipboard operation
wire-webapp copied to clipboard

chore: Automate RC creation [WPB-22028]

Open thisisamir98 opened this issue 2 months ago โ€ข 3 comments

TaskWPB-22028 [Web] Automate RC creation (branch + stable deps + PR)

Pull Request

Summary

  • What did I change and why? Introduced a new workflow to automate creation of RC
  • Risks and how to roll out / roll back (e.g. feature flags): none

Security Checklist (required)

  • [X] External inputs are validated & sanitized on client and/or server where applicable.
  • [X] API responses are validated; unexpected shapes are handled safely (fallbacks or errors).
  • [X] No unsafe HTML is rendered; if unavoidable, sanitization is applied and documented where it happens.
  • [X] Injection risks (XSS/SQL/command) are prevented via safe APIs and/or escaping.

Standards Acknowledgement (required)

thisisamir98 avatar Nov 28 '25 09:11 thisisamir98

Codecov Report

:white_check_mark: All modified and coverable lines are covered by tests. :white_check_mark: Project coverage is 43.46%. Comparing base (0315fc1) to head (c5d9ddd).

Additional details and impacted files
@@           Coverage Diff           @@
##              dev   #19812   +/-   ##
=======================================
  Coverage   43.46%   43.46%           
=======================================
  Files        1296     1296           
  Lines       32570    32570           
  Branches     7232     7232           
=======================================
+ Hits        14157    14158    +1     
  Misses      16698    16698           
+ Partials     1715     1714    -1     
:rocket: New features to boost your workflow:
  • :snowflake: Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • :package: JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

codecov[bot] avatar Nov 28 '25 09:11 codecov[bot]

๐Ÿ”— Download Full Report Artifact

๐Ÿงช Playwright Test Summary

  • โœ… Passed: 7
  • โŒ Failed: 4
  • โญ Skipped: 0
  • ๐Ÿ” Flaky: 3
  • ๐Ÿ“Š Total: 14
  • โฑ Total Runtime: 1089.4s (~ 18 min 9 sec)

Failed Tests:

โŒ Team owner adds whole team to an all team chat (tags: TC-8631, crit-flow-web)

Location: specs/CriticalFlow/addMembersToChat-TC-8631.spec.ts:43 Duration: 54395ms

Errors:

Error: expect(locator).toBeVisible() failed

Locator: locator('[data-uie-name="item-message"][data-uie-send-status="2"]').filter({ hasText: 'Hello from Ewald!' }).locator('[data-uie-name="message-reactions"]').locator('[data-uie-name="emoji-pill"][title="heart"]')
Expected: visible
Timeout: 10000ms
Error: element(s) not found

Call log:
  - Expect "toBeVisible" with timeout 10000ms
  - waiting for locator('[data-uie-name="item-message"][data-uie-send-status="2"]').filter({ hasText: 'Hello from Ewald!' }).locator('[data-uie-name="message-reactions"]').locator('[data-uie-name="emoji-pill"][title="heart"]')


  185 |       await pages.conversationList().openConversation(conversationName);
  186 |       const ownerMessage = pages.conversation().getMessage({content: `Hello from ${owner.firstName}!`});
> 187 |       await expect(pages.conversation().getReactionOnMessage(ownerMessage, 'heart')).toBeVisible();
      |                                                                                      ^
  188 |       await expect(pages.conversation().getReactionOnMessage(ownerMessage, 'joy')).toBeVisible();
  189 |
  190 |       // Member1 verifies they can see thumbs up (+1) and joy (๐Ÿ˜‚) reactions on their message from owner and member2
    at /home/runner/actions-runner/_work/wire-webapp/wire-webapp/test/e2e_tests/specs/CriticalFlow/addMembersToChat-TC-8631.spec.ts:187:86
    at /home/runner/actions-runner/_work/wire-webapp/wire-webapp/test/e2e_tests/specs/CriticalFlow/addMembersToChat-TC-8631.spec.ts:183:5
โŒ Planning group call with sending various messages during call (tags: TC-8632, crit-flow-web)

Location: specs/CriticalFlow/groupCalls-TC-8632.spec.ts:37 Duration: 31978ms

Errors:

Error: expect(received).toBeFalsy()

Received: true

  122 |       await memberCalling.unmuteSelfInFullScreen();
  123 |       await memberPageManager.waitForTimeout(250);
> 124 |       expect(await memberCalling.isSelfUserMutedInFullScreen()).toBeFalsy();
      |                                                                 ^
  125 |     });
  126 |
  127 |     await test.step('Validation: Owner sees member is unmuted', async () => {
    at /home/runner/actions-runner/_work/wire-webapp/wire-webapp/test/e2e_tests/specs/CriticalFlow/groupCalls-TC-8632.spec.ts:124:65
    at /home/runner/actions-runner/_work/wire-webapp/wire-webapp/test/e2e_tests/specs/CriticalFlow/groupCalls-TC-8632.spec.ts:121:5
โŒ Group Video call (tags: TC-8637, crit-flow-web)

Location: specs/CriticalFlow/groupVideoCall-TC-8637.spec.ts:39 Duration: 41485ms

Errors:

TimeoutError: locator.waitFor: Timeout 20000ms exceeded.
Call log:
  - waiting for locator('#add-participants [data-uie-name="search-list"] [aria-label="Open profile of Arjun Kertzmann"]').locator('input[type="checkbox"]')


   at pageManager/webapp/pages/conversationDetails.page.ts:68

  66 |       await userLocator.click();
  67 |       // Wait for the user to be selected (checkbox should be checked)
> 68 |       await userLocator.locator('input[type="checkbox"]').waitFor({state: 'attached'});
     |                                                           ^
  69 |     }
  70 |
  71 |     await this.page.locator(`${selectById('add-participants')} ${selectByDataAttribute('do-create')}`).click();
    at ConversationDetailsPage.addUsersToConversation (/home/runner/actions-runner/_work/wire-webapp/wire-webapp/test/e2e_tests/pageManager/webapp/pages/conversationDetails.page.ts:68:59)
    at /home/runner/actions-runner/_work/wire-webapp/wire-webapp/test/e2e_tests/specs/CriticalFlow/groupVideoCall-TC-8637.spec.ts:127:7
    at /home/runner/actions-runner/_work/wire-webapp/wire-webapp/test/e2e_tests/specs/CriticalFlow/groupVideoCall-TC-8637.spec.ts:123:5
โŒ New person joins team and setups up device (tags: TC-8635, crit-flow-web)

Location: specs/CriticalFlow/joinTeam-TC-8635.spec.ts:38 Duration: 66977ms

Errors:

TimeoutError: locator.waitFor: Timeout 20000ms exceeded.
Call log:
  - waiting for locator('#add-participants [data-uie-name="search-list"] [aria-label="Open profile of Deondre Witting"]').locator('input[type="checkbox"]')


   at pageManager/webapp/pages/conversationDetails.page.ts:68

  66 |       await userLocator.click();
  67 |       // Wait for the user to be selected (checkbox should be checked)
> 68 |       await userLocator.locator('input[type="checkbox"]').waitFor({state: 'attached'});
     |                                                           ^
  69 |     }
  70 |
  71 |     await this.page.locator(`${selectById('add-participants')} ${selectByDataAttribute('do-create')}`).click();
    at ConversationDetailsPage.addUsersToConversation (/home/runner/actions-runner/_work/wire-webapp/wire-webapp/test/e2e_tests/pageManager/webapp/pages/conversationDetails.page.ts:68:59)
    at /home/runner/actions-runner/_work/wire-webapp/wire-webapp/test/e2e_tests/specs/CriticalFlow/joinTeam-TC-8635.spec.ts:125:7
    at /home/runner/actions-runner/_work/wire-webapp/wire-webapp/test/e2e_tests/specs/CriticalFlow/joinTeam-TC-8635.spec.ts:114:5

Flaky Tests:

โš ๏ธ Account Management (tags: TC-8639, crit-flow-web)

Location: specs/CriticalFlow/accountManagement-TC-8639.spec.ts:37

Attempt 1 Result: โŒ Failed Duration: 85730ms

Errors:

Error: Matching URL not found in the email body

   at backend/inbucketClient.e2e.ts:120

  118 |
  119 |     if (this.isValidURL(matchingUrl) === false) {
> 120 |       throw new Error('Matching URL not found in the email body');
      |             ^
  121 |     }
  122 |
  123 |     return matchingUrl;
    at InbucketClientE2E.getMatchingURLFromEmailBody (/home/runner/actions-runner/_work/wire-webapp/wire-webapp/test/e2e_tests/backend/inbucketClient.e2e.ts:120:13)
    at /home/runner/actions-runner/_work/wire-webapp/wire-webapp/test/e2e_tests/specs/CriticalFlow/accountManagement-TC-8639.spec.ts:133:30
    at /home/runner/actions-runner/_work/wire-webapp/wire-webapp/test/e2e_tests/specs/CriticalFlow/accountManagement-TC-8639.spec.ts:124:3

Attempt 2 Result: โœ… Passed Duration: 30184ms

โš ๏ธ Calls in channels with device switch and screenshare (tags: TC-8754, crit-flow-web)

Location: specs/CriticalFlow/channelsCall-TC-8755.spec.ts:39

Attempt 1 Result: โŒ Failed Duration: 62023ms

Errors:

TimeoutError: locator.waitFor: Timeout 20000ms exceeded.
Call log:
  - waiting for locator('[data-uie-name="item-call"]') to be visible


   at pageManager/webapp/pages/calling.page.ts:90

  88 |
  89 |   waitForCell(): Promise<void> {
> 90 |     return this.callCell.waitFor({state: 'visible'});
     |                          ^
  91 |   }
  92 |
  93 |   isFullScreenVisible(): Promise<boolean> {
    at CallingPage.waitForCell (/home/runner/actions-runner/_work/wire-webapp/wire-webapp/test/e2e_tests/pageManager/webapp/pages/calling.page.ts:90:26)
    at /home/runner/actions-runner/_work/wire-webapp/wire-webapp/test/e2e_tests/specs/CriticalFlow/channelsCall-TC-8755.spec.ts:99:34
    at /home/runner/actions-runner/_work/wire-webapp/wire-webapp/test/e2e_tests/specs/CriticalFlow/channelsCall-TC-8755.spec.ts:97:16

Attempt 2 Result: โœ… Passed Duration: 78642ms

โš ๏ธ Messages in Groups (tags: TC-8751, crit-flow-web)

Location: specs/CriticalFlow/messagesInGroups-TC-8751.spec.ts:42

Attempt 1 Result: โŒ Failed Duration: 25527ms

Errors:

Error: expect(locator).toBeVisible() failed

Locator: locator('[data-uie-name="item-message"][data-uie-send-status="2"]').filter({ hasText: '@Eladio Franey Hello, this is a test message!' })
Expected: visible
Timeout: 10000ms
Error: element(s) not found

Call log:
  - Expect "toBeVisible" with timeout 10000ms
  - waiting for locator('[data-uie-name="item-message"][data-uie-send-status="2"]').filter({ hasText: '@Eladio Franey Hello, this is a test message!' })


  91 |
  92 |       await userBPages.conversationList().openConversation(conversationName);
> 93 |       await expect(userBPages.conversation().getMessage({content: `@${userB.fullName} ${messageText}`})).toBeVisible();
     |                                                                                                          ^
  94 |     });
  95 |
  96 |     await test.step('User A sends image', async () => {
    at /home/runner/actions-runner/_work/wire-webapp/wire-webapp/test/e2e_tests/specs/CriticalFlow/messagesInGroups-TC-8751.spec.ts:93:106
    at /home/runner/actions-runner/_work/wire-webapp/wire-webapp/test/e2e_tests/specs/CriticalFlow/messagesInGroups-TC-8751.spec.ts:86:5

Attempt 2 Result: โœ… Passed Duration: 54518ms

github-actions[bot] avatar Nov 28 '25 10:11 github-actions[bot]

Quality Gate Failed Quality Gate failed

Failed conditions
1 Security Hotspot

See analysis details on SonarQube Cloud

sonarqubecloud[bot] avatar Nov 28 '25 10:11 sonarqubecloud[bot]