NOAA-GSL / ExascaleWorkflowSandbox

Other
2 stars 2 forks source link

Implement multi-platform container build in CI #66

Closed christopherwharrop-noaa closed 6 months ago

christopherwharrop-noaa commented 6 months ago

This PR adds the capability of building and pushing multi-platform containers in CI so that developers and contributor can work with containers on both x86 and arm platforms without having to use QEMU emulation for building the spack-stack container (which is intractable).

The ARM64 build uses beta GitHub runners. The docker layer caches used for building spack-stack have been split into arm64 and amd64 versions. Building now requires three steps:

1) Build arm64 and amd64 versions of spack-stack (each on native runners) and push their digests 2) Merge spack-stack digests for the two platforms and push to registry to create a multi-platform spack-stack container 3) Build our Chiltepin containers for amd64 (frontend, master, and node) 4) Bring up the Chiltepin containers with docker compose and run the test suite (only tests on amd64 for now, but I think that's ok) 5) If it passes, build our Chiltepin containers for amd64 (from cache, because we already did it) and arm64 (QEMU is used for this because the containers are small) and push them to the registry to create multi-platform versions

christopherwharrop-noaa commented 6 months ago

@NaureenBharwaniNOAA - This is ready also. This is a huge change to the CI workflow configuration, a lot of which is pretty ugly. There might be ways to make it "prettier" but I'm not sure at the moment. With this PR merged, you should be able to build and run the containers on your Mac laptop without any errors. And you should also be able to pull the container and use it without any errors also. So, this is a big step forward.

christopherwharrop-noaa commented 6 months ago

@NaureenBharwaniNOAA - This is ready to go now. Once this is in, I'd like you to try both pulling and building the container on your Mac. This PR should solve that long-standing problem for good.