Skip to content

Commit d14b322

Browse files
committed
Refactored
1 parent 4b6d26a commit d14b322

7 files changed

Lines changed: 107 additions & 199 deletions

File tree

.dockerignore

Lines changed: 0 additions & 7 deletions
This file was deleted.

.github/workflows/update-base.yml

Lines changed: 0 additions & 80 deletions
This file was deleted.

Appium/.dockerignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Dockerfile

Appium/Dockerfile

Lines changed: 103 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -1,148 +1,137 @@
1-
FROM ubuntu:noble-20260113
2-
3-
ENV DEBIAN_FRONTEND=noninteractive
1+
ARG UBUNTU_VERSION="noble-20260113"
2+
FROM ubuntu:${UBUNTU_VERSION} AS android_img
43

54
#==================
65
# General Packages
76
#------------------
87
# ca-certificates
98
# SSL client
10-
# curl
11-
# Transfer data from or to a server
12-
# gnupg
13-
# Encryption software. It is needed for nodejs
14-
# libqt5webkit5
15-
# Web content engine (Fix issue in Android)
16-
# openjdk-17-jdk
9+
# openjdk-25-jdk
1710
# Java
18-
# sudo
19-
# Sudo user
20-
# tzdata
21-
# Timezone
2211
# unzip
2312
# Unzip zip file
2413
# wget
2514
# Network downloader
26-
# xvfb
27-
# X virtual framebuffer
28-
# zip
29-
# Make a zip file
3015
#==================
3116
RUN apt-get -qqy update && \
3217
apt dist-upgrade -y && \
3318
apt-get -qqy --no-install-recommends install \
3419
ca-certificates \
35-
curl \
36-
gnupg \
37-
libqt5webkit5 \
38-
openjdk-17-jdk \
39-
sudo \
40-
tzdata \
20+
openjdk-25-jdk \
4121
unzip \
4222
wget \
43-
xvfb \
44-
zip \
45-
ffmpeg \
4623
&& rm -rf /var/lib/apt/lists/*
4724

4825
#===============
4926
# Set JAVA_HOME
5027
#===============
51-
ENV JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64" \
52-
PATH=$PATH:$JAVA_HOME/bin
28+
ENV JAVA_HOME="/usr/lib/jvm/java-25-openjdk-amd64"
29+
ENV PATH=$PATH:${JAVA_HOME}/bin
30+
31+
#================
32+
# Set up Android
33+
#================
34+
ENV SDK_VERSION=commandlinetools-linux-13114758_latest
35+
ENV ANDROID_BUILD_TOOLS_VERSION=36.0.0
36+
ENV ANDROID_CMD=cmdline-tools
37+
ENV ANDROID_HOME=/opt/android
38+
ENV ANDROID_CMD_HOME=/opt/android/${ANDROID_CMD}
39+
ENV ANDROID_TOOL_HOME=${ANDROID_CMD_HOME}/tools
40+
ENV PATH=$PATH:${ANDROID_TOOL_HOME}:${ANDROID_TOOL_HOME}/bin
41+
42+
RUN wget -O tools.zip https://dl.google.com/android/repository/${SDK_VERSION}.zip && \
43+
unzip tools.zip && rm tools.zip && \
44+
mkdir -p ${ANDROID_CMD_HOME}/tools && \
45+
mv ${ANDROID_CMD}/* ${ANDROID_TOOL_HOME}/ && \
46+
rm -rf ${ANDROID_CMD} && \
47+
echo y | sdkmanager "platform-tools" && \
48+
echo y | sdkmanager "build-tools;$ANDROID_BUILD_TOOLS_VERSION"
49+
50+
FROM ubuntu:${UBUNTU_VERSION}
51+
52+
ENV DEBIAN_FRONTEND=noninteractive
53+
54+
#==================
55+
# General Packages
56+
#------------------
57+
# libqt5webkit5
58+
# Web content engine (Fix issue in Android)
59+
# openjdk-25-jdk
60+
# Java
61+
# tzdata
62+
# Timezone
63+
# xvfb
64+
# X virtual framebuffer
65+
#==================
66+
RUN apt-get -qqy update && \
67+
apt dist-upgrade -y && \
68+
apt-get -qqy --no-install-recommends install \
69+
libqt5webkit5 \
70+
openjdk-25-jdk \
71+
tzdata \
72+
xvfb \
73+
&& rm -rf /var/lib/apt/lists/*
5374

5475
#===============================
5576
# Set Timezone (UTC as default)
5677
#===============================
57-
ENV TZ "UTC"
78+
ENV TZ="UTC"
5879
RUN echo "${TZ}" > /etc/timezone \
5980
&& dpkg-reconfigure --frontend noninteractive tzdata
6081

82+
#=====================
83+
# Set up needed tools
84+
#=====================
85+
ENV JAVA_HOME="/usr/lib/jvm/java-25-openjdk-amd64"
86+
ENV PATH=$PATH:${JAVA_HOME}/bin
87+
88+
ENV ANDROID_HOME=/opt/android
89+
COPY --from=android_img ${ANDROID_HOME} ${ANDROID_HOME}
90+
ENV PATH=${PATH}:\
91+
${ANDROID_HOME}/cmdline-tools/tools:\
92+
${ANDROID_HOME}/cmdline-tools/tools/bin:\
93+
${ANDROID_HOME}/platform-tools:\
94+
${ANDROID_HOME}/build-tools
95+
96+
COPY --from=node:24.13.0-slim /usr/local /usr/local
97+
6198
#===============
6299
# Create a user
63100
#===============
64-
ARG USER_PASS=secret
65-
RUN groupadd androidusr \
66-
--gid 1301 \
67-
&& useradd androidusr \
68-
--uid 1300 \
69-
--gid 1301 \
101+
ARG USERNAME=androidusr
102+
ENV USERNAME=${USERNAME}
103+
ARG USERPASS=secret
104+
ARG USERID=1300
105+
ENV USERID=${USERID}
106+
ARG GROUPID=1301
107+
ENV GROUPID=${GROUPID}
108+
RUN groupadd ${USERNAME} \
109+
--gid ${GROUPID} \
110+
&& useradd ${USERNAME} \
111+
--uid ${USERID} \
112+
--gid ${GROUPID} \
70113
--create-home \
71114
--shell /bin/bash \
72-
&& usermod -aG sudo androidusr \
73-
&& echo androidusr:${USER_PASS} | chpasswd \
74-
&& echo 'androidusr ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
75-
76-
WORKDIR /home/androidusr
115+
&& echo ${USERNAME}:${USERPASS} | chpasswd
77116

78-
#=====================
79-
# Install Android SDK
80-
#=====================
81-
ENV SDK_VERSION=commandlinetools-linux-13114758_latest
82-
ENV ANDROID_BUILD_TOOLS_VERSION=36.0.0
83-
ENV ANDROID_FOLDER_NAME=cmdline-tools
84-
ENV ANDROID_DOWNLOAD_PATH=/home/androidusr/${ANDROID_FOLDER_NAME} \
85-
ANDROID_HOME=/opt/android \
86-
ANDROID_TOOL_HOME=/opt/android/${ANDROID_FOLDER_NAME}
87-
88-
RUN wget -O tools.zip https://dl.google.com/android/repository/${SDK_VERSION}.zip && \
89-
unzip tools.zip && rm tools.zip && \
90-
chmod a+x -R ${ANDROID_DOWNLOAD_PATH} && \
91-
chown -R 1300:1301 ${ANDROID_DOWNLOAD_PATH} && \
92-
mkdir -p ${ANDROID_TOOL_HOME} && \
93-
mv ${ANDROID_DOWNLOAD_PATH} ${ANDROID_TOOL_HOME}/tools
94-
ENV PATH=$PATH:${ANDROID_TOOL_HOME}/tools:${ANDROID_TOOL_HOME}/tools/bin
95-
96-
# https://askubuntu.com/questions/885658/android-sdk-repositories-cfg-could-not-be-loaded
97-
RUN mkdir -p ~/.android && \
98-
touch ~/.android/repositories.cfg && \
99-
echo y | sdkmanager "platform-tools" && \
100-
echo y | sdkmanager "build-tools;$ANDROID_BUILD_TOOLS_VERSION" && \
101-
mv ~/.android .android && \
102-
chown -R 1300:1301 .android
103-
ENV PATH=$PATH:$ANDROID_HOME/platform-tools:$ANDROID_HOME/build-tools
104-
105-
#====================================
106-
# Install latest nodejs, npm, appium
107-
#====================================
108-
ENV NODE_VERSION=22
117+
#================
118+
# Install Appium
119+
#================
109120
ENV APPIUM_VERSION=3.1.1
110-
RUN curl -sL https://deb.nodesource.com/setup_${NODE_VERSION}.x | bash && \
111-
apt-get -qqy install nodejs && \
112-
npm install -g appium@${APPIUM_VERSION} && \
113-
exit 0 && \
114-
npm cache clean && \
115-
apt-get remove --purge -y npm && \
116-
apt-get autoremove --purge -y && \
117-
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \
118-
apt-get clean
121+
RUN npm install -g appium@${APPIUM_VERSION}
119122

120123
#====================================================
121124
# Fix permission issue to download e.g. chromedriver
122125
#====================================================
123-
RUN chown -R 1300:1301 /usr/lib/node_modules/appium
124-
125-
#==============
126-
# Copy scripts
127-
#==============
128-
ENV SCRIPT_PATH="appium-docker-android"
129-
RUN mkdir -p ${SCRIPT_PATH}
130-
COPY start.sh \
131-
generate_selenium_config.sh \
132-
wireless_autoconnect.sh \
133-
wireless_connect.sh \
134-
${SCRIPT_PATH}/
135-
RUN chown -R 1300:1301 ${SCRIPT_PATH}
136-
ENV APP_PATH=/home/androidusr/${SCRIPT_PATH}
126+
RUN chown -R ${USERID}:${GROUPID} /usr/local/lib/node_modules/appium
137127

138-
#==================
139-
# Use created user
140-
#==================
141-
USER 1300:1301
128+
#========================
129+
# Install Appium drivers
130+
#========================
131+
ENV WORK_PATH=/home/${USERNAME}
132+
WORKDIR ${WORK_PATH}
133+
USER ${USERID}:${GROUPID}
142134

143-
#===============================
144-
# Install basic Android drivers
145-
#===============================
146135
ENV APPIUM_DRIVER_ESPRESSO_VERSION="6.0.5"
147136
ENV APPIUM_DRIVER_FLUTTER_VERSION="3.2.0"
148137
ENV APPIUM_DRIVER_GECKO_VERSION="2.0.6"
@@ -152,6 +141,16 @@ RUN appium driver install --source=npm appium-espresso-driver@${APPIUM_DRIVER_ES
152141
appium driver install --source=npm appium-geckodriver@${APPIUM_DRIVER_GECKO_VERSION} && \
153142
appium driver install --source=npm appium-uiautomator2-driver@${APPIUM_DRIVER_UIAUTOMATOR2_VERSION}
154143

144+
#================
145+
# Set up project
146+
#================
147+
ENV SCRIPT_PATH="appium-docker-android"
148+
RUN mkdir -p .android && \
149+
touch ~/.android/repositories.cfg && \
150+
mkdir -p ${SCRIPT_PATH}
151+
COPY --chown=${USERID}:${GROUPID} . ${SCRIPT_PATH}/
152+
ENV APP_PATH=/home/${USERNAME}/${SCRIPT_PATH}
153+
155154
#===============
156155
# Expose Port
157156
#---------------
@@ -163,4 +162,5 @@ EXPOSE 4723
163162
#==============
164163
# Start script
165164
#==============
166-
CMD ./${SCRIPT_PATH}/start.sh
165+
ENTRYPOINT ["sh", "-c"]
166+
CMD ["${WORK_PATH}/${SCRIPT_PATH}/start.sh"]

Appium/start.sh

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,5 @@
11
#!/bin/bash
22

3-
# It is workaround to access adb from androidusr
4-
echo "Prepare adb to have access to device"
5-
sudo /opt/android/platform-tools/adb devices >/dev/null
6-
sudo chown -R 1300:1301 .android
7-
echo "adb can be used now"
8-
93
# Connect device via wireless
104
if [ "${REMOTE_ADB}" = true ]; then
115
echo "Connect device via wireless"

Appium/tests/image.bats

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
#!/usr/bin/env bats
22

33
@test '[Docker] Verify Java is installed' {
4-
[ ${JAVA_HOME} == "/usr/lib/jvm/java-17-openjdk-amd64" ]
4+
[ ${JAVA_HOME} == "/usr/lib/jvm/java-25-openjdk-amd64" ]
55
java_ver=$(java -version 2>&1)
66
[[ ${java_ver} == *"openjdk"* ]]
7-
[[ ${java_ver} == *"17"* ]]
7+
[[ ${java_ver} == *"25"* ]]
88
}
99

1010
@test '[Docker] Verify Android SDK is installed' {

examples/docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ services:
1818
privileged: true
1919
volumes:
2020
- /dev/bus/usb:/dev/bus/usb
21-
- ~/.android:/root/.android
21+
- ~/.android:/home/androidusr/.android
2222
environment:
2323
- CONNECT_TO_GRID=true
2424
- SELENIUM_HOST=selenium_hub

0 commit comments

Comments
 (0)