diff --git a/.github/versions.env b/.github/versions.env
index ed43d2f..1060da8 100755
--- a/.github/versions.env
+++ b/.github/versions.env
@@ -1,3 +1,3 @@
-IMAGE_VERSION=1.21.16
-NDK_VERSION=27.2.12479018
-BAZELISK_VERSION=v1.26.0
+IMAGE_VERSION=1.22.1
+NDK_VERSION=29.0.14206865
+BAZELISK_VERSION=v1.27.0
diff --git a/.github/workflows/post_merge_deploy.yml b/.github/workflows/post_merge_deploy.yml
index c3c8491..830871c 100644
--- a/.github/workflows/post_merge_deploy.yml
+++ b/.github/workflows/post_merge_deploy.yml
@@ -75,10 +75,37 @@ jobs:
envFilePath: .github/versions.env
- run: ./.github/docker_build_image.sh
- run: ./.github/docker_push_image.sh
- build_dev_image:
+ build_dev_base_image:
runs-on: ubuntu-24.04
needs:
- build_specialized_images
+ env:
+ IMAGE_NAME: android_dev_base
+ DOCKER_FILE_PATH: android_dev_base/.
+ SQUASH_IMAGE: NO
+ steps:
+ - uses: actions/checkout@v3.5.0
+ - name: Log in to Docker Hub
+ uses: docker/login-action@v2.1.0
+ with:
+ username: ${{ secrets.DOCKER_USER }}
+ password: ${{ secrets.DOCKER_PASS }}
+ - name: Log in to the Container registry
+ uses: docker/login-action@v2.1.0
+ with:
+ registry: ghcr.io
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+ - name: Set versions
+ uses: tw3lveparsecs/github-actions-set-variables@latest
+ with:
+ envFilePath: .github/versions.env
+ - run: ./.github/docker_build_image.sh
+ - run: ./.github/docker_push_image.sh
+ build_dev_image:
+ runs-on: ubuntu-24.04
+ needs:
+ - build_dev_base_image
env:
IMAGE_NAME: android_dev
DOCKER_FILE_PATH: android_dev/.
@@ -143,7 +170,12 @@ jobs:
docker pull ghcr.io/menny/android_bazel:${{ env.IMAGE_VERSION }}
```
- **Dev**: Bazel + node, pnpm, zsh, oh-my-zsh, and gemini-cli ([Dockerfile](https://github.com/menny/docker_android/blob/${{ env.IMAGE_VERSION }}/android_dev/Dockerfile)):
+ **Dev-Base**: Bazel + node, pnpm, zsh, Claude-Code, and gemini-cli ([Dockerfile](https://github.com/menny/docker_android/blob/${{ env.IMAGE_VERSION }}/android_dev_base/Dockerfile)):
+ ```
+ docker pull ghcr.io/menny/android_dev_base:${{ env.IMAGE_VERSION }}
+ ```
+
+ **Dev**: android_dev_base + oh-my-zsh + sshd + some scripts ([Dockerfile](https://github.com/menny/docker_android/blob/${{ env.IMAGE_VERSION }}/android_dev/Dockerfile)):
```
docker pull ghcr.io/menny/android_dev:${{ env.IMAGE_VERSION }}
```
diff --git a/.github/workflows/pre_merge_checks.yml b/.github/workflows/pre_merge_checks.yml
index 2664ffc..cf2adfa 100644
--- a/.github/workflows/pre_merge_checks.yml
+++ b/.github/workflows/pre_merge_checks.yml
@@ -33,5 +33,5 @@ jobs:
run: IMAGE_NAME="android" DOCKER_FILE_PATH="." ./.github/docker_build_image.sh
- name: Android image with Bazel tools
run: IMAGE_NAME="android_bazel" DOCKER_FILE_PATH="android_bazel/." ./.github/docker_build_image.sh
- - name: Android image for personal dev
- run: IMAGE_NAME="android_dev" DOCKER_FILE_PATH="android_dev/." ./.github/docker_build_image.sh
+ - name: Android image for personal dev (base)
+ run: IMAGE_NAME="android_dev_base" DOCKER_FILE_PATH="android_dev_base/." ./.github/docker_build_image.sh
diff --git a/Dockerfile b/Dockerfile
index b6508a2..091f95d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -8,9 +8,9 @@ LABEL version="${IMAGE_VERSION}"
LABEL maintainer="menny@evendanan.net"
# Install sdk elements (list from "sdkmanager --list")
-RUN sdkmanager "build-tools;35.0.0"
+RUN sdkmanager "build-tools;36.1.0"
-RUN sdkmanager "platforms;android-35"
+RUN sdkmanager "platforms;android-36"
#accepting licenses
RUN yes | sdkmanager --licenses
diff --git a/README.md b/README.md
index 0fbc6ec..24c6f4c 100644
--- a/README.md
+++ b/README.md
@@ -5,13 +5,13 @@ These images are available in Docker Hub and [ghcr.io](https://github.com/menny?
## Contains:
-* Based on `ubuntu:jammy` 24.04
+* Based on `ubuntu:plucky` 25.04
* with wget, curl, zip, python, pip, git, make, gcc (and other build-essential)
-* Corretto JDK17 - https://github.com/corretto/corretto-17/releases
-* cmdline tools 16.0
-* Platform tools 35.0.0
-* Build Tools 35.0.0
-* SDK API 35
+* Corretto JDK21 - https://github.com/corretto/corretto-21/releases
+* cmdline tools 19.0
+* Platform tools 36.1.0
+* Build Tools 36.1.0
+* SDK API 36
* Compressed and squashed into one layer (where makes sense).
diff --git a/android_base/Dockerfile b/android_base/Dockerfile
index 57769db..548219a 100644
--- a/android_base/Dockerfile
+++ b/android_base/Dockerfile
@@ -1,4 +1,4 @@
-FROM ubuntu:jammy@sha256:f470988096c4d77efac9740a1b6700823681af518a17fad30111430b95dfbffa
+FROM ubuntu:plucky@sha256:34e8533bf27ac50f60bec267f6ce18c9aeb9556574e1ec1a8ce89926d32ea8f3
ARG IMAGE_VERSION
LABEL description="A general use Android docker for CI"
@@ -12,14 +12,13 @@ ENV TERM=dumb
# Install Deps and build-essential
RUN apt-get update \
&& apt-get install -y --allow-remove-essential --allow-change-held-packages --no-install-recommends \
- locales software-properties-common ca-certificates build-essential zlib1g-dev \
+ locales ca-certificates build-essential zlib1g-dev \
pkg-config file \
python3 python3-pip python3-lxml python3-yaml libxml2-utils yamllint \
wget curl nano rsync zip psmisc rsyslog jq unzip \
imagemagick librsvg2-bin \
java-common \
- && add-apt-repository ppa:git-core/ppa -y \
- && apt-get install git -y --allow-remove-essential --allow-change-held-packages --no-install-recommends \
+ git \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
@@ -40,14 +39,14 @@ ENV ANDROID_HOME=/opt/android-sdk-linux
ENV PATH=${PATH}:${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools
# Setup Java
-RUN curl https://corretto.aws/downloads/resources/17.0.10.8.1/java-17-amazon-corretto-jdk_17.0.10.8-1_amd64.deb -o jdk-corretto.deb \
+RUN curl -L https://corretto.aws/downloads/latest/amazon-corretto-21-x64-linux-jdk.deb -o jdk-corretto.deb \
&& dpkg --install jdk-corretto.deb \
&& rm jdk-corretto.deb
RUN java -version
# Install Android SDK
-RUN curl https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -o downloaded_sdk.zip \
+RUN curl -L https://dl.google.com/android/repository/commandlinetools-linux-13114758_latest.zip -o downloaded_sdk.zip \
&& mkdir -p /opt/android-sdk-linux/cmdline-tools \
&& unzip downloaded_sdk.zip -d /opt/android-sdk-linux/cmdline-tools \
&& rm -f downloaded_sdk.zip \
@@ -59,7 +58,7 @@ RUN yes | sdkmanager --licenses
# Install sdk elements (list from "sdkmanager --list")
RUN sdkmanager --list
-RUN sdkmanager "cmdline-tools;16.0"
+RUN sdkmanager "cmdline-tools;19.0"
RUN sdkmanager "platform-tools"
#accepting licenses
diff --git a/android_base/README.md b/android_base/README.md
index 11d813c..ad1e2b7 100644
--- a/android_base/README.md
+++ b/android_base/README.md
@@ -5,7 +5,8 @@ My general usage (very up-to-date) Docker image for Android CI. Without anything
* Based on `ubuntu:jammy` 22.04
* with wget, curl, zip, python, python3, pip, rsyslog, git, make, gcc (and other build-essential)
-* Corretto JDK17 - https://github.com/corretto/corretto-17/releases
+* Corretto JDK 21 - https://github.com/corretto/corretto-21/releases
+* Android Command Line Tools 19.0
* Compressed and squashed into one layer.
## Accepting licenses
diff --git a/android_dev/Dockerfile b/android_dev/Dockerfile
index 3d9dc62..3887f1e 100644
--- a/android_dev/Dockerfile
+++ b/android_dev/Dockerfile
@@ -1,47 +1,17 @@
ARG IMAGE_VERSION
-FROM menny/android_bazel:${IMAGE_VERSION}
+FROM menny/android_dev_base:${IMAGE_VERSION}
ARG IMAGE_VERSION
-ARG GEMINI_CLI_VERSION=latest
ARG ACTUAL_USER=menny
LABEL description="A general use Android docker for local personal development with pnpm, nodejs, and @google/gemini-cli"
-LABEL version="${IMAGE_VERSION}-${GEMINI_CLI_VERSION}"
+LABEL version="${IMAGE_VERSION}"
LABEL maintainer="menny@evendanan.net"
-# Install nodejs and pnpm. Taken from https://nodejs.org/en/download/current
-ENV NVM_DIR=/opt/nvm
-RUN mkdir -p ${NVM_DIR}
-# Download and install nvm
-RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
-
-ENV PNPM_HOME="/opt/.pnpm"
-ENV PATH=${PNPM_HOME}:${PATH}
-
-# Source nvm and install Node.js
-RUN . "$NVM_DIR/nvm.sh" && \
- nvm install 24 && \
- nvm use 24 && \
- nvm alias default 24
-
-# Verify Node.js installation
-RUN . "$NVM_DIR/nvm.sh" && \
- node -v && \
- nvm current
-
-# Enable pnpm via corepack
-RUN . "$NVM_DIR/nvm.sh" && corepack enable pnpm
-
-# Verify pnpm installation
-RUN . "$NVM_DIR/nvm.sh" && pnpm -v && SHELL=/bin/zsh pnpm setup
-
-# Install Gemini CLI
-RUN . "$NVM_DIR/nvm.sh" && pnpm add -g @google/gemini-cli@${GEMINI_CLI_VERSION}
-
# Install dependencies
RUN apt update \
&& apt install -y --allow-remove-essential --allow-change-held-packages \
- zsh openssh-server tmux \
+ openssh-server \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
diff --git a/android_dev_base/Dockerfile b/android_dev_base/Dockerfile
new file mode 100644
index 0000000..5e689bf
--- /dev/null
+++ b/android_dev_base/Dockerfile
@@ -0,0 +1,49 @@
+ARG IMAGE_VERSION
+FROM menny/android_bazel:${IMAGE_VERSION}
+
+ARG IMAGE_VERSION
+
+LABEL description="A general use Android docker for local personal development with pnpm, nodejs, and @google/gemini-cli"
+LABEL version="${IMAGE_VERSION}"
+LABEL maintainer="menny@evendanan.net"
+
+# Install nodejs and pnpm. Taken from https://nodejs.org/en/download/current
+ENV NVM_DIR=/opt/nvm
+RUN mkdir -p ${NVM_DIR}
+# Download and install nvm
+RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
+
+ENV PNPM_HOME="/opt/.pnpm"
+ENV PATH=${PNPM_HOME}:${PATH}
+
+# Source nvm and install Node.js
+RUN . "$NVM_DIR/nvm.sh" && \
+ nvm install 24 && \
+ nvm use 24 && \
+ nvm alias default 24
+
+# Verify Node.js installation
+RUN . "$NVM_DIR/nvm.sh" && \
+ node -v && \
+ nvm current
+
+# Enable pnpm via corepack
+RUN . "$NVM_DIR/nvm.sh" && corepack enable pnpm
+
+# Verify pnpm installation
+RUN . "$NVM_DIR/nvm.sh" && pnpm -v && SHELL=/bin/zsh pnpm setup
+
+# Install Gemini CLI and Claude Code
+RUN . "$NVM_DIR/nvm.sh" && pnpm add -g @google/gemini-cli@latest @anthropic-ai/claude-code@latest
+
+# Install dependencies
+RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \
+ && chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \
+ && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
+ && apt update \
+ && apt install -y --allow-remove-essential --allow-change-held-packages \
+ zsh tmux gh \
+ && apt-get clean \
+ && rm -rf /var/lib/apt/lists/*
+
+WORKDIR /opt/workspace
diff --git a/android_dev_base/README.md b/android_dev_base/README.md
new file mode 100644
index 0000000..30a5801
--- /dev/null
+++ b/android_dev_base/README.md
@@ -0,0 +1,43 @@
+# Android Dev Docker Image
+
+This Docker image is designed for local personal Android development and includes a variety of tools to streamline your workflow.
+
+## Included Tools
+
+* **pnpm**: A fast and disk-space-efficient package manager for Node.js.
+* **Node.js**: A JavaScript runtime built on Chrome's V8 JavaScript engine.
+* **@google/gemini-cli**: A command-line interface for Google's Gemini models.
+* **zsh**: A powerful and feature-rich shell.
+* **oh-my-zsh**: A framework for managing your zsh configuration.
+
+## Building the Image
+
+To build the image, run the following command from the root of the repository:
+
+```bash
+docker build -t android_dev -f android_dev/Dockerfile .
+```
+
+## Running the Image
+
+To run the image, use the following command:
+
+```bash
+docker run -it -v ~/.ssh:/root/.ssh android_dev
+```
+
+This will start an interactive shell in the container. The `-v ~/.ssh:/root/.ssh` flag mounts your host's SSH keys into the container, which is necessary for cloning private repositories.
+
+### Cloning a Repository
+
+The `entrypoint.sh` script will automatically clone a git repository when the container starts. You can customize the repository, branch, and provider using the following environment variables:
+
+* `git_repo`: The repository to clone. Defaults to `AnySoftKeyboard/AnySoftKeyboard`.
+* `git_brach`: The branch to clone. Defaults to `main`.
+* `git_provider`: The git provider. Defaults to `github.com`.
+
+For example, to clone a different repository, you can run the following command:
+
+```bash
+docker run -it -v ~/.ssh:/root/.ssh -e git_repo="my-repo/my-project" -e git_brach="main" menny/android_dev:latest
+```
diff --git a/local_build.sh b/local_build.sh
index e851e4c..e52f76b 100755
--- a/local_build.sh
+++ b/local_build.sh
@@ -31,6 +31,10 @@ pushd android_bazel
build_image android_bazel
popd
+pushd android_dev_base
+build_image android_dev_base
+popd
+
pushd android_dev
build_image android_dev
popd