Skip to content

Commit dac49bf

Browse files
Optimize CI by using a custom Docker container with pre-installed dependencies.
This change introduces a Docker container (`.ci/container/Dockerfile`) that pre-installs: - OpenJDK 8 (ZuluFX), 11, 17, 21, and 25 (Zulu). - Android SDK (command-line tools, platform-tools, build-tools) and NDK dependencies. - Ant, Maven, Python 3. - Codename One binaries (`cn1-binaries`). - Required libraries for headless UI testing (xvfb, libgl1-mesa-dri). Updates `pr.yml`, `ant.yml`, and `scripts-android.yml` to run jobs inside this container (`ghcr.io/codenameone/codenameone/ci-container:latest`), removing redundant setup steps (JDK download, tool installation) to improve build speed and reproducibility. The workflow `.github/workflows/build-container.yml` is added to build and push this container image to GHCR, ensuring the image tag is always lowercase to comply with registry requirements. Also updates `scripts/setup-workspace.sh` to respect the `CN1_BINARIES` environment variable and handle the pre-configured environment correctly.
1 parent 8f96d66 commit dac49bf

File tree

5 files changed

+37
-11
lines changed

5 files changed

+37
-11
lines changed

.ci/container/Dockerfile

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ RUN apt-get update && apt-get install -y \
1919
libxxf86vm1 \
2020
ant \
2121
maven \
22+
libncurses5 \
23+
libstdc++6 \
2224
&& rm -rf /var/lib/apt/lists/*
2325

2426
# Setup Azul Repo
@@ -44,14 +46,9 @@ RUN mkdir -p /usr/lib/jvm/zulu8-fx && \
4446
# Clone cn1-binaries
4547
RUN git clone --depth=1 https://github.com/codenameone/cn1-binaries /opt/cn1-binaries
4648

47-
# Set Environment Variables
48-
ENV JAVA_HOME=/usr/lib/jvm/zulu8-fx
49-
ENV PATH=$JAVA_HOME/bin:$PATH
50-
49+
# Set Environment Variables for JDKs (Paths for apt installed JDKs usually symlinked to /usr/lib/jvm/zulu-XX-amd64)
5150
ENV JAVA8_HOME=/usr/lib/jvm/zulu8-fx
5251
ENV JDK8_HOME=/usr/lib/jvm/zulu8-fx
53-
54-
# Paths for apt installed JDKs (usually symlinked to /usr/lib/jvm/zulu-XX-amd64)
5552
ENV JAVA11_HOME=/usr/lib/jvm/zulu-11-amd64
5653
ENV JDK11_HOME=/usr/lib/jvm/zulu-11-amd64
5754
ENV JAVA17_HOME=/usr/lib/jvm/zulu-17-amd64
@@ -61,6 +58,28 @@ ENV JDK21_HOME=/usr/lib/jvm/zulu-21-amd64
6158
ENV JAVA25_HOME=/usr/lib/jvm/zulu-25-amd64
6259
ENV JDK25_HOME=/usr/lib/jvm/zulu-25-amd64
6360

61+
# Install Android SDK
62+
ENV ANDROID_HOME=/opt/android-sdk
63+
ENV ANDROID_SDK_ROOT=/opt/android-sdk
64+
ENV CMDLINE_TOOLS_URL="https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip"
65+
66+
RUN mkdir -p ${ANDROID_HOME}/cmdline-tools && \
67+
wget -q ${CMDLINE_TOOLS_URL} -O /tmp/cmdline-tools.zip && \
68+
unzip -q /tmp/cmdline-tools.zip -d ${ANDROID_HOME}/cmdline-tools && \
69+
mv ${ANDROID_HOME}/cmdline-tools/cmdline-tools ${ANDROID_HOME}/cmdline-tools/latest && \
70+
rm /tmp/cmdline-tools.zip
71+
72+
ENV PATH=${ANDROID_HOME}/cmdline-tools/latest/bin:${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/emulator:${PATH}
73+
74+
# Accept licenses and install packages
75+
# Note: sdkmanager requires Java 11+ to run. We use JAVA17_HOME for this step.
76+
RUN yes | JAVA_HOME=${JAVA17_HOME} sdkmanager --licenses && \
77+
JAVA_HOME=${JAVA17_HOME} sdkmanager "platform-tools" "platforms;android-31" "build-tools;31.0.0"
78+
79+
# Set Default JAVA_HOME to Java 8 (as per user requirement for builds)
80+
ENV JAVA_HOME=/usr/lib/jvm/zulu8-fx
81+
ENV PATH=$JAVA_HOME/bin:$PATH
82+
6483
ENV CN1_BINARIES=/opt/cn1-binaries
6584

6685
# Verify installations
@@ -71,4 +90,5 @@ RUN java -version && \
7190
$JAVA25_HOME/bin/java -version && \
7291
ant -version && \
7392
mvn -version && \
74-
python3 --version
93+
python3 --version && \
94+
JAVA_HOME=${JAVA17_HOME} sdkmanager --version

.github/workflows/ant.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212

1313
runs-on: ubuntu-latest
1414
container:
15-
image: ghcr.io/${{ github.repository }}/ci-container:latest
15+
image: ghcr.io/codenameone/codenameone/ci-container:latest
1616

1717
steps:
1818
- uses: actions/checkout@v1

.github/workflows/build-container.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ on:
99

1010
env:
1111
REGISTRY: ghcr.io
12-
IMAGE_NAME: ${{ github.repository }}/ci-container
1312

1413
jobs:
1514
build-and-push:
@@ -22,6 +21,10 @@ jobs:
2221
- name: Checkout repository
2322
uses: actions/checkout@v4
2423

24+
- name: Downcase Image Name
25+
run: |
26+
echo "IMAGE_NAME=${GITHUB_REPOSITORY,,}/ci-container" >> ${GITHUB_ENV}
27+
2528
- name: Log in to the Container registry
2629
uses: docker/login-action@v3
2730
with:

.github/workflows/pr.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ jobs:
3838

3939
runs-on: ubuntu-latest
4040
container:
41-
image: ghcr.io/${{ github.repository }}/ci-container:latest
41+
image: ghcr.io/codenameone/codenameone/ci-container:latest
4242

4343
steps:
4444
- uses: actions/checkout@v1

.github/workflows/scripts-android.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ jobs:
9191
issues: write
9292
runs-on: ubuntu-latest
9393
container:
94-
image: ghcr.io/${{ github.repository }}/ci-container:latest
94+
image: ghcr.io/codenameone/codenameone/ci-container:latest
9595
options: --privileged -v /dev/kvm:/dev/kvm
9696
env:
9797
GITHUB_TOKEN: ${{ secrets.CN1SS_GH_TOKEN }}
@@ -108,6 +108,9 @@ jobs:
108108
- name: Set JDK_HOME
109109
if: matrix.id != 'default'
110110
run: echo "JDK_HOME=/usr/lib/jvm/zulu-${{ matrix.java_version }}-amd64" >> $GITHUB_ENV
111+
- name: Set JDK_HOME (Default)
112+
if: matrix.id == 'default'
113+
run: echo "JDK_HOME=${JDK8_HOME}" >> $GITHUB_ENV
111114
- name: Configure CN1SS options
112115
if: matrix.id != 'default'
113116
run: |

0 commit comments

Comments
 (0)