status-react/docker/linux/Dockerfile

96 lines
4.0 KiB
Docker

ARG BASE_IMAGE_TAG
FROM statusteam/status-build-base:${BASE_IMAGE_TAG} AS qt_build
ARG QT_VERSION
ARG QT_CI_COMMIT
ARG RNATIVE_VERSION
ENV XDG_RUNTIME_DIR=/tmp/runtime-root
RUN apt-get update \
&& add-apt-repository -y ppa:git-core/ppa \
&& apt-get update \
&& apt-get -y install git libx11-xcb1 libxss1 libasound2 libfontconfig1 libdbus-1-3 \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# This variable defines which parts of QT will be extracted from the .run file.
# You can list available packages in a Qt .run file by using:
# extract-qt-installer --list-packages qt-installer.run
ENV QT_CI_PACKAGES qt.qt5.5112.gcc_64,qt.qt5.5112.qtwebengine.gcc_64
# We run this as part of a separate container to reduce number of stages.
# We also remove some of the static-linked binaries since they are so big.
# Crucial ones: qmake,rcc,moc,uic,qdbuscpp2xml,qdbusxml2cpp,lrelease,lupdate,lconvert
# NOTE: Unfortunately GitHub doesn't support cloning a specific SHA1, so we need to
# resort to git fetch (https://stackoverflow.com/questions/3489173/how-to-clone-git-repository-with-specific-revision-changeset)
ADD qt-opensource-linux-x64-${QT_VERSION}.run /tmp/
RUN mkdir -p /tmp/qtci \
&& cd /tmp/qtci \
&& git init \
&& git remote add origin https://github.com/benlau/qtci.git \
&& git fetch --depth=1 origin ${QT_CI_COMMIT} \
&& git reset --hard FETCH_HEAD \
&& /tmp/qtci/bin/extract-qt-installer --disable-progress-report \
/tmp/qt-opensource-linux-x64-${QT_VERSION}.run /opt/qt-all \
&& find /opt/qt-all/${QT_VERSION}/gcc_64/bin -type f -regextype posix-egrep -regex \
'.*\/(qdoc|qgltf|linguist|designer|assistant|qhelpconverter|qmlprofiler)$' -delete \
&& rm -fr ${XDG_RUNTIME_DIR}
FROM statusteam/status-build-base:${BASE_IMAGE_TAG}
ARG QT_VERSION
ARG CMAKE_VERSION
COPY --from=qt_build /opt/qt-all/${QT_VERSION}/gcc_64 /opt/qt
RUN ln -s /opt/qt/mkspecs /usr/local/mkspecs \
&& ln -s /opt/qt/plugins /usr/local/plugins
# We have to do this because Jenkins doesn't let us
# https://issues.jenkins-ci.org/browse/JENKINS-49076
ARG NODE_VERSION
ENV PATH=/opt/qt/bin:/home/jenkins/.nvm/versions/node/v${NODE_VERSION}/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
RUN apt-get update \
&& add-apt-repository -y ppa:git-core/ppa \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive \
apt-get -q -y --no-install-recommends install \
python python3-pip python3-setuptools python3-wheel \
apt-transport-https openjdk-8-jdk-headless \
extra-cmake-modules build-essential gcc g++ fuse \
libx11-xcb1 libxss1 libasound2 libgl-dev libsm6 libxrandr2 python-dev \
libjasper-dev libegl1-mesa libxcomposite-dev libxcursor-dev \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/man
RUN cd /tmp \
&& wget -q https://cmake.org/files/v${CMAKE_VERSION%.*}/cmake-${CMAKE_VERSION}-Linux-x86_64.tar.gz \
&& tar xf cmake-${CMAKE_VERSION}-Linux-x86_64.tar.gz --strip 1 -C /usr/local \
&& rm -fr /usr/local/doc/cmake \
&& rm cmake-${CMAKE_VERSION}-Linux-x86_64.tar.gz
ARG GOLANG_VERSION
RUN cd /tmp \
&& wget -q https://dl.google.com/go/go${GOLANG_VERSION}.linux-amd64.tar.gz \
&& tar -C /usr/local -xzf go${GOLANG_VERSION}.linux-amd64.tar.gz \
&& rm go${GOLANG_VERSION}.linux-amd64.tar.gz
RUN mkdir -p /tmp/react-native-desktop \
&& cd /tmp/react-native-desktop \
&& git init \
&& git remote add origin https://github.com/status-im/react-native-desktop.git \
&& git fetch --quiet --depth=1 origin ${RNATIVE_VERSION} \
&& git reset --hard FETCH_HEAD \
&& cp -r /tmp/react-native-desktop/react-native-cli /opt \
&& cd /opt/react-native-cli \
&& npm update \
&& npm install -g --prefix /usr/local \
&& cd \
&& rm -r /tmp/react-native-desktop
LABEL source="https://github.com/status-im/status-react/tree/develop/docker/linux" \
description="Image for building Linux Desktop version of Status app." \
maintainer="jakub@status.im"