blob: 211060344ceee56ca272849d3ee121edd0eb066c [file] [log] [blame] [view]
# Overview
This is an overview of how Skia is built and tested and the relationships
between the various services we use.
## Life of a +1
What happens when a user submits a CL to the Commit Queue (CQ):
<details>
<summary>
<object type="image/svg+xml" data="https://dot.skia.org/dot?lifeof"></object>
</summary>
<pre>
digraph {
rankdir=LR;
node [shape = box, fixedsize = true, width=2, height=0.6];
IN, OUT [style = invis];
// The top level input and output flows, a +2 goes in and eventually an email is sent
// on success or failure.
IN -> Gerrit [ label="+2" ];
Gerrit -> OUT [ label="email" ];
// Requests flowing down to Swarming to do the building, testing, and uploading.
Gerrit -> CQ [ label="CL (poll)" ];
LUCIConfig -> CQ [ label="TryJobs\n(poll)" ];
CQ -> BuildBucket [ label="create(CL, TryJob)\n(API)" ];
BuildBucket -> TaskScheduler [ label="CL+TryJob\n(poll)" ];
TaskScheduler -> Swarming [ label="TaskInfo\nCIPD List + Isolate List" ];
TaskScheduler -> Isolate [ label="HEAD+CL" ];
CIPD -> Swarming [ label="(pull)" ];
Isolate -> Swarming [ label="(pull)" ];
// Propagating the signal that the job is done.
Swarming -> TaskScheduler [ label="TaskResult\nPubSub+poll", style=dotted ];
TaskScheduler -> BuildBucket [ label="Done", style=dotted ];
BuildBucket -> CQ [ label="Done", style=dotted ];
CQ -> Gerrit [ label="Done", style=dotted ];
}
</pre>
</details>