-
Notifications
You must be signed in to change notification settings - Fork 2.5k
PR Builder overview
Every PR in brave-browser or brave-core needs to pass a series of automated checks before merging as described below.
On each PR, you should see the checks section as below (unless it's a draft PR or has the CI/skip
label applied).
Details
link will take you to the actual check results (Jenkins private, Travis publicly accessible).
We have a private Jenkins server available at https://ci.brave.com (you need VPN and a Jenkins account). There are 10 pipelines at https://ci.brave.com/view/ci, per repo and per platform.
Each of these is setup in Jenkins as a multibranch pipeline. A scan is done every 5 minutes for new changes and (once detected) the job will automatically be queued up. Forks are ignored. When a new build starts it will cancel the previously running ones, unless it gets aborted for the following reasons:
- PR labeled with
CI/skip
- PR is in draft
Extra skipping is available per platform using the CI/skip-android
, CI/skip-ios
, CI/skip-linux
, CI/skip-macos
, CI/skip-windows
labels for PRs that do not need to run checks on all platforms.
Slack notifications will be sent to PR author based on a map that associates the GitHub user with their corresponding Slack username. To update, copy the value from our password manager, edit, then update in the Jenkins credential store github-to-slack-username-map
variable.
You can see the history of checks by going into the specific PR Jenkins as seen in the list below.
When on a specific build from the build history there are some helpful links:
-
Console Output
- view full build output -
Parameters
- view parameter values that have been passed to the build (as defined above) -
Test Result
- view test results (unit and browser tests together) -
Replay
- replay build (with option to alter pipeline) -
Pipeline Steps
- best view for seeing the full list of steps and debugging (can view status and output of individual steps) -
Workspaces
- view files in the build workspaces and nodes allocated to the build
The checks that are done are defined in the Jenkinsfile
at the root of the project https://github.com/brave/devops/blob/master/jenkins/jobs/browser/Jenkinsfile.
The above gets called independently by both https://github.com/brave/brave-browser/blob/master/Jenkinsfile and https://github.com/brave/brave-core/blob/master/Jenkinsfile. After the build is done, it will look for a PR in the other repo and update its status.
We use ephemeral nodes in AWS for building Android, Linux and Windows x64 (which get shutdown if idle for 30m - if no other builds start on them). For iOS and macOS builds we use physical machines (which means higher chance to re-use workspaces).
This Jenkinsfile
defines the pipeline that builds in parallel for Android x86
, iOS arm64
, Linux, macOS and Windowx x64
with the steps below:
- notify the PR author on Slack that build has started
- checkout source code
- pin locally branch in
package.json
if branch also exists inbrave-core
- install dependencies (
npm install --no-optional
) and removegclient
lock files - test scripts (
npm run test:scripts
) - initialize the repository (across runs we do
rm -rf src/brave
to force fetching the latest code thennpm run init
) - audit dependencies (
npm run audit_deps
) - run lint (
npm run lint
) - enable
sccache
- build
- gn check (
npm run gn_check
) - audit network (
npm run network-audit
) - unit tests and browser tests (
npm run test -- brave_unit_tests
andnpm run test -- brave_browser_tests
) - create binaries (and optionally sign)
- upload build artifacts to S3 (
.apk
,.zip
,.dmg
,.pkg
,.deb
,.rpm
,.exe
) - report build results and link to artifacts via Slack (to PR author and #build-downloads-bot)
To navigate from the brave-browser-build-pr-*
or the brave-core-build-pr-*
pipeline please go to Console Output
and press the link to pr-brave-browser-...
. This will take you to where actually everything gets executed.
Besides the checks done by our Jenkins job, there are some additional checks done via Travis:
- JavaScript lint and unit tests
- security checks
- Python lint (pep8)
We also use sonarcloud.io for code quality checks.
To build a PR on demand press on the Build with Parameters
link from the Jenkins job view (brave-browser-build-pr
or brave-core-build-pr
). The following parameters are available:
- CHANNEL -
nightly
by default but can bedev
,beta
orrelease
as well - BUILD_TYPE -
Release
by default but can beDebug
as well - WIPE_WORKSPACE -
false
by default - SKIP_INIT -
false
by default - DISABLE_SCCACHE -
false
by default (only for Linux and macOS) - SKIP_SIGNING -
true
by default - DCHECK_ALWAYS_ON -
true
by default
Same is valid for restarts, always do them from the top level jobs for proper status reporting.
- for employees, join the
#brave-browser-ci
Slack channel - for external contributors (community), we would like to have the content of these checks be publicly viewable in the future
- additional non-public information is available in the devops wiki