|  | .. _AddingNewCIJobs: | 
|  |  | 
|  | ================== | 
|  | Adding New CI Jobs | 
|  | ================== | 
|  |  | 
|  | .. contents:: | 
|  | :local: | 
|  |  | 
|  | Adding The Job | 
|  | ============== | 
|  |  | 
|  | libc++ uses Buildkite for running its CI. Setting up new CI jobs is easy, and | 
|  | these jobs can run either on our existing infrastructure, or on your own. | 
|  |  | 
|  | If you need to run the job on your own machines, please follow the | 
|  | `Buildkite guide <https://buildkite.com/docs/agent/v3>`_ to setup your | 
|  | own agents. Make sure you tag your agents in a way that you'll be able | 
|  | to recognize them when defining your job below. Finally, in order for the | 
|  | agent to register itself to Buildkite, it will need a BuildKite Agent token. | 
|  | Please contact a maintainer to get your token. | 
|  |  | 
|  | Then, simply add a job to the Buildkite pipeline by editing ``libcxx/utils/ci/buildkite-pipeline.yml``. | 
|  | Take a look at how the surrounding jobs are defined and do something similar. | 
|  | An example of a job definition is: | 
|  |  | 
|  | .. code-block:: yaml | 
|  |  | 
|  | - label: "C++11" | 
|  | command: "libcxx/utils/ci/run-buildbot generic-cxx11" | 
|  | artifact_paths: | 
|  | - "**/test-results.xml" | 
|  | agents: | 
|  | queue: "libcxx-builders" | 
|  | os: "linux" | 
|  | retry: | 
|  | [...] | 
|  |  | 
|  | If you create your own agents, put them in the ``libcxx-builders`` queue and | 
|  | use agent tags to allow targeting your agents from the Buildkite pipeline | 
|  | config appropriately. | 
|  |  | 
|  | We try to keep the pipeline definition file as simple as possible, and to | 
|  | keep any script used for CI inside ``libcxx/utils/ci``. This ensures that | 
|  | it's possible to reproduce CI issues locally with ease, understanding of | 
|  | course that some setups may require access to special hardware that is not | 
|  | available. | 
|  |  | 
|  | Finally, add your contact info to ``libcxx/utils/ci/BOT_OWNERS.txt``. This will | 
|  | be used to contact you when there are issues with the bot. | 
|  |  | 
|  | Testing Your New Job | 
|  | ==================== | 
|  |  | 
|  | Testing your new job is easy -- once your agent is set up (if any), just open | 
|  | a code review and the libc++ CI pipeline will run, including any changes you | 
|  | might have made to the pipeline definition itself. | 
|  |  | 
|  | Service Level Agreement | 
|  | ======================= | 
|  |  | 
|  | To keep the libc++ CI useful for everyone, we aim for a quick turnaround time | 
|  | for all CI jobs. This allows the overall pipeline to finish in a reasonable | 
|  | amount of time, which is important because it directly affects our development | 
|  | velocity. We also try to make sure that jobs run on reliable infrastructure in | 
|  | order to avoid flaky failures, which reduce the value of CI for everyone. | 
|  |  | 
|  | We may be reluctant to add and support CI jobs that take a long time to finish | 
|  | or that are too flaky. |