-
-
Notifications
You must be signed in to change notification settings - Fork 8.2k
Releasing Selenium
The release manager needs to evaluate if the codebase is ready for release. This normally involves some subjective judgements. A few things can be noted:
- Tests should be passing for Chrome and Firefox.
- If some test(s) is failing on the CI, execute it locally to determine to confirm its status.
- When you confirm a test failing
- Determine if the failure is related to the browser/driver. If so, report it to the vendor.
- Related to Selenium, try to fix the bug but if not possible, check if it blocks the release or not.
- There is no need to have
ChromeDriver
orGeckoDriver
on thePATH
, as Selenium Manager is taking care of that. - Known issues should be added to the release notes.
- Gather feedback from other developers about the release:
- Define a time for the release
- Ask for release blockers and provide additional details that will help developers participate in the release process.
- This should be emailed to 'selenium-developers' though working on IRC/Matrix/Slack alone is just fine.
- Determine if Selenium Manager needs to be updated for the release. If so:
- Execute the Selenium Manager build workflow.
- Download the artifacts via
curl
orwget
, take into account that you will need a token. Easiest is to use GitHub CLI. To use GitHub CLI you need to be inside the project's directory so the Git info is available. - Downloaded files need to be uncompressed. If you used GitHub CLI, the
.exe
will be already uncompressed, but the macOS and Linux will be inside a.tar
file. Use the following command to have them uncompressedtar -xvf selenium-manager.tar
. - Take the uncompressed files and replace the ones present on the
manager
directory.
- Bump the revision numbers at the top of the
Rakefile
and SELENIUM_VERSION - Commit version number bump.
- To find out the revision of the last release:
git log --tags --simplify-by-decoration --pretty="format:%ci %d %h" | sort | tail -1 | awk '{print $NF}'
. This will give you the abbreviated hashcode for the last revision.
Skip this section if you are doing a patch release
Begin by tagging the revision you're about to release, and push that tag to GitHub.
- Draft a new (perhaps pre-release)
- Make sure this release is for the tag you created earlier
- Set the title to be whatever the release is.
- Use
git log $PREV_RELEASE..$NEW_TAG --format=format:'* [
%h](https://github.com/seleniumhq/selenium/commit/%H) - %s :: %an' | pbcopy
to generate the list of changes. Make sure you've set$PREV_RELEASE
and$NEW_TAG
! - The release notes are:
### Changelog
For each component's detailed changelog, please check:
* [Ruby](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
* [Python](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES)
* [JavaScript](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md)
* [Java](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG)
* [DotNet](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG)
* [IEDriverServer](https://github.com/SeleniumHQ/selenium/blob/trunk/cpp/iedriverserver/CHANGELOG)
### Commits in this release
<details>
<summary>Click to see all the commits included in this release</summary>
INSERT LIST OF CHANGES HERE!
</details>
- Now publish the release.
- You can build Selenium (e.g.
bazel build grid
) - Make sure you have an account and permissions to the OSS Sonatype repo. If you do not have an user yet, please go through the initial setup. When creating the Jira ticket to request push access, follow this ticket example.
- Make sure GnuPG is installed. Detailed instructions can be seen here. Follow the section that mentions how to distribute GnuPG public key. GitHub also has good instructions to generate a key.
- Make sure you have permission to push to the OSS Sonatype repo. You will need these credentials when pushing the maven release.
- Make sure your
~/.m2/settings.xml
contains the following lines in the<servers>
section:
<server>
<id>sonatype-nexus-snapshots</id>
<username>_your-username-for-oss.sonatype.org_</username>
<password>_your-password_</password>
</server>
<server>
<id>sonatype-nexus-staging</id>
<username>_your-username-for-oss.sonatype.org_</username>
<password>_your-password_</password>
</server>
- Update the Java CHANGELOG under
java/CHANGELOG
. Do this by finding the revision number of the last release and runninggit log oldRev..HEAD >> java/CHANGELOG
. You'll then need to edit the file by hand. - Bump version numbers in the Rakefile and in version.bzl.
- Update the API docs. See Update API Docs
- Ensure that the
--stamp
flag is used by the build. The easiest way to do this is:echo build --stamp >>.bazelrc.local
- Run
./go clean release-java
(this will build and upload everything to sonatype.org and generate the files to upload to GitHub releases)- If you want more control over the release, first release the bindings by running
./go publish-maven
, and follow all the OSS Sonatype steps. - Generate the Selenium Grid server jar and other files that will be uploaded to GitHub releases by running
./go prep-release-zip
. File will be created inbuild/dist
. If you are doing a patch release, upload the files to the previous major/minor GitHub release.
- If you want more control over the release, first release the bindings by running
- Go to http://oss.sonatype.org, log in, and check that the contents are complete (JARs are there, as well as the signed files). If the contents are looking good, close the staging repository with a meaningful message
.
- Release the staged release in nexus (or drop it).
- If the "Release" button is not enabled, this means that the checks for the repo are still running, you can click on the activity tab to see what activities are pending. This normally takes a few minutes.
- Make sure any other manual hacks you did are documented in step 5 or committed back on trunk.
- Once the artifacts finally hit central (please wait till they are actually there), update the downloads page with updated links, release numbers and dates.
- Remove the stamp from
.bazelrc.local
if added earlier to improve bazel caching - Head to the Java examples in our documentation, update the maven version and gradle version through a pull request and verify that all examples still work. Do the same for Kotlin
To release a new version you will need to be registered as an owner on Nuget.
-
In dotnet/selenium-dotnet-version.bzl
- Verify the SE_VERSION matches major/minor/patch
- Verify ASSEMBLY_VERSION matches major Selenium version with minor, patch and build set to zero
- Verify ASSEMBLY_INFORMATIONAL_VERSION matches major Selenium version
-
Build assets:
bazel build --stamp //dotnet/src/webdriver:package
bazel build --stamp //dotnet/src/support:package
bazel build --stamp //dotnet/src/webdriver:package-strongnamed
bazel build --stamp //dotnet/src/support:package-strongnamed
-
Locate assets:
- bazel-bin/dotnet/src/webdriver/Selenium.WebDriver.x.y.z.nupkg
- bazel-bin/dotnet/src/webdriver/Selenium.WebDriver.x.y.z.snupkg
- bazel-bin/dotnet/src/support/Selenium.Support.x.y.z.nupkg
- bazel-bin/dotnet/src/support/Selenium.Support.x.y.z.snupkg
- bazel-bin/dotnet/src/webdriver/Selenium.WebDriver.StrongNamed.x.y.z.nupkg
- bazel-bin/dotnet/src/support/Selenium.Support.StrongNamed.x.y.z.nupkg
-
Copy non-StrongNamed assets to single folder & add to zip file:
selenium-dotnet-x.y.z.zip
-
Copy StrongNamed assets to single folder & add to zip file:
selenium-dotnet-strongnamed-x.y.z.zip
-
Upload both zip files to Selenium Release directory on Github
-
Push to Nuget:
.\third_party\dotnet\nuget\NuGet.exe push .\bazel-bin\dotnet\src\webdriver\Selenium.WebDriver.x.y.z.nupkg -ApiKey XXXYYYZZZAAA -Source https://nuget.org
.\third_party\dotnet\nuget\NuGet.exe push .\bazel-bin\dotnet\src\support\Selenium.Support.x.y.z.nupkg -ApiKey XXXYYYZZZAAA -Source https://nuget.org
-
Head to the .NET examples in our documentation, update the version through a pull request and verify that all examples still work.
To release a new gem you will need to be registered as a gem owner on rubygems.org.
- Bump the version number in https://github.com/SeleniumHQ/selenium/blob/trunk/rb/lib/selenium/webdriver/version.rb
- Update https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES with a summary of changes since the last release.
- Run:
bazel run --stamp //rb:selenium-webdriver-release
- Update the downloads page with updated links, release numbers and dates — https://github.com/SeleniumHQ/seleniumhq.github.io/blob/dev/website_and_docs/layouts/partials/selenium-clients-and-webdriver-bindings.html
- Head to the Ruby examples in our documentation, update the version through a pull request and verify that all examples still work.
To release a new version you need to be registered as a Owner/Maintainer on pypi.python.org
Create a token on pypi and put it in your .pypirc file.
Make sure you have installed twine
and it is available on your PATH (pip install twine
)
- Bump the version numbers
- in setup.py
- in py/BUILD.bazel
- in py/README
- in py/selenium/init.py
- in py/selenium/webdriver/init.py
- in py/docs/source/index.rst
- for major/minor releases, in py/docs/source/conf.py
- update py/CHANGES file
- Commit/push
bazel build --stamp //py:selenium-wheel //py:selenium-sdist
twine upload bazel-bin/py/selenium-4.x.y-py3-none-any.whl bazel-bin/py/selenium-4.x.y.tar.gz
- See Update API Docs
- Head to the Python examples in our documentation, update the version through a pull request and verify that all examples still work.
To release a new version you need to be registered as a Owner/Maintainer on npmjs
- Bump the version number in javascript/node/selenium-webdriver/package.json
- update changes in javascript/node/selenium-webdriver/CHANGES.md
- Commit/push
- Make sure you are authenticated to
npmjs.com
. You can do that withnpm adduser
bazel run --stamp //javascript/node/selenium-webdriver:selenium-webdriver.publish
- Head to the JavaScript examples in our documentation, update the version through a pull request and verify that all examples still work.
For Java, Ruby and Python:
- From the root of the repo run:
./generate_api_docs.sh java|rb|py
- Example: Run
./generate_api_docs.sh java
to update the Java api docs.
- Example: Run
- For the dotnet docs, you need to do that on a Windows machine for now, with the following command in
PowerShell
sh .\generate_api_docs.sh dotnet
- Update Atoms (optional)
bazel build //javascript/ie-driver:header
- copy
bazel-bin/javascript/ie-driver/atoms.h
tocpp/iedriver/Generated
directory
- Open cpp/IEDriverServer.sln in Visual Studio 2022
- In Solution Explorer tab, right click IEDriver/Resource Files/IEDriver.rc & view code
- Update version number in 4 places:
FILEVERSION
,PRODUCTVERSION
,FileVersion
,ProductVersion
- In Solution Explorer tab, right click IEDriverServer/Resource Files/IEDriverServer.rc & view code
- Update version number in 4 places:
FILEVERSION
,PRODUCTVERSION
,FileVersion
,ProductVersion
- Solution Configurations Dropdown in toolbar at top, select
Release
, - In Solution Platform Dropdown, select
x64
& in Build menu, selectBuild Solution
- In Solution Platform Dropdown, select
x86
& in Build menu, selectBuild Solution
- In build/cpp/x64/Release/IEDriverServer.exe compress file as
IEDriverServer_x64_x.y.z.zip
& upload it to Github Release - In build/cpp/Win32/Release/IEDriverServer.exe compress file as
IEDriverServer_Win32_x.y.z.zip
& upload it to Github Release
This wiki is not where you want to be! Visit the Wiki Home for more useful links
Getting Involved
Build Instructions
Releasing Selenium
Updating Chromium DevTools
Ruby Development
Python Bindings
Ruby Bindings
WebDriverJs
This content is being evaluated for where it belongs
Architectural Overview
Automation Atoms
HtmlUnitDriver
Lift Style API
LoadableComponent
Logging
PageFactory
RemoteWebDriver
Xpath In WebDriver
Moved to Official Documentation
Bot Style Tests
Buck
Continuous Integration
Crazy Fun Build
Design Patterns
Desired Capabilities
Developer Tips
Domain Driven Design
Firefox Driver
Firefox Driver Internals
Focus Stealing On Linux
Frequently Asked Questions
Google Summer Of Code
Grid Platforms
History
Internet Explorer Driver
InternetExplorerDriver Internals
Next Steps
PageObjects
RemoteWebDriverServer
Roadmap
Scaling WebDriver
SeIDE Release Notes
Selenium Emulation
Selenium Grid 4
Selenium Help
Shipping Selenium 3
The Team
TLC Meetings
Untrusted SSL Certificates
WebDriver For Mobile Browsers
Writing New Drivers