-
Notifications
You must be signed in to change notification settings - Fork 296
chore: Automate RC creation [WPB-22028] #19812
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: dev
Are you sure you want to change the base?
Conversation
There was a problem hiding this 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.ymlworkflow 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 }} |
Copilot
AI
Nov 28, 2025
There was a problem hiding this comment.
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:
- Properly attributes the PR to the bot user
- Allows triggered workflows to run (GITHUB_TOKEN-created PRs don't trigger workflows by design)
- Maintains consistency across the repository
Change to:
token: ${{ secrets.OTTO_THE_BOT_GH_TOKEN }}| token: ${{ secrets.GITHUB_TOKEN }} | |
| token: ${{ secrets.OTTO_THE_BOT_GH_TOKEN }} |
| - name: Setup Node.js | ||
| uses: actions/setup-node@v4 | ||
| with: | ||
| node-version: 22.x |
Copilot
AI
Nov 28, 2025
There was a problem hiding this comment.
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:
- Dependency resolution differences
- Different build behavior
- 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| node-version: 22.x | |
| node-version: 18.16.x |
| commit-message: 'chore: ${{ inputs.rc_branch }}' | ||
| branch: ${{ inputs.rc_branch }} | ||
| base: master | ||
| title: 'chore: ${{ inputs.rc_branch }}' |
Copilot
AI
Nov 28, 2025
There was a problem hiding this comment.
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.
| 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 }}' |
| body: | | ||
| Automated RC creation from `dev`. | ||
| @wireapp/* dependencies have been bumped to dist-tags.latest (stable) on this branch. | ||
| sign-commits: true |
Copilot
AI
Nov 28, 2025
There was a problem hiding this comment.
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:
- A Personal Access Token (PAT) with signing configured
- 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.
| sign-commits: true |
| rc_branch: | ||
| description: 'RC branch name (e.g. rc/2025-11-27)' | ||
| required: true | ||
| type: string |
Copilot
AI
Nov 28, 2025
There was a problem hiding this comment.
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| 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) |
Copilot
AI
Nov 28, 2025
There was a problem hiding this comment.
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| 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} |
| @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) |
Copilot
AI
Nov 28, 2025
There was a problem hiding this comment.
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.
| @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) |
| - name: Show diff | ||
| run: git diff |
Copilot
AI
Nov 28, 2025
There was a problem hiding this comment.
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
fiThis helps catch scenarios where all packages are already at the latest version.
| - 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 |
Codecov Report✅ All modified and coverable lines are covered by tests. 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:
|
|
🔗 Download Full Report Artifact 🧪 Playwright Test Summary
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 Errors: ❌ Planning group call with sending various messages during call (tags: TC-8632, crit-flow-web)Location: specs/CriticalFlow/groupCalls-TC-8632.spec.ts:37 Errors: ❌ Group Video call (tags: TC-8637, crit-flow-web)Location: specs/CriticalFlow/groupVideoCall-TC-8637.spec.ts:39 Errors: ❌ New person joins team and setups up device (tags: TC-8635, crit-flow-web)Location: specs/CriticalFlow/joinTeam-TC-8635.spec.ts:38 Errors: Flaky Tests: |
|


Pull Request
Summary
Introduced a new workflow to automate creation of RC
none
Security Checklist (required)
Standards Acknowledgement (required)