summaryrefslogtreecommitdiff
path: root/.github
diff options
context:
space:
mode:
authorAlec Scott <alec@bcs.sh>2021-08-06 15:53:46 -0700
committerGitHub <noreply@github.com>2021-08-06 15:53:46 -0700
commitb92fa6bbf9a40629320e326d714b9ee3085394e4 (patch)
treeb964416e30e76ea0f024a8a7d21cf2cc10e265d8 /.github
parent97993ac38afdd488fcd785717a658fa418f070d8 (diff)
downloadspack-b92fa6bbf9a40629320e326d714b9ee3085394e4.tar.gz
spack-b92fa6bbf9a40629320e326d714b9ee3085394e4.tar.bz2
spack-b92fa6bbf9a40629320e326d714b9ee3085394e4.tar.xz
spack-b92fa6bbf9a40629320e326d714b9ee3085394e4.zip
Add New Build Containers Workflow (#24257)
This pull request adds a new workflow to build and deploy Spack Docker containers from GitHub Actions. In comparison with our current system where we use Dockerhub's CI to build our Docker containers, this workflow will allow us to now build for multiple architectures and deploy to multiple registries. (At the moment x86_64 and Arm64 because ppc64le is throwing an error within archspec.) As currently set up, the PR will build all of the current containers (minus Centos6 because those yum repositories are no longer available?) as both x86_64 and Arm64 variants. The workflow is currently setup to build and deploy containers nightly from develop as well as on tagged releases. The workflow will also build, but NOT deploy containers on a pull request for the purposes of testing this PR. At the moment it is setup to deploy the built containers to GitHub's Container Registry although, support for also uploading to Dockerhub/Quay can be included easily if we decide to keep releasing on Dockerhub/want to begin releasing on Quay.
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/build-containers.yml79
1 files changed, 79 insertions, 0 deletions
diff --git a/.github/workflows/build-containers.yml b/.github/workflows/build-containers.yml
new file mode 100644
index 0000000000..27ecf591be
--- /dev/null
+++ b/.github/workflows/build-containers.yml
@@ -0,0 +1,79 @@
+name: Build & Deploy Docker Containers
+on:
+ # Build new Spack develop containers nightly.
+ schedule:
+ - cron: '34 0 * * *'
+ # Let's also build & tag Spack containers on releases.
+ release:
+ types: [published]
+
+jobs:
+ deploy-images:
+ runs-on: ubuntu-latest
+ strategy:
+ # Even if one container fails to build we still want the others
+ # to continue their builds.
+ fail-fast: false
+ # A matrix of Dockerfile paths, associated tags, and which architectures
+ # they support.
+ matrix:
+ dockerfile: [[amazon-linux, amazonlinux-2.dockerfile, 'linux/amd64,linux/arm64'],
+ [centos7, centos-7.dockerfile, 'linux/amd64,linux/arm64'],
+ [leap15, leap-15.dockerfile, 'linux/amd64,linux/arm64'],
+ [ubuntu-xenial, ubuntu-1604.dockerfile, 'linux/amd64,linux/arm64'],
+ [ubuntu-bionic, ubuntu-1804.dockerfile, 'linux/amd64,linux/arm64']]
+ name: Build ${{ matrix.dockerfile[0] }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v2
+
+ - name: Set Container Tag Normal (Nightly)
+ run: |
+ container="ghcr.io/spack/${{ matrix.dockerfile[0]}}:latest"
+ echo "container=${container}" >> $GITHUB_ENV
+ echo "versioned=${container}" >> $GITHUB_ENV
+
+ # On a new release create a container with the same tag as the release.
+ - name: Set Container Tag on Release
+ if: github.event_name == 'release'
+ run: |
+ versioned="ghcr.io/spack/${{matrix.dockerfile[0]}}:${GITHUB_REF##*/}"
+ echo "versioned=${versioned}" >> $GITHUB_ENV
+
+ - name: Check ${{ matrix.dockerfile[1] }} Exists
+ run: |
+ printf "Preparing to build ${{ env.container }} from ${{ matrix.dockerfile[1] }}"
+ if [ ! -f "share/spack/docker/${{ matrix.dockerfile[1]}}" ]; then
+ printf "Dockerfile ${{ matrix.dockerfile[0]}} does not exist"
+ exit 1;
+ fi
+
+ - name: Log in to GitHub Container Registry
+ # Don't log into registry on pull request.
+ if: github.event_name != 'pull_request'
+ uses: docker/login-action@v1
+ with:
+ registry: ghcr.io
+ username: spack
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v1
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v1
+
+ - name: Build ${{ matrix.dockerfile[1] }}
+ uses: docker/build-push-action@v2
+ with:
+ file: share/spack/docker/${{matrix.dockerfile[1]}}
+ platforms: ${{ matrix.dockerfile[2] }}
+ push: false
+ tags: |
+ ${{ env.container }}
+ ${{ env.versioned }}
+
+ - name: Deploy ${{ matrix.dockerfile[1] }}
+ # And don't push the container on a pull request.
+ if: github.event_name != 'pull_request'
+ run: docker push ghcr.io/spack/${{ matrix.dockerfile[0]}} --all-tags