bvandeusen
  • Joined on 2026-05-30

ci-rust-android (latest)

Published 2026-11-01 23:04:42 -05:00 by bvandeusen

Installation

docker pull git.fabledsword.com/bvandeusen/ci-rust-android:latest
sha256:663d13e5b5cdd49a09f95cf31d25d9d4c3b841f6eff459aa446283f3ac3a97e2

About this package

CI image: Rust + the four Android ABIs + cargo-ndk + Android SDK/NDK + JDK + ktlint + detekt + Node. For Kotlin/Compose apps with a Rust core.

Image Layers

ARG RELEASE
ARG LAUNCHPAD_BUILD_ARCH
LABEL org.opencontainers.image.version=24.04
ADD file:eed88e94d6aa7c9da62836e137f889e03988c1a6b237b0cedb6ca666dfaa98ea in /
CMD ["/bin/bash"]
ENV JAVA_HOME=/opt/java/openjdk
ENV PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8
RUN /bin/sh -c set -eux; apt-get update; DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends fontconfig ca-certificates p11-kit binutils tzdata locales ; echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen; locale-gen en_US.UTF-8; rm -rf /var/lib/apt/lists/* # buildkit
ENV JAVA_VERSION=jdk-25.0.5+8
RUN /bin/sh -c set -eux; ARCH="$(dpkg --print-architecture)"; case "${ARCH}" in amd64) ESUM='68982529869257d0ee6b824ec5aa270ff8b118bb438670da0b97ebdab178d7fb'; BINARY_URL='https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.5%2B8/OpenJDK25U-jdk_x64_linux_hotspot_25.0.5_8.tar.gz'; ;; arm64) ESUM='bb5b2ded252f21c6090cf780b0a408ad0d83bbb557e702955643557f13231880'; BINARY_URL='https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.5%2B8/OpenJDK25U-jdk_aarch64_linux_hotspot_25.0.5_8.tar.gz'; ;; ppc64el) ESUM='47825886fd72e86c94e6fd1687a13bebb4ae729e24d2788be0d294589bf07297'; BINARY_URL='https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.5%2B8/OpenJDK25U-jdk_ppc64le_linux_hotspot_25.0.5_8.tar.gz'; ;; riscv64) ESUM='21d9ee84f64d845e7de888f86cc2abe3256c75853a0d5abe7fd42d6526374e90'; BINARY_URL='https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.5%2B8/OpenJDK25U-jdk_riscv64_linux_hotspot_25.0.5_8.tar.gz'; ;; s390x) ESUM='dfed6b7b428852ab1a3b9eb7734264f4d4cc163686e4136f93b9942f3d8f44cd'; BINARY_URL='https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25.0.5%2B8/OpenJDK25U-jdk_s390x_linux_hotspot_25.0.5_8.tar.gz'; ;; *) echo "Unsupported arch: ${ARCH}"; exit 1; ;; esac; savedAptMark="$(apt-mark showmanual)"; apt-get update; apt-get install -y --no-install-recommends wget gnupg; wget --progress=dot:giga -O /tmp/openjdk.tar.gz ${BINARY_URL}; wget --progress=dot:giga -O /tmp/openjdk.tar.gz.sig ${BINARY_URL}.sig; export GNUPGHOME="$(mktemp -d)"; gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 3B04D753C9050D9A5D343F39843C48A565F8F04B; gpg --batch --verify /tmp/openjdk.tar.gz.sig /tmp/openjdk.tar.gz; rm -rf "${GNUPGHOME}" /tmp/openjdk.tar.gz.sig; echo "${ESUM} */tmp/openjdk.tar.gz" | sha256sum -c -; mkdir -p "$JAVA_HOME"; tar --extract --file /tmp/openjdk.tar.gz --directory "$JAVA_HOME" --strip-components 1 --no-same-owner ; rm -f /tmp/openjdk.tar.gz ${JAVA_HOME}/lib/src.zip; apt-mark auto '.*' > /dev/null; apt-mark manual $savedAptMark > /dev/null; apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; rm -rf /var/lib/apt/lists/*; find "$JAVA_HOME/lib" -name '*.so' -exec dirname '{}' ';' | sort -u > /etc/ld.so.conf.d/docker-openjdk.conf; ldconfig; java -Xshare:dump; # buildkit
RUN /bin/sh -c set -eux; echo "Verifying install ..."; fileEncoding="$(echo 'System.out.println(System.getProperty("file.encoding"))' | jshell -s -)"; [ "$fileEncoding" = 'UTF-8' ]; rm -rf ~/.java; echo "javac --version"; javac --version; echo "java --version"; java --version; echo "Complete." # buildkit
COPY --chmod=755 entrypoint.sh /__cacert_entrypoint.sh # buildkit
ENTRYPOINT ["/__cacert_entrypoint.sh"]
CMD ["jshell"]
LABEL org.opencontainers.image.source=https://git.fabledsword.com/bvandeusen/CI-runner org.opencontainers.image.description=CI image: Rust + the four Android ABIs + cargo-ndk + Android SDK/NDK + JDK + ktlint + detekt + Node. For Kotlin/Compose apps with a Rust core. org.opencontainers.image.licenses=MIT
SHELL [/bin/bash -eo pipefail -c]
ARG NODE_MAJOR
ARG RUST_VERSION
ARG CARGO_NDK_VERSION
ARG ANDROID_CMDLINE_TOOLS_VERSION
ARG ANDROID_API_LEVEL
ARG ANDROID_BUILD_TOOLS
ARG ANDROID_NDK_VERSION
ARG KTLINT_VERSION
ARG DETEKT_VERSION
ARG RUNNER_UID
ARG RUNNER_USER
ENV ANDROID_SDK_ROOT=/opt/android-sdk ANDROID_HOME=/opt/android-sdk RUSTUP_HOME=/opt/rustup CARGO_HOME=/opt/cargo PATH=/opt/cargo/bin:/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/platform-tools:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
COPY scripts/install-common.sh /tmp/install-common.sh # buildkit
RUN |11 NODE_MAJOR=24 RUST_VERSION=1.97.1 CARGO_NDK_VERSION=4.1.2 ANDROID_CMDLINE_TOOLS_VERSION=11076708 ANDROID_API_LEVEL=36 ANDROID_BUILD_TOOLS=36.0.0 ANDROID_NDK_VERSION=28.2.13676358 KTLINT_VERSION=1.4.0 DETEKT_VERSION=1.23.7 RUNNER_UID=1001 RUNNER_USER=runner /bin/bash -eo pipefail -c NODE_MAJOR=${NODE_MAJOR} bash /tmp/install-common.sh && rm /tmp/install-common.sh # buildkit
RUN |11 NODE_MAJOR=24 RUST_VERSION=1.97.1 CARGO_NDK_VERSION=4.1.2 ANDROID_CMDLINE_TOOLS_VERSION=11076708 ANDROID_API_LEVEL=36 ANDROID_BUILD_TOOLS=36.0.0 ANDROID_NDK_VERSION=28.2.13676358 KTLINT_VERSION=1.4.0 DETEKT_VERSION=1.23.7 RUNNER_UID=1001 RUNNER_USER=runner /bin/bash -eo pipefail -c apt-get update && apt-get install -y --no-install-recommends build-essential make perl unzip zip && rm -rf /var/lib/apt/lists/* # buildkit
RUN |11 NODE_MAJOR=24 RUST_VERSION=1.97.1 CARGO_NDK_VERSION=4.1.2 ANDROID_CMDLINE_TOOLS_VERSION=11076708 ANDROID_API_LEVEL=36 ANDROID_BUILD_TOOLS=36.0.0 ANDROID_NDK_VERSION=28.2.13676358 KTLINT_VERSION=1.4.0 DETEKT_VERSION=1.23.7 RUNNER_UID=1001 RUNNER_USER=runner /bin/bash -eo pipefail -c curl -fsSL "https://github.com/pinterest/ktlint/releases/download/${KTLINT_VERSION}/ktlint" -o /usr/local/bin/ktlint && chmod +x /usr/local/bin/ktlint && curl -fsSL "https://github.com/detekt/detekt/releases/download/v${DETEKT_VERSION}/detekt-cli-${DETEKT_VERSION}.zip" -o /tmp/detekt.zip && unzip -q /tmp/detekt.zip -d /opt && mv /opt/detekt-cli-${DETEKT_VERSION} /opt/detekt-cli && ln -s /opt/detekt-cli/bin/detekt-cli /usr/local/bin/detekt && rm /tmp/detekt.zip # buildkit
RUN |11 NODE_MAJOR=24 RUST_VERSION=1.97.1 CARGO_NDK_VERSION=4.1.2 ANDROID_CMDLINE_TOOLS_VERSION=11076708 ANDROID_API_LEVEL=36 ANDROID_BUILD_TOOLS=36.0.0 ANDROID_NDK_VERSION=28.2.13676358 KTLINT_VERSION=1.4.0 DETEKT_VERSION=1.23.7 RUNNER_UID=1001 RUNNER_USER=runner /bin/bash -eo pipefail -c useradd --create-home --shell /bin/bash --uid ${RUNNER_UID} ${RUNNER_USER} && mkdir -p ${ANDROID_SDK_ROOT} ${RUSTUP_HOME} ${CARGO_HOME} && chown -R ${RUNNER_UID}:${RUNNER_UID} ${ANDROID_SDK_ROOT} ${RUSTUP_HOME} ${CARGO_HOME} # buildkit
USER runner
WORKDIR /home/runner
RUN |11 NODE_MAJOR=24 RUST_VERSION=1.97.1 CARGO_NDK_VERSION=4.1.2 ANDROID_CMDLINE_TOOLS_VERSION=11076708 ANDROID_API_LEVEL=36 ANDROID_BUILD_TOOLS=36.0.0 ANDROID_NDK_VERSION=28.2.13676358 KTLINT_VERSION=1.4.0 DETEKT_VERSION=1.23.7 RUNNER_UID=1001 RUNNER_USER=runner /bin/bash -eo pipefail -c mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools && curl -fsSL "https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_CMDLINE_TOOLS_VERSION}_latest.zip" -o /tmp/cmdline-tools.zip && unzip -q /tmp/cmdline-tools.zip -d ${ANDROID_SDK_ROOT}/cmdline-tools && mv ${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools ${ANDROID_SDK_ROOT}/cmdline-tools/latest && rm /tmp/cmdline-tools.zip # buildkit
RUN |11 NODE_MAJOR=24 RUST_VERSION=1.97.1 CARGO_NDK_VERSION=4.1.2 ANDROID_CMDLINE_TOOLS_VERSION=11076708 ANDROID_API_LEVEL=36 ANDROID_BUILD_TOOLS=36.0.0 ANDROID_NDK_VERSION=28.2.13676358 KTLINT_VERSION=1.4.0 DETEKT_VERSION=1.23.7 RUNNER_UID=1001 RUNNER_USER=runner /bin/bash -eo pipefail -c (for i in $(seq 1 50); do echo y; done) | sdkmanager --licenses >/dev/null && sdkmanager "platform-tools" "platforms;android-${ANDROID_API_LEVEL}" "build-tools;${ANDROID_BUILD_TOOLS}" "ndk;${ANDROID_NDK_VERSION}" # buildkit
ENV ANDROID_NDK_HOME=/opt/android-sdk/ndk/28.2.13676358 NDK_HOME=/opt/android-sdk/ndk/28.2.13676358
RUN |11 NODE_MAJOR=24 RUST_VERSION=1.97.1 CARGO_NDK_VERSION=4.1.2 ANDROID_CMDLINE_TOOLS_VERSION=11076708 ANDROID_API_LEVEL=36 ANDROID_BUILD_TOOLS=36.0.0 ANDROID_NDK_VERSION=28.2.13676358 KTLINT_VERSION=1.4.0 DETEKT_VERSION=1.23.7 RUNNER_UID=1001 RUNNER_USER=runner /bin/bash -eo pipefail -c NDK_BIN="${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin" && for triple in aarch64-linux-android armv7a-linux-androideabi arm-linux-androideabi i686-linux-android x86_64-linux-android; do for tool in ar ranlib nm strip; do ln -sf "${NDK_BIN}/llvm-${tool}" "${NDK_BIN}/${triple}-${tool}"; done; done && test -x "${NDK_BIN}/aarch64-linux-android-ranlib" # buildkit
ENV PATH=/opt/cargo/bin:/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/platform-tools:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/android-sdk/ndk/28.2.13676358/toolchains/llvm/prebuilt/linux-x86_64/bin
RUN |11 NODE_MAJOR=24 RUST_VERSION=1.97.1 CARGO_NDK_VERSION=4.1.2 ANDROID_CMDLINE_TOOLS_VERSION=11076708 ANDROID_API_LEVEL=36 ANDROID_BUILD_TOOLS=36.0.0 ANDROID_NDK_VERSION=28.2.13676358 KTLINT_VERSION=1.4.0 DETEKT_VERSION=1.23.7 RUNNER_UID=1001 RUNNER_USER=runner /bin/bash -eo pipefail -c curl -fsSL https://sh.rustup.rs | sh -s -- -y --no-modify-path --profile minimal --default-toolchain ${RUST_VERSION} && rustup component add clippy rustfmt && rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android # buildkit
RUN |11 NODE_MAJOR=24 RUST_VERSION=1.97.1 CARGO_NDK_VERSION=4.1.2 ANDROID_CMDLINE_TOOLS_VERSION=11076708 ANDROID_API_LEVEL=36 ANDROID_BUILD_TOOLS=36.0.0 ANDROID_NDK_VERSION=28.2.13676358 KTLINT_VERSION=1.4.0 DETEKT_VERSION=1.23.7 RUNNER_UID=1001 RUNNER_USER=runner /bin/bash -eo pipefail -c cargo install cargo-ndk --version ${CARGO_NDK_VERSION} --locked # buildkit
RUN |11 NODE_MAJOR=24 RUST_VERSION=1.97.1 CARGO_NDK_VERSION=4.1.2 ANDROID_CMDLINE_TOOLS_VERSION=11076708 ANDROID_API_LEVEL=36 ANDROID_BUILD_TOOLS=36.0.0 ANDROID_NDK_VERSION=28.2.13676358 KTLINT_VERSION=1.4.0 DETEKT_VERSION=1.23.7 RUNNER_UID=1001 RUNNER_USER=runner /bin/bash -eo pipefail -c rustc --version && cargo --version && cargo clippy --version && cargo fmt --version && cargo ndk --version && java -version && javac -version && sdkmanager --version && ktlint --version && detekt --version && node --version && rustup target list --installed | grep -q aarch64-linux-android && test -d "${ANDROID_NDK_HOME}" && echo "NDK present at ${ANDROID_NDK_HOME}" && command -v aarch64-linux-android-ranlib && command -v aarch64-linux-android-ar # buildkit

Labels

Key Value
org.opencontainers.image.description CI image: Rust + the four Android ABIs + cargo-ndk + Android SDK/NDK + JDK + ktlint + detekt + Node. For Kotlin/Compose apps with a Rust core.
org.opencontainers.image.licenses MIT
org.opencontainers.image.source https://git.fabledsword.com/bvandeusen/CI-runner
org.opencontainers.image.version 24.04
Details
Container
2026-11-01 23:04:42 -05:00
55
OCI / Docker
linux/amd64
MIT
1.7 GiB
Versions (2) View all
latest 2026-11-01
1.97 2026-11-01