# syntax=docker/dockerfile:1.7.0-labs ARG TAG=24.04 FROM ubuntu:${TAG} AS build ### Build stage ARG GHC=9.6.3 ARG CABAL=3.10.2.0 ARG JAVA_VER=17.0.17.10.1 ARG JAVA_HASH_AMD64=e3e11daa5c22a45153bbeff1a0c21bf08631791e4e8d8ed14deba31c7cf9af1a ARG JAVA_HASH_ARM64=2b460859b681757b33a7591b6238ecaf51569d05d2684984e5f0a89c6514acbc ENV TZ=Etc/UTC \ DEBIAN_FRONTEND=noninteractive # Install curl, git and and simplex-chat dependencies RUN apt-get update && \ apt-get install -y curl \ libpq-dev \ git \ strip-nondeterminism \ sqlite3 \ libsqlite3-dev \ build-essential \ libgmp3-dev \ zlib1g-dev \ llvm \ cmake \ llvm-dev \ libnuma-dev \ libssl-dev \ desktop-file-utils \ patchelf \ ca-certificates \ zip \ wget \ fuse3 \ file \ appstream \ gpg \ unzip &&\ ln -s /bin/fusermount /bin/fusermount3 || : # Install Java Coretto # Required, because official Java in Ubuntu # depends on libjpeg.so.8 and liblcms2.so.2 which are NOT copied into final # /usr/lib/runtime/lib directory and I do not have time to figure out gradle.kotlin # to fix this :( RUN export JAVA_FILENAME='java-corretto.deb' \ JAVA_VER_MAJOR=$(printf "${JAVA_VER}" | awk -F. '{print $1}') \ JAVA_VER_DEB=$(printf "${JAVA_VER}" | sed 's/\.1$/-1/') && \ case "$(uname -m)" in \ x86_64) export JAVA_ARCH='amd64' JAVA_HASH="$JAVA_HASH_AMD64" ;; \ aarch64) export JAVA_ARCH='arm64' JAVA_HASH="$JAVA_HASH_ARM64" ;; \ *) echo "unknown arch $(uname -m)" && exit 1 ;; \ esac && \ curl --proto '=https' --tlsv1.2 -sSf \ "https://corretto.aws/downloads/resources/${JAVA_VER}/java-${JAVA_VER_MAJOR}-amazon-corretto-jdk_${JAVA_VER_DEB}_${JAVA_ARCH}.deb" \ -o "${JAVA_FILENAME}" && \ if echo "${JAVA_HASH} ${JAVA_FILENAME}" | sha256sum -c -; then \ if apt install -y ./"${JAVA_FILENAME}"; then \ rm ./"${JAVA_FILENAME}"; \ else \ echo "Failed to install Java Corretto" && exit 1; \ fi \ else \ echo "Checksum mismatch" && exit 1; \ fi # Specify bootstrap Haskell versions ENV BOOTSTRAP_HASKELL_GHC_VERSION=${GHC} ENV BOOTSTRAP_HASKELL_CABAL_VERSION=${CABAL} # Do not install Stack ENV BOOTSTRAP_HASKELL_INSTALL_NO_STACK=true ENV BOOTSTRAP_HASKELL_INSTALL_NO_STACK_HOOK=true # Install ghcup RUN curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | BOOTSTRAP_HASKELL_NONINTERACTIVE=1 sh # Adjust PATH ENV PATH="/root/.cabal/bin:/root/.ghcup/bin:$PATH" # Set both as default RUN ghcup set ghc "${GHC}" && \ ghcup set cabal "${CABAL}" #===================== # Install Android SDK #===================== ARG SDK_VERSION=13114758 ENV SDK_VERSION=$SDK_VERSION \ ANDROID_HOME=/root RUN curl -L -o tools.zip "https://dl.google.com/android/repository/commandlinetools-linux-${SDK_VERSION}_latest.zip" && \ unzip tools.zip && rm tools.zip && \ mv cmdline-tools tools && mkdir "$ANDROID_HOME/cmdline-tools" && mv tools "$ANDROID_HOME/cmdline-tools/" && \ ln -s "$ANDROID_HOME/cmdline-tools/tools" "$ANDROID_HOME/cmdline-tools/latest" ENV PATH="$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/cmdline-tools/tools/bin" # https://askubuntu.com/questions/885658/android-sdk-repositories-cfg-could-not-be-loaded RUN mkdir -p ~/.android ~/.gradle && \ touch ~/.android/repositories.cfg && \ echo 'org.gradle.console=plain' > ~/.gradle/gradle.properties &&\ yes | sdkmanager --licenses >/dev/null ENV PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools WORKDIR /project