TiagoMSSantos/MobileRT

View on GitHub
deploy/Dockerfile.unix

Summary

Maintainability
Test Coverage
###############################################################################
# README
###############################################################################
# This Dockerfile prepares a docker image with MobileRT.
#
# It setups MobileRT by fetching it from git and compiling it using the
# `install_dependencies.sh` and `compile_native.sh` scripts inside the docker
# image.
# The script `install_dependencies.sh` installs all the necessary Unix
# dependencies in order to compile MobileRT.
# And the script `compile_native.sh` compiles the MobileRT.
#
# At the moment, this Dockerfile allows to setup MobileRT inside a docker image
# in multiple Operating Systems based on Unix systems:
# * Debian
# * Red Hat
# * Arch
# * Alpine
# * Gentoo
# * MacOS
###############################################################################
###############################################################################


###############################################################################
# Set base docker image
###############################################################################
ARG BASE_IMAGE=ubuntu:24.04
FROM ${BASE_IMAGE}
###############################################################################
###############################################################################


###############################################################################
# Setup arguments
###############################################################################
ARG BUILD_TYPE=release
ARG BRANCH=master
###############################################################################
###############################################################################


###############################################################################
# Change user to root
###############################################################################
USER root
###############################################################################
###############################################################################


###############################################################################
# Prepare environment
###############################################################################
ENV \
  # Create an environment variable to use it in the docker container when boot
  BUILD_TYPE="${BUILD_TYPE}" \
  # Allow execution of Qt in docker
  DISPLAY=":1" \
  QT_GRAPHICSSYSTEM="native" \
  # Set lib path
  LD_LIBRARY_PATH="/MobileRT/libraries:/MobileRT/build_${BUILD_TYPE}/lib" \
  # Set apt-get as non interactive mode
  DEBIAN_FRONTEND="noninteractive"
###############################################################################
###############################################################################


###############################################################################
# Install git & get MobileRT contents (required to create docker image in CI)
###############################################################################
RUN \
  # Print environment
  uname -a; \
  if uname -a | grep -iq 'msys'; then \
    echo 'Detected Windows OS.'; \
    exit 1; \
  else \
    echo 'Detected Unix OS.'; \
    echo "DISPLAY = ${DISPLAY}"; \
    echo "QT_GRAPHICSSYSTEM = ${QT_GRAPHICSSYSTEM}"; \
    echo "LD_LIBRARY_PATH = ${LD_LIBRARY_PATH}"; \
    echo "DEBIAN_FRONTEND = ${DEBIAN_FRONTEND}"; \
    echo "BUILD_TYPE = ${BUILD_TYPE}"; \
  fi; \
  if uname -a | grep -iq 'linux' && command -v apt-get > /dev/null; then \
    echo 'Detected Debian based Linux'; \
    rm /etc/apt/sources.list.d/microsoft-prod.list || true; \
    apt-get update -y; \
    apt-get install --no-install-recommends -y sudo git tzdata; \
  elif uname -a | grep -iq 'linux' && command -v yum > /dev/null; then \
    echo 'Detected Red Hat based Linux'; \
    yum --setopt=skip_missing_names_on_install=False --setopt=skip_missing_names_on_update=False update -y; \
    yum --setopt=skip_missing_names_on_install=False --setopt=skip_missing_names_on_update=False install -y \
      sudo git; \
  elif uname -a | grep -iq 'linux' && command -v pacman > /dev/null; then \
    echo 'Detected Arch based Linux'; \
    pacman -Sy --noconfirm --needed --noscriptlet git; \
  elif uname -a | grep -iq 'linux' && command -v apk > /dev/null; then \
    echo 'Detected Alpine based Linux'; \
    apk update; \
    apk add sudo git; \
  elif uname -a | grep -iq 'linux' && command -v emerge > /dev/null; then \
    echo 'Detected Gentoo based Linux'; \
    echo 'FEATURES="-sandbox -usersandbox -ipc-sandbox -network-sandbox -pid-sandbox"' >> /etc/portage/make.conf; \
    echo 'USE="dev-libs/libpcre2-10.35 pcre16 x11-libs/libxkbcommon-1.0.3 media-libs/libglvnd-1.3.2-r2 X"' >> /etc/portage/make.conf; \
    set +e; \
    emerge --sync; \
    set -e; \
    emerge sudo dev-vcs/git; \
  else \
    echo 'Assuming Windows OS.'; \
  fi; \
  # Configure git
  git config --global http.postBuffer 1048576000; \
  git config --global https.postBuffer 1048576000; \
  git config --global core.compression 0; \
  git config --global http.sslVerify "false"; \
  # Clone repository
  git clone --depth 1 https://github.com/TiagoMSSantos/MobileRT.git \
  --shallow-submodules \
  --progress \
  --branch ${BRANCH} && \
  cd MobileRT && \
  ls -la ./app/src/androidTest/resources/CornellBox/CornellBox-Water.obj && \
  ls -la ./app/src/androidTest/resources/teapot/teapot.obj;
###############################################################################
###############################################################################


###############################################################################
# Install dependencies & compile MobileRT
###############################################################################
WORKDIR /MobileRT
RUN \
  sh scripts/install_dependencies.sh && \
  sh scripts/compile_native.sh -t ${BUILD_TYPE} -c g++ -r yes && \
  du -h -d 1 build_${BUILD_TYPE}/bin && \
  du -h -d 1 build_${BUILD_TYPE}/lib && \
  rm -rfv $(find app/ -iname "*" ! -name "app" ! -name "MobileRT.jks" ! -name "src" ! -name "androidTest" ! -name "resources" | grep -v "src/androidTest/resources") && \
  rm -rfv docs && \
  rm -rfv documentation && \
  rm -rfv git-hooks && \
  rm -rfv gradle && \
  rm -rfv .git && \
  ls -la ./app/src/androidTest/resources/CornellBox/CornellBox-Water.obj && \
  ls -la ./app/src/androidTest/resources/CornellBox/CornellBox-Water.mtl && \
  ls -la ./app/src/androidTest/resources/CornellBox/CornellBox-Water.cam && \
  ls -la ./app/src/androidTest/resources/teapot/teapot.obj && \
  ls -la ./app/src/androidTest/resources/teapot/teapot.mtl && \
  ls -la ./app/src/androidTest/resources/teapot/teapot.cam && \
  chmod -R +x scripts && \
  pwd
###############################################################################
###############################################################################


###############################################################################
# Create volume (for Qt)
###############################################################################
VOLUME /tmp/.X11-unix
###############################################################################
###############################################################################


###############################################################################
# Execute MobileRT by default
###############################################################################
ENTRYPOINT ["sh", "-c"]
CMD ["sh scripts/profile.sh ${BUILD_TYPE}"]
###############################################################################
###############################################################################