blob: a0a726ba502eedd22bd890a73a29c50f28f4dc7e [file] [log] [blame] [view]
# Using the Bazel CI
[Bazel CI](https://ci.bazel.build) tests Bazel and a variety of
open-source projects that use Bazel.
We also use the projects using Bazel to validate Bazel changes.
The Bazel CI:
* runs presubmit tests (on a pending change)
* runs postsubmit tests (on the master branch)
* handles the release project of Bazel
If you wish to add or modify a configuration for one of the projects on
Bazel CI, see the [project owner documentation](owner.md).
## Postsubmit <a name="postsubmit"></a>
The CI uses the GitHub API and handles test runs automatically if
[bazel-io](https://github.com/bazel-io) has write access to the repository.
The result of a build can be one of:
* Success (job is green)
* Unstable (job is yellow), if some tests failed.
The Blue Ocean View<sup>1</sup> shows the failing platforms in Pipeline view
and the list of failing tests in Tests view.
* Failed (job is red), if compilation failed or configuration files are
broken.
The Blue Ocean View<sup>1</sup> shows the build breakage. If it doesn't,
you should look at the full console log.
<sup>1</sup> The Open Blue Ocean view is a Jenkins UI. There's a link to it on
the default Jenkins UI, on the left side in the Job view.
Tips:
* Test logs are available under the artifacts list via the URL
`<joburl>/artifact`.
Example: https://ci.bazel.build/job/bazel-tests/lastCompletedBuild/artifact/
* Flaky tests can be analyzed with the Test Results Analyzer
The analyzer is available in the normal job view on the side menu (the one
which shows the test's history).
* The "Pipeline Steps" button on the side menu on a job view lets you examine
each step of the Jenkins pipeline.
Looking for the enclosing workspace or node start step of another step gives
you access to the workspace of that step.
Current limitations:
* Jenkins Blue Ocean UI has no good way to mark an unstable steps.
If a platform stage fails without clear sub-step failing, look for the last
shell step in the platform stage view.
* Tests are not ordered by platforms in the test view.
## Presubmit
The Bazel CI can run presubmit tests for changes from GitHub and from Gerrit.
### GitHub pull requests
A GitHub pull request is tested when:
* a pull request admin comments "test this please" or "retest this please"
* an admin pushes a Pull Request
Pull request admins are the people from:
* the [bazelbuild](https://github.com/bazelbuild) organization, or
* the [google](https://github.com/google) organization
Jenkins considers those people to be admins whose visibility is public. To make
someone public:
1. go to [the Bazel organization
page](https://github.com/orgs/bazelbuild/people) (or the
[Google organization page](https://github.com/orgs/google/people)
respectively)
2. find the person's name and change their visibility to public
To test pull requests, [bazel-io](https://github.com/bazel-io) needs
write access to the repository. This is always the case if the repository is in
the `bazelbuild` organization, otherwise you may need to grant access.
### Gerrit code reviews
A Gerrit code review is tested when someone marks the code review as
`Presubmit-Ready+1`.
Marking the code review as presubmit ready:
* automatically adds "Bazel CI" as a reviewer
* updates the review thread with the link to the test results
* marks the code review as `Verified+1` or `Verified-1` depending on the
result of the test
To retrigger a test, simply reset the `Presubmit-Ready` label.
You can read the output the same way as of the [postsubmit](#postsubmit).
## Global tests <a name="global-tests"></a>
The Bazel CI can also do a "global test".
A global test:
1. builds Bazel from a branch
2. uses the resulting Bazel binary to run all the other jobs on the Bazel CI
3. produces a report comparing the global test results of this binary and of
the latest release of Bazel
This report is at
`https://ci.bazel.build/job/bazel/job/<nightly|release|presubmit>/<buildNumber>/Downstream_projects/`.
For example for the last nigthly run it will be at
https://ci.bazel.build/job/bazel/job/nightly/lastBuild/Downstream_projects/ .
The way to read that report is as follows:
* Newly failing jobs are problematic.
They are likely to indicate a failure due to a Bazel change. These make the
build to be unstable (yellow).
* Already failing jobs may be fine.
They mean that the job result is no worse than before. It is usually safe to
ignore these failure, but we should aim to have none of them, because they
might hide new regressions.
* Passing jobs are safe to ignore.
## Release process
In addition to testing all the jobs, the [Global test](#global-tests) handles
pushing artifacts that are created by a release branch to GCS and to the GitHub
release system.