This folder contains configuration for the BuildKite based CI checks for this repository.
BuildKite is a CI provider that provides build coordination and reports while we provide the infrastructure.
CI runs are triggered by new PRs and will show up on the GitHub checks interface, along with the other current CI solutions.
Currently it is only used for tests on Windows platforms.
The build pipeline
BuildKite uses a pipeline for each repository. The
pipeline.yml file defines pipeline
build steps for this repository.
Run results can be seen in the GitHub checks interface and in the pipeline dashboard.
Although most configuration is done via
pipeline.yml, some options are only available
in the online pipeline settings.
BuildKite does not provide the host machines where the builds runs, providing instead the BuildKite Agent that should be run our own infrastructure.
This agent polls the BuildKite API for builds, runs them, and reports back the results. Agents are the unit of concurrency: each agent can run one build at any given time. Adding agents allows more builds to be ran at the same time.
Individual agents can have tags, and pipeline steps can target only agents with certain tags via the
agents field in
For example: agents on Windows machines are tagged as
windows, and the Windows specific build
windows: true in their
You can see the current agent pool, along with their tags, in the agents list.
Our host machines
We use Google Cloud as our cloud provider, under the Angular project. To access this project you need need to be logged in with a Google account that's a member of email@example.com. For googlers this may be your google.com account, for others it is an angular.io account.
In this project we have a number of Windows VMs running, each of them with several agents.
provision-windows-buildkite.ps1 file contains instructions on how to create new host VMs that
are fully configured to run the BuildKite agents as services.
Our pipeline uses docker-buildkite-plugin to run build steps inside docker containers. This way we achieve isolation and hermeticity.
Dockerfile file describes a custom Docker image that includes NodeJs, Yarn, and the Bazel
pre-requisites on Windows.
To upload a new version of the docker image, follow any build instructions in
Dockerfile and then
docker build -t angular/node-bazel-windows:NEW_VERSION, followed by
docker push angular/node-bazel-windows:NEW_VERSION.
After being pushed it should be available online, and you can use the new version in
BuildKite status can be found at https://www.buildkitestatus.com/.
Issues related to the BuildKite setup should be escalated to the Tools Team via the current caretaker, followed by Alex Eagle and Filipe Silva.
Support requests should be submitted via email to firstname.lastname@example.org and cc Igor, Misko, Alex, Jeremy and Manu
At the moment our BuildKite CI uses 1 host VM running 4 agents, thus being capable of 4 concurrent
The only test running is
bazel test //tools/ts-api-guardian:all, and the PR check is not
In the future we should add cache support to speed up the initial
yarn install, and also Bazel
remote caching to speed up Bazel builds.
After the current setup is verified as stable and reliable the GitHub PR check can become mandatory.
The tests ran should also be expanded to cover most, if not all, of the Bazel tests.