edouard@3425: #
edouard@3425: # Dockerfile for Beremiz
edouard@3425: # This container is used to run tests for Beremiz
edouard@3425: #
edouard@3815: FROM ubuntu:jammy  
edouard@3425:                                         
edouard@3425: ENV TERM xterm-256color
edouard@3425:     
edouard@3425: ENV LANG en_US.UTF-8
edouard@3425: ENV LANGUAGE en_US:en
edouard@3425: ENV LC_ALL en_US.UTF-8
edouard@3425: 
edouard@3425: ARG UNAME=testing
edouard@3425: ENV UNAME ${UNAME}
edouard@3425: ARG UID=1000
edouard@3425: ARG GID=1000
edouard@3425: RUN groupadd -g $GID $UNAME
edouard@3425: RUN useradd -m -u $UID -g $GID -s /bin/bash $UNAME
edouard@3425: 
edouard@3715: RUN set -xe \
edouard@3715:     && apt-get update \
edouard@3715:     && apt-get install locales \
edouard@3715:     && locale-gen en_US.UTF-8 \
edouard@3715:     && update-locale LANG=en_US.UTF-8
edouard@3710: 
edouard@3425: RUN set -xe \
edouard@3425:     && TZ="America/Paris" \
edouard@3425:        DEBIAN_FRONTEND="noninteractive" \
edouard@3425:        apt-get install -y --no-install-recommends \
edouard@3679:                `# to run sikuli` \
edouard@3425:                wget \
edouard@3425:                openjdk-11-jre \
edouard@3724:                libtesseract4 \
edouard@3425:                \
edouard@3679:                `# to run X based tests` \
edouard@3425:                fluxbox \
edouard@3425:                wmctrl xdotool xvfb \
edouard@3425:                x11vnc xterm xnest \
edouard@3679:                materia-gtk-theme \
edouard@3425:                \
edouard@3425:                `# to build tested apps` \
edouard@3425:                build-essential automake flex bison mercurial \
edouard@3425:                libgtk-3-dev libgl1-mesa-dev libglu1-mesa-dev \
edouard@3815:                libpython3.10-dev libssl-dev \
edouard@3815:                python3.10 virtualenv cmake git
edouard@3425: 
edouard@3679: 
edouard@3679: # force bigger font and flat theme for GTK in order to make OCR more reliable
edouard@3679: RUN mkdir -p /etc/gtk-3.0
edouard@3679: RUN env echo -e '[Settings]\ngtk-font-name=FreeSans,12\ngtk-theme-name=Materia\n' > /etc/gtk-3.0/settings.ini
edouard@3679: 
edouard@3425: # link obtained from https://raiman.github.io/SikuliX1/downloads.html
edouard@3425: RUN set -xe && \
edouard@3425:     wget -qP /usr/local/bin \
edouard@3425:         https://launchpad.net/sikuli/sikulix/2.0.5/+download/sikulixide-2.0.5.jar && \
edouard@3425:     echo 0795f1e0866ee5a7a84e4c89793ea78c /usr/local/bin/sikulixide-2.0.5.jar | md5sum -c && \
edouard@3425:     ( echo '#!/bin/sh' && \
edouard@3425:       echo "exec java -jar /usr/local/bin/sikulixide-*.jar \"\$@\"" \
edouard@3425:     ) | install /dev/stdin /usr/local/bin/sikulix
edouard@3425: 
edouard@3458: 
edouard@3840: ### SVGHMI dependencies : Chromium browser + Inkscape ###
edouard@3840: #
edouard@3840: # On ubuntu chromium is distrinuted as a snap.
edouard@3840: # Running snapd on docker is a mess.
edouard@3840: # As a workaround, there is a PPA where chromium .deb packges build is still beeing maintained :
edouard@3840: #
edouard@3840: # https://launchpad.net/~savoury1/+archive/ubuntu/chromium
edouard@3840: #     ppa:savoury1, maintained by Rob Savoury at the time of writing
edouard@3840: #
edouard@3840: # As a side effect of docker limitations, chromium need --no-sandbox command line argument.
edouard@3840: #
edouard@3840: RUN apt-get install -qqy --no-install-recommends gnupg software-properties-common \
edouard@3840:     && add-apt-repository -y ppa:savoury1/chromium \
edouard@3840:     && add-apt-repository -y ppa:savoury1/ffmpeg4 \
edouard@3840:     && apt-get install -qqy --no-install-recommends chromium-browser inkscape
edouard@3840: 
edouard@3697: # easy to remember 'do_tests' alias to invoke main makefile
edouard@3542: RUN env echo -e '#!/bin/bash\nmake -f /home/testing/src/beremiz/tests/Makefile $*' > /usr/local/bin/do_tests
edouard@3458: RUN chmod +x /usr/local/bin/do_tests
edouard@3458: 
edouard@3425: USER $UNAME
edouard@3425: 
edouard@3425: RUN mkdir /home/$UNAME/build /home/$UNAME/src /home/$UNAME/test
edouard@3425: 
edouard@3815: RUN virtualenv ~/beremizenv
edouard@3815: 
edouard@3841: COPY requirements.txt /home/$UNAME
edouard@3815: 
edouard@3841: # beremiz python requirements
edouard@3841: RUN ~/beremizenv/bin/pip install -r /home/$UNAME/requirements.txt
edouard@3841: 
edouard@3841: # tests python requirements
edouard@3425: RUN ~/beremizenv/bin/pip install \
edouard@3841:         pytest pytest-timeout ddt
edouard@3841:         
edouard@3841: #TODO sslpsk posix_spawn
edouard@3841:      
edouard@3696: RUN set -xe && \
edouard@3696:     cd  /home/$UNAME && mkdir tessdata && \
edouard@3696:     wget -q https://github.com/tesseract-ocr/tessdata/archive/refs/tags/4.1.0.tar.gz \
edouard@3696:          -O tessdata.tar.gz && \
edouard@3696:     echo 89e25c7c40a59be7195422a01f57fcb2 tessdata.tar.gz | md5sum -c && \
edouard@3696:     tar --strip-components=1 -C tessdata -x -v -z -f tessdata.tar.gz && \
edouard@3696:     rm tessdata.tar.gz
edouard@3696: 
edouard@3696: ENV TESSDATAPATH /home/$UNAME/tessdata
edouard@3696: 
edouard@3696: # Points to python binary that test will use
edouard@3431: ENV BEREMIZPYTHONPATH /home/$UNAME/beremizenv/bin/python
edouard@3431: