1# How to Branch and Roll Chromium's ANGLE Dependency 2 3ANGLE provides an implementation of OpenGL ES on Windows, which Chromium relies 4upon for hardware accelerated rendering and WebGL support. Chromium specifies 5its dependency on a specific version of ANGLE in the repository; this document 6describes how to update that dependency, and, if necessary, create an ANGLE 7branch to correspond to a branched release of Chrome. 8 9ANGLE's commit queue also runs browser-level tests which are hosted in 10the Chromium repository. To reduce the chance of a Chromium-side 11change breaking ANGLE's CQ, the version of Chromium against which 12ANGLE changes is also snapshotted, and rolled forward into ANGLE with 13appropriate testing. 14 15## Autorollers 16 17At present, autorollers manage both the ANGLE roll into Chromium, and 18the Chromium roll into ANGLE. All of the ANGLE-related autorollers are 19documented in the [ANGLE Wrangling 20documentation](../infra/ANGLEWrangling.md#the-auto-rollers). 21 22## Manually rolling DEPS 23 24Chromium's dependency on third-party projects is tracked in [the Chromium 25repository's src/DEPS file](http://src.chromium.org/viewvc/chrome/trunk/src/DEPS). To update the ANGLE 26dependency: 27 28 * Find the line in this file that defines "src/third\_party/angle" 29for deps (**not** deps\_os) 30 * Change the [git SHA-1 revision 31number](http://git-scm.com/book/ch6-1.html) to be that of the commit 32on which Chromium should depend. Please use the full SHA-1, not a 33shortened version. 34 * You can find the SHA-1 for a particular commit with `git log` on the 35appropriate branch of the repository, or via [the public repository 36viewer](https://chromium.googlesource.com/angle/angle). 37 * If using the public repository viewer, you will need to select the 38branch whose log you wish to view from the list on the left-hand side, 39and then click on the "tree" link at the top of the resulting 40page. Alternatively, you can navigate to 41`https://chromium.googlesource.com/angle/angle/+/<branch name>/` -- 42including the terminating forward slash. (e.g. 43`https://chromium.googlesource.com/angle/angle/+/main/`) 44 45## Branching ANGLE 46 47Sometimes, individual changes to ANGLE are needed for a release of Chrome which 48has already been branched. If this is the case, a branch of ANGLE should be 49created to correspond to the Chrome release version, so that Chrome may 50incorporate only these changes, and not everything that has been committed since 51the version on which Chrome depended at branch time. **Please note: Only ANGLE 52admins can create a new branch.** To create a branch of ANGLE for a branched 53Chrome release: 54 55 * Determine what the ANGLE dependency is for the Chrome release 56by checking the DEPS file for that branch. 57 * Check out this commit as a new branch in your local repository. 58 * e.g., for [the Chrome 34 release at 59chrome/branches/1847](http://src.chromium.org/viewvc/chrome/branches/1847/src/DEPS), 60the ANGLE version is 4df02c1ed5e97dd54576b06964b1da67ea30238e. To 61check this commit out locally and create a new branch named 'mybranch' 62from this commit, use: ```git checkout -b mybranch 634df02c1ed5e97dd54576b06964b1da67ea30238e``` 64 * To create this new branch in the public repository, you'll need to push the 65branch to the special Gerrit reference location, 'refs/heads/<branch name>'. You 66must be an ANGLE administrator to be able to push this new branch. 67 * e.g., to use your local 'mybranch' to create a branch in the public repository called 68'chrome\_m34', use: ```git push origin mybranch:refs/heads/chrome_m34``` 69 * The naming convention that ANGLE uses for its release-dedicated branches is 'chrome\_m##'. 70