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 |