Live video on the AT Protocol
1# syntax=docker/dockerfile:1
2FROM ubuntu:22.04 AS builder-no-android
3
4ARG TARGETARCH
5ENV TARGETARCH $TARGETARCH
6
7ARG DOCKERFILE_HASH
8ENV DOCKERFILE_HASH $DOCKERFILE_HASH
9
10ENV GO_VERSION 1.24.2
11ENV NODE_VERSION 22.15.0
12ENV DEBIAN_FRONTEND noninteractive
13
14ADD docker/sources.list /etc/apt/sources.list
15ADD docker/winehq.key /etc/apt/keyrings/winehq-archive.key
16ADD docker/llvm-snapshot.key /etc/apt/keyrings/llvm-snapshot.key
17
18RUN dpkg --add-architecture i386 && dpkg --add-architecture arm64
19
20# Haven't automated it yet, so here's my instructors for mirroring winehq:
21# /etc/apt/mirror.list:
22# deb-i386 https://dl.winehq.org/wine-builds/ubuntu jammy main
23# deb-all https://dl.winehq.org/wine-builds/ubuntu jammy main
24# deb-amd64 [arch=amd64,i386 signed-by=/etc/apt/keyrings/winehq-archive.key] https://dl.winehq.org/wine-builds/ubuntu jammy main
25#
26# go install github.com/minio/mc@latest
27# mc alias set streamplace-crap https://storage.googleapis.com/ ACCESS_KEY SECRET_KEY
28# apt-mirror
29# mc mirror --overwrite /var/spool/apt-mirror/mirror/dl.winehq.org/ streamplace-crap/streamplace-crap/dl.winehq.org/
30
31RUN apt update \
32 && apt install -y build-essential curl git openjdk-17-jdk unzip jq g++ python3-pip ninja-build \
33 gcc-aarch64-linux-gnu g++-aarch64-linux-gnu qemu-user-static pkg-config \
34 nasm gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 mingw-w64-tools zip bison flex expect \
35 mono-runtime nuget mono-xsp4 squashfs-tools \
36 libc6:arm64 libstdc++6:arm64 \
37 cmake libssl-dev libssl-dev:arm64 \
38 ruby-rubygems postgresql sudo \
39 apksigner \
40 && pip install meson tomli \
41 && curl -L --fail https://go.dev/dl/go$GO_VERSION.linux-$TARGETARCH.tar.gz -o go.tar.gz \
42 && tar -C /usr/local -xf go.tar.gz \
43 && rm go.tar.gz
44
45RUN echo 'deb [arch=amd64,i386 signed-by=/etc/apt/keyrings/winehq-archive.key] https://storage.googleapis.com/streamplace-crap/dl.winehq.org/wine-builds/ubuntu/ jammy main' >> /etc/apt/sources.list \
46 && echo 'deb [arch=amd64 signed-by=/etc/apt/keyrings/llvm-snapshot.key] http://apt.llvm.org/jammy/ llvm-toolchain-jammy-21 main' >> /etc/apt/sources.list \
47 && apt update \
48 && apt install -y --install-recommends winehq-stable \
49 clang-21 lldb-21 lld-21 clangd-21
50
51ENV PATH /usr/lib/llvm-21/bin:$PATH:/usr/local/go/bin:/root/go/bin:/root/.cargo/bin
52
53RUN export NODEARCH="$TARGETARCH" \
54 && if [ "$TARGETARCH" = "amd64" ]; then export NODEARCH="x64"; fi \
55 && curl -L --fail https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$NODEARCH.tar.xz -o node.tar.gz \
56 && tar -xf node.tar.gz \
57 && cp -r node-v$NODE_VERSION-linux-$NODEARCH/* /usr/local \
58 && rm -rf node.tar.gz node-v$NODE_VERSION-linux-$NODEARCH
59
60RUN npm install -g corepack@latest
61
62ARG ANDROID_SDK_VERSION=11076708
63ENV ANDROID_HOME /opt/android-sdk
64RUN mkdir -p ${ANDROID_HOME}/cmdline-tools && \
65 curl -L -O https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_VERSION}_latest.zip && \
66 unzip *tools*linux*.zip -d ${ANDROID_HOME}/cmdline-tools && \
67 mv ${ANDROID_HOME}/cmdline-tools/cmdline-tools ${ANDROID_HOME}/cmdline-tools/tools && \
68 rm *tools*linux*.zip && \
69 curl -L https://raw.githubusercontent.com/thyrlian/AndroidSDK/bfcbf0cdfd6bb1ef45579e6ddc4d3876264cbdd1/android-sdk/license_accepter.sh | bash
70
71RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh \
72 && bash rustup.sh -y \
73 && rustup target add aarch64-unknown-linux-gnu \
74 && rustup target add x86_64-unknown-linux-gnu \
75 && rustup target add x86_64-pc-windows-gnu \
76 && rustup target add x86_64-apple-darwin \
77 && rustup target add aarch64-apple-darwin \
78 && rm rustup.sh
79
80RUN go env -w GOTOOLCHAIN=go$GO_VERSION
81
82# FROM builder AS cached-builder
83# ARG CI_COMMIT_BRANCH=next
84# ENV CI_COMMIT_BRANCH $CI_COMMIT_BRANCH
85# WORKDIR /cached-build
86# RUN git clone https://git.stream.place/streamplace/streamplace \
87# && cd streamplace \
88# && make version install check app android -j$(nproc) \
89# && make node \
90# && cd .. \
91# && rm -rf streamplace
92
93RUN curl -L https://github.com/golangci/golangci-lint/releases/download/v2.1.6/golangci-lint-2.1.6-linux-amd64.tar.gz -o golangci-lint.tar.gz \
94 && tar -xf golangci-lint.tar.gz \
95 && mv golangci-lint-2.1.6-linux-amd64/golangci-lint /usr/local/bin/ \
96 && rm -rf golangci-lint.tar.gz golangci-lint-2.1.6-linux-amd64
97
98RUN gem install fpm
99ENV APTLY_VERSION 1.6.2
100RUN curl --fail -L https://github.com/aptly-dev/aptly/releases/download/v${APTLY_VERSION}/aptly_${APTLY_VERSION}_linux_amd64.zip -o aptly.zip \
101 && unzip aptly.zip \
102 && mv aptly_${APTLY_VERSION}_linux_amd64/aptly /usr/local/bin/ \
103 && rm -rf aptly.zip aptly_${APTLY_VERSION}_linux_amd64
104
105ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=false
106ENV STREAMPLACE_TEST_POSTGRES_COMMAND="sudo -u postgres /usr/lib/postgresql/14/bin/postgres -D /etc/postgresql/14/main/"
107ENV STREAMPLACE_TEST_POSTGRES_URL="postgresql://postgres:postgres@localhost:5432/streamplace"
108# allow all postgres connections
109RUN bash -c 'echo -en "local all postgres peer\nhost all all 0.0.0.0/0 trust\n" > /etc/postgresql/14/main/pg_hba.conf'
110
111FROM builder-no-android AS builder-no-darwin
112
113RUN if [ "$TARGETARCH" = "amd64" ]; then export ANDROIDARCH="x86_64"; fi \
114 && if [ "$TARGETARCH" = "arm64" ]; then export ANDROIDARCH="arm64-v8a"; fi \
115 && $ANDROID_HOME/cmdline-tools/tools/bin/sdkmanager --install emulator \
116 && $ANDROID_HOME/cmdline-tools/tools/bin/sdkmanager "system-images;android-28;default;$ANDROIDARCH" \
117 && $ANDROID_HOME/cmdline-tools/tools/bin/sdkmanager 'platform-tools' \
118 && $ANDROID_HOME/cmdline-tools/tools/bin/sdkmanager 'build-tools;36.0.0' \
119 && $ANDROID_HOME/cmdline-tools/tools/bin/avdmanager create avd -n Pixel_API_28_AOSP -d pixel --package "system-images;android-28;default;$ANDROIDARCH"
120
121FROM builder-no-darwin AS builder
122
123WORKDIR /osxcross
124
125RUN git clone https://github.com/tpoechtrager/osxcross.git .
126# RUN UNATTENDED=1 ./build_apple_clang.sh
127ENV MAC_SDK_VERSION 15.4
128RUN curl -L --fail https://github.com/joseluisq/macosx-sdks/releases/download/$MAC_SDK_VERSION/MacOSX$MAC_SDK_VERSION.sdk.tar.xz -o /osxcross/tarballs/MacOSX$MAC_SDK_VERSION.sdk.tar.xz
129RUN UNATTENDED=1 ./build.sh
130RUN cargo install apple-codesign
131ENV PATH /osxcross/target/bin:$PATH
132
133LABEL org.opencontainers.image.authors="support@stream.place"