Skip to content

CI Image Organization

Where Dockerfiles live

CI images used in a single repository

Dockerfiles for images specific to CI takes for a given repository live in a .ci-dockerfiles directory in that repository. As an example, you can check out the .ci-dockerfiles for the ponyc repo.

By living in the same repo where the generated images are used, we can version the changes to the Dockerfiles along with corresponding changes to CI configuration.

CI images used around repositories

Dockerfiles that are shared across different repositories live in a repo called shared-docker.

Image naming

Most CI images are named according to the following pattern


for example, a ponyc x86-64-pc-windows-msvc-builder image created on July 2nd, 2020 would have the name:

  • ponylang/ponyc-ci-x86-64-pc-windows-msvc-builder:20200702

and a shellcheck image that is shared across repos and was generated on January 1, 2018 would have the name:

  • ponylang/shared-docker-ci-shellcheck:20180101

Using the date as a tag

By using a date as a tag, we can avoid breakage when we do an update. The creation of a new image is divorced from the usage of that image to do testing.It’s extra work when updating but removes the “spooky action at a distance” that we previously had.

Having the contents of a testing environment change out from under you without any indication that it has happened is the primary driver for our selecting a date based naming scheme.

Image naming for dependent build Docker images

We have some docker images that we want to keep up to date with the latest comings and going of other packages. That is, we have images that we always want to be use most recent ponyc or the most recently released ponyc. The same applies to ponyup, corral, and other programs that might be included in the image.

Our nightly builders are an example of this, we want to use the most recent ponyc for latest and most recently released ponyc. For these, our tags are latest and release.

For example, the x86-64-unknown-linux-builder nightly builder with the latest and greatest of everything Pony is:

  • ponylang/shared-docker-ci-x86-64-unknown-linux-builder:latest

And x86-64-unknown-linux-builder nightly builder that relies on released versions of the Pony tools is:

  • ponylang/shared-docker-ci-x86-64-unknown-linux-builder:release