Merge "[VOL-3918] Updating ONOS apps release pipeline with API change support"
diff --git a/jjb/onos-app-release.yaml b/jjb/onos-app-release.yaml
index 83e2eaa..92cf4f1 100644
--- a/jjb/onos-app-release.yaml
+++ b/jjb/onos-app-release.yaml
@@ -30,11 +30,26 @@
 
     parameters:
       - string:
-          name: app
+          name: appRepo
           default: ''
           description: 'Name of the app repository on the OpenCORD Gerrit server.\n e.g. vtn'
 
       - string:
+          name: appName
+          default: ''
+          description: 'Name of the app in pom.xml API definition. \n e.g. olt'
+
+      - string:
+          name: apiVersion
+          default: ''
+          description: 'Version to release.\n e.g. 1.0.0'
+
+      - string:
+          name: nextApiVersion
+          default: ''
+          description: 'Version to release.\n e.g. 1.0.0'
+
+      - string:
           name: version
           default: ''
           description: 'Version to release.\n e.g. 1.0.0'
diff --git a/jjb/pipeline/onos-app-release.groovy b/jjb/pipeline/onos-app-release.groovy
index f4b78bd..d0086db 100644
--- a/jjb/pipeline/onos-app-release.groovy
+++ b/jjb/pipeline/onos-app-release.groovy
@@ -12,7 +12,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-def app = '${app}'
+def appRepo = '${appRepo}'
+def appName = '${appName}'
+def apiVersion = '${apiVersion}'
+def nextApiVersion = '${nextApiVersion}'
 def version = '${version}'
 def nextVersion = '${nextVersion}'
 def branch = '${branch}'
@@ -32,12 +35,17 @@
   sh 'mvn versions:set -DnewVersion=' + newVersion + ' versions:commit'
 }
 
+def changeApiVersion(def appName, def newApiVersion) {
+  // Update the top-level <*appName*.api.version> tag in the root pom.xml.
+  sh 'mvn versions:set-property -Dproperty=' + appName + '.api.version -DnewVersion=' + newApiVersion + ' -DallowSnapshots=true versions:commit'
+}
+
 // TODO: use the declarative pipeline syntax, like all other groovy files.
 //  This implementation is based on the legacy cord-onos-publisher/Jenkinsfile.release
 node ('ubuntu16.04-basebuild-1c-2g') {
 
-  sh 'echo Releasing ' + app + ' repository on ' + branch + ' branch'
-  sh 'echo Releasing version ' + version + ' and starting ' + nextVersion + '-SNAPSHOT'
+  sh 'echo Releasing ' + appRepo + ' repository on ' + branch + ' branch'
+  sh 'echo Releasing version ' + version + ' with API version ' + apiVersion + '"' + ' and starting ' + nextVersion + '-SNAPSHOT with API version ' + apiVersion + '-SNAPSHOT'"'
 
   // Set the JDK version
   sh 'echo Using JDK distribution: ' + jdkDistro
@@ -68,15 +76,20 @@
     cleanWs()
 
     sshagent (credentials: ['gerrit-jenkins-user']) {
-      git branch: branch, url: 'ssh://jenkins@gerrit.opencord.org:29418/' + app, credentialsId: 'gerrit-jenkins-user'
+      git branch: branch, url: 'ssh://jenkins@gerrit.opencord.org:29418/' + appRepo, credentialsId: 'gerrit-jenkins-user'
 
       sh 'gitdir=$(git rev-parse --git-dir); scp -p -P 29418 jenkins@gerrit.opencord.org:hooks/commit-msg ${gitdir}/hooks/'
     }
   }
 
   stage ('Move to release version') {
-    changeVersion(version)
-    sh 'git add -A && git commit -m "Release version ' + version + '"'
+    //Splitting version and apiVersion and check if apiVersion different from empty then update API it.
+    //Allows to release apps that dont' have api.version (e.g. bng,pppoe,kafka)
+    changeVersion(version, apiVersion)
+    if (apiVersion != "") {
+       changeApiVersion(appName, apiVersion)
+    }
+    sh 'git add -A && git commit -m "Release app version ' + version + ' with API version ' + apiVersion + '"'
   }
 
   stage ('Verify code') {
@@ -99,8 +112,12 @@
 
   stage ('Move to next SNAPSHOT version') {
     def snapshot = nextVersion + '-SNAPSHOT'
+    def apiSnapshot = nextApiVersion + '-SNAPSHOT'
     changeVersion(snapshot)
-    sh 'git add -A && git commit -m "Starting snapshot ' + snapshot + '"'
+    if (apiVersion != "") {
+       changeApiVersion(appName, apiSnapshot)
+    }
+    sh 'git add -A && git commit -m "Starting snapshot ' + snapshot + ' with API version ' + apiSnapshot + '"'
     sshagent (credentials: ['gerrit-jenkins-user']) {
       sh 'git push origin HEAD:refs/for/' + branch
     }