# kate: hl earthfile; VERSION --shell-out-anywhere 0.6 # BEGIN Global parameters ARG DEVTOOLSET_VERSION = 11 ARG DEVTOOLSET = devtoolset-${DEVTOOLSET_VERSION} # END Global parameters ARG param_1 = "String w/ variable interpolation ${DEVTOOLSET}" ARG param_2 = 'String w/o variable interpolation ${DEVTOOLSET}' # Run shell command ARG param_3 = $(echo "String w/ variable interpolation ${DEVTOOLSET}") sample-target: FROM alpine ARG stage COPY --if-exists files/${stage}/ /files/ SAVE ARTIFACT --keep-ts /files /share repos-conf-apt: ARG image ARG ppa FROM ${image} ENV DEBIAN_FRONTEND=noninteractive ENV DEBCONF_NONINTERACTIVE_SEEN=true IF [ "${ppa}" != '' ] ARG _more_cmds = add-apt-repository -y -n ppa:${ppa}/ppa ELSE ARG _more_cmds = : END RUN --mount type=secret,id=+secrets/repo_gpg_key,target=/run/secrets/private-archive-keyring.gpg \ --mount type=cache,target=/var/cache/apt/archives \ --mount type=cache,target=/var/lib/apt/lists \ set -x; \ debconf-set-selections /tmp/debconf-preset.txt \ && rm -rf /etc/apt/apt.conf.d/docker-clean \ && apt-get update \ && apt-get install -y software-properties-common \ && add-apt-repository --remove multiverse \ && gpg -v --dearmor - </run/secrets/private-archive-keyring.gpg > /usr/share/keyrings/private-archive-keyring.gpg \ && ${_more_cmds} SAVE ARTIFACT /etc/apt/sources.list /sources.list SAVE ARTIFACT /usr/share/keyrings/private-archive-keyring.gpg /private-archive-keyring.gpg IF [ "${ppa}" != '' ] SAVE ARTIFACT /etc/apt/sources.list.d/${ppa}*.list /sources.list.d SAVE ARTIFACT /etc/apt/trusted.gpg.d/${ppa}*.gpg /trusted.gpg.d END APT_INSTALL: FUNCTION ARG image ARG packages = '' ARG packages_on_hold = '' ARG upgrade = 0 ARG clean = 0 ARG pm_aux_options = '' ARG more_rm_files = '' ARG more_cmds = : IF [ ! -f /root/debconf-preset.txt ] COPY (+repos-conf-apt/debconf-preset.txt --image=${image}) /root/debconf-preset.txt ARG _debconf_cmd_cond = debconf-set-selections /root/debconf-preset.txt ELSE ARG _debconf_cmd_cond = : END IF [ ! -f /usr/share/keyrings/private-archive-keyring.gpg ] COPY (+repos-conf-apt/private-archive-keyring.gpg --image=${image}) \ /usr/share/keyrings/private-archive-keyring.gpg # NOTE Also copy the `sources.list` file with `multiverse` disabled! COPY (+repos-conf-apt/sources.list --image=${image}) /etc/apt END # ... MAKE_PYTHON_CI_IMAGE: FUNCTION ARG image ARG python = python3 ARG python_pkg = ${python} ARG python_bin = ${python} ARG python_ver = 3.11 DO +APT_INSTALL --packages="${python_pkg} git" ARG _chroot_base = $(dirname $(cat /etc/debian_chroot)) DO ./share+IMAGE_INIT \ --image_description="CI image for Python projects" \ --debian_chroot=${_chroot_base}/python/${python_ver}/ci \ --storage_name=none COPY --dir (+prep-python-ci/local --image=${image}) /usr ENV SETUPTOOLS_USE_DISTUTILS='stdlib' ENV PIP_DISABLE_PIP_VERSION_CHECK=1 all: LOCALLY # Primary images BUILD +ci BUILD +clang-ci BUILD +python-ci IF [ "${BUILD_TESTING}" -gt 0 ] # Also include all tests BUILD +tests END tests: LOCALLY BUILD +ci-tests BUILD +clang-ci-tests BUILD +python-ci-tests ci-tests: FROM +ci COPY .env / DO share+RUN_TESTS --VERBOSE=${VERBOSE} clang-ci-tests: FROM +clang-ci COPY .env / ENV EXPECT_CLANG_VERSION=${CLANG_VERSION} DO share+RUN_TESTS --VERBOSE=${VERBOSE} --script=ci-tests.sh python-ci-tests: FROM +python-ci COPY .env / DO share+RUN_TESTS --VERBOSE=${VERBOSE}