Live video on the AT Protocol
1FROM ubuntu:22.04 AS builder
2
3ARG TARGETARCH
4ENV TARGETARCH $TARGETARCH
5
6ARG DOCKERFILE_HASH
7ENV DOCKERFILE_HASH $DOCKERFILE_HASH
8
9ENV GO_VERSION 1.24.2
10ENV NODE_VERSION 22.15.0
11ENV DEBIAN_FRONTEND noninteractive
12
13RUN apt update && apt install -y ca-certificates
14
15ADD docker/sources.list /etc/apt/sources.list
16ADD docker/winehq.key /etc/apt/keyrings/winehq-archive.key
17RUN dpkg --add-architecture i386 && dpkg --add-architecture arm64
18
19# Haven't automated it yet, so here's my instructors for mirroring winehq:
20# /etc/apt/mirror.list:
21# deb-i386 https://dl.winehq.org/wine-builds/ubuntu jammy main
22# deb-all https://dl.winehq.org/wine-builds/ubuntu jammy main
23# deb-amd64 [arch=amd64,i386 signed-by=/etc/apt/keyrings/winehq-archive.key] https://dl.winehq.org/wine-builds/ubuntu jammy main
24#
25# go install github.com/minio/mc@latest
26# mc alias set streamplace-crap https://storage.googleapis.com/ ACCESS_KEY SECRET_KEY
27# apt-mirror
28# mc mirror --overwrite /var/spool/apt-mirror/mirror/dl.winehq.org/ streamplace-crap/streamplace-crap/dl.winehq.org/
29
30RUN apt update \
31 && apt install -y build-essential curl git openjdk-17-jdk unzip jq g++ python3-pip ninja-build \
32 gcc-aarch64-linux-gnu g++-aarch64-linux-gnu clang lld qemu-user-static pkg-config \
33 nasm gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 mingw-w64-tools zip bison flex expect \
34 mono-runtime nuget mono-xsp4 squashfs-tools \
35 libc6:arm64 libstdc++6:arm64 \
36 && apt install -y --install-recommends winehq-stable \
37 && pip install meson tomli \
38 && curl -L --fail https://go.dev/dl/go$GO_VERSION.linux-$TARGETARCH.tar.gz -o go.tar.gz \
39 && tar -C /usr/local -xf go.tar.gz \
40 && rm go.tar.gz
41ENV PATH $PATH:/usr/local/go/bin:/root/go/bin:/root/.cargo/bin
42
43RUN export NODEARCH="$TARGETARCH" \
44 && if [ "$TARGETARCH" = "amd64" ]; then export NODEARCH="x64"; fi \
45 && curl -L --fail https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$NODEARCH.tar.xz -o node.tar.gz \
46 && tar -xf node.tar.gz \
47 && cp -r node-v$NODE_VERSION-linux-$NODEARCH/* /usr/local \
48 && rm -rf node.tar.gz node-v$NODE_VERSION-linux-$NODEARCH
49
50RUN npm install -g yarn
51
52ARG ANDROID_SDK_VERSION=11076708
53ENV ANDROID_HOME /opt/android-sdk
54RUN mkdir -p ${ANDROID_HOME}/cmdline-tools && \
55 curl -L -O https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_VERSION}_latest.zip && \
56 unzip *tools*linux*.zip -d ${ANDROID_HOME}/cmdline-tools && \
57 mv ${ANDROID_HOME}/cmdline-tools/cmdline-tools ${ANDROID_HOME}/cmdline-tools/tools && \
58 rm *tools*linux*.zip && \
59 curl -L https://raw.githubusercontent.com/thyrlian/AndroidSDK/bfcbf0cdfd6bb1ef45579e6ddc4d3876264cbdd1/android-sdk/license_accepter.sh | bash
60
61RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh \
62 && bash rustup.sh -y \
63 && rustup target add aarch64-unknown-linux-gnu \
64 && rustup target add x86_64-unknown-linux-gnu \
65 && rustup target add x86_64-pc-windows-gnu \
66 && rustup target add x86_64-apple-darwin \
67 && rustup target add aarch64-apple-darwin \
68 && rm rustup.sh
69
70RUN go env -w GOTOOLCHAIN=go$GO_VERSION
71
72# FROM builder AS cached-builder
73# ARG CI_COMMIT_BRANCH=next
74# ENV CI_COMMIT_BRANCH $CI_COMMIT_BRANCH
75# WORKDIR /cached-build
76# RUN git clone https://git.stream.place/streamplace/streamplace \
77# && cd streamplace \
78# && make version install check app android -j$(nproc) \
79# && make node \
80# && cd .. \
81# && rm -rf streamplace
82
83LABEL org.opencontainers.image.authors="support@stream.place"