-
Notifications
You must be signed in to change notification settings - Fork 153
Expand file tree
/
Copy pathDockerfile
More file actions
138 lines (124 loc) · 6.11 KB
/
Copy pathDockerfile
File metadata and controls
138 lines (124 loc) · 6.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
FROM ubuntu:22.04
LABEL Description="This image provides a base Android development environment for React Native, and may be used to run tests."
ENV DEBIAN_FRONTEND=noninteractive
# set default build arguments
# https://developer.android.com/studio#command-tools
ARG SDK_VERSION=commandlinetools-linux-11076708_latest.zip
# Android 17 (API 37) ships as a versioned platform package "platforms;android-37.0"
# (the new <api>.<minor> scheme, cf. android-36.1); plain "android-37" does not exist.
ARG ANDROID_BUILD_VERSION=37.0
ARG ANDROID_TOOLS_VERSION=37.0.0
ARG NDK_VERSION=28.2.13676358
ARG NODE_VERSION=22.14
ARG WATCHMAN_VERSION=4.9.0
ARG CMAKE_VERSION=3.30.5
ARG GRADLE_VERSION=9.4.1
# set default environment variables, please don't remove old env for compatibilty issue
ENV ADB_INSTALL_TIMEOUT=10
ENV ANDROID_HOME=/opt/android
ENV ANDROID_SDK_ROOT=${ANDROID_HOME}
ENV ANDROID_NDK_HOME=${ANDROID_HOME}/ndk/$NDK_VERSION
ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
ENV CMAKE_BIN_PATH=${ANDROID_HOME}/cmake/$CMAKE_VERSION/bin
ENV GRADLE_USER_HOME=/opt/gradle-home
ENV PATH=${CMAKE_BIN_PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/emulator:${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/tools:${ANDROID_HOME}/tools/bin:${PATH}
# Set the encoding to resolve a known character encoding issue with decompressing tar.gz files in containers
# via Gradle: https://github.com/gradle/gradle/issues/23391#issuecomment-1878979127
ENV LC_ALL=C.UTF8
# Install system dependencies
RUN apt update -qq && apt install -qq -y --no-install-recommends \
apt-transport-https \
curl \
file \
gcc \
git \
g++ \
gnupg2 \
libc++1-11 \
libgl1 \
libtcmalloc-minimal4 \
make \
openjdk-17-jdk-headless \
openssh-client \
patch \
python3 \
python3-distutils \
rsync \
ruby \
ruby-dev \
tzdata \
unzip \
sudo \
ninja-build \
zip \
ccache \
# Dev libraries requested by Hermes
libicu-dev \
# Dev dependencies required by linters
jq \
shellcheck \
&& gem install bundler \
&& rm -rf /var/lib/apt/lists/*;
# Seed the Gradle Wrapper cache used by React Native builds. GitHub Actions
# replaces HOME inside job containers, so keep this cache at a stable path.
RUN curl --fail --location --retry 5 --retry-all-errors \
--output /tmp/gradle-${GRADLE_VERSION}-bin.zip \
https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip \
&& curl --fail --location --retry 5 --retry-all-errors \
--output /tmp/gradle-${GRADLE_VERSION}-bin.zip.sha256 \
https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip.sha256 \
&& echo "$(cat /tmp/gradle-${GRADLE_VERSION}-bin.zip.sha256) /tmp/gradle-${GRADLE_VERSION}-bin.zip" | sha256sum --check \
&& unzip -q /tmp/gradle-${GRADLE_VERSION}-bin.zip -d /tmp \
&& mkdir -p /tmp/gradle-wrapper-seed \
&& touch /tmp/gradle-wrapper-seed/settings.gradle \
&& /tmp/gradle-${GRADLE_VERSION}/bin/gradle \
--no-daemon \
--project-dir /tmp/gradle-wrapper-seed \
wrapper \
--gradle-version ${GRADLE_VERSION} \
--distribution-type bin \
&& sed -i 's/networkTimeout=10000/networkTimeout=60000/' \
/tmp/gradle-wrapper-seed/gradle/wrapper/gradle-wrapper.properties \
&& echo "distributionSha256Sum=$(cat /tmp/gradle-${GRADLE_VERSION}-bin.zip.sha256)" \
>> /tmp/gradle-wrapper-seed/gradle/wrapper/gradle-wrapper.properties \
&& /tmp/gradle-wrapper-seed/gradlew --no-daemon --version \
&& rm -rf \
/tmp/gradle-${GRADLE_VERSION} \
/tmp/gradle-${GRADLE_VERSION}-bin.zip \
/tmp/gradle-${GRADLE_VERSION}-bin.zip.sha256 \
/tmp/gradle-wrapper-seed \
&& chmod -R a+rwX ${GRADLE_USER_HOME}
# install nodejs using n
RUN curl -L https://raw.githubusercontent.com/tj/n/master/bin/n -o n \
&& bash n $NODE_VERSION \
&& rm n \
&& npm install -g n \
&& npm install -g yarn
# Full reference at https://dl.google.com/android/repository/repository2-1.xml
# download and unpack android
RUN curl -sS https://dl.google.com/android/repository/${SDK_VERSION} -o /tmp/sdk.zip \
&& mkdir -p ${ANDROID_HOME}/cmdline-tools \
&& unzip -q -d ${ANDROID_HOME}/cmdline-tools /tmp/sdk.zip \
&& mv ${ANDROID_HOME}/cmdline-tools/cmdline-tools ${ANDROID_HOME}/cmdline-tools/latest \
&& rm /tmp/sdk.zip \
&& yes | sdkmanager --licenses \
&& yes | sdkmanager "platform-tools" \
"platforms;android-$ANDROID_BUILD_VERSION" \
"build-tools;$ANDROID_TOOLS_VERSION" \
"cmake;$CMAKE_VERSION" \
"ndk;$NDK_VERSION" \
&& rm -rf ${ANDROID_HOME}/.android \
&& chmod 777 -R /opt/android
# Pre-download React Native native C++ dependencies so Gradle skips downloading them at build time
RUN mkdir -p /opt/react-native-downloads \
&& curl -sL -o /opt/react-native-downloads/boost_1_83_0.tar.gz https://archives.boost.io/release/1.83.0/source/boost_1_83_0.tar.gz \
&& curl -sL -o /opt/react-native-downloads/double-conversion-1.1.6.tar.gz https://github.com/google/double-conversion/archive/v1.1.6.tar.gz \
&& curl -sL -o /opt/react-native-downloads/fast_float-8.0.0.tar.gz https://github.com/fastfloat/fast_float/archive/v8.0.0.tar.gz \
&& curl -sL -o /opt/react-native-downloads/fmt-11.0.2.tar.gz https://github.com/fmtlib/fmt/archive/11.0.2.tar.gz \
&& curl -sL -o /opt/react-native-downloads/folly-2024.11.18.00.tar.gz https://github.com/facebook/folly/archive/v2024.11.18.00.tar.gz \
&& curl -sL -o /opt/react-native-downloads/gflags-2.2.0.tar.gz https://github.com/gflags/gflags/archive/v2.2.0.tar.gz \
&& curl -sL -o /opt/react-native-downloads/glog-0.3.5.tar.gz https://github.com/google/glog/archive/v0.3.5.tar.gz \
&& curl -sL -o /opt/react-native-downloads/nlohmann_json-3.11.2.tar.gz https://github.com/nlohmann/json/archive/v3.11.2.tar.gz
ENV REACT_NATIVE_DOWNLOADS_DIR=/opt/react-native-downloads
# Disable git safe directory check as this is causing GHA to fail on GH Runners
RUN git config --global --add safe.directory '*'