| .. _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" |
| retry: |
| automatic: |
| - exit_status: -1 # Agent was lost |
| limit: 2 |
| |
| If you've created your own agents, you should provide the tag that you used |
| when creating them in the ``queue`` entry -- this will instruct Buildkite to |
| run that job only on agents that have that tag. |
| |
| 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. |
| |
| 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. |