summaryrefslogtreecommitdiff
path: root/.github
diff options
context:
space:
mode:
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/build-containers.yml46
-rwxr-xr-x.github/workflows/generate_spack_yaml_containerize.sh9
2 files changed, 43 insertions, 12 deletions
diff --git a/.github/workflows/build-containers.yml b/.github/workflows/build-containers.yml
index 358960d563..6a7e51d5e2 100644
--- a/.github/workflows/build-containers.yml
+++ b/.github/workflows/build-containers.yml
@@ -13,6 +13,8 @@ on:
paths:
- '.github/workflows/build-containers.yml'
- 'share/spack/docker/*'
+ - 'share/templates/container/*'
+ - 'lib/spack/spack/container/*'
# Let's also build & tag Spack containers on releases.
release:
types: [published]
@@ -29,11 +31,17 @@ jobs:
# 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,linux/ppc64le'],
- [leap15, leap-15.dockerfile, 'linux/amd64,linux/arm64,linux/ppc64le'],
- [ubuntu-xenial, ubuntu-1604.dockerfile, 'linux/amd64,linux/arm64,linux/ppc64le'],
- [ubuntu-bionic, ubuntu-1804.dockerfile, 'linux/amd64,linux/arm64,linux/ppc64le']]
+ # Meaning of the various items in the matrix list
+ # 0: Container name (e.g. ubuntu-bionic)
+ # 1: Platforms to build for
+ # 2: Base image (e.g. ubuntu:18.04)
+ dockerfile: [[amazon-linux, 'linux/amd64,linux/arm64', 'amazonlinux:2'],
+ [centos7, 'linux/amd64,linux/arm64,linux/ppc64le', 'centos:7'],
+ [centos-stream, 'linux/amd64,linux/arm64,linux/ppc64le', 'centos:stream'],
+ [leap15, 'linux/amd64,linux/arm64,linux/ppc64le', 'opensuse/leap:15'],
+ [ubuntu-bionic, 'linux/amd64,linux/arm64,linux/ppc64le', 'ubuntu:18.04'],
+ [ubuntu-focal, 'linux/amd64,linux/arm64,linux/ppc64le', 'ubuntu:20.04'],
+ [ubuntu-jammy, 'linux/amd64,linux/arm64,linux/ppc64le', 'ubuntu:22.04']]
name: Build ${{ matrix.dockerfile[0] }}
steps:
- name: Checkout
@@ -52,14 +60,26 @@ jobs:
versioned="${{matrix.dockerfile[0]}}:${GITHUB_REF##*/}"
echo "versioned=${versioned}" >> $GITHUB_ENV
- - name: Check ${{ matrix.dockerfile[1] }} Exists
+ - name: Generate the Dockerfile
+ env:
+ SPACK_YAML_OS: "${{ matrix.dockerfile[2] }}"
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"
+ .github/workflows/generate_spack_yaml_containerize.sh
+ . share/spack/setup-env.sh
+ mkdir -p dockerfiles/${{ matrix.dockerfile[0] }}
+ spack containerize --last-stage=bootstrap | tee dockerfiles/${{ matrix.dockerfile[0] }}/Dockerfile
+ printf "Preparing to build ${{ env.container }} from dockerfiles/${{ matrix.dockerfile[0] }}/Dockerfile"
+ if [ ! -f "dockerfiles/${{ matrix.dockerfile[0] }}/Dockerfile" ]; then
+ printf "dockerfiles/${{ matrix.dockerfile[0] }}/Dockerfile does not exist"
exit 1;
fi
+ - name: Upload Dockerfile
+ uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535
+ with:
+ name: dockerfiles
+ path: dockerfiles
+
- name: Set up QEMU
uses: docker/setup-qemu-action@27d0a4f181a40b142cce983c5393082c365d1480 # @v1
@@ -80,12 +100,14 @@ jobs:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- - name: Build & Deploy ${{ matrix.dockerfile[1] }}
+ - name: Build & Deploy ${{ matrix.dockerfile[0] }}
uses: docker/build-push-action@ac9327eae2b366085ac7f6a2d02df8aa8ead720a # @v2
with:
- file: share/spack/docker/${{matrix.dockerfile[1]}}
- platforms: ${{ matrix.dockerfile[2] }}
+ context: dockerfiles/${{ matrix.dockerfile[0] }}
+ platforms: ${{ matrix.dockerfile[1] }}
push: ${{ github.event_name != 'pull_request' }}
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
tags: |
spack/${{ env.container }}
spack/${{ env.versioned }}
diff --git a/.github/workflows/generate_spack_yaml_containerize.sh b/.github/workflows/generate_spack_yaml_containerize.sh
new file mode 100755
index 0000000000..2a180b7dd1
--- /dev/null
+++ b/.github/workflows/generate_spack_yaml_containerize.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+ (echo "spack:" \
+&& echo " specs: []" \
+&& echo " container:" \
+&& echo " format: docker" \
+&& echo " images:" \
+&& echo " os: \"${SPACK_YAML_OS}\"" \
+&& echo " spack:" \
+&& echo " ref: ${GITHUB_REF}") > spack.yaml