-
-
Notifications
You must be signed in to change notification settings - Fork 8.6k
[build] Support per-language patch releases #16987
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: trunk
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 enables per-language patch releases for individual Selenium language bindings (e.g., selenium-4.28.1-ruby), allowing targeted updates without requiring a full release of all components.
Changes:
- Implements tag format validation: patch releases (X.Y.Z where Z>0) must have a language suffix, while full releases (X.Y.0) cannot
- Refactors Rakefile by splitting into modular per-language task files (from PR #16979) to support language-specific release workflows
- Updates pre-release and release workflows to parse language-specific tags and conditionally skip Selenium Manager, browser pins, CDP updates, and GitHub release creation for patch releases
Reviewed changes
Copilot reviewed 17 out of 17 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
.github/workflows/pre-release.yml |
Adds tag parsing logic with language detection and validation; conditionally skips global update jobs for patch releases |
.github/workflows/release.yml |
Filters publish and docs matrix jobs by detected language; skips GitHub release, nightly, and mirror jobs for patch releases |
.github/workflows/update-documentation.yml |
Updates language parameter mappings from abbreviations (rb, py, node) to full names (ruby, python, javascript) |
Rakefile |
Loads language-specific rake files into namespaced tasks with full-name aliases; adds prep_release, update_cdp, and lint tasks |
rake_tasks/*.rake |
New modular task files for each language (java, ruby, python, node, dotnet, rust, grid, appium) |
rake_tasks/common.rb |
Shared SeleniumRake module with utilities for version bumping, changelog generation, and package verification |
scripts/update_cdp.py |
Updates file path reference from Rakefile to rake_tasks/java.rake |
rb/.rubocop.yml |
Adds rake_tasks/ directory to Rubocop exclusions |
rb/BUILD.bazel |
Adds rake_tasks/ to linting arguments |
BUILD.bazel |
Updates rakefile filegroup to include all rake task files |
c8e78d9 to
0ee8540
Compare
PR Compliance Guide 🔍Below is a summary of compliance checks for this PR:
Compliance status legend🟢 - Fully Compliant🟡 - Partial Compliant 🔴 - Not Compliant ⚪ - Requires Further Human Verification 🏷️ - Compliance label |
||||||||||||||||||||||||
PR Code Suggestions ✨Latest suggestions up to 41e69bd
Previous suggestions✅ Suggestions up to commit 0ee8540
|
|||||||||||||||||||||||||||||||||
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
Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.
Comments suppressed due to low confidence (1)
.github/workflows/release.yml:196
- The update-version job should only run for full releases, not for patch releases. This job depends on reset-version and should follow the same conditional logic. Add a conditional check to skip this job for patch releases:
Change line 190 to:
needs: [prepare, reset-version, unrestrict-trunk]
if: needs.prepare.outputs.language == 'all'
update-version:
name: Push Nightly Versions
needs: [prepare, reset-version, unrestrict-trunk]
uses: ./.github/workflows/commit-changes.yml
with:
artifact-name: version-reset
commit-message: "[build] Reset versions to nightly after ${{ needs.prepare.outputs.tag }} release"
secrets:
SELENIUM_CI_TOKEN: ${{ secrets.SELENIUM_CI_TOKEN }}
- pre-release.yml: Accept tag input (e.g., selenium-4.28.1-ruby) - Parse tag to extract version and language (ruby->rb, python->py, etc.) - Validate: patch releases (X.Y.Z where Z>0) must have language suffix - Validate: full releases (X.Y.0) cannot have language suffix - Skip Rust/SM, browser, devtools, dependency updates for patch releases - Use per-language version/changelog tasks (e.g., ./go rb:version) - release.yml: Parse language from PR branch or tag input - Filter publish/docs matrix to only run for selected language - Use per-language verify and version reset tasks - Skip nightly/mirror jobs for patch releases - Rakefile: Rename all:changelogs to all:changelog for consistency Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Skip github-release job for patch releases (language != 'all') - Update docs job to run when github-release is skipped - Show "N/A" in PR body for components not run during patch releases Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove release_update wrapper task (just called update_multitool) - Update workflow to call update_multitool directly - Rename "dependencies" step/label to "multitool" for clarity - Use update_cdp instead of all:update_cdp (task is in root namespace)
- Add parse-release-tag.yml for shared tag parsing/validation - Update pre-release.yml to use reusable workflow - Update release.yml to use reusable workflow - Skip version reset jobs for patch releases
16119ad to
24e8c1f
Compare
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
Copilot reviewed 7 out of 7 changed files in this pull request and generated 2 comments.
User description
This should work the same as a full release now.
Whether Minor release or Patch release, kick of the pre-release workflow and specify the tagname
and the script should do the rest. Once the PR is up, merge it, release workflow will start,
and Bob should be your uncle.
🔗 Related Issues
In Draft until we merge: #16979💥 What does this PR do?
Enable patch releases for individual language bindings (e.g.,
selenium-4.28.1-ruby) without requiring a full release of all components.Tag format and validation:
selenium-4.28.1-ruby,selenium-4.28.1-python, etc.Pre-release workflow:
Release workflow:
Valid language suffixes:
ruby,python,java,javascript,dotnet🔧 Implementation Notes
rb:version,rb:changelog, etc.)rubyinstead ofrb) since namespace aliases support themrelease_updatewrapper task in favor of callingupdate_multitooldirectly💡 Additional Considerations
Who wants to try it?
🔄 Types of changes
*hopefully
PR Type
Enhancement
Description
Enable per-language patch releases (e.g.,
selenium-4.28.1-ruby) without full releaseParse and validate release tags with language suffix support
Skip Rust/SM, browser pins, CDP updates for patch releases
Filter publish/docs matrix to selected language only
Make version tasks invoke their own update tasks automatically
Diagram Walkthrough
flowchart LR A["Release Tag Input<br/>selenium-4.28.1-ruby"] --> B["Parse Tag Job"] B --> C{Language<br/>Suffix?} C -->|Patch Release| D["Extract Language<br/>ruby/python/java/etc"] C -->|Full Release| E["Language = all"] D --> F["Skip Rust/SM/Browser/CDP"] E --> G["Run All Updates"] F --> H["Per-Language Version<br/>& Changelog Tasks"] G --> I["All Component Updates"] H --> J["Filtered Publish Matrix"] I --> K["Full Publish Matrix"]File Walkthrough
java.rake
Invoke update task after version bumprake_tasks/java.rake
java:updatetask after version bumpnode.rake
Invoke update task after version bumprake_tasks/node.rake
node:updatetask after version bumppre-release.yml
Add tag parsing and per-language release support.github/workflows/pre-release.yml
versioninput withtaginput supporting language suffixesparse-tagjob to extract version, language, and validate tagformat
(Z=0) cannot
releases
all:versionandall:changelogsreleases
release_updatetoupdate_multitooldirect callrelease.yml
Filter release jobs by language and skip for patch releases.github/workflows/release.yml
preparejob to parse tag and extract language suffixpublishmatrix to run only for selected languagegithub-releasejob for patch releases (language != 'all')nightlyandmirrorjobs for patch releasesverifytask instead ofall:verifyversion nightlytask instead ofall:version nightlyfull names (python, ruby, javascript)
update-documentation.yml
Use full language names in documentation workflow.github/workflows/update-documentation.yml
instead of abbreviations
Rakefile
Remove release_update wrapper taskRakefile
release_updatewrapper task that only calledupdate_multitoolupdate_multitooldirectly