Define new template for subproject release build

Define a new template for subproject release builds that does not
update the version tag within the <parent>.  This is needed for
the oparent-odlparent subproject of oparent, whose parent is an
external POM from the OpenDaylight project.

Change-Id: I798b0292f17b6b9d5234f147910488e4bb6ecee2
Issue-ID: CIMAN-99
Signed-off-by: Dan Timoney <dtimoney@att.com>
diff --git a/jjb/global-templates-java.yaml b/jjb/global-templates-java.yaml
index 713ea2f..5255cef 100644
--- a/jjb/global-templates-java.yaml
+++ b/jjb/global-templates-java.yaml
@@ -1961,6 +1961,91 @@
           maven-version: '{maven-version}'
 
 - job-template:
+    # Job template for Java daily release jobs
+    #
+    # The purpose of this job template is to run
+    #   - change version in all POM files to the release version specified
+    #     in version.properties. This is done using a script instread of
+    #     the mvn version plugin that assumes some specific parent structure
+    #     This version does NOT change the version within the <parent> tag.
+    #   - runs maven clean deploy sonar
+    #
+    # The POM files are required to use the Maven staging plugin so the deploy
+    # does not deploy directly to the release repo.
+    #
+    # Required Variables:
+    #     branch:    git branch (eg. stable/lithium or master)
+    #     pom:       name/location of the pom.xml file relative to the workspace
+    #     pattern:   ant file-path pattern relative to the workspace used to
+    #                trigger the job
+
+    name: '{project-name}-{stream}-{subproject}-release-version3-java-daily'
+
+    project-type: freestyle
+    node: '{build-node}'
+    maven-deploy-properties:
+    properties:
+      - infra-properties:
+          build-days-to-keep: '{build-days-to-keep}'
+
+    parameters:
+      - infra-parameters:
+          project: '{project}'
+          branch: '{branch}'
+          refspec: 'refs/heads/{branch}'
+          artifacts: '{archive-artifacts}'
+      - maven-exec:
+          maven-version: '{maven-version}'
+
+    scm:
+      - gerrit-trigger-scm:
+          refspec: ''
+          choosing-strategy: 'default'
+          submodule-recursive: '{submodule-recursive}'
+
+    wrappers:
+      - infra-wrappers:
+          build-timeout: '{build-timeout}'
+
+    triggers:
+      # 11 AM UTC
+      - timed: 'H 11 * * *'
+      - gerrit-trigger-release-manually:
+          server: '{server-name}'
+          project: '{project}'
+          branch: '{branch}'
+          files: '{pattern}'
+
+    builders:
+      - provide-maven-settings:
+          global-settings-file: 'global-settings'
+          settings-file: '{mvn-settings}'
+      - maven-install:
+          maven-version: '{maven-version}'
+
+      - inject:
+          properties-file: version.properties
+
+      - shell: !include-raw-escape: include-update-pom-versions-not-parent.sh
+
+      - maven-target:
+          maven-version: '{maven-version}'
+          pom: '{pom}'
+          goals: 'clean deploy sonar:sonar site:site site:stage-deploy
+            -Dsonar.host.url=${{SONAR}} -B
+            -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn'
+          properties:
+            - '{maven-deploy-properties}'
+          settings: '{mvn-settings}'
+          settings-type: cfp
+          global-settings: 'global-settings'
+          global-settings-type: cfp
+
+    publishers:
+      - infra-shiplogs:
+          maven-version: '{maven-version}'
+
+- job-template:
     # Template for maven site plugin invocation
     #
     # It's designed to be triggered when the trigger-job job
diff --git a/jjb/include-update-pom-versions-not-parent.sh b/jjb/include-update-pom-versions-not-parent.sh
new file mode 100644
index 0000000..ace2350
--- /dev/null
+++ b/jjb/include-update-pom-versions-not-parent.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+## Will update POM in workspace with release version
+
+if [ ! -e version.properties ]; then
+    echo "Missing version.properties"
+    exit 1
+fi
+
+## will setup variable release_version
+source ./version.properties
+
+RELEASE_VERSION=$release_version
+
+echo Changing POM version to $RELEASE_VERSION
+
+## handle POM
+for file in $(find . -name pom.xml); do
+    VERSION=$(xpath -q -e '//project/version/text()' $file)
+    PVERSION=$(xpath -q -e '//project/parent/version/text()' $file)
+    echo before changes VERSION=$VERSION PVERSION=$PVERSION file=$file
+    if [ "$VERSION" != "" ]; then
+        awk -v v=$RELEASE_VERSION '
+            /<version>/ {
+                if (! done) {
+                    sub(/<version>.*</,"<version>" v "<",$0)
+                    done = 1
+                }
+            }
+            { print $0 }
+        ' $file > $file.tmp
+        mv $file.tmp $file
+    fi
+    VERSION=$(xpath -q -e '//project/version/text()' $file)
+    PVERSION=$(xpath -q -e '//project/parent/version/text()' $file)
+    echo after changes VERSION=$VERSION PVERSION=$PVERSION file=$file
+done
+
diff --git a/jjb/oparent/oparent.yaml b/jjb/oparent/oparent.yaml
index 548e927..be4ad0c 100644
--- a/jjb/oparent/oparent.yaml
+++ b/jjb/oparent/oparent.yaml
@@ -9,7 +9,7 @@
     jobs:
       - '{project-name}-{stream}-{subproject}-verify-java'
       - '{project-name}-{stream}-{subproject}-merge-java'
-      - '{project-name}-{stream}-{subproject}-release-version2-java-daily'
+      - '{project-name}-{stream}-{subproject}-release-version3-java-daily'
       - '{project-name}-{stream}-verify-java'
       - '{project-name}-{stream}-merge-java'
       - '{project-name}-{stream}-release-version-java-daily-no-sonar'