who_need_help/android/Dockerfile

146 lines
4.9 KiB
Docker

FROM gradle:9.6.1-jdk17@sha256:7364ce528f33bb6038672bcef990d524f1ad8fbc292935819c235db886d0fae7 AS android-base
USER root
ARG ANDROID_COMMAND_LINE_TOOLS_VERSION=15859902
ARG ANDROID_COMMAND_LINE_TOOLS_SHA1=040d3996a65543d22ec4bf73e4c37aa37a8d4af4
ENV ANDROID_HOME=/opt/android-sdk
ENV ANDROID_SDK_ROOT=/opt/android-sdk
ENV PATH="${PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools"
RUN apt-get update \
&& apt-get install -y --no-install-recommends curl unzip \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p "${ANDROID_HOME}/cmdline-tools" \
&& curl -fsSL \
"https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_COMMAND_LINE_TOOLS_VERSION}_latest.zip" \
-o /tmp/android-command-line-tools.zip \
&& echo "${ANDROID_COMMAND_LINE_TOOLS_SHA1} /tmp/android-command-line-tools.zip" \
| sha1sum -c - \
&& unzip -q /tmp/android-command-line-tools.zip -d /tmp/android-command-line-tools \
&& mv /tmp/android-command-line-tools/cmdline-tools "${ANDROID_HOME}/cmdline-tools/latest" \
&& rm -rf /tmp/android-command-line-tools /tmp/android-command-line-tools.zip
RUN android --no-metrics --sdk="${ANDROID_HOME}" sdk install \
"build-tools/37.0.0" \
"platforms/android-37.0" \
&& chown -R gradle:gradle "${ANDROID_HOME}"
FROM android-base AS android-sdk
USER gradle
WORKDIR /workspace/android
COPY --chown=gradle:gradle . .
ARG WNH_DEBUG_BASE_URL
ARG WNH_TRACKING_MIN_TIME_MS
ARG WNH_TRACKING_HTTP_TIMEOUT_MS
RUN --mount=type=cache,target=/home/gradle/.gradle,uid=1000,gid=1000 \
--mount=type=cache,target=/home/gradle/.android,uid=1000,gid=1000 \
gradle --no-daemon \
"-PWNH_DEBUG_BASE_URL=${WNH_DEBUG_BASE_URL}" \
"-PWNH_TRACKING_MIN_TIME_MS=${WNH_TRACKING_MIN_TIME_MS}" \
"-PWNH_TRACKING_HTTP_TIMEOUT_MS=${WNH_TRACKING_HTTP_TIMEOUT_MS}" \
testDebugUnitTest lintDebug assembleDebug assembleDebugAndroidTest
FROM android-base AS emulator
USER root
RUN android --no-metrics --sdk="${ANDROID_HOME}" sdk install \
"emulator" \
"system-images/android-37.0/google_apis_ps16k/x86_64" \
&& chown -R gradle:gradle "${ANDROID_HOME}"
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
libdbus-1-3 \
libfontconfig1 \
libgl1 \
libnss3 \
libpulse0 \
libx11-6 \
libxcomposite1 \
libxcursor1 \
libxi6 \
libxkbfile1 \
libxrandr2 \
libxrender1 \
libxtst6 \
&& rm -rf /var/lib/apt/lists/*
# The container is operated from the host through `docker exec ... adb`.
# Keep platform-tools in the emulator target without invalidating the large
# system-image layer when application sources change.
RUN android --no-metrics --sdk="${ANDROID_HOME}" sdk install "platform-tools" \
&& chown -R gradle:gradle "${ANDROID_HOME}"
USER gradle
RUN echo no | avdmanager create avd \
--force \
--name who_need_help_api37 \
--package "system-images;android-37.0;google_apis_ps16k;x86_64"
COPY --from=android-sdk --chown=gradle:gradle \
/workspace/android/app/build/outputs/apk/debug/app-debug.apk \
/opt/who-need-help/who-need-help-debug.apk
COPY --from=android-sdk --chown=gradle:gradle \
/workspace/android/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk \
/opt/who-need-help/who-need-help-debug-androidTest.apk
CMD ["/opt/android-sdk/emulator/emulator", \
"-avd", "who_need_help_api37", \
"-no-window", \
"-no-audio", \
"-no-boot-anim", \
"-no-snapshot", \
"-gpu", "software", \
"-feature", "-Vulkan", \
"-camera-back", "none", \
"-camera-front", "none", \
"-netdelay", "none", \
"-netspeed", "full"]
FROM scratch AS artifact
COPY --from=android-sdk \
/workspace/android/app/build/outputs/apk/debug/app-debug.apk \
/who-need-help-debug.apk
COPY --from=android-sdk \
/workspace/android/app/build/reports/lint-results-debug.html \
/lint-results-debug.html
FROM android-base AS android-staging-sdk
USER gradle
WORKDIR /workspace/android
COPY --chown=gradle:gradle . .
ARG WNH_BASE_URL
ARG WNH_TRACKING_MIN_TIME_MS
ARG WNH_TRACKING_HTTP_TIMEOUT_MS
RUN --mount=type=cache,target=/home/gradle/.gradle,uid=1000,gid=1000 \
--mount=type=cache,target=/home/gradle/.android,uid=1000,gid=1000 \
gradle --no-daemon \
"-PWNH_BASE_URL=${WNH_BASE_URL}" \
"-PWNH_DEBUG_BASE_URL=${WNH_BASE_URL}" \
"-PWNH_TRACKING_MIN_TIME_MS=${WNH_TRACKING_MIN_TIME_MS}" \
"-PWNH_TRACKING_HTTP_TIMEOUT_MS=${WNH_TRACKING_HTTP_TIMEOUT_MS}" \
testDebugUnitTest lintStaging assembleStaging
FROM scratch AS staging-artifact
COPY --from=android-staging-sdk \
/workspace/android/app/build/outputs/apk/staging/app-staging.apk \
/who-need-help-staging.apk
COPY --from=android-staging-sdk \
/workspace/android/app/build/reports/lint-results-staging.html \
/lint-results-staging.html