
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.
80 lines
2.2 KiB
Docker
80 lines
2.2 KiB
Docker
FROM ubuntu:18.04
|
|
MAINTAINER Spack Maintainers <maintainers@spack.io>
|
|
|
|
ENV DOCKERFILE_BASE=ubuntu \
|
|
DOCKERFILE_DISTRO=ubuntu \
|
|
DOCKERFILE_DISTRO_VERSION=18.04 \
|
|
SPACK_ROOT=/opt/spack \
|
|
DEBIAN_FRONTEND=noninteractive \
|
|
CURRENTLY_BUILDING_DOCKER_IMAGE=1 \
|
|
container=docker
|
|
|
|
RUN apt-get -yqq update \
|
|
&& apt-get -yqq install --no-install-recommends \
|
|
build-essential \
|
|
ca-certificates \
|
|
curl \
|
|
file \
|
|
g++ \
|
|
gcc \
|
|
gfortran \
|
|
git \
|
|
gnupg2 \
|
|
iproute2 \
|
|
lmod \
|
|
locales \
|
|
lua-posix \
|
|
make \
|
|
python3 \
|
|
python3-pip \
|
|
python3-setuptools \
|
|
tcl \
|
|
unzip \
|
|
&& locale-gen en_US.UTF-8 \
|
|
&& pip3 install boto3 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
COPY bin $SPACK_ROOT/bin
|
|
COPY etc $SPACK_ROOT/etc
|
|
COPY lib $SPACK_ROOT/lib
|
|
COPY share $SPACK_ROOT/share
|
|
COPY var $SPACK_ROOT/var
|
|
RUN mkdir -p $SPACK_ROOT/opt/spack
|
|
|
|
RUN ln -s $SPACK_ROOT/share/spack/docker/entrypoint.bash \
|
|
/usr/local/bin/docker-shell \
|
|
&& ln -s $SPACK_ROOT/share/spack/docker/entrypoint.bash \
|
|
/usr/local/bin/interactive-shell \
|
|
&& ln -s $SPACK_ROOT/share/spack/docker/entrypoint.bash \
|
|
/usr/local/bin/spack-env
|
|
|
|
# Add LANG default to en_US.UTF-8
|
|
ENV LANGUAGE en_US.UTF-8
|
|
ENV LANG en_US.UTF-8
|
|
ENV LC_ALL en_US.UTF-8
|
|
|
|
RUN mkdir -p /root/.spack \
|
|
&& cp $SPACK_ROOT/share/spack/docker/modules.yaml \
|
|
/root/.spack/modules.yaml \
|
|
&& rm -rf /root/*.* /run/nologin $SPACK_ROOT/.git
|
|
|
|
# [WORKAROUND]
|
|
# https://superuser.com/questions/1241548/
|
|
# xubuntu-16-04-ttyname-failed-inappropriate-ioctl-for-device#1253889
|
|
RUN [ -f ~/.profile ] \
|
|
&& sed -i 's/mesg n/( tty -s \&\& mesg n || true )/g' ~/.profile \
|
|
|| true
|
|
|
|
# [WORKAROUND]
|
|
# https://bugs.launchpad.net/ubuntu/+source/lua-posix/+bug/1752082
|
|
RUN ln -s posix_c.so /usr/lib/$(uname -m)-linux-gnu/lua/5.2/posix.so
|
|
|
|
WORKDIR /root
|
|
SHELL ["docker-shell"]
|
|
|
|
# TODO: add a command to Spack that (re)creates the package cache
|
|
RUN spack spec hdf5+mpi
|
|
|
|
ENTRYPOINT ["/bin/bash", "/opt/spack/share/spack/docker/entrypoint.bash"]
|
|
CMD ["interactive-shell"]
|