Skip to content

Instantly share code, notes, and snippets.

@shishirthedev
Created December 5, 2023 10:06
Show Gist options
  • Save shishirthedev/64e72d6a43aaf06bfba8f5c95ede9155 to your computer and use it in GitHub Desktop.
Save shishirthedev/64e72d6a43aaf06bfba8f5c95ede9155 to your computer and use it in GitHub Desktop.
image: openjdk:11-jdk
variables:
ANDROID_COMPILE_SDK: "34"
ANDROID_BUILD_TOOLS: "34.0.0"
ANDROID_SDK_TOOLS: "9862592"
EMULATOR_VERSION: "24"
BUILD_VARIANT: "ProdRelease"
workflow:
rules:
- if: $CI_COMMIT_REF_NAME == "master"
variables:
BUILD_VARIANT: "ProdRelease"
- if: $CI_COMMIT_REF_NAME == "staging"
variables:
BUILD_VARIANT: "DevRelease"
stages:
- prepare
- test
- build
before_script:
- export ANDROID_HOME=$PWD/android-sdk
- export ANDROID_SDK_ROOT=${ANDROID_HOME}
- export ANDROID_TOOLS_PATH=${ANDROID_HOME}/platform-tools
- export ANDROID_SDK_MANAGER=${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager
- export ANDROID_AVD_MANAGER=${ANDROID_HOME}/cmdline-tools/latest/bin/avdmanager
- export ANDROID_EMULATOR_HOME=${ANDROID_HOME}/emulator
- export ANDROID_EMULATOR_PATH=${ANDROID_HOME}/avd
- export PATH="$PATH:${ANDROID_TOOLS_PATH}"
- export ADB_INSTALL_TIMEOUT=10
# Update system
- apt-get --quiet update --yes
- apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1 tree libx11-dev libpulse0 libgl1 libnss3 libxcomposite-dev libxcursor1 libasound2
# Download Android SDK
- wget --quiet --output-document=android-sdk.zip https://dl.google.com/android/repository/commandlinetools-linux-${ANDROID_SDK_TOOLS}_latest.zip
- mkdir ${ANDROID_HOME}
- unzip -d ${ANDROID_HOME}/cmdline-tools android-sdk.zip
- echo y | rm android-sdk.zip
- mv ${ANDROID_HOME}/cmdline-tools/cmdline-tools ${ANDROID_HOME}/cmdline-tools/latest
# Install Android Build Tools
- echo y | ${ANDROID_SDK_MANAGER} --sdk_root=${ANDROID_HOME} --licenses
- echo y | ${ANDROID_SDK_MANAGER} --sdk_root=${ANDROID_HOME} --update > update.log
- echo y | ${ANDROID_SDK_MANAGER} --sdk_root=${ANDROID_HOME} "platforms;android-${ANDROID_COMPILE_SDK}" "build-tools;${ANDROID_BUILD_TOOLS}" "extras;google;m2repository" "extras;android;m2repository" > installPlatform.log
###################### Job 1 | Create Properties File #############################
create_property_files:
stage: prepare
interruptible: true
before_script:
- echo "No need to install Android SDK for Creating Property files"
script:
- echo ****** Current Branch Name is = $CI_COMMIT_REF_NAME
- mkdir -p keystore
- echo ${KEYSTORE_JKS_BASE64} | base64 --decode > keystore/production
- echo "base_url.dev=${BASE_URL_DEV}" > secret.properties
- echo "base_url.prod=${BASE_URL_PROD}" >> secret.properties
- echo "firebase.app_id_dev=${FIREBASE_APP_ID_DEV}" >> secret.properties
- echo "firebase.app_id_prod=${FIREBASE_APP_ID_PROD}" >> secret.properties
- echo "keystore.key_alias=${KEYSTORE_KEY_ALIAS}" >> secret.properties
- echo "keystore.key_password=${KEYSTORE_KEY_PASSWORD}" >> secret.properties
- echo "keystore.store_file_path=${KEYSTORE_STORE_FILE_PATH}" >> secret.properties
- echo "keystore.store_password=${KEYSTORE_STORE_PASSWORD}" >> secret.properties
- cat secret.properties
artifacts:
paths:
- keystore/production
- secret.properties
expire_in: 20 mins
only:
- master
- staging
###################### Job 2 | Instrumentation Test #############################
ui_test:
stage: test
script:
- wget --quiet --output-document=android-wait-for-emulator.sh https://raw.githubusercontent.com/travis-ci/travis-cookbooks/0f497eb71291b52a703143c5cd63a217c8766dc9/community-cookbooks/android-sdk/files/default/android-wait-for-emulator
- chmod +x android-wait-for-emulator.sh
- echo y | ${ANDROID_SDK_MANAGER} --update > update.log
- echo y | ${ANDROID_SDK_MANAGER} "platform-tools" "emulator" "system-images;android-${EMULATOR_VERSION};default;armeabi-v7a" > installEmulator.log
- echo no | ${ANDROID_AVD_MANAGER} --verbose create avd -n test --force -k "system-images;android-${EMULATOR_VERSION};default;armeabi-v7a"
- ${ANDROID_EMULATOR_HOME}/emulator -avd test -no-boot-anim -no-snapshot-save -no-audio -no-window -gpu off -debug -verbose &
- ./android-wait-for-emulator.sh
# Turn off animations
- adb shell settings put global window_animation_scale 0 &
- adb shell settings put global transition_animation_scale 0 &
- adb shell settings put global animator_duration_scale 0 &
- adb shell input keyevent 82
- ./gradlew connectedAndroidTest --stacktrace
- adb emu kill
artifacts:
name: "reports_${CI_PROJECT_NAME}_${CI_BUILD_REF_NAME}"
when: on_failure
paths:
- app/build/reports/androidTests/connected/
only:
- master
- staging
###################### Job 3 | Unit Test #############################
unit_test:
stage: test
script:
- ./gradlew test
artifacts:
when: on_failure
name: "reports_${CI_PROJECT_NAME}_${CI_BUILD_REF_NAME}"
paths:
- app/build/reports/tests/
only:
- master
- staging
###################### Job 4 | Build APK #############################
build_apk:
stage: build
script:
- echo ****Build Variant is = ${BUILD_VARIANT}
- ./gradlew assemble${BUILD_VARIANT} appDistributionUpload${BUILD_VARIANT}
dependencies:
- create_property_files
artifacts:
when: on_success
paths:
- app/build/outputs
only:
- master
- staging
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment