# 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}