Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,13 @@ jobs:
--depth 1 \
--no-tags \
https://github.com/facebook/react-native.git
- name: Verify preloaded Gradle Wrapper distribution
run: |
docker run --rm --network none \
-v "$(pwd)/react-native:/react-native" \
-w /react-native \
react-native-community/react-native \
./gradlew --version
- name: Build React Native
run: |
docker run --rm --ulimit nofile=10240 -v "$(pwd)/scripts/":/scripts -v "$(pwd)/react-native/":/react-native -w /react-native react-native-community/react-native /bin/sh -c "/scripts/test-react-native-setup.sh"
Expand Down
32 changes: 32 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ ARG NDK_VERSION=27.1.12297006
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
Expand All @@ -24,6 +25,7 @@ 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}

Expand Down Expand Up @@ -66,6 +68,36 @@ RUN apt update -qq && apt install -qq -y --no-install-recommends \
&& 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 \
Expand Down
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,9 @@ https://github.com/react-native-community/ci-sample
## Dockerhub Image
see https://hub.docker.com/r/reactnativecommunity/react-native-android/

The image preloads the Gradle Wrapper distribution selected by the
`GRADLE_VERSION` build argument. Its wrapper cache is stored in
`GRADLE_USER_HOME=/opt/gradle-home`, so `./gradlew` can start without
downloading Gradle in ephemeral CI containers.

Original version is split from react-native repo, see https://github.com/facebook/react-native/blob/988366a4179d87d667e5d9396efdfba4cbbe0b2e/ContainerShip/Dockerfile.android-base.
Loading