Fineract-CN projects depend on each other. The simplest option is to build all projects locally so artifacts are published to local maven repository and available from there.
Sometomes still there is need to only work with a single project and resolve the other fineract-cn-* dependencies from public repository. Also in order for continous integration (Travis-ci.com) to build a specific project it needs that all the dependencies are available.
JFrog Artifactory has been set up to host these artifacts in https://mifos.jfrog.io/mifos/. Maven Central would not be suitable for the task as it doesn't hold "work-in-progress" snapshots.
In this artifacotry there are two repositories:
In order to use snapshot builds one needs to have following line in repositories list:
repositories {
jcenter()
mavenLocal()
maven { url 'https://mifos.jfrog.io/mifos/libs-snapshot/' }
} |
All apache/fineract-cn-* repositories are configured to be built with Travis-CI.com. Whenever something is pushed to a repository travis tries to run gradle build on it. Travis also detects the branch name that the changes were pushed to.
If travis detects that the changes were pushed to "develop" branch and build doesn't fail then it uploads the new snapshot artifacts to the public repository. You can pick them up the same way as artifacts deployed to local Maven:
dependencies {
compile(
[group: 'org.apache.fineract.cn', name: 'reponame', version: '0.1.0-BUILD-SNAPSHOT']
)
)Travis builds and publishes the snapshots out of all branches but for branches not named "develop" it overwrites the version of the artifact (defined in build.gradle) with "branchname-SNAPSHOT". If you want to point some other project to branch "myfeaturebranch" then you need to use:
dependencies {
compile(
[group: 'org.apache.fineract.cn', name: 'reponame', version: 'myfeaturebranch-SNAPSHOT']
)
)Travis also builds all pull requests but for security reasons it doesn't upload any artifacts built from pull requests.
If a release is tagged in github then Travis-CI builds that as a release and uploads it under different repoKey - release artifacts are available at https://mifos.jfrog.io/mifos/libs-release
Following instructions are useful if you want to set up a new project or change existing setup.
repositories {
jcenter()
mavenLocal()
maven { url 'https://mifos.jfrog.io/mifos/libs-snapshot/' }
}artifactory {
contextUrl = System.getenv("ARTIFACTORY_URL")
publish {
repository {
repoKey = project.findProperty('artifactoryRepoKey')
username = System.getenv("ARTIFACTORY_USER")
password = System.getenv("ARTIFACTORY_PASSWORD")
}
defaults {
publications ('api', 'service', 'bootService') // add projectnamePublification here
}
}
}
artifactoryPublish.dependsOn('clean','publishToMavenLocal')
id "com.jfrog.artifactory" version "4.9.5"
version project.version
with: version project.findProperty('externalVersion') ?: project.version
task artifactoryPublish {
group 'all'
dependsOn gradle.includedBuild('api').task(':artifactoryPublish')
dependsOn gradle.includedBuild('library').task(':artifactoryPublish')
dependsOn gradle.includedBuild('test').task(':artifactoryPublish')
// add other modules found in the same file
}
[](https://travis-ci.com/apache/fineract-cn-reponame)
language: java
sudo: false
jdk:
- openjdk8
install: true
script: "./travis.sh"
env:
global:
- BUILD_SNAPSHOTS_BRANCH=develop
- ARTIFACTORY_URL=https://mifos.jfrog.io/mifos
- ARTIFACTORY_USER=travis-ci1
- secure: "see below chapter Encrypt Artifactory password"
You need command line travis client.
travis encrypt --com -r apache/fineract-cn-reponame ARTIFACTORY_PASSWORD=enter-password-here
copy the encrypted secure value to .travis.yml
export ARTIFACTORY_URL=https://mifos.jfrog.io/mifosexport ARTIFACTORY_USER=travis-ci
export ARTIFACTORY_PASSWORD=xxx
./gradlew -PartifactoryRepoKey=libs-snapshot-local artifactoryPublish