Veritrans Android SDK is open source project.
Continous integration (CI) is required to make sure change from another contributor is not breaking current implementation.
We use CircleCi as cloud continous integration service because it's easy to setup and also free.
Basically CI configuration was in a single file.
This is latest configuration in Veritrans Android project.
#
# Build configuration for Circle CI
#
general:
artifacts:
- /home/ubuntu/veritrans-android/sdk-example/build/outputs/apk/
machine:
ruby:
version: 2.0.0-p648
environment:
ANDROID_HOME: /usr/local/android-sdk-linux
GRADLE_OPTS: '-Dorg.gradle.jvmargs="-Xmx2048m -XX:MaxPermSize=1024m -Xms512m -XX:+HeapDumpOnOutOfMemoryError"'
_JAVA_OPTIONS: "-Xms512m -Xmx2048m"
dependencies:
pre:
# Installing auto bumping version tools
- gem install bmp
# Copy environment variables to gradle.properties
- source environmentSetup.sh && copyEnvVarsToGradleProperties
override:
- echo y | android update sdk --no-ui --all --filter tools,platform-tools,build-tools-23.0.3,android-23,extra-google-m2repository,extra-google-google_play_services,extra-android-m2repository
- ANDROID_HOME=/usr/local/android-sdk-linux ./gradlew dependencies
test:
override:
# Build
- (./gradlew corekit:testDevelopmentDebugUnitTestCoverage -PdisablePreDex):
timeout: 3600
post:
- cp -r corekit/build/reports $CIRCLE_ARTIFACTS
- cp -r corekit/build/reports/ $CIRCLE_TEST_REPORTS
# Deployment section
deployment:
master:
tag: /v[0-9]+(\.[0-9]+)*/
owner: veritrans
commands:
- ./gradlew :clean :corekit:assembleRelease :corekit:bintrayUpload -PdisablePreDex
- ./gradlew :clean :uikit:assembleRelease :uikit:bintrayUpload -PdisablePreDex
- ./gradlew :clean :scancard:assembleRelease :scancard:bintrayUpload -PdisablePreDex
- ./gradlew :clean :widgets:assembleRelease :widgets:bintrayUpload -PdisablePreDex
# using ghr to release latest version to github
- ./gradlew :clean :sdk-example:assembleDevelopmentDebug -PdisablePredex
- go get github.com/tcnksm/ghr
- ghr -t $GITHUB_TOKEN -u $CIRCLE_PROJECT_USERNAME -r $CIRCLE_PROJECT_REPONAME --replace --prerelease `git describe --tags` sdk-example/build/outputs/apk/
bump:
branch: release
owner: veritrans
commands:
- bmp -p
- source environmentSetup.sh && setGit
- bmp -c
- git checkout master && git merge release
- git push origin master --tag
General section
This section was used to define variables to be used in all sections in CI.
Machine section
This section was used to define machine configuration for all activities in this CI.
Dependencies section
This section was used to define step to fetch dependencies before build and test step.
Test section
The configuration was made so it will check any change in any branch by build the library and run the unit test.
If failed, it will notify github that the check on specific commit was failed. It will help contributor know what's wrong with their works.
Deployment section
Also CircleCI will check every change in release branch so if it's success it will be automatically bump version, add a new tag and push to master branch. Whenever a new tag was created, CircleCI will deploy the code to bintray if the test was succeeded.
This will be helpful to contributor so they don't need to publish every change manually to bintray.