Skip to content

Conversation

@thisisamir98
Copy link
Contributor

@thisisamir98 thisisamir98 commented Nov 28, 2025

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)

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

Standards Acknowledgement (required)

zskhan and others added 19 commits November 21, 2025 18:38
Bumps [rimraf](https://github.com/isaacs/rimraf) from 6.1.0 to 6.1.2.
- [Changelog](https://github.com/isaacs/rimraf/blob/main/CHANGELOG.md)
- [Commits](isaacs/rimraf@v6.1.0...v6.1.2)

---
updated-dependencies:
- dependency-name: rimraf
  dependency-version: 6.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…t tests with it (#19804)

This is an attempt to resolve the race conditions happening when two users connect in a 1:1 for the first time starting the conversation as proteus but it's migrated to MLS automatically. This leads to a message sent during the migration being lost. Team members don't need to go through this step as they are aware of the spoken protocol of other members after login.
* test(TC-8038): add test for not replying to a ping

* test(TC-8039): add test for not replying to timed messages

* test(TC-2994): add test for quote in reply to vanish if source message is removed

* test(TC-2996): add test for searching message

* test(TC-2997): test for quote in reply to be truncated

* test(TC-3002): reply to a picture

* test(TC-3003): reply to an audio message

* test(TC-3004): reply to video

* test(TC-3005): reply to link

* test(TC3006): reply to file

* test(TC-3007): reply to reply

* test(TC-3008): reply to link with text

* test(TC-3011): Reply with timed message

* test(TC-3013): test clicking the reply

* test(TC-3014): test replying in a conversation I'm no longer part of

* test(TC-3016): click on mention in reply opens user profile

* fix: remove visibility check from sendMessage

* test(TC-3009): add test case for replying to a location + util for sending location via testservice

* refactor: replace createPagesForUser with new fixtures

* refactor(test): use new fixtures for reply tests

* refactor: remove no longer used PagePlugin withConversation
…/browse/WPB-20819) (#19714)

* fix: make password toggle button accessible and localised(WPB-21228)

* fix: translate type

* fix: Login - New view is not announced

* fix: make back button accessible WPB-21466

* fix: make external link 2fa accessible(WPB-21279)

* fix: password toggle button text alternative(WPB-21228)

* fix: make verify account header focusable using screenkey and login subheading style adjustments

* fix: add toggle password show/hide label

* fix: address review comments

* chore: bump core packages

* fix: pipeline issues

* fix: PR comments

* fix: pipeline issues
Bumps [@wireapp/core](https://github.com/wireapp/wire-web-packages) from 46.46.3 to 46.46.5.
- [Commits](https://github.com/wireapp/wire-web-packages/compare/@wireapp/[email protected]...@wireapp/[email protected])

---
updated-dependencies:
- dependency-name: "@wireapp/core"
  dependency-version: 46.46.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [core-js](https://github.com/zloirock/core-js/tree/HEAD/packages/core-js) from 3.46.0 to 3.47.0.
- [Release notes](https://github.com/zloirock/core-js/releases)
- [Changelog](https://github.com/zloirock/core-js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/zloirock/core-js/commits/v3.47.0/packages/core-js)

---
updated-dependencies:
- dependency-name: core-js
  dependency-version: 3.47.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [emoji-picker-react](https://github.com/ealush/emoji-picker-react) from 4.15.1 to 4.15.2.
- [Release notes](https://github.com/ealush/emoji-picker-react/releases)
- [Commits](https://github.com/ealush/emoji-picker-react/commits)

---
updated-dependencies:
- dependency-name: emoji-picker-react
  dependency-version: 4.15.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin) from 5.6.4 to 5.6.5.
- [Release notes](https://github.com/jantimon/html-webpack-plugin/releases)
- [Changelog](https://github.com/jantimon/html-webpack-plugin/blob/main/CHANGELOG.md)
- [Commits](jantimon/html-webpack-plugin@v5.6.4...v5.6.5)

---
updated-dependencies:
- dependency-name: html-webpack-plugin
  dependency-version: 5.6.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [oidc-client-ts](https://github.com/authts/oidc-client-ts) from 3.4.0 to 3.4.1.
- [Release notes](https://github.com/authts/oidc-client-ts/releases)
- [Commits](authts/oidc-client-ts@v3.4.0...v3.4.1)

---
updated-dependencies:
- dependency-name: oidc-client-ts
  dependency-version: 3.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [webpack](https://github.com/webpack/webpack) from 5.102.1 to 5.103.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](webpack/webpack@v5.102.1...v5.103.0)

---
updated-dependencies:
- dependency-name: webpack
  dependency-version: 5.103.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
)

Bumps [workbox-webpack-plugin](https://github.com/googlechrome/workbox) from 7.3.0 to 7.4.0.
- [Release notes](https://github.com/googlechrome/workbox/releases)
- [Commits](GoogleChrome/workbox@v7.3.0...v7.4.0)

---
updated-dependencies:
- dependency-name: workbox-webpack-plugin
  dependency-version: 7.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Bumps [stylelint](https://github.com/stylelint/stylelint) from 16.25.0 to 16.26.0.
- [Release notes](https://github.com/stylelint/stylelint/releases)
- [Changelog](https://github.com/stylelint/stylelint/blob/main/CHANGELOG.md)
- [Commits](stylelint/stylelint@16.25.0...16.26.0)

---
updated-dependencies:
- dependency-name: stylelint
  dependency-version: 16.26.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…19792)

Bumps [baseline-browser-mapping](https://github.com/web-platform-dx/baseline-browser-mapping) from 2.8.28 to 2.8.31.
- [Release notes](https://github.com/web-platform-dx/baseline-browser-mapping/releases)
- [Commits](web-platform-dx/baseline-browser-mapping@v2.8.28...v2.8.31)

---
updated-dependencies:
- dependency-name: baseline-browser-mapping
  dependency-version: 2.8.31
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* test(TC-657): add test for sending ephemeral text message in 1:1

* test(TC-658): add test for sending ephemeral text message in group

* refactor: replace util sendTimedMessage with dedicated utils for enabling and disabling timed messages

* test(TC-662): Verify timer is applied to all messages until turning it off in 1:1

* test(TC-664): Verify that message with previous timer are deleted on start-up when the timeout passed in 1:1

* refactor: overload createPage fixture to optionally accept a context to reuse

* refactor: use team for tests using new fixture

* test(TC-675): Verify the message is not deleted for users that didn't read the message

* test(TC-3715): set global group conversation timer

* refactor(reply-tests): remove unused createUser fixture

* test(TC-3716): check current time is visible in details

* fix(a11y): add disabled attribute to MessageTimerButton

* test(TC-3718): check timed message button is disabled if timed messages are set globally

* test(TC-3719): globally set timer is shown on button next to input field

* test(TC-3720): system messages are shown for enabled / disabled timer messages

* test(TC-3717): check ephemeral message appear in search results

* test(TC-3731): add test for message to disappear from search results (currently broken)

* refactor: group search tests

* refactor: update search result tests to do assertions on receiver side

* refactor: group tests with self deleting messages set globally for a group conversation

* docs: add ticket number to comment for skipped test
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces an automated GitHub Actions workflow to streamline the creation of Release Candidate (RC) branches. The workflow updates Wire-internal dependencies to their latest stable versions from dev and creates a PR targeting master.

Key changes:

  • New prepare-rc.yml workflow triggered manually via workflow_dispatch
  • Automated dependency bumping for 11 @wireapp/* packages to latest stable versions
  • Creates a PR from a new RC branch to master with updated dependencies

- name: Create RC pull request
uses: peter-evans/create-pull-request@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
Copy link

Copilot AI Nov 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Important] Using GITHUB_TOKEN for automated PR creation is inconsistent with other workflows in this repository. All other automated PR workflows (cherry-pick, translations sync) use OTTO_THE_BOT_GH_TOKEN, which:

  1. Properly attributes the PR to the bot user
  2. Allows triggered workflows to run (GITHUB_TOKEN-created PRs don't trigger workflows by design)
  3. Maintains consistency across the repository

Change to:

token: ${{ secrets.OTTO_THE_BOT_GH_TOKEN }}
Suggested change
token: ${{ secrets.GITHUB_TOKEN }}
token: ${{ secrets.OTTO_THE_BOT_GH_TOKEN }}

Copilot uses AI. Check for mistakes.
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22.x
Copy link

Copilot AI Nov 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Important] Node.js version 22.x is inconsistent with the majority of workflows in this repository, which use 18.16.x. This could lead to:

  1. Dependency resolution differences
  2. Different build behavior
  3. Potential compatibility issues

Unless there's a specific reason to use Node 22 for RC preparation (which should be documented), change to match other workflows:

node-version: 18.16.x
Suggested change
node-version: 22.x
node-version: 18.16.x

Copilot uses AI. Check for mistakes.
Comment on lines +65 to +68
commit-message: 'chore: ${{ inputs.rc_branch }}'
branch: ${{ inputs.rc_branch }}
base: master
title: 'chore: ${{ inputs.rc_branch }}'
Copy link

Copilot AI Nov 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Suggestion] The commit message and PR title use the full RC branch name which may not be descriptive. Consider a more informative format:

commit-message: 'chore: Prepare release candidate ${{ inputs.rc_branch }}'

And for the title (line 68):

title: 'chore: Prepare release candidate ${{ inputs.rc_branch }}'

This makes it clearer that this is an RC preparation PR when reviewing the commit history.

Suggested change
commit-message: 'chore: ${{ inputs.rc_branch }}'
branch: ${{ inputs.rc_branch }}
base: master
title: 'chore: ${{ inputs.rc_branch }}'
commit-message: 'chore: Prepare release candidate ${{ inputs.rc_branch }}'
branch: ${{ inputs.rc_branch }}
base: master
title: 'chore: Prepare release candidate ${{ inputs.rc_branch }}'

Copilot uses AI. Check for mistakes.
body: |
Automated RC creation from `dev`.
@wireapp/* dependencies have been bumped to dist-tags.latest (stable) on this branch.
sign-commits: true
Copy link

Copilot AI Nov 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Important] sign-commits: true may not work correctly with GITHUB_TOKEN. According to peter-evans/create-pull-request documentation, signed commits require either:

  1. A Personal Access Token (PAT) with signing configured
  2. The bot token to have GPG signing set up

Since line 64 uses GITHUB_TOKEN (which should be changed to OTTO_THE_BOT_GH_TOKEN per another comment), ensure that otto-the-bot has GPG signing configured. If not, remove this line or configure signing for the bot account.

Suggested change
sign-commits: true

Copilot uses AI. Check for mistakes.
Comment on lines +6 to +9
rc_branch:
description: 'RC branch name (e.g. rc/2025-11-27)'
required: true
type: string
Copy link

Copilot AI Nov 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Important] The rc_branch input lacks validation and could be exploited for command injection or create unintended branch names. Although GitHub Actions provides some sanitization, it's best practice to explicitly validate the input format.

Consider adding a validation step after checkout:

- name: Validate RC branch name format
  run: |
    if ! [[ "${{ inputs.rc_branch }}" =~ ^rc/[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
      echo "Invalid RC branch name format. Expected: rc/YYYY-MM-DD" >&2
      exit 1
    fi

Copilot generated this review using guidance from repository custom instructions.
Comment on lines +45 to +56
yarn add \
@wireapp/store-engine@$(npm view @wireapp/store-engine dist-tags.latest) \
@wireapp/commons@$(npm view @wireapp/commons dist-tags.latest) \
@wireapp/core@$(npm view @wireapp/core dist-tags.latest) \
@wireapp/promise-queue@$(npm view @wireapp/promise-queue dist-tags.latest) \
@wireapp/react-ui-kit@$(npm view @wireapp/react-ui-kit dist-tags.latest) \
@wireapp/store-engine-dexie@$(npm view @wireapp/store-engine-dexie dist-tags.latest) \
@wireapp/telemetry@$(npm view @wireapp/telemetry dist-tags.latest) \
@wireapp/webapp-events@$(npm view @wireapp/webapp-events dist-tags.latest) \
@wireapp/copy-config@$(npm view @wireapp/copy-config dist-tags.latest) \
@wireapp/eslint-config@$(npm view @wireapp/eslint-config dist-tags.latest) \
@wireapp/prettier-config@$(npm view @wireapp/prettier-config dist-tags.latest)
Copy link

Copilot AI Nov 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Important] Missing error handling for npm view commands. If any package doesn't exist or the registry is unreachable, the command will fail silently or with unclear errors due to command substitution happening before yarn add executes.

Consider adding explicit checks or error handling:

- name: Update @wireapp/* to latest stable
  run: |
    set -euo pipefail
    
    # Fetch all versions first to fail fast if registry is unreachable
    STORE_ENGINE=$(npm view @wireapp/store-engine dist-tags.latest) || exit 1
    COMMONS=$(npm view @wireapp/commons dist-tags.latest) || exit 1
    # ... repeat for other packages
    
    yarn add \
      @wireapp/store-engine@${STORE_ENGINE} \
      @wireapp/commons@${COMMONS} \
      # ... etc
Suggested change
yarn add \
@wireapp/store-engine@$(npm view @wireapp/store-engine dist-tags.latest) \
@wireapp/commons@$(npm view @wireapp/commons dist-tags.latest) \
@wireapp/core@$(npm view @wireapp/core dist-tags.latest) \
@wireapp/promise-queue@$(npm view @wireapp/promise-queue dist-tags.latest) \
@wireapp/react-ui-kit@$(npm view @wireapp/react-ui-kit dist-tags.latest) \
@wireapp/store-engine-dexie@$(npm view @wireapp/store-engine-dexie dist-tags.latest) \
@wireapp/telemetry@$(npm view @wireapp/telemetry dist-tags.latest) \
@wireapp/webapp-events@$(npm view @wireapp/webapp-events dist-tags.latest) \
@wireapp/copy-config@$(npm view @wireapp/copy-config dist-tags.latest) \
@wireapp/eslint-config@$(npm view @wireapp/eslint-config dist-tags.latest) \
@wireapp/prettier-config@$(npm view @wireapp/prettier-config dist-tags.latest)
# Fetch all versions first to fail fast if registry is unreachable or a package is missing
STORE_ENGINE=$(npm view @wireapp/store-engine dist-tags.latest) || { echo "Failed to fetch @wireapp/store-engine version" >&2; exit 1; }
COMMONS=$(npm view @wireapp/commons dist-tags.latest) || { echo "Failed to fetch @wireapp/commons version" >&2; exit 1; }
CORE=$(npm view @wireapp/core dist-tags.latest) || { echo "Failed to fetch @wireapp/core version" >&2; exit 1; }
PROMISE_QUEUE=$(npm view @wireapp/promise-queue dist-tags.latest) || { echo "Failed to fetch @wireapp/promise-queue version" >&2; exit 1; }
REACT_UI_KIT=$(npm view @wireapp/react-ui-kit dist-tags.latest) || { echo "Failed to fetch @wireapp/react-ui-kit version" >&2; exit 1; }
STORE_ENGINE_DEXIE=$(npm view @wireapp/store-engine-dexie dist-tags.latest) || { echo "Failed to fetch @wireapp/store-engine-dexie version" >&2; exit 1; }
TELEMETRY=$(npm view @wireapp/telemetry dist-tags.latest) || { echo "Failed to fetch @wireapp/telemetry version" >&2; exit 1; }
WEBAPP_EVENTS=$(npm view @wireapp/webapp-events dist-tags.latest) || { echo "Failed to fetch @wireapp/webapp-events version" >&2; exit 1; }
COPY_CONFIG=$(npm view @wireapp/copy-config dist-tags.latest) || { echo "Failed to fetch @wireapp/copy-config version" >&2; exit 1; }
ESLINT_CONFIG=$(npm view @wireapp/eslint-config dist-tags.latest) || { echo "Failed to fetch @wireapp/eslint-config version" >&2; exit 1; }
PRETTIER_CONFIG=$(npm view @wireapp/prettier-config dist-tags.latest) || { echo "Failed to fetch @wireapp/prettier-config version" >&2; exit 1; }
yarn add \
@wireapp/store-engine@${STORE_ENGINE} \
@wireapp/commons@${COMMONS} \
@wireapp/core@${CORE} \
@wireapp/promise-queue@${PROMISE_QUEUE} \
@wireapp/react-ui-kit@${REACT_UI_KIT} \
@wireapp/store-engine-dexie@${STORE_ENGINE_DEXIE} \
@wireapp/telemetry@${TELEMETRY} \
@wireapp/webapp-events@${WEBAPP_EVENTS} \
@wireapp/copy-config@${COPY_CONFIG} \
@wireapp/eslint-config@${ESLINT_CONFIG} \
@wireapp/prettier-config@${PRETTIER_CONFIG}

Copilot uses AI. Check for mistakes.
Comment on lines +46 to +56
@wireapp/store-engine@$(npm view @wireapp/store-engine dist-tags.latest) \
@wireapp/commons@$(npm view @wireapp/commons dist-tags.latest) \
@wireapp/core@$(npm view @wireapp/core dist-tags.latest) \
@wireapp/promise-queue@$(npm view @wireapp/promise-queue dist-tags.latest) \
@wireapp/react-ui-kit@$(npm view @wireapp/react-ui-kit dist-tags.latest) \
@wireapp/store-engine-dexie@$(npm view @wireapp/store-engine-dexie dist-tags.latest) \
@wireapp/telemetry@$(npm view @wireapp/telemetry dist-tags.latest) \
@wireapp/webapp-events@$(npm view @wireapp/webapp-events dist-tags.latest) \
@wireapp/copy-config@$(npm view @wireapp/copy-config dist-tags.latest) \
@wireapp/eslint-config@$(npm view @wireapp/eslint-config dist-tags.latest) \
@wireapp/prettier-config@$(npm view @wireapp/prettier-config dist-tags.latest)
Copy link

Copilot AI Nov 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Blocker] The dependency update list is incomplete. Based on package.json, the following @wireapp packages are missing from this update:

  • @wireapp/avs (dependency)
  • @wireapp/avs-debugger (dependency)
  • @wireapp/kalium-backup (dependency)

These packages should either be included in the update or explicitly documented why they're excluded. If they follow a different versioning strategy, that should be noted in a comment.

Suggested change
@wireapp/store-engine@$(npm view @wireapp/store-engine dist-tags.latest) \
@wireapp/commons@$(npm view @wireapp/commons dist-tags.latest) \
@wireapp/core@$(npm view @wireapp/core dist-tags.latest) \
@wireapp/promise-queue@$(npm view @wireapp/promise-queue dist-tags.latest) \
@wireapp/react-ui-kit@$(npm view @wireapp/react-ui-kit dist-tags.latest) \
@wireapp/store-engine-dexie@$(npm view @wireapp/store-engine-dexie dist-tags.latest) \
@wireapp/telemetry@$(npm view @wireapp/telemetry dist-tags.latest) \
@wireapp/webapp-events@$(npm view @wireapp/webapp-events dist-tags.latest) \
@wireapp/copy-config@$(npm view @wireapp/copy-config dist-tags.latest) \
@wireapp/eslint-config@$(npm view @wireapp/eslint-config dist-tags.latest) \
@wireapp/prettier-config@$(npm view @wireapp/prettier-config dist-tags.latest)
@wireapp/avs@$(npm view @wireapp/avs dist-tags.latest) \
@wireapp/avs-debugger@$(npm view @wireapp/avs-debugger dist-tags.latest) \
@wireapp/commons@$(npm view @wireapp/commons dist-tags.latest) \
@wireapp/copy-config@$(npm view @wireapp/copy-config dist-tags.latest) \
@wireapp/core@$(npm view @wireapp/core dist-tags.latest) \
@wireapp/eslint-config@$(npm view @wireapp/eslint-config dist-tags.latest) \
@wireapp/kalium-backup@$(npm view @wireapp/kalium-backup dist-tags.latest) \
@wireapp/prettier-config@$(npm view @wireapp/prettier-config dist-tags.latest) \
@wireapp/promise-queue@$(npm view @wireapp/promise-queue dist-tags.latest) \
@wireapp/react-ui-kit@$(npm view @wireapp/react-ui-kit dist-tags.latest) \
@wireapp/store-engine@$(npm view @wireapp/store-engine dist-tags.latest) \
@wireapp/store-engine-dexie@$(npm view @wireapp/store-engine-dexie dist-tags.latest) \
@wireapp/telemetry@$(npm view @wireapp/telemetry dist-tags.latest) \
@wireapp/webapp-events@$(npm view @wireapp/webapp-events dist-tags.latest)

Copilot uses AI. Check for mistakes.
Comment on lines +58 to +59
- name: Show diff
run: git diff
Copy link

Copilot AI Nov 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] [Suggestion] The Show diff step is helpful for debugging but doesn't fail the workflow if there are no changes. Consider adding a check to ensure dependencies were actually updated:

- name: Show diff and verify changes
  run: |
    git diff
    if ! git diff --quiet; then
      echo "✓ Dependencies updated successfully"
    else
      echo "⚠️  Warning: No changes detected after dependency update" >&2
    fi

This helps catch scenarios where all packages are already at the latest version.

Suggested change
- name: Show diff
run: git diff
- name: Show diff and verify changes
run: |
git diff
if git diff --quiet; then
echo "⚠️ Warning: No changes detected after dependency update" >&2
else
echo "✓ Dependencies updated successfully"
fi

Copilot uses AI. Check for mistakes.
@codecov
Copy link

codecov bot commented Nov 28, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ 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     
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions
Copy link
Contributor

github-actions bot commented Nov 28, 2025

🔗 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

@sonarqubecloud
Copy link

Quality Gate Failed Quality Gate failed

Failed conditions
1 Security Hotspot

See analysis details on SonarQube Cloud

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants