Skip to content

Commit f2a1e2b

Browse files
committed
Expanded Docker image rebuild triggers for native sources.
1 parent baae8de commit f2a1e2b

2 files changed

Lines changed: 65 additions & 12 deletions

File tree

.github/workflows/docker-builder.yml

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,19 @@ on:
55
paths:
66
- 'docker/Dockerfile'
77
- '.github/workflows/docker-builder.yml'
8+
- 'TMessagesProj/jni/boringssl'
9+
- 'TMessagesProj/jni/ffmpeg'
10+
- 'TMessagesProj/jni/libvpx'
11+
- 'TMessagesProj/jni/dav1d'
12+
- 'TMessagesProj/jni/tde2e_source'
13+
- 'TMessagesProj/jni/patches/**'
14+
- 'TMessagesProj/jni/build_*.sh'
15+
- 'TMessagesProj/jni/prepare.py'
16+
- 'TMessagesProj/jni/CMakeLists.txt'
17+
- 'TMessagesProj/jni/voip/**'
818
branches:
919
- dev
1020
schedule:
11-
# First Sunday of each month at 03:00 UTC
1221
- cron: '0 3 1-7 * 0'
1322
workflow_dispatch:
1423

@@ -23,8 +32,23 @@ jobs:
2332
packages: write
2433

2534
steps:
35+
- name: Free up disk space
36+
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be
37+
with:
38+
tool-cache: true
39+
android: true
40+
2641
- name: Checkout
2742
uses: actions/checkout@v4
43+
with:
44+
submodules: true
45+
46+
- name: Clone untracked submodules (boringssl, ffmpeg)
47+
run: |
48+
git clone https://github.com/google/boringssl TMessagesProj/jni/boringssl
49+
cd TMessagesProj/jni/boringssl && git checkout a6d321b11fa80496b7c8ae6405468c212d4f5c87 && cd -
50+
git clone https://github.com/FFmpeg/FFmpeg TMessagesProj/jni/ffmpeg
51+
cd TMessagesProj/jni/ffmpeg && git checkout 71fb6132637a2a430375c24afc381fff8b854fe7 && cd -
2852
2953
- name: Lowercase image name
3054
id: lower
@@ -40,7 +64,7 @@ jobs:
4064
- name: Build and push
4165
uses: docker/build-push-action@v6
4266
with:
43-
context: docker
67+
context: .
4468
file: docker/Dockerfile
4569
push: true
4670
tags: |

docker/Dockerfile

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,12 @@ RUN yes | sdkmanager --licenses > /dev/null 2>&1 && \
5959
"build-tools;35.0.0" \
6060
"ndk;21.4.7075529" \
6161
"ndk;23.2.8568313" \
62-
"cmake;3.10.2.4988404"
62+
"cmake;3.10.2.4988404" \
63+
"cmake;3.22.1"
6364

64-
RUN ln -sf /opt/android-sdk/cmake/3.10.2.4988404/bin/cmake /usr/local/bin/cmake && \
65-
ln -sf /opt/android-sdk/cmake/3.10.2.4988404/bin/cmake /usr/local/bin/cmake3
65+
# cmake 3.10.2 for Gradle compatibility, cmake 3.22.1 for standalone builds
66+
RUN ln -sf /opt/android-sdk/cmake/3.22.1/bin/cmake /usr/local/bin/cmake && \
67+
ln -sf /opt/android-sdk/cmake/3.22.1/bin/cmake /usr/local/bin/cmake3
6668

6769
# ============================================================
6870
# Stage 2: Build native libraries
@@ -72,13 +74,40 @@ FROM base AS native-builder
7274
COPY TMessagesProj/jni/ /build/jni/
7375
WORKDIR /build/jni
7476

75-
# Phase 1: prepare.py (boringssl, ffmpeg, libvpx, dav1d, tde2e)
76-
# Stub out git — prepare.py runs "git submodule update" and "git reset --hard"
77-
# but the sources are already in place via COPY.
78-
RUN mv /usr/bin/git /usr/bin/git.real && \
79-
printf '#!/bin/sh\ntrue\n' > /usr/bin/git && chmod +x /usr/bin/git && \
80-
python3 prepare.py arm64 arm ndk=$ANDROID_NDK_HOME silent && \
81-
mv /usr/bin/git.real /usr/bin/git
77+
# Phase 1: Build static libraries directly (bypasses prepare.py which
78+
# assumes git submodules and rm/re-checkout cycle unsuitable for Docker).
79+
ENV NDK=$ANDROID_NDK_HOME
80+
ENV NINJA_PATH=/usr/bin/ninja
81+
82+
RUN ./build_dav1d_clang.sh arm64 arm
83+
84+
RUN ./build_libvpx_clang.sh arm64 arm
85+
86+
RUN ./build_ffmpeg_clang.sh arm64 arm && ./patch_ffmpeg.sh
87+
88+
RUN ./patch_boringssl.sh && ./build_boringssl.sh arm64 arm
89+
90+
RUN tde2e_dir=$(pwd)/tde2e && \
91+
source_dir=$(pwd)/tde2e_source && \
92+
boringssl_dir=$(pwd)/boringssl && \
93+
for arch in arm64-v8a armeabi-v7a; do \
94+
mkdir -p $source_dir/example/android/third-party/openssl/$arch/lib/ && \
95+
cp "$boringssl_dir/build/$arch/crypto/libcrypto.a" "$source_dir/example/android/third-party/openssl/$arch/lib/" && \
96+
cp "$boringssl_dir/build/$arch/ssl/libssl.a" "$source_dir/example/android/third-party/openssl/$arch/lib/" && \
97+
cp -R "$boringssl_dir/include" "$source_dir/example/android/third-party/openssl/$arch/"; \
98+
done && \
99+
cp "$tde2e_dir/build-tdlib.sh" "$source_dir/example/android/." && \
100+
cp "$tde2e_dir/CMakeLists.txt" "$source_dir/example/android/." && \
101+
sed -i "s/ php//g" "$source_dir/example/android/check-environment.sh" && \
102+
sed -i "s/PHP_EXECUTABLE/FALSE/g" "$source_dir/td/generate/CMakeLists.txt" && \
103+
cd "$source_dir/example/android" && \
104+
SED_CMDS="s/x86_64//g;s/x86//g;s/rm tdlib/# rm tdlib/g;s/jar/# jar/g;s/mv tdlib/# mv tdlib/g;" && \
105+
sed "$SED_CMDS" ./build-tdlib.sh | bash -s -- "$NDK/../.." && \
106+
for arch in arm64-v8a armeabi-v7a; do \
107+
mkdir -p $tde2e_dir/$arch && \
108+
cp "$source_dir/example/android/build-$arch-Java/td/tde2e/libtde2e.a" $tde2e_dir/$arch && \
109+
cp "$source_dir/example/android/build-$arch-Java/td/tdutils/libtdutils.a" $tde2e_dir/$arch; \
110+
done
82111

83112
# Phase 2: CMake build of libtmessages.49.so per ABI
84113
RUN for abi in arm64-v8a armeabi-v7a; do \

0 commit comments

Comments
 (0)