2017-03-24 15:49:07 +00:00
|
|
|
#!/bin/bash
|
|
|
|
# Bash version should >= 4 to be able to run this script.
|
|
|
|
|
|
|
|
IMAGE="butomo1989/docker-android"
|
|
|
|
|
|
|
|
if [ -z "$1" ]; then
|
2017-04-19 12:24:42 +01:00
|
|
|
read -p "Task (test|build|push|all) : " TASK
|
2017-03-24 15:49:07 +00:00
|
|
|
else
|
|
|
|
TASK=$1
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -z "$2" ]; then
|
2018-03-11 17:41:16 +00:00
|
|
|
read -p "Android version (5.0.1|5.1.1|6.0|7.0|7.1.1|8.0|8.1|all): " ANDROID_VERSION
|
2017-03-24 15:49:07 +00:00
|
|
|
else
|
2017-04-19 12:24:42 +01:00
|
|
|
ANDROID_VERSION=$2
|
2017-03-24 15:49:07 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -z "$3" ]; then
|
2017-04-19 12:24:42 +01:00
|
|
|
read -p "Release version: " RELEASE
|
|
|
|
else
|
2018-07-05 19:04:25 +01:00
|
|
|
RELEASE=$3
|
2017-04-19 12:24:42 +01:00
|
|
|
fi
|
|
|
|
|
|
|
|
declare -A list_of_levels=(
|
2017-03-28 11:31:14 +01:00
|
|
|
[5.0.1]=21
|
|
|
|
[5.1.1]=22
|
|
|
|
[6.0]=23
|
2017-04-21 10:23:24 +01:00
|
|
|
[7.0]=24
|
2017-04-21 14:06:53 +01:00
|
|
|
[7.1.1]=25
|
2018-07-05 13:29:54 +01:00
|
|
|
[8.0]=26
|
|
|
|
[8.1]=27
|
2017-04-19 12:24:42 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
function get_android_versions() {
|
|
|
|
versions=()
|
|
|
|
|
|
|
|
if [ "$ANDROID_VERSION" == "all" ]; then
|
|
|
|
for key in "${!list_of_levels[@]}"; do
|
|
|
|
versions+=($key)
|
|
|
|
done
|
|
|
|
else
|
|
|
|
for key in "${!list_of_levels[@]}"; do
|
|
|
|
if [[ $key == *"$ANDROID_VERSION"* ]]; then
|
|
|
|
versions+=($key)
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
fi
|
2017-03-24 15:49:07 +00:00
|
|
|
|
|
|
|
# If version cannot be found in the list
|
2017-04-19 12:24:42 +01:00
|
|
|
if [ -z "$versions" ]; then
|
2018-03-11 17:41:16 +00:00
|
|
|
echo "Android version \"$ANDROID_VERSION\" is not found in the list or not supported! Support only version 5.0.1, 5.1.1, 6.0, 7.0, 7.1.1, 8.0, 8.1"
|
2017-03-24 15:49:07 +00:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2017-04-19 12:24:42 +01:00
|
|
|
echo "Android versions: ${versions[@]}"
|
2017-03-24 15:49:07 +00:00
|
|
|
}
|
|
|
|
|
2017-04-19 12:24:42 +01:00
|
|
|
get_android_versions
|
2018-07-05 19:04:25 +01:00
|
|
|
processors=x86
|
2017-03-24 15:49:07 +00:00
|
|
|
|
|
|
|
function test() {
|
2017-06-01 14:51:22 +01:00
|
|
|
# Prepare needed parameter to run tests
|
|
|
|
test_android_version=7.1.1
|
|
|
|
test_api_level=25
|
|
|
|
test_processor=x86
|
2018-07-05 19:04:25 +01:00
|
|
|
test_sys_img=$test_processor
|
2017-06-01 14:51:22 +01:00
|
|
|
test_img_type=google_apis
|
2017-06-14 14:06:01 +01:00
|
|
|
test_browser=chrome
|
2017-06-01 14:51:22 +01:00
|
|
|
test_image=test_img
|
|
|
|
test_container=test_con
|
|
|
|
|
2017-06-02 12:18:00 +01:00
|
|
|
# Run e2e tests
|
|
|
|
# E2E tests must be run only for linux OS / x86 image to reduce duration of test execution
|
|
|
|
if [ "$(uname -s)" == 'Linux' ] && [ "$E2E" = true ]; then
|
2017-06-01 14:51:22 +01:00
|
|
|
echo "----BUILD TEST IMAGE----"
|
|
|
|
docker build -t $test_image --build-arg ANDROID_VERSION=$test_android_version \
|
2017-06-14 14:06:01 +01:00
|
|
|
--build-arg API_LEVEL=$test_api_level --build-arg PROCESSOR=$test_processor --build-arg SYS_IMG=$test_sys_img \
|
|
|
|
--build-arg IMG_TYPE=$test_img_type --build-arg BROWSER=$test_browser -f docker/Emulator_x86 .
|
2017-06-01 14:51:22 +01:00
|
|
|
|
2017-06-02 12:18:00 +01:00
|
|
|
echo "----REMOVE OLD TEST CONTAINER----"
|
|
|
|
docker kill $test_container && docker rm $test_container
|
|
|
|
|
|
|
|
echo "----PREPARE CONTAINER----"
|
|
|
|
docker run --privileged -d -p 4723:4723 -p 6080:6080 -e APPIUM=True -e DEVICE="Samsung Galaxy S6" --name $test_container $test_image
|
|
|
|
docker cp example/sample_apk $test_container:/root/tmp
|
2017-06-01 14:51:22 +01:00
|
|
|
attempt=0
|
|
|
|
while [ ${attempt} -le 10 ]; do
|
|
|
|
attempt=$(($attempt + 1))
|
|
|
|
output=$(docker ps | grep healthy | grep test_con | wc -l)
|
|
|
|
if [[ "$output" == 1 ]]; then
|
|
|
|
echo "Emulator is ready."
|
|
|
|
break
|
|
|
|
else
|
|
|
|
echo "Waiting 10 seconds for emulator to be ready (attempt: $attempt)"
|
|
|
|
sleep 10
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ $attempt == 10 ]]; then
|
|
|
|
echo "Failed!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
2017-06-02 12:18:00 +01:00
|
|
|
echo "----RUN E2E TESTS----"
|
2017-06-01 14:51:22 +01:00
|
|
|
nosetests src/tests/e2e -v
|
|
|
|
|
|
|
|
echo "----REMOVE TEST CONTAINER----"
|
|
|
|
docker kill $test_container && docker rm $test_container
|
|
|
|
fi
|
2017-06-02 12:18:00 +01:00
|
|
|
|
|
|
|
# Run unit tests (After e2e test to get coverage result)
|
|
|
|
echo "----UNIT TESTS----"
|
|
|
|
(export ANDROID_HOME=/root && export ANDROID_VERSION=$test_android_version && export API_LEVEL=$test_api_level \
|
|
|
|
&& export PROCESSOR=$test_processor && export SYS_IMG=$test_sys_img && export IMG_TYPE=$test_img_type \
|
|
|
|
&& nosetests src/tests/unit -v)
|
2017-03-24 15:49:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function build() {
|
|
|
|
# Remove pyc files
|
|
|
|
find . -name "*.pyc" -exec rm -f {} \;
|
|
|
|
|
2018-07-05 19:04:25 +01:00
|
|
|
# Build docker image
|
|
|
|
FILE_NAME=docker/Emulator_x86
|
|
|
|
|
|
|
|
for v in "${versions[@]}"; do
|
|
|
|
# Find image type and default web browser
|
|
|
|
if [ "$v" == "5.0.1" ] || [ "$v" == "5.1.1" ]; then
|
|
|
|
IMG_TYPE=default
|
|
|
|
BROWSER=browser
|
|
|
|
elif [ "$v" == "6.0" ]; then
|
|
|
|
# It is because there is no ARM EABI v7a System Image for 6.0
|
|
|
|
IMG_TYPE=google_apis
|
|
|
|
BROWSER=browser
|
2017-05-22 12:20:30 +01:00
|
|
|
else
|
2018-07-05 19:04:25 +01:00
|
|
|
IMG_TYPE=google_apis_playstore
|
|
|
|
BROWSER=chrome
|
2017-05-22 12:20:30 +01:00
|
|
|
fi
|
2018-07-05 19:04:25 +01:00
|
|
|
echo "[BUILD] IMAGE TYPE: $IMG_TYPE"
|
|
|
|
level=${list_of_levels[$v]}
|
|
|
|
echo "[BUILD] API Level: $level"
|
|
|
|
sys_img=$processors
|
|
|
|
echo "[BUILD] System Image: $sys_img"
|
|
|
|
image_version="$IMAGE-$p-$v:$RELEASE"
|
|
|
|
image_latest="$IMAGE-$p-$v:latest"
|
|
|
|
echo "[BUILD] Image name: $image_version and $image_latest"
|
|
|
|
echo "[BUILD] Dockerfile: $FILE_NAME"
|
|
|
|
docker build -t $image_version --build-arg ANDROID_VERSION=$v --build-arg API_LEVEL=$level \
|
|
|
|
--build-arg PROCESSOR=$p --build-arg SYS_IMG=$sys_img --build-arg IMG_TYPE=$IMG_TYPE \
|
|
|
|
--build-arg BROWSER=$BROWSER -f $FILE_NAME .
|
|
|
|
docker tag $image_version $image_latest
|
2017-04-19 12:24:42 +01:00
|
|
|
done
|
2017-03-24 15:49:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function push() {
|
2017-04-19 12:24:42 +01:00
|
|
|
# Push docker image(s)
|
2018-07-05 19:04:25 +01:00
|
|
|
for v in "${versions[@]}"; do
|
|
|
|
image_version="$IMAGE-$p-$v:$RELEASE"
|
|
|
|
image_latest="$IMAGE-$p-$v:latest"
|
|
|
|
echo "[PUSH] Image name: $image_version and $image_latest"
|
|
|
|
docker push $image_version
|
|
|
|
docker push $image_latest
|
2017-04-19 12:24:42 +01:00
|
|
|
done
|
2017-03-24 15:49:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
case $TASK in
|
|
|
|
test)
|
|
|
|
test
|
|
|
|
;;
|
|
|
|
build)
|
|
|
|
build
|
|
|
|
;;
|
|
|
|
push)
|
|
|
|
push
|
|
|
|
;;
|
|
|
|
all)
|
|
|
|
test
|
|
|
|
build
|
|
|
|
push
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "Invalid environment! Valid options: test, build, push, all"
|
|
|
|
;;
|
|
|
|
esac
|