[INF-146]

Unify mechanism across multiple ci-management repos

- move converted per-repo jobs into the jjb/repos hierarchy

- Pull in macros (with onf- prefix) and common scripts from ONOS/Aether
  ci-management repos, unifying behavior

- Update tagging scripts to unify changes

- Update gerrit repo multi-checkout and patch script

- Change over to newer static host for publishing charts/docs

- use python3 venv instead of virtualenv

Change-Id: Id46fdc23679b8854c54e294a7fb022e69d6d28f9
diff --git a/Makefile b/Makefile
index af7a30a..1071410 100644
--- a/Makefile
+++ b/Makefile
@@ -8,7 +8,7 @@
 
 $(VENV_DIR):
 	@echo "Setting up virtualenv for JJB testing"
-	virtualenv -p python3 $@
+	python3 -m venv $@
 	$@/bin/pip install jenkins-job-builder==$(JJB_VERSION) pipdeptree
 
 $(JOBCONFIG_DIR):
diff --git a/jjb/charts.yaml b/jjb/charts.yaml
deleted file mode 100644
index 9999d4b..0000000
--- a/jjb/charts.yaml
+++ /dev/null
@@ -1,179 +0,0 @@
----
-# CORD helm chart publishing tasks
-
-- project:
-    name: helm-repo
-
-    # add repos that have documentation to the project list in both jobs
-    jobs:
-      - 'publish-helm-repo':
-          project-regexp: '{helm-charts-projects-regexp}'
-          branch-regexp: '{supported-branches-regexp}'
-
-- job-template:
-    id: publish-helm-repo
-    name: 'publish-helm-repo'
-    description: |
-      Created by publish-helm-repo job-template from ci-management/jjb/charts.yaml
-
-    triggers:
-      - cord-infra-gerrit-trigger-merge:
-          gerrit-server-name: '{gerrit-server-name}'
-          project-regexp: '{project-regexp}'
-          branch-regexp: '{branch-regexp}'
-          file-include-regexp: '{all-files-regexp}'
-          dependency-jobs: '{dependency-jobs}'
-
-    properties:
-      - cord-infra-properties:
-          build-days-to-keep: '{build-days-to-keep}'
-          artifact-num-to-keep: '{artifact-num-to-keep}'
-
-    wrappers:
-      - lf-infra-wrappers:
-          build-timeout: '{build-timeout}'
-          jenkins-ssh-credential: '{jenkins-ssh-credential}'
-
-    scm:
-      - lf-infra-gerrit-scm:
-          git-url: '$GIT_URL/$GERRIT_PROJECT'
-          refspec: ''
-          branch: '$GERRIT_BRANCH'
-          submodule-disable: '{submodule-disable}'
-          submodule-recursive: 'false'
-          submodule-timeout: '{submodule-timeout}'
-          choosing-strategy: 'gerrit'
-          jenkins-ssh-credential: '{jenkins-ssh-credential}'
-
-    node: 'ubuntu18.04-basebuild-2c-4g'
-    project-type: freestyle
-    concurrent: false
-
-    builders:
-      - shell: |
-          #!/usr/bin/env bash
-          set -eu -o pipefail
-
-          echo "git version: $(git --version)"
-
-          # Configure git
-          git config --global user.email "do-not-reply@opennetworking.org"
-          git config --global user.name "Jenkins"
-
-          # Checkout 'cord-charts-repo' repo that contains updated charts
-          git clone ssh://jenkins@gerrit.opencord.org:29418/cord-charts-repo.git
-
-          # Clone the `helm-repo-tools` which contains scripts
-          git clone ssh://jenkins@gerrit.opencord.org:29418/helm-repo-tools.git
-
-          # Setup helm and external repos
-          helm repo add stable https://charts.helm.sh/stable
-          helm repo add rook-release https://charts.rook.io/release
-          helm repo add cord https://charts.opencord.org
-          helm repo add elastic  https://helm.elastic.co
-          helm repo add kiwigrid https://kiwigrid.github.io
-
-          # Update the repo
-          ./helm-repo-tools/helmrepo.sh
-
-          # Tag and push to git the charts repo
-          pushd cord-charts-repo
-
-            # only update if charts are changed
-            set +e
-            if git diff --exit-code index.yaml > /dev/null; then
-              echo "No changes to charts in patchset $GERRIT_CHANGE_NUMBER on project: $GERRIT_PROJECT, exiting."
-              exit 0
-            fi
-            set -e
-
-            # version tag is the current date in RFC3339 format
-            NEW_VERSION=$(date -u +%Y%m%dT%H%M%SZ)
-
-            # Add changes and create commit
-            git add -A
-            git commit -m "Changed by CORD Jenkins publish-helm-repo job: $BUILD_NUMBER, for project: $GERRIT_PROJECT, patchset: $GERRIT_CHANGE_NUMBER"
-
-            # create tag on new commit
-            git tag "$NEW_VERSION"
-
-            echo "Tags including new tag:"
-            git tag -n
-
-            # push new commit and tag back into repo
-            git push origin
-            git push origin "$NEW_VERSION"
-          popd
-
-          # Set up the ssh host keys for the docs host
-          mkdir -p ~/.ssh
-          echo '{docs-ssh-host-key}' >> ~/.ssh/known_hosts
-
-          # Copy updated repo to host
-          rsync -rvzh --delete-after --exclude=.git cord-charts-repo/ {docs-ssh-host}:/var/www/charts
-
-    publishers:
-      - email:
-          recipients: 'andy@opennetworking.org kailash@opennetworking.org luca@opennetworking.org teo@opennetworking.org saurav@opennetworking.org zdw@opennetworking.org'
-
-# check helm charts with `helm lint --strict` and that charts version is
-# updated when the contents of a chart is modified.
-- job-template:
-    id: verify-helm-lint
-    name: 'verify_{project}_helm-lint'
-    description: |
-      Created by verify-helm-lint job-template from ci-management/jjb/charts.yaml
-
-    triggers:
-      - cord-infra-gerrit-trigger-patchset:
-          gerrit-server-name: '{gerrit-server-name}'
-          project-regexp: '^{project}$'
-          branch-regexp: '{branch-regexp}'
-          file-include-regexp: '{all-files-regexp}'
-          dependency-jobs: '{dependency-jobs}'
-
-    properties:
-      - cord-infra-properties:
-          build-days-to-keep: '{build-days-to-keep}'
-          artifact-num-to-keep: '{artifact-num-to-keep}'
-
-    wrappers:
-      - lf-infra-wrappers:
-          build-timeout: '{build-timeout}'
-          jenkins-ssh-credential: '{jenkins-ssh-credential}'
-
-    scm:
-      - lf-infra-gerrit-scm:
-          git-url: '$GIT_URL/$GERRIT_PROJECT'
-          refspec: '$GERRIT_REFSPEC'
-          branch: '$GERRIT_BRANCH'
-          submodule-disable: '{submodule-disable}'
-          submodule-recursive: 'false'
-          submodule-timeout: '{submodule-timeout}'
-          choosing-strategy: gerrit
-          jenkins-ssh-credential: '{jenkins-ssh-credential}'
-
-    node: 'ubuntu18.04-basebuild-2c-4g'
-    project-type: freestyle
-    concurrent: true
-
-    builders:
-      - shell: |
-          #!/usr/bin/env bash
-          set -eu -o pipefail
-
-          # Setup helm and external repos
-          helm repo add stable https://charts.helm.sh/stable
-          helm repo add rook-release https://charts.rook.io/release
-          helm repo add cord https://charts.opencord.org
-
-          git clone https://gerrit.opencord.org/helm-repo-tools
-          ./helm-repo-tools/helmlint.sh clean
-
-          # Specify the remote branch to compare against
-          export COMPARISON_BRANCH="origin/$GERRIT_BRANCH"
-          ./helm-repo-tools/chart_version_check.sh
-
-          # Check for chart version conflicts by building the repo (don't upload)
-          git clone ssh://jenkins@gerrit.opencord.org:29418/cord-charts-repo.git
-          ./helm-repo-tools/helmrepo.sh
diff --git a/jjb/cord-macros.yaml b/jjb/cord-macros.yaml
index 59cd72c..ff6c309 100644
--- a/jjb/cord-macros.yaml
+++ b/jjb/cord-macros.yaml
@@ -43,19 +43,6 @@
           choosing-strategy: '{choosing-strategy}'
           basedir: '{basedir}'
 
-# download a specific patchset after checking out entire source tree with repo
-# docs: https://docs.openstack.org/infra/jenkins-job-builder/builders.html#builders.inject
-- builder:
-    name: cord-infra-gerrit-repo-patch
-    builders:
-      - inject:
-          properties-content: |
-            DESTINATION_DIR={destination-dir}
-            GERRIT_PROJECT={project}
-            GERRIT_CHANGE_NUMBER={change-number}
-            GERRIT_PATCHSET_NUMBER={patchset-number}
-      - shell: !include-raw-escape: shell/repopatch.sh
-
 # trigger on gerrit patchsets and actions
 # docs: https://docs.openstack.org/infra/jenkins-job-builder/triggers.html#triggers.gerrit
 - trigger:
@@ -173,25 +160,6 @@
             - file-id: pipconf
               target: '$HOME/.config/pip/pip.conf'
 
-# wrapper to provide SSH key and fill in ~/.ssh/known_hosts file for use with rsync
-# Name matches macro in ONOS JJB, for future unification
-- wrapper:
-    name: onf-infra-rsync-wrappers
-    wrappers:
-      - mask-passwords
-      - timeout:
-          type: absolute
-          timeout: '{build-timeout}'
-          timeout-var: 'BUILD_TIMEOUT'
-          fail: true
-      - timestamps
-      - ssh-agent-credentials:
-          users:
-            - '{jenkins-ssh-credential}'
-      - config-file-provider:
-          files:
-            - file-id: known_hosts
-              target: '$HOME/.ssh/known_hosts'
 
 # Sets permissions for job to be visible to AetherAccess only
 # (for Aether member-only repos).
@@ -226,3 +194,144 @@
                 <permission>hudson.model.Item.Read:ONFStaff</permission>
                 <permission>hudson.model.Item.ViewStatus:anonymous</permission>
               </hudson.security.AuthorizationMatrixProperty>
+
+################## NEW and CONVERGED MACROS ###################
+# Name matches macro in ONOS/Aether JJB, for future unification
+
+# control how long builds and artifact are retained
+# differs from lf-infra-properties as it retains artifacts
+- property:
+    name: onf-infra-properties
+    properties:
+      - build-discarder:
+          days-to-keep: '{build-days-to-keep}'
+          artifact-num-to-keep: '{artifact-num-to-keep}'
+
+# wrapper to provide SSH key and fill in ~/.ssh/known_hosts file for use with rsync
+- wrapper:
+    name: onf-infra-rsync-wrappers
+    wrappers:
+      - mask-passwords
+      - timeout:
+          type: absolute
+          timeout: '{build-timeout}'
+          timeout-var: 'BUILD_TIMEOUT'
+          fail: true
+      - timestamps
+      - ssh-agent-credentials:
+          users: '{obj:ssh_credential_list}'
+      - config-file-provider:
+          files:
+            - file-id: known_hosts
+              target: '$HOME/.ssh/known_hosts'
+
+# trigger on gerrit patchsets and actions
+# docs: https://docs.openstack.org/infra/jenkins-job-builder/triggers.html#triggers.gerrit
+# Uses a regex based project match
+- trigger:
+    name: onf-infra-gerrit-trigger-patchset
+    triggers:
+      - gerrit:
+          server-name: '{gerrit-server-name}'
+          dependency-jobs: '{dependency-jobs}'
+          silent-start: true
+          trigger-on:
+            - patchset-created-event:
+                exclude-drafts: true
+                exclude-trivial-rebase: false
+                exclude-no-code-change: false
+            - draft-published-event
+            - comment-added-contains-event:
+                comment-contains-value: '(?i)^.*recheck$'
+          projects:
+            - project-compare-type: REG_EXP
+              project-pattern: '{project-regexp}'
+              branches:
+                - branch-compare-type: REG_EXP
+                  branch-pattern: '{branch-regexp}'
+              file-paths:
+                - compare-type: REG_EXP
+                  pattern: '{file-include-regexp}'
+
+# trigger for gerrit patch submission
+- trigger:
+    name: onf-infra-gerrit-trigger-merge
+    triggers:
+      - gerrit:
+          server-name: '{gerrit-server-name}'
+          dependency-jobs: '{dependency-jobs}'
+          silent-start: true
+          trigger-on:
+            - change-merged-event
+          projects:
+            - project-compare-type: REG_EXP
+              project-pattern: '{project-regexp}'
+              branches:
+                - branch-compare-type: REG_EXP
+                  branch-pattern: '{branch-regexp}'
+              file-paths:
+                - compare-type: REG_EXP
+                  pattern: '{file-include-regexp}'
+
+# same as lf-infra-*-scm, but allows checkouts to a subdir of $WORKSPACE
+# with the `basedir` option
+#
+# `basedir` is used as `destination-dir` for the repo scm macros for
+# consistency
+
+- scm:
+    name: onf-infra-gerrit-scm
+    scm:
+      - git:
+          credentials-id: '{jenkins-ssh-credential}'
+          url: '{git-url}'
+          refspec: '{refspec}'
+          branches:
+            - 'refs/heads/{branch}'
+          wipe-workspace: true
+          submodule:
+            disable: '{submodule-disable}'
+            recursive: '{submodule-recursive}'
+            timeout: '{submodule-timeout}'
+          choosing-strategy: '{choosing-strategy}'
+          basedir: '{basedir}'
+
+- scm:
+    name: onf-infra-gerrit-repo-scm
+    scm:
+      - repo:
+          manifest-url: '{manifest-url}'
+          manifest-branch: '{branch}'
+          destination-dir: '{basedir}'
+          jobs: 4
+          reset-first: true
+          depth: 1
+
+# download a specific patchset after checking out entire source tree with repo
+# docs: https://docs.openstack.org/infra/jenkins-job-builder/builders.html#builders.inject
+- builder:
+    name: onf-infra-gerrit-repo-patch
+    builders:
+      - inject:
+          properties-content: |
+            BASEDIR={basedir}
+            GERRIT_PROJECT={project}
+            GERRIT_CHANGE_NUMBER={change-number}
+            GERRIT_PATCHSET_NUMBER={patchset-number}
+      - shell: !include-raw-escape: shell/repo-patch.sh
+
+# publisher to clean up the workspace after the build whatever the result
+- publisher:
+    name: onf-infra-wscleanup-publisher
+    publishers:
+      - workspace-cleanup:
+          clean-if:
+            - success: true
+            - unstable: true
+            - failure: true
+            - aborted: true
+            - not-built: true
+          dirmatch: false
+          fail-build: true
+          clean-parent: false
+          disable-deferred-wipeout: false
diff --git a/jjb/defaults.yaml b/jjb/defaults.yaml
index 1bf6631..6fe3b09 100644
--- a/jjb/defaults.yaml
+++ b/jjb/defaults.yaml
@@ -11,8 +11,11 @@
     # lftools
     lftools-version: '~=0.26.2'
 
-    # LF templates require these to be set in later versions of global-jjb
-    submodule-disable: 'false'
+    # git module config
+    # LF templates require these to be set in later versions of global-jjb for git module
+    choosing_strategy: 'default'
+    submodule-disable: false
+    submodule-recursive: false
     submodule-timeout: 10
 
     # name of the SSH key to use in most cases
@@ -63,6 +66,7 @@
 
     # URL for Gerrit server, for use with `repo`
     gerrit-server-url: 'https://gerrit.opencord.org'
+    gerrit-server-ssh-url: 'ssh://jenkins@gerrit.opencord.org:29418'
 
     # name of the manifest git repos used with the `repo` cli tool
     cord-repo-manifest: manifest.git
@@ -73,9 +77,6 @@
     # default email address to send job failure messages
     failure-email-address: 'cord-dev@opencord.org'
 
-    # Projects containing helm-charts
-    helm-charts-projects-regexp: '(comac-helm-charts|voltha-helm-charts|helm-charts|cord-platform|seba)$'
-
     # regexp for gerrit triggers
     # list of supported branches, for branch-regexp
     all-branches-regexp: '.*'
@@ -93,7 +94,7 @@
     semver-strict: 0
 
     # matching repos that should be version tagged by the version-tag job
-    version-tag-projects-regexp: '^(?!aether)(xos.*|comac-helm-charts|voltha-helm-charts|helm-charts|automation-tools|cord-tester|chameleon|rcord|mcord|ecord|acordion|addressmanager|epc-service|exampleservice|fabric.*|globalxos|hippie-oss|hss_db|hypercache|internetemulator|kubernetes-service|monitoring|olt-service|onos-service|openstack|progran|sdn-controller|simpleexampleservice|templateservice|vEE|vEG|vBBU|venb|vHSS|vMME|vnaas|vPGWC|vPGWU|vrouter|vsg|vsg-hw|vSGW|vSM|vspgwc|vspgwu|vtn-service|vtr|.*-workflow-driver|ves-agent|voltha-bbsim|openolt|sadis-server|kafka-topic-exporter|pyvoltha||plyxproto|voltha-protos|alpine-grpc-base|cordctl|voltha-go|voltha-onos|device-management|cord-workflow.*|voltha-system-tests|openairinterface|omec-.*|bbsim|omci-sim|ponsim|pppoe.*|voltha-api-server|aaa|config|dhcpl2relay|igmp|igmpproxy|kafka-onos|mcast|olt|sadis|vtn|voltha-.*-adapter.*|voltha-lib-go|voltha-python-base|voltha-docker-tools|mn-stratum-siab|ofagent.*|bng|voltctl|openolt-scale-tester|nem-ondemand-proxy|multifabric|openolt-test|omci-lib-go|kind-voltha|voltha-docs|mac-learning|goloxi|device-management-interface|bbsim-sadis-server|olttopology|opendm-agent|opendevice-manager|.*-robot)$'
+    version-tag-projects-regexp: '^(?!aether)(xos.*|comac-helm-charts|automation-tools|cord-tester|chameleon|rcord|mcord|ecord|acordion|addressmanager|epc-service|exampleservice|fabric.*|globalxos|hippie-oss|hss_db|hypercache|internetemulator|kubernetes-service|monitoring|olt-service|onos-service|openstack|progran|sdn-controller|simpleexampleservice|templateservice|vEE|vEG|vBBU|venb|vHSS|vMME|vnaas|vPGWC|vPGWU|vrouter|vsg|vsg-hw|vSGW|vSM|vspgwc|vspgwu|vtn-service|vtr|.*-workflow-driver|ves-agent|voltha-bbsim|openolt|sadis-server|kafka-topic-exporter|pyvoltha||plyxproto|voltha-protos|alpine-grpc-base|cordctl|voltha-go|voltha-onos|device-management|cord-workflow.*|voltha-system-tests|openairinterface|omec-.*|bbsim|omci-sim|ponsim|pppoe.*|voltha-api-server|aaa|config|dhcpl2relay|igmp|igmpproxy|kafka-onos|mcast|olt|sadis|vtn|voltha-.*-adapter.*|voltha-lib-go|voltha-python-base|voltha-docker-tools|mn-stratum-siab|ofagent.*|bng|voltctl|openolt-scale-tester|nem-ondemand-proxy|multifabric|openolt-test|omci-lib-go|kind-voltha|mac-learning|goloxi|device-management-interface|bbsim-sadis-server|olttopology|opendm-agent|opendevice-manager|.*-robot)$'
 
     # List of all repos that contribute to the CORD guide
     cord-guide-projects-regexp: '^(att-workflow-driver|cord-tester|cordctl|exampleservice|fabric|fabric-crossconnect|hippie-oss|kubernetes-service|olt-service|onos-service|openolt|openstack|rcord|simpleexampleservice|vrouter|vtn-service|xos|xos-gui|xos-tosca)$'
@@ -135,10 +136,6 @@
     code-files-regexp: '^(?!docs|VERSION|\/COMMIT_MSG).*$'
     api-test-files-regexp: '^(?!docs|VERSION|\/COMMIT_MSG|Jenkinsfile-*).*$'
 
-    # Jenkins SSH host doc publisher
-    docs-ssh-host: 'guide.opencord.org'
-    docs-ssh-host-key: 'guide.opencord.org,52.9.82.207 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFHwOY3/8GucdKzBngH/FC08nHac/RJ/OheZp2+5EpOPXZG9zQW2YUbXH5A9pO76lI5CG3z3+huG62xEGo99UQU='
-
     # siab helm-charts
     siab-projects-regexp: '^(xos-core/.*|xos-profiles/seba-services/.*|xos-profiles/base-kubernetes/.*|xos-profiles/ponsim-pod/.*|workflows/att-workflow/.*|voltha/.*|onos/.*|mininet/.*|configs/seba-ponsim.yaml)$'
 
@@ -170,7 +167,7 @@
     # github organization
     # Specifies the github organization to operate on.  Default is blank which
     # may either be invalid, or specify that gerrit should be used instead.
-    # Currently used with: synopsys detect, github-release
+    # Currently used with: github-release
     github-organization: ''
 
     # release targets
@@ -196,7 +193,7 @@
 
     # maintainers
     # Used to notify users in supported tests
-    maintainers: 'zdw@opennetworking.org'
+    maintainers: ''
 
     # karaf-home
     # Use to grab the logs or onos-diagnostics
diff --git a/jjb/repos/helm-charts.yaml b/jjb/repos/helm-charts.yaml
new file mode 100644
index 0000000..9c3810c
--- /dev/null
+++ b/jjb/repos/helm-charts.yaml
@@ -0,0 +1,19 @@
+---
+# SPDX-FileCopyrightText: 2022 Open Networking Foundation <info@opennetworking.org>
+# SPDX-License-Identifier: Apache-2.0
+
+# These are the CORD specific helm charts
+
+- project:
+    name: helm-charts
+    project: '{name}'
+    project-regexp: '^{name}$'
+    branch-regexp: '{modern-branches-regexp}'
+
+    jobs:
+      - 'verify-licensed'
+      - 'tag-check'
+      - 'helm-lint':
+          branch-regexp: '{modern-branches-regexp}'
+      - 'version-tag'
+      - 'publish-helm-repo'
diff --git a/jjb/verify/helm-repo-tools.yaml b/jjb/repos/helm-repo-tools.yaml
similarity index 100%
rename from jjb/verify/helm-repo-tools.yaml
rename to jjb/repos/helm-repo-tools.yaml
diff --git a/jjb/repos/versioning.yaml b/jjb/repos/versioning.yaml
new file mode 100644
index 0000000..e74de49
--- /dev/null
+++ b/jjb/repos/versioning.yaml
@@ -0,0 +1,16 @@
+---
+# DEPRECATED
+# Note - transitioning to ONOS/Aether style one file and individual version
+# jobs per repo, instead of the massive regex to match all repos
+#
+# This file exists only to handle the repos that haven't transitioned yet and
+# are still in the regex
+
+- project:
+    name: versioning-jobs
+
+    project: 'wildcard'
+    project-regexp: '{version-tag-projects-regexp}'
+
+    jobs:
+      - 'version-tag'
diff --git a/jjb/verify/voltha-docs.yaml b/jjb/repos/voltha-docs.yaml
similarity index 74%
rename from jjb/verify/voltha-docs.yaml
rename to jjb/repos/voltha-docs.yaml
index b2d3187..5e6d903 100644
--- a/jjb/verify/voltha-docs.yaml
+++ b/jjb/repos/voltha-docs.yaml
@@ -4,6 +4,7 @@
 - project:
     name: voltha-docs
     project: '{name}'
+    project-regexp: '^{name}$'
 
     jobs:
       - 'verify-voltha-docs-jobs':
@@ -15,7 +16,7 @@
     name: 'verify-voltha-docs-jobs'
     jobs:
       - 'verify-licensed'
-      - 'tag-collision-reject'
+      - 'tag-check'
       - 'make-unit-test':
           unit-test-targets: 'test'
           junit-allow-empty-results: true
@@ -23,9 +24,11 @@
 - job-group:
     name: 'post-submit-voltha-docs-jobs'
     jobs:
+      - 'version-tag'
       - 'sync-dir':
+          dependency-jobs: 'version-tag_voltha-docs'
           build-command: 'make multiversion'
           build-output-path: '_build/multiversion/'
-          sync-target-server: 'guide.opencord.org'
-          sync-target-path: '/var/www/voltha-docs/'
+          sync-target-server: 'static.opennetworking.org'
+          sync-target-path: '/srv/sites/docs.voltha.org/'
           build-timeout: 60
diff --git a/jjb/verify/voltha-helm-charts.yaml b/jjb/repos/voltha-helm-charts.yaml
similarity index 81%
rename from jjb/verify/voltha-helm-charts.yaml
rename to jjb/repos/voltha-helm-charts.yaml
index 4ba63b8..a8f6d36 100644
--- a/jjb/verify/voltha-helm-charts.yaml
+++ b/jjb/repos/voltha-helm-charts.yaml
@@ -1,9 +1,11 @@
 ---
-# verification jobs for 'voltha-helm-charts' repo
+# SPDX-FileCopyrightText: 2018-2022 Open Networking Foundation <info@opennetworking.org>
+# SPDX-License-Identifier: Apache-2.0
 
 - project:
     name: voltha-helm-charts
     project: '{name}'
+    project-regexp: '^{name}$'
 
     jobs:
       - 'verify-voltha-helm-charts-jobs':
@@ -23,10 +25,10 @@
     name: 'verify-voltha-helm-charts-jobs'
     jobs:
       - 'verify-licensed'
-      - 'tag-collision-reject':
-          dependency-jobs: 'verify_voltha-helm-charts_licensed'
-      - 'verify-helm-lint':
-          dependency-jobs: 'verify_voltha-helm-charts_tag-collision'
+      - 'tag-check'
+      - 'helm-lint'
+      - 'version-tag'
+      - 'publish-helm-repo'
 
 - job-group:
     name: 'verify-voltha-helm-charts-jobs-voltha-2.8'
diff --git a/jjb/shell/helm-lint.sh b/jjb/shell/helm-lint.sh
new file mode 100644
index 0000000..e2f9e23
--- /dev/null
+++ b/jjb/shell/helm-lint.sh
@@ -0,0 +1,29 @@
+#!/usr/bin/env bash
+
+# SPDX-FileCopyrightText: 2020-2022 Open Networking Foundation <info@opennetworking.org>
+# SPDX-License-Identifier: Apache-2.0
+
+set -eu -o pipefail
+
+export OLD_REPO_DIR="cord-charts-repo"
+
+# Setup helm and external repos
+helm repo add stable https://charts.helm.sh/stable
+helm repo add rook-release https://charts.rook.io/release
+helm repo add cord https://charts.opencord.org
+
+git clone ssh://jenkins@gerrit.opencord.org:29418/helm-repo-tools.git
+./helm-repo-tools/helmlint.sh clean
+echo "*.lock" >> .gitignore
+
+# Specify the remote branch to compare against
+export COMPARISON_BRANCH="origin/$GERRIT_BRANCH"
+./helm-repo-tools/chart_version_check.sh
+
+# Configure git
+git config --global user.email "do-not-reply@opennetworking.org"
+git config --global user.name "Jenkins"
+
+# Check for chart version conflicts by building the repo (don't upload)
+git clone "ssh://jenkins@gerrit.opencord.org:29418/$OLD_REPO_DIR.git"
+./helm-repo-tools/helmrepo.sh
diff --git a/jjb/shell/jflint.sh b/jjb/shell/jflint.sh
index 18c5b40..cef7b91 100755
--- a/jjb/shell/jflint.sh
+++ b/jjb/shell/jflint.sh
@@ -1,18 +1,7 @@
 #!/usr/bin/env bash
 
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
+# SPDX-FileCopyrightText: 2017-present Open Networking Foundation
+# SPDX-License-Identifier: Apache-2.0
 
 # jflint.sh - lint for Jenkins declarative pipeline jobs
 #
diff --git a/jjb/shell/publish-helm-repo.sh b/jjb/shell/publish-helm-repo.sh
new file mode 100644
index 0000000..386ff39
--- /dev/null
+++ b/jjb/shell/publish-helm-repo.sh
@@ -0,0 +1,64 @@
+#!/usr/bin/env bash
+
+# SPDX-FileCopyrightText: 2020-2022 Open Networking Foundation <info@opennetworking.org>
+# SPDX-License-Identifier: Apache-2.0
+
+set -eu -o pipefail
+
+echo "git version: $(git --version)"
+
+# Variables used in this and child scripts
+export PUBLISH_URL="charts.opencord.org"
+export OLD_REPO_DIR="cord-charts-repo"
+export NEW_REPO_DIR="chart_repo"
+
+# Configure git
+git config --global user.email "do-not-reply@opennetworking.org"
+git config --global user.name "Jenkins"
+
+# Checkout 'cord-charts-repo' repo that contains updated charts
+git clone "ssh://jenkins@gerrit.opencord.org:29418/$OLD_REPO_DIR.git"
+
+# Clone the `helm-repo-tools` which contains scripts
+git clone ssh://jenkins@gerrit.opencord.org:29418/helm-repo-tools.git
+
+# Setup helm and external repos
+helm repo add stable https://charts.helm.sh/stable
+helm repo add rook-release https://charts.rook.io/release
+helm repo add cord https://charts.opencord.org
+helm repo add elastic  https://helm.elastic.co
+helm repo add kiwigrid https://kiwigrid.github.io
+
+# Update the repo
+./helm-repo-tools/helmrepo.sh
+
+# Tag and push to git the charts repo
+pushd "$OLD_REPO_DIR"
+
+  # only update if charts are changed
+  set +e
+  if git diff --exit-code index.yaml > /dev/null; then
+    echo "No changes to charts in patchset $GERRIT_CHANGE_NUMBER on project: $GERRIT_PROJECT, exiting."
+    exit 0
+  fi
+  set -e
+
+  # version tag is the current date in RFC3339 format
+  NEW_VERSION=$(date -u +%Y%m%dT%H%M%SZ)
+
+  # Add changes and create commit
+  git add -A
+  git commit -m "Changed by CORD Jenkins publish-helm-repo job: $BUILD_NUMBER, for project: $GERRIT_PROJECT, patchset: $GERRIT_CHANGE_NUMBER"
+
+  # create tag on new commit
+  git tag "$NEW_VERSION"
+
+  echo "Tags including new tag:"
+  git tag -n
+
+  # push new commit and tag back into repo
+  git push origin
+  git push origin "$NEW_VERSION"
+popd
+
+rsync -rvzh --delete-after --exclude=.git "$OLD_REPO_DIR/" "static.opennetworking.org:/srv/sites/$PUBLISH_URL/"
diff --git a/jjb/shell/repo-patch.sh b/jjb/shell/repo-patch.sh
new file mode 100644
index 0000000..4176df0
--- /dev/null
+++ b/jjb/shell/repo-patch.sh
@@ -0,0 +1,33 @@
+#!/usr/bin/env bash
+
+# SPDX-FileCopyrightText: 2018-2022 Open Networking Foundation
+# SPDX-License-Identifier: Apache-2.0
+
+# repo-patch.sh
+# downloads a patch to within an already checked out repo tree
+
+set -eu -o pipefail
+
+# verify that we have repo installed
+command -v repo >/dev/null 2>&1 || { echo "repo not found, please install it" >&2; exit 1; }
+
+echo "BASEDIR: ${BASEDIR}"
+echo "GERRIT_PROJECT: ${GERRIT_PROJECT}"
+echo "GERRIT_CHANGE_NUMBER: ${GERRIT_CHANGE_NUMBER}"
+echo "GERRIT_PATCHSET_NUMBER: ${GERRIT_PATCHSET_NUMBER}"
+
+pushd "${BASEDIR}"
+echo "Checking out a patchset with repo, using repo version:"
+repo version
+
+PROJECT_PATH=$(xmllint --xpath "string(//project[@name=\"${GERRIT_PROJECT}\"]/@path)" .repo/manifests/default.xml)
+
+if [ -z "$PROJECT_PATH" ]
+then
+  echo "WARNING: Project not in repo! Not downloading the changeset."
+else
+  echo "Project Path: $PROJECT_PATH"
+  repo download "${PROJECT_PATH}" "$GERRIT_CHANGE_NUMBER/${GERRIT_PATCHSET_NUMBER}"
+fi
+
+popd
diff --git a/jjb/shell/repopatch.sh b/jjb/shell/repopatch.sh
deleted file mode 100755
index 1ce911e..0000000
--- a/jjb/shell/repopatch.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env bash
-
-# Copyright 2018-present Open Networking Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# repopatch.sh
-# downloads a patch to within an already checked out repo tree
-
-set -eu -o pipefail
-
-# verify that we have repo installed
-command -v repo >/dev/null 2>&1 || { echo "repo not found, please install it" >&2; exit 1; }
-
-echo "DESTINATION_DIR: ${DESTINATION_DIR}"
-echo "GERRIT_PROJECT: ${GERRIT_PROJECT}"
-echo "GERRIT_CHANGE_NUMBER: ${GERRIT_CHANGE_NUMBER}"
-echo "GERRIT_PATCHSET_NUMBER: ${GERRIT_PATCHSET_NUMBER}"
-
-pushd "${DESTINATION_DIR}"
-echo "Checking out a patchset with repo, using repo version:"
-repo version
-
-PROJECT_PATH=$(xmllint --xpath "string(//project[@name=\"${GERRIT_PROJECT}\"]/@path)" .repo/manifests/default.xml)
-
-if [ -z "$PROJECT_PATH" ]
-then
-  echo "WARNING: Project not in repo! Not downloading the changeset."
-else
-  echo "Project Path: $PROJECT_PATH"
-  repo download "${PROJECT_PATH}" "$GERRIT_CHANGE_NUMBER/${GERRIT_PATCHSET_NUMBER}"
-fi
-
-popd
-
diff --git a/jjb/shell/tagcollisionreject.sh b/jjb/shell/tag-check.sh
similarity index 64%
rename from jjb/shell/tagcollisionreject.sh
rename to jjb/shell/tag-check.sh
index 01772c5..c5b4b13 100755
--- a/jjb/shell/tagcollisionreject.sh
+++ b/jjb/shell/tag-check.sh
@@ -1,21 +1,7 @@
 #!/usr/bin/env bash
 
-# Copyright 2018-present Open Networking Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# tagcollisionreject.sh
-# checks that there isn't an existing tag in the repo that has this tag
+# SPDX-FileCopyrightText: 2018-2022 Open Networking Foundation
+# SPDX-License-Identifier: Apache-2.0
 
 set -eu -o pipefail
 
@@ -24,12 +10,17 @@
 TAG_VERSION="" # version file that might have a leading v to work around go mod funkyness
 
 SEMVER_STRICT=${SEMVER_STRICT:-0} # require semver versions
+DOCKERPARENT_STRICT=${DOCKERPARENT_STRICT:-1} # require semver versions on parent images in dockerfiles
 
 releaseversion=0
 fail_validation=0
 
 # when not running under Jenkins, use current dir as workspace
 WORKSPACE=${WORKSPACE:-.}
+BASEDIR=${BASEDIR:-}
+
+# cd to the code checkout location
+cd "$WORKSPACE/$BASEDIR"
 
 # find the version string in the repo, read into NEW_VERSION
 # Add additional places NEW_VERSION could be found to this function
@@ -168,68 +159,74 @@
 
 # check if Dockerfiles have a released version as their parent
 function dockerfile_parentcheck {
-  while IFS= read -r -d '' dockerfile
-  do
-    echo "Checking dockerfile: '$dockerfile'"
-
-    # split on newlines
-    IFS=$'\n'
-    df_parents=($(grep "^FROM" "$dockerfile"))
-
-    # check all parents in the Dockerfile
-    for df_parent in "${df_parents[@]}"
+  if [ "$DOCKERPARENT_STRICT" -eq "0" ];
+  then
+    echo "DOCKERPARENT_STRICT is disabled - skipping parent checks"
+  else
+    while IFS= read -r -d '' dockerfile
     do
+      echo "Checking dockerfile: '$dockerfile'"
 
-      df_pattern="[FfRrOoMm] +(--platform=[^ ]+ +)?([^@: ]+)(:([^: ]+)|@sha[^ ]+)?"
-      if [[ "$df_parent" =~ $df_pattern ]]
-      then
+      # split on newlines
+      IFS=$'\n'
+      df_parents=($(grep "^FROM" "$dockerfile"))
 
-        p_image="${BASH_REMATCH[2]}"
-        p_sha=${BASH_REMATCH[3]}
-        p_version="${BASH_REMATCH[4]}"
+      # check all parents in the Dockerfile
+      for df_parent in "${df_parents[@]}"
+      do
 
-        echo "IMAGE: '${p_image}'"
-        echo "VERSION: '$p_version'"
-        echo "SHA: '$p_sha'"
+        df_pattern="[FfRrOoMm] +(--platform=[^ ]+ +)?([^@: ]+)(:([^: ]+)|@sha[^ ]+)?"
+        if [[ "$df_parent" =~ $df_pattern ]]
+        then
 
-        if [[ "${p_image}" == "scratch" ]]
-        then
-          echo "  OK: Using the versionless 'scratch' parent: '$df_parent'"
-        elif [[ "${p_image}:${p_version}" == "gcr.io/distroless/static:nonroot" ]]
-        then
-          echo "  OK: Using static distroless image with nonroot: '${p_image}:${p_version}'"
-        elif [[ "${p_version}" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]
-        then
-          echo "  OK: Parent '$p_image:$p_version' is a released SemVer version"
-        elif [[ "${p_sha}" =~ ^@sha256:[0-9a-f]{64}.*$ ]]
-        then
-          # allow sha256 hashes to be used as version specifiers
-          echo "  OK: Parent '$p_image$p_sha' is using a specific sha256 hash as a version"
-        elif [[ "${p_version}" =~ ^.*([0-9]+)\.([0-9]+).*$ ]]
-        then
-          # handle non-SemVer versions that have a Major.Minor version specifier in the name
-          #  'ubuntu:16.04'
-          #  'postgres:10.3-alpine'
-          #  'openjdk:8-jre-alpine3.8'
-          echo "  OK: Parent '$p_image:$p_version' is using a non-SemVer, but sufficient, version"
-        elif [[ -z "${p_version}" ]]
-        then
-          echo "  ERROR: Parent '$p_image' is NOT using a specific version"
-          fail_validation=1
+          p_image="${BASH_REMATCH[2]}"
+          p_sha=${BASH_REMATCH[3]}
+          p_version="${BASH_REMATCH[4]}"
+
+          echo "IMAGE: '${p_image}'"
+          echo "VERSION: '$p_version'"
+          echo "SHA: '$p_sha'"
+
+          if [[ "${p_image}" == "scratch" ]]
+          then
+            echo "  OK: Using the versionless 'scratch' parent: '$df_parent'"
+          elif [[ "${p_image}:${p_version}" == "gcr.io/distroless/static:nonroot" ]]
+          then
+            echo "  OK: Using static distroless image with nonroot: '${p_image}:${p_version}'"
+          elif [[ "${p_version}" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]
+          then
+            echo "  OK: Parent '$p_image:$p_version' is a released SemVer version"
+          elif [[ "${p_sha}" =~ ^@sha256:[0-9a-f]{64}.*$ ]]
+          then
+            # allow sha256 hashes to be used as version specifiers
+            echo "  OK: Parent '$p_image$p_sha' is using a specific sha256 hash as a version"
+          elif [[ "${p_version}" =~ ^.*([0-9]+)\.([0-9]+).*$ ]]
+          then
+            # handle non-SemVer versions that have a Major.Minor version specifier in the name
+            #  'ubuntu:16.04'
+            #  'postgres:10.3-alpine'
+            #  'openjdk:8-jre-alpine3.8'
+            echo "  OK: Parent '$p_image:$p_version' is using a non-SemVer, but sufficient, version"
+          elif [[ -z "${p_version}" ]]
+          then
+            echo "  ERROR: Parent '$p_image' is NOT using a specific version"
+            fail_validation=1
+          else
+            echo "  ERROR: Parent '$p_image:$p_version' is NOT using a specific version"
+            fail_validation=1
+          fi
+
         else
-          echo "  ERROR: Parent '$p_image:$p_version' is NOT using a specific version"
-          fail_validation=1
+          echo "  ERROR: Couldn't find a parent image in $df_parent"
         fi
 
-      else
-        echo "  ERROR: Couldn't find a parent image in $df_parent"
-      fi
+      done
 
-    done
-
-  done  < <( find "${WORKSPACE}" -name 'Dockerfile*' ! -path "*/vendor/*" ! -name "*dockerignore" -print0 )
+    done  < <( find "${WORKSPACE}" -name 'Dockerfile*' ! -path "*/vendor/*" ! -name "*dockerignore" -print0 )
+  fi
 }
 
+# Start of actual code
 echo "Checking git repo with remotes:"
 git remote -v
 
diff --git a/jjb/shell/version-tag.sh b/jjb/shell/version-tag.sh
new file mode 100755
index 0000000..dcfa756
--- /dev/null
+++ b/jjb/shell/version-tag.sh
@@ -0,0 +1,199 @@
+#!/usr/bin/env bash
+
+# Copyright 2018-2022 Networking Foundation
+#
+# SPDX-License-Identifier: Apache-2.0
+
+# version-tag.sh
+# Tags a git commit with the SemVer version discovered within the commit,
+# if the tag doesn't already exist. Ignore non-SemVer commits.
+
+set -eu -o pipefail
+
+VERSIONFILE="" # file path to file containing version number
+NEW_VERSION="" # version number found in $VERSIONFILE
+TAG_VERSION="" # version file that might have a leading v to work around go mod funkyness
+
+SEMVER_STRICT=${SEMVER_STRICT:-0} # require semver versions
+DOCKERPARENT_STRICT=${DOCKERPARENT_STRICT:-1} # require semver versions on parent images in dockerfiles
+
+releaseversion=0
+fail_validation=0
+
+# when not running under Jenkins, use current dir as workspace
+WORKSPACE=${WORKSPACE:-.}
+
+# find the version string in the repo, read into NEW_VERSION
+# Add additional places NEW_VERSION could be found to this function
+function read_version {
+  if [ -f "VERSION" ]
+  then
+    NEW_VERSION=$(head -n1 "VERSION")
+    VERSIONFILE="VERSION"
+
+    # If this is a golang project, use funky v-prefixed versions
+    if [ -f "Gopkg.toml" ] || [ -f "go.mod" ]
+    then
+      echo "go-based project found, using v-prefixed version for git tags: v${NEW_VERSION}"
+      TAG_VERSION=v${NEW_VERSION}
+    else
+      TAG_VERSION=${NEW_VERSION}
+    fi
+
+  elif [ -f "package.json" ]
+  then
+    NEW_VERSION=$(python -c 'import json,sys;obj=json.load(sys.stdin); print obj["version"]' < package.json)
+    TAG_VERSION=$NEW_VERSION
+    VERSIONFILE="package.json"
+  elif [ -f "pom.xml" ]
+  then
+    NEW_VERSION=$(xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' pom.xml)
+    TAG_VERSION=$NEW_VERSION
+    VERSIONFILE="pom.xml"
+  else
+    echo "ERROR: No versioning file found!"
+    exit 1
+  fi
+}
+
+# check if the version is a released version
+function check_if_releaseversion {
+  if [[ "$NEW_VERSION" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]
+  then
+    echo "Version string '$NEW_VERSION' in '$VERSIONFILE' is a SemVer released version!"
+    releaseversion=1
+  else
+    if [ "$SEMVER_STRICT" -eq "1" ]
+    then
+      echo "Version string '$NEW_VERSION' in '$VERSIONFILE' is not a SemVer released version, SEMVER_STRICT enabled, failing!"
+      fail_validation=1
+    else
+      echo "Version string '$NEW_VERSION' in '$VERSIONFILE' is not a SemVer released version, skipping."
+    fi
+  fi
+}
+
+# check if the version is already a tag in git
+function is_git_tag_duplicated {
+  for existing_tag in $(git tag)
+  do
+    if [ "$TAG_VERSION" = "$existing_tag" ]
+    then
+      echo "ERROR: Duplicate tag: $existing_tag"
+      exit 2
+    fi
+  done
+}
+
+# check if Dockerfiles have a released version as their parent
+function dockerfile_parentcheck {
+  if [ "$DOCKERPARENT_STRICT" -eq "0" ];
+  then
+    echo "DOCKERPARENT_STRICT is disabled - skipping parent checks"
+  else
+    while IFS= read -r -d '' dockerfile
+    do
+      echo "Checking dockerfile: '$dockerfile'"
+
+      # split on newlines
+      IFS=$'\n'
+      df_parents=($(grep "^FROM" "$dockerfile"))
+
+      # check all parents in the Dockerfile
+      for df_parent in "${df_parents[@]}"
+      do
+
+        df_pattern="[FfRrOoMm] +(--platform=[^ ]+ +)?([^@: ]+)(:([^: ]+)|@sha[^ ]+)?"
+        if [[ "$df_parent" =~ $df_pattern ]]
+        then
+
+          p_image="${BASH_REMATCH[2]}"
+          p_sha=${BASH_REMATCH[3]}
+          p_version="${BASH_REMATCH[4]}"
+
+          echo "IMAGE: '${p_image}'"
+          echo "VERSION: '$p_version'"
+          echo "SHA: '$p_sha'"
+
+          if [[ "${p_image}" == "scratch" ]]
+          then
+            echo "  OK: Using the versionless 'scratch' parent: '$df_parent'"
+          elif [[ "${p_image}:${p_version}" == "gcr.io/distroless/static:nonroot" ]]
+          then
+            echo "  OK: Using static distroless image with nonroot: '${p_image}:${p_version}'"
+          elif [[ "${p_version}" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]
+          then
+            echo "  OK: Parent '$p_image:$p_version' is a released SemVer version"
+          elif [[ "${p_sha}" =~ ^@sha256:[0-9a-f]{64}.*$ ]]
+          then
+            # allow sha256 hashes to be used as version specifiers
+            echo "  OK: Parent '$p_image$p_sha' is using a specific sha256 hash as a version"
+          elif [[ "${p_version}" =~ ^.*([0-9]+)\.([0-9]+).*$ ]]
+          then
+            # handle non-SemVer versions that have a Major.Minor version specifier in the name
+            #  'ubuntu:16.04'
+            #  'postgres:10.3-alpine'
+            #  'openjdk:8-jre-alpine3.8'
+            echo "  OK: Parent '$p_image:$p_version' is using a non-SemVer, but sufficient, version"
+          elif [[ -z "${p_version}" ]]
+          then
+            echo "  ERROR: Parent '$p_image' is NOT using a specific version"
+            fail_validation=1
+          else
+            echo "  ERROR: Parent '$p_image:$p_version' is NOT using a specific version"
+            fail_validation=1
+          fi
+
+        else
+          echo "  ERROR: Couldn't find a parent image in $df_parent"
+        fi
+
+      done
+
+    done  < <( find "${WORKSPACE}" -name 'Dockerfile*' ! -path "*/vendor/*" ! -name "*dockerignore" -print0 )
+  fi
+}
+
+# create a git tag
+function create_git_tag {
+  echo "Creating git tag: $TAG_VERSION"
+  git checkout "$GERRIT_PATCHSET_REVISION"
+
+  git config --global user.email "do-not-reply@opennetworking.org"
+  git config --global user.name "Jenkins"
+
+  git tag -a "$TAG_VERSION" -m "Tagged by CORD Jenkins version-tag job: $BUILD_NUMBER, for Gerrit patchset: $GERRIT_CHANGE_NUMBER"
+
+  echo "Tags including new tag:"
+  git tag -n
+
+  git push origin "$TAG_VERSION"
+}
+
+echo "Checking git repo with remotes:"
+git remote -v
+
+echo "Branches:"
+git branch -v
+
+echo "Existing git tags:"
+git tag -n
+
+read_version
+check_if_releaseversion
+
+# perform checks if a released version
+if [ "$releaseversion" -eq "1" ]
+then
+  is_git_tag_duplicated
+  dockerfile_parentcheck
+
+  if [ "$fail_validation" -eq "0" ]
+  then
+    create_git_tag
+  else
+    echo "ERROR: commit merged but failed validation, not tagging!"
+  fi
+fi
+
+exit $fail_validation
diff --git a/jjb/shell/versiontag.sh b/jjb/shell/versiontag.sh
deleted file mode 100755
index 8c14ddd..0000000
--- a/jjb/shell/versiontag.sh
+++ /dev/null
@@ -1,204 +0,0 @@
-#!/usr/bin/env bash
-
-# Copyright 2018-present Open Networking Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# versiontag.sh
-# Tags a git commit with the SemVer version discovered within the commit,
-# if the tag doesn't already exist. Ignore non-SemVer commits.
-
-set -eu -o pipefail
-
-VERSIONFILE="" # file path to file containing version number
-NEW_VERSION="" # version number found in $VERSIONFILE
-TAG_VERSION="" # version file that might have a leading v to work around go mod funkyness
-
-SEMVER_STRICT=${SEMVER_STRICT:-0} # require semver versions
-
-releaseversion=0
-fail_validation=0
-
-# when not running under Jenkins, use current dir as workspace
-WORKSPACE=${WORKSPACE:-.}
-
-# find the version string in the repo, read into NEW_VERSION
-# Add additional places NEW_VERSION could be found to this function
-function read_version {
-  if [ -f "VERSION" ]
-  then
-    NEW_VERSION=$(head -n1 "VERSION")
-    VERSIONFILE="VERSION"
-
-    # If this is a golang project, use funky v-prefixed versions
-    if [ -f "Gopkg.toml" ] || [ -f "go.mod" ]
-    then
-      echo "go-based project found, using v-prefixed version for git tags: v${NEW_VERSION}"
-      TAG_VERSION=v${NEW_VERSION}
-    else
-      TAG_VERSION=${NEW_VERSION}
-    fi
-
-  elif [ -f "package.json" ]
-  then
-    NEW_VERSION=$(python -c 'import json,sys;obj=json.load(sys.stdin); print obj["version"]' < package.json)
-    TAG_VERSION=$NEW_VERSION
-    VERSIONFILE="package.json"
-  elif [ -f "pom.xml" ]
-  then
-    NEW_VERSION=$(xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' pom.xml)
-    TAG_VERSION=$NEW_VERSION
-    VERSIONFILE="pom.xml"
-  else
-    echo "ERROR: No versioning file found!"
-    exit 1
-  fi
-}
-
-# check if the version is a released version
-function check_if_releaseversion {
-  if [[ "$NEW_VERSION" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]
-  then
-    echo "Version string '$NEW_VERSION' in '$VERSIONFILE' is a SemVer released version!"
-    releaseversion=1
-  else
-    if [ "$SEMVER_STRICT" -eq "1" ]
-    then
-      echo "Version string '$NEW_VERSION' in '$VERSIONFILE' is not a SemVer released version, SEMVER_STRICT enabled, failing!"
-      fail_validation=1
-    else
-      echo "Version string '$NEW_VERSION' in '$VERSIONFILE' is not a SemVer released version, skipping."
-    fi
-  fi
-}
-
-# check if the version is already a tag in git
-function is_git_tag_duplicated {
-  for existing_tag in $(git tag)
-  do
-    if [ "$TAG_VERSION" = "$existing_tag" ]
-    then
-      echo "ERROR: Duplicate tag: $existing_tag"
-      exit 2
-    fi
-  done
-}
-
-# check if Dockerfiles have a released version as their parent
-function dockerfile_parentcheck {
-  while IFS= read -r -d '' dockerfile
-  do
-    echo "Checking dockerfile: '$dockerfile'"
-
-    # split on newlines
-    IFS=$'\n'
-    df_parents=($(grep "^FROM" "$dockerfile"))
-
-    # check all parents in the Dockerfile
-    for df_parent in "${df_parents[@]}"
-    do
-
-      df_pattern="[FfRrOoMm] +(--platform=[^ ]+ +)?([^@: ]+)(:([^: ]+)|@sha[^ ]+)?"
-      if [[ "$df_parent" =~ $df_pattern ]]
-      then
-
-        p_image="${BASH_REMATCH[2]}"
-        p_sha=${BASH_REMATCH[3]}
-        p_version="${BASH_REMATCH[4]}"
-
-        echo "IMAGE: '${p_image}'"
-        echo "VERSION: '$p_version'"
-        echo "SHA: '$p_sha'"
-
-        if [[ "${p_image}" == "scratch" ]]
-        then
-          echo "  OK: Using the versionless 'scratch' parent: '$df_parent'"
-        elif [[ "${p_image}:${p_version}" == "gcr.io/distroless/static:nonroot" ]]
-        then
-          echo "  OK: Using static distroless image with nonroot: '${p_image}:${p_version}'"
-        elif [[ "${p_version}" =~ ^([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]
-        then
-          echo "  OK: Parent '$p_image:$p_version' is a released SemVer version"
-        elif [[ "${p_sha}" =~ ^@sha256:[0-9a-f]{64}.*$ ]]
-        then
-          # allow sha256 hashes to be used as version specifiers
-          echo "  OK: Parent '$p_image$p_sha' is using a specific sha256 hash as a version"
-        elif [[ "${p_version}" =~ ^.*([0-9]+)\.([0-9]+).*$ ]]
-        then
-          # handle non-SemVer versions that have a Major.Minor version specifier in the name
-          #  'ubuntu:16.04'
-          #  'postgres:10.3-alpine'
-          #  'openjdk:8-jre-alpine3.8'
-          echo "  OK: Parent '$p_image:$p_version' is using a non-SemVer, but sufficient, version"
-        elif [[ -z "${p_version}" ]]
-        then
-          echo "  ERROR: Parent '$p_image' is NOT using a specific version"
-          fail_validation=1
-        else
-          echo "  ERROR: Parent '$p_image:$p_version' is NOT using a specific version"
-          fail_validation=1
-        fi
-
-      else
-        echo "  ERROR: Couldn't find a parent image in $df_parent"
-      fi
-
-    done
-
-  done  < <( find "${WORKSPACE}" -name 'Dockerfile*' ! -path "*/vendor/*" ! -name "*dockerignore" -print0 )
-}
-
-
-# create a git tag
-function create_git_tag {
-  echo "Creating git tag: $TAG_VERSION"
-  git checkout "$GERRIT_PATCHSET_REVISION"
-
-  git config --global user.email "do-not-reply@opennetworking.org"
-  git config --global user.name "Jenkins"
-
-  git tag -a "$TAG_VERSION" -m "Tagged by CORD Jenkins version-tag job: $BUILD_NUMBER, for Gerrit patchset: $GERRIT_CHANGE_NUMBER"
-
-  echo "Tags including new tag:"
-  git tag -n
-
-  git push origin "$TAG_VERSION"
-}
-
-echo "Checking git repo with remotes:"
-git remote -v
-
-echo "Branches:"
-git branch -v
-
-echo "Existing git tags:"
-git tag -n
-
-read_version
-check_if_releaseversion
-
-# perform checks if a released version
-if [ "$releaseversion" -eq "1" ]
-then
-  is_git_tag_duplicated
-  dockerfile_parentcheck
-
-  if [ "$fail_validation" -eq "0" ]
-  then
-    create_git_tag
-  else
-    echo "ERROR: commit merged but failed validation, not tagging!"
-  fi
-fi
-
-exit $fail_validation
diff --git a/jjb/templates/helm-lint.yaml b/jjb/templates/helm-lint.yaml
new file mode 100644
index 0000000..215c790
--- /dev/null
+++ b/jjb/templates/helm-lint.yaml
@@ -0,0 +1,49 @@
+---
+# SPDX-FileCopyrightText: 2020-2022 Open Networking Foundation <info@opennetworking.org>
+# SPDX-License-Identifier: Apache-2.0
+
+# check helm charts with `helm lint --strict` and that charts version is
+# updated when the contents of a chart is modified.
+
+- job-template:
+    id: helm-lint
+    name: 'helm-lint_{project}'
+    description: |
+      Created by helm-lint job-template from ci-management/jjb/templates/helm-lint.yaml
+
+    triggers:
+      - onf-infra-gerrit-trigger-patchset:
+          gerrit-server-name: '{gerrit-server-name}'
+          project-regexp: '{project}'
+          branch-regexp: '{all-branches-regexp}'
+          file-include-regexp: '{all-files-regexp}'
+          dependency-jobs: ''
+
+    properties:
+      - onf-infra-properties:
+          build-days-to-keep: '{build-days-to-keep}'
+          artifact-num-to-keep: '{artifact-num-to-keep}'
+
+    wrappers:
+      - lf-infra-wrappers:
+          build-timeout: '{build-timeout}'
+          jenkins-ssh-credential: '{jenkins-ssh-credential}'
+
+    scm:
+      - onf-infra-gerrit-scm:
+          git-url: '{gerrit-server-ssh-url}/$GERRIT_PROJECT'
+          refspec: '$GERRIT_REFSPEC'
+          branch: '$GERRIT_BRANCH'
+          submodule-disable: '{submodule-disable}'
+          submodule-recursive: 'false'
+          submodule-timeout: '{submodule-timeout}'
+          choosing-strategy: gerrit
+          jenkins-ssh-credential: '{jenkins-ssh-credential}'
+          basedir: ''
+
+    node: 'ubuntu18.04-basebuild-2c-4g'
+    project-type: freestyle
+    concurrent: true
+
+    builders:
+      - shell: !include-raw-escape: jjb/shell/helm-lint.sh
diff --git a/jjb/templates/publish-helm-repo.yaml b/jjb/templates/publish-helm-repo.yaml
new file mode 100644
index 0000000..226a0d3
--- /dev/null
+++ b/jjb/templates/publish-helm-repo.yaml
@@ -0,0 +1,49 @@
+---
+# SPDX-FileCopyrightText: 2020 Open Networking Foundation <info@opennetworking.org>
+# SPDX-License-Identifier: LicenseRef-ONF-Member-Only-1.0
+
+- job-template:
+    id: publish-helm-repo
+    name: 'publish-helm-repo_{project}'
+    description: |
+      Created by publish-helm-repo job-template from
+      ci-management/jjb/templates/publish-helm-repo.yaml
+    disabled: '{disable-job}'
+
+    triggers:
+      - onf-infra-gerrit-trigger-merge:
+          gerrit-server-name: '{gerrit-server-name}'
+          project-regexp: '{project}'
+          branch-regexp: '{all-branches-regexp}'
+          file-include-regexp: '{all-files-regexp}'
+          dependency-jobs: ''
+
+    properties:
+      - onf-infra-properties:
+          build-days-to-keep: '{build-days-to-keep}'
+          artifact-num-to-keep: '{artifact-num-to-keep}'
+
+    wrappers:
+      - onf-infra-rsync-wrappers:
+          build-timeout: '{build-timeout}'
+          ssh_credential_list:
+            - 'new-cord-jenkins-ssh'
+
+    scm:
+      - onf-infra-gerrit-scm:
+          git-url: '{gerrit-server-ssh-url}/$GERRIT_PROJECT'
+          refspec: ''
+          branch: '$GERRIT_BRANCH'
+          submodule-disable: '{submodule-disable}'
+          submodule-recursive: 'false'
+          submodule-timeout: '{submodule-timeout}'
+          choosing-strategy: gerrit
+          jenkins-ssh-credential: '{jenkins-ssh-credential}'
+          basedir: ''
+
+    node: 'ubuntu18.04-basebuild-2c-4g'
+    project-type: freestyle
+    concurrent: false
+
+    builders:
+      - shell: !include-raw-escape: jjb/shell/publish-helm-repo.sh
diff --git a/jjb/templates/sync-dir.yaml b/jjb/templates/sync-dir.yaml
index 5f273fc..699d0c1 100644
--- a/jjb/templates/sync-dir.yaml
+++ b/jjb/templates/sync-dir.yaml
@@ -1,4 +1,7 @@
 ---
+# SPDX-FileCopyrightText: 2020 Open Networking Foundation <info@opennetworking.org>
+# SPDX-License-Identifier: Apache-2.0
+
 # sync built directory to a remote server
 
 - job-template:
@@ -17,7 +20,8 @@
       - string:
           name: BUILD_OUTPUT_PATH
           default: '{build-output-path}'
-          description: 'Path of files where build output is created by build command, relative to code checkout location'
+          description: >-
+            Path of files where build output is created by build command, relative to code checkout location
 
       - string:
           name: SYNC_TARGET_SERVER
@@ -30,7 +34,7 @@
           description: 'Directory path on target server where the files will be synced'
 
     triggers:
-      - cord-infra-gerrit-trigger-merge:
+      - onf-infra-gerrit-trigger-merge:
           gerrit-server-name: '{gerrit-server-name}'
           project-regexp: '^{project}$'
           branch-regexp: '{branch-regexp}'
@@ -38,30 +42,32 @@
           dependency-jobs: '{dependency-jobs}'
 
     properties:
-      - cord-infra-properties:
+      - onf-infra-properties:
           build-days-to-keep: '{build-days-to-keep}'
           artifact-num-to-keep: '{artifact-num-to-keep}'
 
     wrappers:
       - onf-infra-rsync-wrappers:
           build-timeout: '{build-timeout}'
-          jenkins-ssh-credential: '{gerrit-ssh-credential}'
+          ssh_credential_list:
+            - 'new-cord-jenkins-ssh'
 
     scm:
-      - lf-infra-gerrit-scm:
-          git-url: '$GIT_URL/$GERRIT_PROJECT'
+      - onf-infra-gerrit-scm:
+          git-url: '{gerrit-server-ssh-url}/$GERRIT_PROJECT'
           refspec: '$GERRIT_REFSPEC'
           branch: '$GERRIT_BRANCH'
           submodule-disable: '{submodule-disable}'
           submodule-recursive: 'false'
           submodule-timeout: '{submodule-timeout}'
           choosing-strategy: gerrit
-          jenkins-ssh-credential: '{gerrit-ssh-credential}'
+          jenkins-ssh-credential: '{jenkins-ssh-credential}'
+          basedir: ''
 
     node: '{build-node}'
     project-type: freestyle
     concurrent: true
 
     builders:
-      - shell: !include-raw-escape: ../shell/sync-dir.sh
+      - shell: !include-raw-escape: jjb/shell/sync-dir.sh
 
diff --git a/jjb/templates/versioning.yaml b/jjb/templates/versioning.yaml
new file mode 100644
index 0000000..82cfa20
--- /dev/null
+++ b/jjb/templates/versioning.yaml
@@ -0,0 +1,177 @@
+---
+# SPDX-FileCopyrightText: 2018-2022 Open Networking Foundation <info@opennetworking.org>
+# SPDX-License-Identifier: Apache-2.0
+
+# versioning jobs for tagging/releasing software
+
+# Versioning conventions:
+#
+# 1. There is a 1:1 relationship between SemVer _release_ versions described
+#    in the commit and the git tag applied to that commit by Jenkins.
+#
+# 2. Non-release versions (ex: 1.0.1-dev3, etc.) can exist in multiple
+#    commits, and don't trigger creation of git tags.
+#
+# 3. Git history is public, and therefore shouldn't be rewritten to abandon
+#    already merged commits
+#
+# 4. Reverting a commit leaves it in history, so if a broken version is
+#    released, the correct action is to make a new fixed version, not try to
+#    fix the released version
+#
+# For reference: https://jira.opencord.org/browse/CORD-3117
+
+- job-template:
+    id: tag-check
+    name: "tag-check_{project}"
+    description: |
+      Created by {id} job-template from ci-management/jjb/templates/versioning.yaml
+      Checks for changes to version files, and that they don't duplicate tags
+      already in the git repo.
+    disabled: '{disable-job}'
+
+    triggers:
+      - onf-infra-gerrit-trigger-patchset:
+          gerrit-server-name: '{gerrit-server-name}'
+          project-regexp: '{project-regexp}'
+          branch-regexp: '{branch-regexp}'
+          file-include-regexp: '{all-files-regexp}'
+          dependency-jobs: '{dependency-jobs}'
+
+    properties:
+      - onf-infra-properties:
+          build-days-to-keep: '{build-days-to-keep}'
+          artifact-num-to-keep: '{artifact-num-to-keep}'
+
+    wrappers:
+      - lf-infra-wrappers:
+          build-timeout: '{build-timeout}'
+          jenkins-ssh-credential: '{gerrit-ssh-credential}'
+
+    scm:
+      - onf-infra-gerrit-scm:
+          git-url: '{gerrit-server-ssh-url}/$GERRIT_PROJECT'
+          refspec: '$GERRIT_REFSPEC'
+          branch: '$GERRIT_BRANCH'
+          submodule-disable: '{submodule-disable}'
+          submodule-recursive: '{submodule-recursive}'
+          submodule-timeout: '{submodule-timeout}'
+          choosing-strategy: gerrit
+          jenkins-ssh-credential: '{gerrit-ssh-credential}'
+          basedir: '$GERRIT_PROJECT'
+
+    node: '{build-node}'
+    project-type: freestyle
+    concurrent: true
+
+    builders:
+      - inject:
+          properties-content: |
+            SEMVER_STRICT={semver-strict}
+            BASEDIR=$GERRIT_PROJECT
+      - shell: !include-raw-escape: jjb/shell/tag-check.sh
+
+- job-template:
+    id: version-tag
+    name: "version-tag_{project}"
+    disabled: '{disable-job}'
+    description: |
+      Created by {id} job-template from ci-management/jjb/templates/versioning.yaml
+      When a patch is merged, check if it contains a SemVer released version
+      file and if so tags thxe commit in git with that same version.
+
+    triggers:
+      - onf-infra-gerrit-trigger-merge:
+          gerrit-server-name: '{gerrit-server-name}'
+          project-regexp: '{project-regexp}'
+          branch-regexp: '{all-branches-regexp}'
+          file-include-regexp: '{all-files-regexp}'
+          dependency-jobs: '{dependency-jobs}'
+
+    properties:
+      - onf-infra-properties:
+          build-days-to-keep: '{build-days-to-keep}'
+          artifact-num-to-keep: '{artifact-num-to-keep}'
+
+    wrappers:
+      - lf-infra-wrappers:
+          build-timeout: '{build-timeout}'
+          jenkins-ssh-credential: '{jenkins-ssh-credential}'
+
+    scm:
+      - onf-infra-gerrit-scm:
+          git-url: '{gerrit-server-ssh-url}/$GERRIT_PROJECT'
+          refspec: '$GERRIT_REFSPEC'
+          branch: '$GERRIT_BRANCH'
+          submodule-disable: '{submodule-disable}'
+          submodule-recursive: 'false'
+          submodule-timeout: '{submodule-timeout}'
+          choosing-strategy: gerrit
+          jenkins-ssh-credential: '{jenkins-ssh-credential}'
+          basedir: ''
+
+    node: '{build-node}'
+    project-type: freestyle
+    concurrent: true
+
+    builders:
+      - inject:
+          properties-content: |
+            SEMVER_STRICT={semver-strict}
+            BASEDIR=$GERRIT_PROJECT
+      - shell: !include-raw-escape: jjb/shell/version-tag.sh
+
+- job-template:
+    id: version-tag-github
+    name: "version-tag_{project}"
+    disabled: '{disable-job}'
+    description: |
+      Created by {id} job-template from ci-management/jjb/templates/versioning.yaml
+      When a patch is merged, check if it contains a SemVer released version
+      file and if so tags thxe commit in git with that same version.
+
+    properties:
+      - onf-infra-properties:
+          build-days-to-keep: '{build-days-to-keep}'
+          artifact-num-to-keep: '{artifact-num-to-keep}'
+      - github:
+          url: 'https://github.com/{github-organization}/{project}'
+
+    wrappers:
+      - lf-infra-wrappers:
+          build-timeout: '{build-timeout}'
+          jenkins-ssh-credential: '{jenkins-ssh-credential}'
+
+    parameters:
+      - onf-infra-github-pr-merge-parameters:
+          repo-name: '{project}'
+          repo-url: '{github-ssh-url}{github-organization}/{project}.git'
+          branch: '{branch}'
+          commitHash: '{branch}'
+
+    triggers:
+      - onf-infra-github-pr-trigger:
+          github-token: '{github-token}'
+          status-context: 'Aether Jenkins - Makefile test'
+          trigger-phrase: '.*test\W+(make|makefile|version|versioning).*|{trigger-phrase}'
+          white-list-target-branches: '{white-list-target-branches}'
+          github_pr_org_list: '{obj:github_pr_org_list}'
+
+    scm:
+      - onf-infra-github-scm:
+          url: '{github-ssh-url}{github-organization}/{project}'
+          refspec: "{github-refspec-branch}"
+          branch: "$commitHash"
+          submodule-disable: "{submodule-disable}"
+          submodule-recursive: "{submodule-recursive}"
+          submodule-timeout: "{submodule-timeout}"
+          choosing-strategy: default
+          jenkins-ssh-credential: "{github-ssh-credential}"
+          basedir: ''
+
+    node: '{build-node}'
+    project-type: freestyle
+    concurrent: true
+
+    builders:
+      - shell: !include-raw-escape: jjb/shell/version-tag.sh
diff --git a/jjb/verify/helm-charts.yaml b/jjb/verify/helm-charts.yaml
deleted file mode 100644
index dc6d904..0000000
--- a/jjb/verify/helm-charts.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
----
-# verification jobs for 'helm-charts' repo
-
-- project:
-    name: helm-charts
-    project: '{name}'
-
-    jobs:
-      - 'verify-helm-charts-jobs':
-          branch-regexp: '{modern-branches-regexp}'
-
-- job-group:
-    name: 'verify-helm-charts-jobs'
-    jobs:
-      - 'verify-licensed'
-      - 'tag-collision-reject':
-          dependency-jobs: 'verify_helm-charts_licensed'
-      - 'verify-helm-lint':
-          dependency-jobs: 'verify_helm-charts_tag-collision'
-
diff --git a/jjb/versioning.yaml b/jjb/versioning.yaml
deleted file mode 100644
index b4103c2..0000000
--- a/jjb/versioning.yaml
+++ /dev/null
@@ -1,123 +0,0 @@
----
-# CORD versioning jobs for tagging/releasing software
-
-# CORD versioning conventions:
-#
-# 1. There is a 1:1 relationship between SemVer _release_ versions described
-#    in the commit and the git tag applied to that commit by Jenkins.
-#
-# 2. Non-release versions (ex: 1.0.1-dev3, etc.) can exist in multiple
-#    commits, and don't trigger creation of git tags.
-#
-# 3. Git history is public, and therefore shouldn't be rewritten to abandon
-#    already merged commits
-#
-# 4. Reverting a commit leaves it in history, so if a broken version is
-#    released, the correct action is to make a new fixed version, not try to
-#    fix the released version
-#
-# See also: https://jira.opencord.org/browse/CORD-3117
-
-- project:
-    name: versioning-jobs
-
-    branch-regexp: '{all-branches-regexp}'
-    project-regexp: '{version-tag-projects-regexp}'
-
-    jobs:
-      - 'version-tag'
-
-- job-template:
-    id: tag-collision-reject
-    name: "verify_{project}_tag-collision"
-    description: |
-      Created by {id} job-template from ci-management/jjb/versioning.yaml
-      Checks for changes to version files, and that they don't duplicate tags
-      already in the git repo.
-
-    triggers:
-      - cord-infra-gerrit-trigger-patchset:
-          gerrit-server-name: '{gerrit-server-name}'
-          project-regexp: '^{project}$'
-          branch-regexp: '{branch-regexp}'
-          file-include-regexp: '{all-files-regexp}'
-          dependency-jobs: '{dependency-jobs}'
-
-    properties:
-      - cord-infra-properties:
-          build-days-to-keep: '{build-days-to-keep}'
-          artifact-num-to-keep: '{artifact-num-to-keep}'
-
-    wrappers:
-      - lf-infra-wrappers:
-          build-timeout: '{build-timeout}'
-          jenkins-ssh-credential: '{gerrit-ssh-credential}'
-
-    scm:
-      - lf-infra-gerrit-scm:
-          git-url: '$GIT_URL/$GERRIT_PROJECT'
-          refspec: '$GERRIT_REFSPEC'
-          branch: '$GERRIT_BRANCH'
-          submodule-disable: '{submodule-disable}'
-          submodule-recursive: 'false'
-          submodule-timeout: '{submodule-timeout}'
-          choosing-strategy: gerrit
-          jenkins-ssh-credential: '{gerrit-ssh-credential}'
-
-    node: '{build-node}'
-    project-type: freestyle
-    concurrent: true
-
-    builders:
-      - inject:
-          properties-content:
-            SEMVER_STRICT={semver-strict}
-      - shell: !include-raw-escape: shell/tagcollisionreject.sh
-
-
-- job-template:
-    id: version-tag
-    name: "version-tag"
-    description: |
-      Created by {id} job-template from ci-management/jjb/versioning.yaml
-      When a patch is merged, check if it contains a SemVer released version
-      file and if so tags the commit in git with that same version.
-
-    triggers:
-      - cord-infra-gerrit-trigger-merge:
-          gerrit-server-name: '{gerrit-server-name}'
-          project-regexp: '{project-regexp}'
-          branch-regexp: '{branch-regexp}'
-          file-include-regexp: '{all-files-regexp}'
-          dependency-jobs: '{dependency-jobs}'
-
-    properties:
-      - cord-infra-properties:
-          build-days-to-keep: '{build-days-to-keep}'
-          artifact-num-to-keep: '{artifact-num-to-keep}'
-
-    wrappers:
-      - lf-infra-wrappers:
-          build-timeout: '{build-timeout}'
-          jenkins-ssh-credential: '{gerrit-ssh-credential}'
-
-    scm:
-      - lf-infra-gerrit-scm:
-          git-url: '$GIT_URL/$GERRIT_PROJECT'
-          refspec: '$GERRIT_REFSPEC'
-          branch: '$GERRIT_BRANCH'
-          submodule-disable: '{submodule-disable}'
-          submodule-recursive: 'false'
-          submodule-timeout: '{submodule-timeout}'
-          choosing-strategy: gerrit
-          jenkins-ssh-credential: '{gerrit-ssh-credential}'
-
-    node: '{build-node}'
-    project-type: freestyle
-    concurrent: true
-
-    builders:
-      - inject:
-          properties-content:
-            SEMVER_STRICT={semver-strict}
-      - shell: !include-raw-escape: shell/versiontag.sh
diff --git a/jjb/xos-auth.yaml b/jjb/xos-auth.yaml
index 63a81a1..bd4c92c 100644
--- a/jjb/xos-auth.yaml
+++ b/jjb/xos-auth.yaml
@@ -37,8 +37,8 @@
     concurrent: true
 
     builders:
-      - cord-infra-gerrit-repo-patch:
-          destination-dir: 'cord'
+      - onf-infra-gerrit-repo-patch:
+          basedir: 'cord'
           project: '$GERRIT_PROJECT'
           change-number: '$GERRIT_CHANGE_NUMBER'
           patchset-number: '$GERRIT_PATCHSET_NUMBER'
diff --git a/jjb/xos-unit.yaml b/jjb/xos-unit.yaml
index 12190b5..43ad733 100644
--- a/jjb/xos-unit.yaml
+++ b/jjb/xos-unit.yaml
@@ -37,8 +37,8 @@
     concurrent: true
 
     builders:
-      - cord-infra-gerrit-repo-patch:
-          destination-dir: 'cord'
+      - onf-infra-gerrit-repo-patch:
+          basedir: 'cord'
           project: '$GERRIT_PROJECT'
           change-number: '$GERRIT_CHANGE_NUMBER'
           patchset-number: '$GERRIT_PATCHSET_NUMBER'