mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Add documentation on Treeherder
This commit is contained in:
parent
e576e3d79e
commit
1b9de89b15
2 changed files with 110 additions and 0 deletions
|
@ -221,6 +221,11 @@ See respective `README.md` files for:
|
||||||
* [Non-virtualized Linux](packet.net/README.md), hosted by Packet.net
|
* [Non-virtualized Linux](packet.net/README.md), hosted by Packet.net
|
||||||
|
|
||||||
|
|
||||||
|
## Taskcluster − Treeherder integration
|
||||||
|
|
||||||
|
See [`treeherder.md`](treeherder.md).
|
||||||
|
|
||||||
|
|
||||||
## Self-service, Bugzilla, and IRC
|
## Self-service, Bugzilla, and IRC
|
||||||
|
|
||||||
Taskcluster is designed to be “self-service” as much as possible,
|
Taskcluster is designed to be “self-service” as much as possible,
|
||||||
|
|
105
etc/taskcluster/treeherder.md
Normal file
105
etc/taskcluster/treeherder.md
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
# Treeherder for Servo
|
||||||
|
|
||||||
|
Treeherder is tool for visualizing the status of “trees”,
|
||||||
|
meaning branches in various source repositories.
|
||||||
|
It shows each push to the repository with the corresponding commits
|
||||||
|
as well as the CI jobs that were started for that push.
|
||||||
|
While it is possible to write other tools that submit job data,
|
||||||
|
CI integration is easiest with Taskcluster.
|
||||||
|
|
||||||
|
* [Production instance](https://treeherder.mozilla.org/)
|
||||||
|
* [Staging instance](https://treeherder.allizom.org/)
|
||||||
|
* [Source code](https://github.com/mozilla/treeherder/)
|
||||||
|
|
||||||
|
|
||||||
|
## Trees / repositories / branches
|
||||||
|
|
||||||
|
Treeherders knows a about a number of *repostories*.
|
||||||
|
Mercurial on Mozilla’s servers and git on GitHub are supported.
|
||||||
|
Despite the name, in the GitHub case
|
||||||
|
each Treeherder repository maps to one branch in a git repository.
|
||||||
|
They are configured in the [`repository.json`] file.
|
||||||
|
As of this writing there are four for `github.com/servo/servo`,
|
||||||
|
named after the corresponding branch:
|
||||||
|
|
||||||
|
[`repository.json`]: https://github.com/mozilla/treeherder/blob/master/treeherder/model/fixtures/repository.json
|
||||||
|
|
||||||
|
* [`servo-master`](https://treeherder.mozilla.org/#/jobs?repo=servo-master)
|
||||||
|
* [`servo-auto`](https://treeherder.mozilla.org/#/jobs?repo=servo-auto)
|
||||||
|
* [`servo-try`](https://treeherder.mozilla.org/#/jobs?repo=servo-try)
|
||||||
|
* [`servo-try-taskcluster`](https://treeherder.mozilla.org/#/jobs?repo=servo-try-taskcluster)
|
||||||
|
|
||||||
|
In the UI, the “Repos” button near the top right corner allows switching.
|
||||||
|
|
||||||
|
`servo-auto` is the relevant one when a pull request is approved with Homu for landing,
|
||||||
|
since the `auto` branch is where it pushes a merge commit for testing.
|
||||||
|
|
||||||
|
|
||||||
|
## Data flow / how it all works
|
||||||
|
|
||||||
|
(This section is mostly useful for future changes or troubleshooting.)
|
||||||
|
|
||||||
|
Changes to the Treeherder repository are deployed to Staging
|
||||||
|
soon (minutes) after they are merged on GitHub,
|
||||||
|
and to Production manually at some point later.
|
||||||
|
See [current deployment status](https://whatsdeployed.io/s-dqv).
|
||||||
|
|
||||||
|
Once a configuration change with a new repository/branch is deployed,
|
||||||
|
Treeherder will show it in its UI and start recording push and job data in its database.
|
||||||
|
This data comes from [Pulse], Mozilla’s shared message queue that coordinates separate services.
|
||||||
|
The [Pulse Inspector] shows messages as they come (though not in the past),
|
||||||
|
which can be useful for debugging.
|
||||||
|
Note that you need to add at least one “Binding”,
|
||||||
|
or the “Start Listening” button won’t do anything.
|
||||||
|
|
||||||
|
[Pulse]: https://wiki.mozilla.org/Auto-tools/Projects/Pulse
|
||||||
|
[Pulse Inspector]: https://tools.taskcluster.net/pulse-inspector
|
||||||
|
|
||||||
|
|
||||||
|
### Push data
|
||||||
|
|
||||||
|
When [taskcluster-github] is [enabled] on a repository,
|
||||||
|
it recieves [webhooks] from GitHub for various events
|
||||||
|
such as a push to a branch of the repository.
|
||||||
|
|
||||||
|
In addition to starting Taskcluster tasks based on `.taskcluster.yml` in the repository,
|
||||||
|
in [`api.js`] it creates [Pulse messages] corresponding to those events.
|
||||||
|
Treeherder consumes messages from the `exchange/taskcluster-github/v1/push` exchange
|
||||||
|
(among others) in [`push_loader.py`].
|
||||||
|
In Pulse Inspector, these messages for the Servo repository can be seen
|
||||||
|
by specifying the [`primary.servo.servo`] routing key pattern.
|
||||||
|
|
||||||
|
[taskcluster-github]: https://github.com/taskcluster/taskcluster-github
|
||||||
|
[enabled]: https://github.com/apps/taskcluster
|
||||||
|
[webhooks]: https://developer.github.com/webhooks/
|
||||||
|
[Pulse messages]: https://docs.taskcluster.net/docs/reference/integrations/taskcluster-github/references/events
|
||||||
|
[`api.js`]: https://github.com/taskcluster/taskcluster-github/blob/master/src/api.js
|
||||||
|
[`push_loader.py`]: https://github.com/mozilla/treeherder/blob/master/treeherder/etl/push_loader.py
|
||||||
|
[`primary.servo.servo`]: https://tools.taskcluster.net/pulse-inspector?bindings%5B0%5D%5Bexchange%5D=exchange%2Ftaskcluster-github%2Fv1%2Fpush&bindings%5B0%5D%5BroutingKeyPattern%5D=primary.servo.servo
|
||||||
|
|
||||||
|
|
||||||
|
### (Taskcluster) job data
|
||||||
|
|
||||||
|
The Taskcluster Queue generates a number of [Pulse messages about tasks].
|
||||||
|
Each value of the `routes` array in the task definition, with a `route.` prefix prepended,
|
||||||
|
is additional routing key for those messages.
|
||||||
|
|
||||||
|
The [taskcluster-treeherder] integration service reads those messages
|
||||||
|
if they have an appropriate route ([see in Pulse inspector][inspector1]),
|
||||||
|
and converts them into [other messages] ([see in Pulse inspector][inspector2]).
|
||||||
|
However, it will drop an incoming message
|
||||||
|
if the `extra.treeherder` object in the task definition doesn’t conform to the [schema].
|
||||||
|
Such schema validation errors are logged, but those logs are not easy to access.
|
||||||
|
Ask on IRC on `#taskcluster`.
|
||||||
|
|
||||||
|
Finally, Treeherder reads that latter kind of message in [`job_loader.py`].
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[Pulse messages about tasks]: https://docs.taskcluster.net/docs/reference/platform/taskcluster-queue/references/events
|
||||||
|
[taskcluster-treeherder]: https://github.com/taskcluster/taskcluster-treeherder/
|
||||||
|
[other messages]: https://docs.taskcluster.net/docs/reference/integrations/taskcluster-treeherder#job-pulse-messages
|
||||||
|
[schema]: https://schemas.taskcluster.net/treeherder/v1/task-treeherder-config.json
|
||||||
|
[`job_loader.py`]: https://github.com/mozilla/treeherder/blob/master/treeherder/etl/job_loader.py
|
||||||
|
[inspector1]: https://tools.taskcluster.net/pulse-inspector?bindings%5B0%5D%5Bexchange%5D=exchange%2Ftaskcluster-queue%2Fv1%2Ftask-defined&bindings%5B0%5D%5BroutingKeyPattern%5D=route.tc-treeherder.%23
|
||||||
|
[inspector2]: https://tools.taskcluster.net/pulse-inspector?bindings%5B0%5D%5Bexchange%5D=exchange%2Ftaskcluster-treeherder%2Fv1%2Fjobs&bindings%5B0%5D%5BroutingKeyPattern%5D=tc-treeherder.servo-auto._
|
Loading…
Add table
Add a link
Reference in a new issue