
This is an alternative approach to #3698 that was setting up a custom mapping between chromium revisions and our mirrored builds. For example, we were taking chromium `792639` and re-packaging it to our CDN as Chromium 1000. One big downside of this opaque mapping was inability to quickly understand which Chromium is mirrored to CDN. To solve this, this patch starts treating browser revision as a fractional number, with and integer part being a chromium revision, and fractional part being our build number. For example, we can generate builds `792639`, `792639.1`, `792639.2` etc, all of which will pick Chromium `792639` and re-package it to our CDN. In the Playwright code itself, there are a handful of places that treat browser revision as integer, exclusively to compare revision with some particular revision numbers. This code would still work as-is, but I changed these places to use `parseFloat` instead of `parseInt` for correctness.
Contributing Browser Patches
Firefox and WebKit have additional patches atop to expose necessary capabilities.
Ideally, all these changes should be upstreamed. For the time being, it is possible to setup a browser checkout and develop from there.
1. Setting up local browser checkout
From the playwright
repo, run the following command:
$ ./browser_patches/prepare_checkout.sh firefox <path to checkout>
(you can optionally pass "webkit" for a webkit checkout)
If you don't have a checkout, don't pass a path and one will be created for you in ./browser_patches/firefox/checkout
NOTE: this command downloads GBs of data.
This command will:
- create a
browser_upstream
remote in the checkout - create a
playwright-build
branch and apply all playwright-required patches to it.
2. Developing a new change
You want to create a new branch off the playwright-build
branch.
Assuming that you're under ./browser_patches/firefox/checkout
:
$ git checkout -b my-new-feature playwright-build
$ # develop my feature on the my-new-feature branch ....
3. Exporting your change to playwright repo
Once you're happy with the work you did in the browser-land, you want to export it to the playwright
repo.
Assuming that you're in the root of the playwright
repo and that your browser checkout has your feature branch checked out:
$ ./browser_patches/export.sh firefox <path to checkout>
This script will:
- create a new patch and put it to the
./browser_patches/firefox/patches/
- update the
./browser_patches/firefox/UPSTREAM_CONFIG.sh
if necessary - bump the
./browser_patches/firefox/BUILD_NUMBER
number.
If you omit the path to your checkout, the script will assume one is located at ./browser_patches/firefox/checkout
Send a PR to the Playwright repo to be reviewed.
4. Rolling Playwright to the new browser build
Once the patch has been committed, the build bots will kick in, compile and upload a new browser version to all the platforms. Then you can roll the browser:
$ node utils/roll_browser.js chromium 123456