blob: 28a270785db7f22a47d57bbf14466cff27656873 [file] [log] [blame]
# SPDX-FileCopyrightText: Copyright 2022, Arm Limited and/or its affiliates.
# SPDX-FileCopyrightText: Copyright (c) 2013-2019 Yamashita, Yuu
# SPDX-FileCopyrightText: Copyright (c) 2013 Sam Stephenson
# SPDX-License-Identifier: Apache-2.0 AND MIT
# Execution environment for self-check and tests of this repository.
# The build context should be the MLIA repository.
#
# Example - Build the image with Python 3.10 installed:
#
# docker build \
# --build-arg UID="$(id -u)" \
# --build-arg GID="$(id -g)" \
# --build-arg PYTHON_VERSIONS="3.10" \
# --build-arg BASE_IMAGE="ubuntu:20.04" \
# -t "mlia-test" \
# .
#
# Example - Run the linters in the container:
#
# docker run --rm --user "$(id -u):$(id -g)" --pid=host \
# -v "$PWD:/workspace" \
# -w "/workspace" \
# "mlia-test" \
# tox --workdir /home/foo/tox/ -e lint
ARG BASE_IMAGE=ubuntu:20.04
FROM ${BASE_IMAGE}
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
git \
locales \
ruby-dev \
shellcheck \
cmake \
# Dependencies required by pyenv to build Python
make \
build-essential \
libssl-dev \
zlib1g-dev \
libbz2-dev \
libreadline-dev \
libsqlite3-dev \
wget \
curl \
llvm \
libncursesw5-dev \
xz-utils \
tk-dev \
libxml2-dev \
libxmlsec1-dev \
libffi-dev \
liblzma-dev \
&& rm -rf /var/lib/apt/lists/*
RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
ARG UID
ARG GID
RUN groupadd -g ${GID} -o foo
RUN useradd -m -l -u ${UID} -g foo foo
USER foo
ENV HOME=/home/foo
ENV USER=foo
ENV PATH="/home/foo/.local/bin:${PATH}"
# Install pyenv
ENV PYENV_GIT_TAG v2.3.3
RUN curl https://pyenv.run | bash
ENV PYENV_ROOT /home/foo/.pyenv
ENV PATH $PYENV_ROOT/shims:$PYENV_ROOT/bin:$PATH
# Python versions separated by commas, e.g. "3.8,3.9"
ARG PYTHON_VERSIONS
# Install Python versions and set them to be available globally
COPY docker/install_python_versions.sh /home/foo
RUN /home/foo/install_python_versions.sh "${PYTHON_VERSIONS}" --set-all-global
# Create a temporary mock MLIA repository to setup the tox and pre-commit
# environments. Copy only relevant files to facilitate caching.
ENV TMP_REPO /tmp/mlia/
RUN mkdir $TMP_REPO
WORKDIR $TMP_REPO
RUN git init \
&& mkdir src \
&& touch README.md
COPY pyproject.toml setup.cfg setup.py tox.ini ./
ENV TOX_WORK_DIR $HOME/tox
COPY .pre-commit-config.yaml .
# Install tox, create tox environment for linting (as this takes most time to set up)
# in a specific cache directory so that it is cached in the docker image.
# Set up pre-commit hooks to cache the hook environments
# pip.conf may contain sensitive information such as login information for the
# chosen pip index. By loading it as a secret, the secret information will not
# be leaked into the final build or cache.
RUN --mount=type=secret,id=pip_conf,mode=755,target=/home/foo/.pip/pip.conf \
pip3 install -U tox~=3.27.1 &&\
tox --workdir $TOX_WORK_DIR --notest --recreate -e lint &&\
tox --workdir $TOX_WORK_DIR -e lint_setup
WORKDIR $HOME
RUN rm -r $TMP_REPO