diff --git a/.travis.yml b/.travis.yml index 3bf010e..a69f98e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ python: install: "pip install -r requirements.txt" -script: bash release.sh test 5.0 x86 +script: bash travis.sh branches: only: diff --git a/release.sh b/release.sh old mode 100644 new mode 100755 index 9f04f95..82dfd97 --- a/release.sh +++ b/release.sh @@ -5,91 +5,129 @@ IMAGE="butomo1989/docker-android" LATEST_BUILD_TOOL=25.0.2 if [ -z "$1" ]; then - read -p "Environment (test|build|push|all) : " TASK + read -p "Task (test|build|push|all) : " TASK else TASK=$1 fi if [ -z "$2" ]; then - read -p "Android version: " GIVEN_VERSION + read -p "Android version (5.0.1|5.1.1|6.0|all): " ANDROID_VERSION else - GIVEN_VERSION=$2 + ANDROID_VERSION=$2 fi if [ -z "$3" ]; then - read -p "Processor type (x86|arm): " PROCESSOR + read -p "Processor type (x86|arm|all): " PROCESSOR else PROCESSOR=$3 fi -function api_level() { - declare -A levels=( +if [ -z "$4" ]; then + read -p "Release version: " RELEASE +else + RELEASE=$4 +fi + +declare -A list_of_levels=( [5.0.1]=21 [5.1.1]=22 [6.0]=23 - [7.0]=24 - [7.1.1]=25 - ) +) - for key in "${!levels[@]}"; do - if [[ $key == *"$GIVEN_VERSION"* ]]; then - version=$key - fi - done +declare -A list_of_processors=( + [arm]=armeabi-v7a + [x86]=x86_64 +) + +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 # If version cannot be found in the list - if [ -z "$version" ]; then - echo "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" + if [ -z "$versions" ]; then + 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" exit 1 fi - echo "Android version: $version" - level=${levels[$version]} - echo "Api level: $level" + echo "Android versions: ${versions[@]}" } -function system_image() { - case $PROCESSOR in - x86) - sys_img=x86_64 - ;; - arm) - sys_img=armeabi-v7a - ;; - *) - echo "Invalid processor! Valid options: x86, arm" - exit 1 - ;; - esac - echo "Processor: $PROCESSOR" - echo "System Image: $sys_img" +function get_processors() { + processors=() + + if [ "$PROCESSOR" == "all" ]; then + for key in "${!list_of_processors[@]}"; do + processors+=($key) + done + else + for key in "${!list_of_processors[@]}"; do + if [[ $key == *"$PROCESSOR"* ]]; then + processors+=($key) + fi + done + fi + + # If version cannot be found in the list + if [ -z "$processors" ]; then + echo "Invalid processor \"$PROCESSOR\"! Valid options: x86, arm" + exit 1 + fi + + echo "Processors: ${processors[@]}" } -function init() { - api_level - system_image -} - -init -echo "Build tool: $build_tool" -IMAGE_NAME="$IMAGE-$PROCESSOR-$version" -echo "Image tag: $TAG" +get_android_versions +get_processors function test() { - (export ANDROID_HOME=/root && export ANDROID_VERSION=$version && export API_LEVEL=$level \ - && export PROCESSOR=$PROCESSOR && export SYS_IMG=$sys_img && nosetests -v) + (export ANDROID_HOME=/root && export ANDROID_VERSION=5.0.1 && export API_LEVEL=21 \ + && export PROCESSOR=x86 && export SYS_IMG=x86_64 && nosetests -v) } function build() { # Remove pyc files find . -name "*.pyc" -exec rm -f {} \; - docker build -t $IMAGE_NAME --build-arg ANDROID_VERSION=$version --build-arg BUILD_TOOL=$LATEST_BUILD_TOOL \ - --build-arg API_LEVEL=$level --build-arg PROCESSOR=$PROCESSOR --build-arg SYS_IMG=$sys_img . + # Build docker image(s) + for p in "${processors[@]}"; do + for v in "${versions[@]}"; do + level=${list_of_levels[$v]} + echo "[BUILD] API Level: $level" + sys_img=${list_of_processors[$p]} + 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" + docker build -t $image_version --build-arg ANDROID_VERSION=$v --build-arg BUILD_TOOL=$LATEST_BUILD_TOOL \ + --build-arg API_LEVEL=$level --build-arg PROCESSOR=$p --build-arg SYS_IMG=$sys_img . + docker build -t $image_latest --build-arg ANDROID_VERSION=$v --build-arg BUILD_TOOL=$LATEST_BUILD_TOOL \ + --build-arg API_LEVEL=$level --build-arg PROCESSOR=$p --build-arg SYS_IMG=$sys_img . + done + done } function push() { - docker push $IMAGE_NAME + # Push docker image(s) + for p in "${processors[@]}"; do + 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 + done + done } case $TASK in diff --git a/travis.sh b/travis.sh new file mode 100755 index 0000000..3ed730a --- /dev/null +++ b/travis.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# Bash version should >= 4 to be able to run this script. + +if [ -z "$TRAVIS_TAG" ]; then + echo "UNIT TEST ONLY" + bash release.sh test all all 0.1 +else + echo "Log in to docker hub" + docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD" + echo "RUN UNIT TEST, BUILD DOCKER IMAGES AND PUSH THOSE TO DOCKER HUB" + bash release.sh all all all $TRAVIS_TAG + echo "Log out of docker hub" + docker logout +fi