Skip to content

Instantly share code, notes, and snippets.

@nasrabadiAM
Last active November 23, 2018 10:30
Show Gist options
  • Select an option

  • Save nasrabadiAM/10174d2183b4f3db107981fd8f71c339 to your computer and use it in GitHub Desktop.

Select an option

Save nasrabadiAM/10174d2183b4f3db107981fd8f71c339 to your computer and use it in GitHub Desktop.
CircleCI Configuration file

CircleCi Build System Configuration

1- Create .circleci folder in your project root beside app folder.

2- Add below file to this folder with name: config.yml

version: 2
jobs:
build:
working_directory: ~/code
docker:
- image: circleci/android:api-25-alpha
environment:
JVM_OPTS: -Xmx3200m
steps:
- checkout
- restore_cache:
key: jars-{{ checksum "build.gradle" }}-{{ checksum "app/build.gradle" }}
# - run:
# name: Chmod permissions #if permission for Gradlew Dependencies fail, use this.
# command: sudo chmod +x ./gradlew
- run:
name: Download Dependencies
command: ./gradlew androidDependencies
- save_cache:
paths:
- ~/.gradle
key: jars-{{ checksum "build.gradle" }}-{{ checksum "app/build.gradle" }}
- run:
name: Run Tests
command: ./gradlew lint test
- store_artifacts:
path: app/build/reports
destination: reports
- store_test_results:
path: app/build/test-results
# See https://circleci.com/docs/2.0/deployment-integrations/ for deploy examples
image: openjdk:8-jdk
cache:
paths:
- .m2/
- .gradle/
stages:
- build
- test
- package
variables:
ANDROID_SDK_TOOLS: "4333796"
ANDROID_COMPILE_SDK: "28"
ANDROID_BUILD_TOOLS: "28.0.0"
####################################################################################################
# BUILD
#
.build_template: &build_template_def
stage: build
artifacts:
expire_in: 4 hours
paths:
- app/build/outputs/
- .android/
before_script:
# Extract the SDK version that we're building against
- export SDK_IN_GRADLE=`git rev-list --count master`
- echo $SDK_IN_GRADLE
# Explict output for logging purpose only
- echo $ANDROID_SDK_TOOLS
- echo $ANDROID_COMPILE_SDK
- echo ANDROID_BUILD_TOOLS
# update available sdks
- apt-get --quiet update --yes
#install lib32stdc
- apt-get --quiet install --yes wget tar unzip lib32stdc++6 lib32z1
# Fetch the specified SDK tools version to build with
- wget --quiet --output-document=/tmp/sdk-tools-linux.zip https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_TOOLS}.zip
- mkdir -p .android
- unzip -q /tmp/sdk-tools-linux.zip -d .android
# Install platform tools and Android SDK for the compile target
- mkdir .android/licenses
- printf "8933bad161af4178b1185d1a37fbf41ea5269c55\nd56f5187479451eabf01fb78af6dfcb131a6481e" > .android/licenses/android-sdk-license
- printf "84831b9409646a918e30573bab4c9c91346d8abd" > .android/licenses/android-sdk-preview-license
- .android/tools/bin/sdkmanager --update > update.log
- .android/tools/bin/sdkmanager "platforms;android-${ANDROID_COMPILE_SDK}" "build-tools;${ANDROID_BUILD_TOOLS}" "extras;google;m2repository" "extras;android;m2repository" > installPlatform.log
# Set up environment variables
- export ANDROID_HOME=$PWD/.android
- export PATH=$PATH:$PWD/.android/platform-tools/
- chmod +x ./gradlew
#flavor1
build_main_release:
<<: *build_template_def
only:
- master
script:
- ./gradlew assembleBazzarRelease
#flavor2
build_debugger_release:
<<: *build_template_def
only:
- master
script:
- ./gradlew assembleDebuggerRelease
####################################################################################################
# UNIT TESTING
#
unit_test:
stage: test
only:
- master
before_script:
- export ANDROID_HOME=$PWD/.android
- export PATH=$PATH:$PWD/.android/platform-tools/
script:
- ./gradlew test
####################################################################################################
# PACKAGE APK FOR DOWNLOADING
#
.package_template: &package_template_def
before_script:
- export VERSION_NAME=`egrep '[[:blank:]]*versionName[[:blank:]]?=[[:blank:]]?\"((\w|\.)+)\"' app/build.gradle.kts | awk '{print $3}'| sed s/\"//g`
- export VERSION_CODE=`egrep '[[:blank:]]*versionCode[[:blank:]]?=[[:blank:]]?([0-9]+)' app/build.gradle.kts | awk '{print $3}'`
- mkdir -p deliverables
# Store some information about the build
- touch ./deliverables/info.txt
- echo "Build date $(date)" >> ./deliverables/info.txt
- echo "App version name ${VERSION_NAME}" >> ./deliverables/info.txt
- echo "App version code ${VERSION_CODE}" >> ./deliverables/info.txt
- echo "Git branch ${CI_COMMIT_REF_NAME}" >> ./deliverables/info.txt
- echo "Git commit ${CI_COMMIT_SHA}" >> ./deliverables/info.txt
- echo "Gitlab pipeline ${CI_PIPELINE_ID}" >> ./deliverables/info.txt
#flavor1
package_main_release:
<<: *package_template_def
stage: package
environment: Release
only:
- master
script:
- mv app/build/outputs/apk/bazzar/release/app-bazzar-release.apk ./deliverables/Moshavere-bazzar-v$VERSION_NAME-$VERSION_CODE-release.apk
artifacts:
expire_in: 4 weeks
paths:
- deliverables
#flavor2
package_debugger_release:
<<: *package_template_def
stage: package
environment: Release
only:
- master
script:
- mv app/build/outputs/apk/debugger/release/app-debugger-release.apk ./deliverables/Moshavere-debugger-v$VERSION_NAME-$VERSION_CODE-release.apk
artifacts:
expire_in: 4 weeks
paths:
- deliverables
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment