diff options
Diffstat (limited to '.github/workflows')
-rw-r--r-- | .github/workflows/build-containers.yml | 46 | ||||
-rwxr-xr-x | .github/workflows/generate_spack_yaml_containerize.sh | 9 |
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 |