Skip to content
Snippets Groups Projects
README.org 3.01 KiB
Newer Older
#+TITLE: CCL Docker Images

This project contains Dockerfiles for a variety of stock CCL images as well as
CI infrastructure to automatically build and push them.

See [[file:hub-description.org]] for a more detailed description of the images.

* Image Repos

  The end goal is to get these images accepted into Docker's official image
  program. This drives the current layout of the repo as the official images
  program does not allow images to be customized via build args.

  Again, similar to the official images program, images are pushed to an arch
  specific organization and then pushed to a common organization using Docker
  manifests.

* CI

  We use a mixture of Travis CI and GitHub Actions to build the images. Travis
  is responsible for building all Linux based images and GitHub Actions builds
  the Windows based images. The reason for this split is primarily because
  Travis provides hosted Arm instances, whereas GitHub currently does not.

  Building the images can take a *long* time and can occasionally fail due to
  transient conditions outside our control. Given that there are a large number
  of images, we want to cache images between builds so we can reuse as much
  work as possible. Additionally, we don't want to waste time rebuilding images
  that have already been released if the goal is to test changes to the nightly
  images. Therefore, the CI jobs follow the following rules:

  For jobs run on master, all images are built and pushed to the arch specific
  repos with tags ending in =-tmp-master=. Nightly images are then retagged
  without the suffix and pushed to the common org using manifests. When a
  manual release job is triggered, all non-nightly images are retagged without
  the suffix and pushed to the common org using manifests.

  For jobs run on a branch starting with =nightly-= only the nightly images are
  built and are pushed (if possible) to the arch specific repos with the tag
  suffix =-tmp=. These tags are used as potential cache sources when building
  on any branch (including master).

  For jobs run on any other branch, all images are built and pushed (if
  possible) to the arch specific repos with the tag suffix =-tmp=. These tags
  are used as potential cache sources when building on any branch (including
  master).

  This tagging scheme means that multiple non-master branches being developed
  on in parallel will stomp on each other's caches. However, for now, that
  seems like an acceptable tradeoff when compared to coming up with a more
  robust tagging scheme.

** Rebuilding for new base images

   CCL does not release on a regular cadence. As such, it is desirable to
   occasionally rebuild and re-release images to account for the base image
   being updated. Currently, this rebuild happens monthly and only for the
   Linux images. Due to Travis CI not allowing cron jobs to have extra
   configuration, the only way to distinguish between nightly builds and
   rebuilds is by branch name. The stable branch should generally track master
   and is the branch which rebuilds happen on.