mirror of
https://github.com/budtmo/docker-android.git
synced 2025-12-08 18:25:50 +00:00
126 lines
3.4 KiB
Bash
Executable File
126 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
function is_str_in_list(){
|
|
local given_str=${1}
|
|
local list_str=${@:2}
|
|
|
|
if [[ ! " ${list_str[*]} " =~ " ${given_str} " ]]; then
|
|
echo "${given_str} is not supported!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
tasks=("test" "build" "push")
|
|
if [ -z "${1}" ]; then
|
|
read -p "Task ($(echo "${tasks[@]}" | tr ' ' '|')) : " t
|
|
else
|
|
t=${1}
|
|
fi
|
|
is_str_in_list ${t} ${tasks[@]}
|
|
|
|
projects=("base" "emulator" "genymotion" "pro-emulator" "pro-emulator_headless")
|
|
if [ -z "${2}" ]; then
|
|
read -p "Project ($(echo "${projects[@]}" | tr ' ' '|')) : " p
|
|
else
|
|
p=${2}
|
|
fi
|
|
is_str_in_list ${p} ${projects[@]}
|
|
|
|
if [ -z "${3}" ]; then
|
|
read -p "Release Version (v2.0.0-p0|v2.0.0-p1|etc) : " r_v
|
|
else
|
|
r_v=${3}
|
|
fi
|
|
|
|
FOLDER_PATH=""
|
|
IMAGE_NAME=""
|
|
TAG_NAME=""
|
|
|
|
if [[ "${p}" == "pro"* ]]; then
|
|
IFS='-' read -ra arr <<<"${p}"
|
|
FOLDER_PATH+="docker/${arr[0]}/${arr[1]}"
|
|
IMAGE_NAME+="budtmo2/docker-android-${arr[0]}"
|
|
TAG_NAME+="${arr[1]}"
|
|
else
|
|
FOLDER_PATH+="docker/${p}"
|
|
IMAGE_NAME+="budtmo/docker-android"
|
|
TAG_NAME+="${p}"
|
|
fi
|
|
|
|
if [[ "${p}" == *"emulator"* ]]; then
|
|
supported_android_version=("9.0" "10.0" "11.0" "12.0" "13.0" "14.0")
|
|
declare -A api_levels=(
|
|
["9.0"]=28
|
|
["10.0"]=29
|
|
["11.0"]=30
|
|
["12.0"]=32
|
|
["13.0"]=33
|
|
["14.0"]=34
|
|
)
|
|
|
|
# To get the last index
|
|
keys=("${!api_levels[@]}")
|
|
sorted_keys=($(printf '%s\n' "${keys[@]}" | sort))
|
|
last_key=${keys[-2]} # because 9.0 will be last
|
|
|
|
if [ -z "${4}" ]; then
|
|
read -p "Android Version ($(echo "${supported_android_version[@]}" \
|
|
| tr ' ' '|')) : " a_v
|
|
else
|
|
a_v=${4}
|
|
fi
|
|
is_str_in_list ${a_v} ${supported_android_version[@]}
|
|
a_l=${api_levels[${a_v}]}
|
|
TAG_NAME+="_${a_v}"
|
|
fi
|
|
|
|
IMAGE_NAME_LATEST="${IMAGE_NAME}:${TAG_NAME}"
|
|
TAG_NAME+="_${r_v}"
|
|
IMAGE_NAME_SPECIFIC_RELEASE=${IMAGE_NAME}:${TAG_NAME}
|
|
echo "${IMAGE_NAME_SPECIFIC_RELEASE} or ${IMAGE_NAME_LATEST} "
|
|
|
|
function build() {
|
|
# autopep8 --recursive --exclude=.git,__pycache__,venv --max-line-length=120 --in-place .
|
|
cmd="docker build --no-cache -t ${IMAGE_NAME_SPECIFIC_RELEASE} --build-arg DOCKER_ANDROID_VERSION=${r_v} "
|
|
if [ -n "${a_v}" ]; then
|
|
DOCKER_BUILDKIT=1
|
|
cmd="${cmd} --secret id=extension,src=extension.sh --build-arg EMULATOR_ANDROID_VERSION=${a_v} --build-arg EMULATOR_API_LEVEL=${a_l} "
|
|
fi
|
|
|
|
if [[ "${p}" == *"genymotion"* ]]; then
|
|
DOCKER_BUILDKIT=1
|
|
cmd="${cmd} --secret id=extension,src=extension.sh "
|
|
fi
|
|
|
|
cmd+="-f ${FOLDER_PATH} ."
|
|
${cmd}
|
|
docker tag ${IMAGE_NAME_SPECIFIC_RELEASE} ${IMAGE_NAME_LATEST}
|
|
|
|
if [ -n "${a_v}" ] && [ "${a_v}" = "${last_key}" ]; then
|
|
echo "${a_v} is the last version in the list, will use it as default image tag"
|
|
docker tag ${IMAGE_NAME_SPECIFIC_RELEASE} ${IMAGE_NAME}:latest
|
|
fi
|
|
}
|
|
|
|
function test() {
|
|
tmp_folder="/app/tmp"
|
|
|
|
mkdir -p tmp
|
|
docker run -it --rm -v "$PWD":/app -w /app python:3.12-slim bash \
|
|
-c "cd cli && rm -rf ${tmp_folder}/* && \
|
|
pip install --upgrade pip && pip install -r requirements.txt && \
|
|
PYTHONPATH=src pytest -v && mv test-results/* ${tmp_folder}/ && chown -R 1300:1301 ${tmp_folder} && \
|
|
chmod a+x -R ${tmp_folder}"
|
|
}
|
|
|
|
function push() {
|
|
build
|
|
docker push ${IMAGE_NAME_SPECIFIC_RELEASE}
|
|
docker push ${IMAGE_NAME_LATEST}
|
|
if [ -n "${a_v}" ] && [ "${a_v}" = "${last_key}" ]; then
|
|
docker push ${IMAGE_NAME}:latest
|
|
fi
|
|
}
|
|
|
|
${t}
|