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
This section was used to define variables to be used in all sections in CI.
This section was used to define machine configuration for all activities in this CI.
This section was used to define step to fetch dependencies before build and test step.
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.
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.