[VOL-5010] - Clone unit tests to run on a v2.12 branch

docs/release/README.md
makefiles/release/help.mk
-------------------------
  o Temp release documentation until text can be o-fficially
    added in the howto:release section of docs.voltha.org.

Makefile
makefiles/include.mk
makefiles/release/include.mk
makefiles/release/required.mk
makefiles/release/targets.mk
-----------------------------
  o Add makefile infra used to create and clone master tests for release.
  o Logic is conditional, makefile library will only load when named
    targets are requested.
  o make help and make help-voltha-release document new targets.
  o create-jobs-release-nightly is simply a placeholder for now.
    - Nightly unit tests are still bundled in the mega voltha job config.
    - Still need to isolate and separate these out so tests can be
      anchored for branch driven release testing.

Change-Id: I692166e17c5e04d87d112f317b9fead1d5c4090d
diff --git a/Makefile b/Makefile
index 2a9bb30..9857746 100644
--- a/Makefile
+++ b/Makefile
@@ -24,7 +24,6 @@
 ##-------------------##
 TOP          ?= .
 MAKEDIR      ?= $(TOP)/makefiles
-export SHELL := bash -e -o pipefail#    # [TODO] remove once set -u cleaned up
 
 ##--------------------##
 ##---]  INCLUDES  [---##
diff --git a/docs/release/README.md b/docs/release/README.md
new file mode 100644
index 0000000..29336a7
--- /dev/null
+++ b/docs/release/README.md
@@ -0,0 +1,29 @@
+# Construction zone
+
+## Intent
+At release time branch test suites.  Creation is dependency driven so
+existing test suites cannot be corrupted by stray typos.
+
+## Help
+
+```
+% make help
+Usage: make [options] [target] ...
+  help-voltha-release Display voltha release targets
+
+% make help-voltha-release
+[RELEASE] - Create branch driven testing pipelines
+  create-jobs-release
+  create-jobs-release-nightly Nightly testing
+  create-jobs-release-units   Unit testing
+```
+
+## Usage
+- git clone ci-management
+- make voltha-version=voltha-2.12 create-jobs-release
+
+## Clean targets (dangerous)
+- make voltha-version=voltha-2.12 sterile-create-jobs-release
+
+## See Also
+- docs/jjb/voltha-test/voltha-nightly-jobs/README.md
diff --git a/makefiles/include.mk b/makefiles/include.mk
index be08b19..d4fb1e3 100644
--- a/makefiles/include.mk
+++ b/makefiles/include.mk
@@ -35,6 +35,8 @@
 include $(ONF_MAKE)/git-submodules.mk
 include $(ONF_MAKE)/gerrit/include.mk
 
+include $(ONF_MAKE)/release/include.mk
+
 include $(ONF_MAKE)/todo.mk
 include $(ONF_MAKE)/help/variables.mk
 
diff --git a/makefiles/release/help.mk b/makefiles/release/help.mk
new file mode 100644
index 0000000..fde2d0e
--- /dev/null
+++ b/makefiles/release/help.mk
@@ -0,0 +1,33 @@
+# -*- makefile -*-
+# -----------------------------------------------------------------------
+# Copyright 2022-2023 Open Networking Foundation (ONF) and the ONF Contributors
+#
+# 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.
+# -----------------------------------------------------------------------
+# Intent: Helper makefile target used to setup for a release
+# -----------------------------------------------------------------------
+
+## ---------------------------------------------------------------------------
+## Intent: Display supported targets
+## ---------------------------------------------------------------------------
+help-voltha-release :
+	@echo
+	@echo '[RELEASE] - Create branch driven testing pipelines'
+	@echo '  create-jobs-release'
+	@echo '  create-jobs-release-nightly Nightly testing'
+	@echo '  create-jobs-release-units   Unit testing'
+
+help ::
+	@echo '  help-voltha-release Display voltha release targets'
+
+# [EOF]
diff --git a/makefiles/release/include.mk b/makefiles/release/include.mk
new file mode 100644
index 0000000..afc03d9
--- /dev/null
+++ b/makefiles/release/include.mk
@@ -0,0 +1,36 @@
+# -*- makefile -*-
+# -----------------------------------------------------------------------
+# Copyright 2022-2023 Open Networking Foundation (ONF) and the ONF Contributors
+#
+# 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: 2022 Open Networking Foundation (ONF) and the ONF Contributors
+# SPDX-License-Identifier: Apache-2.0
+# -----------------------------------------------------------------------
+
+$(if $(DEBUG),$(warning ENTER))
+
+##--------------------##
+##---]  INCLUDES  [---##
+##--------------------##
+include $(MAKEDIR)/release/help.mk
+include $(MAKEDIR)/release/required.mk
+
+ifdef USE_VOLTHA_RELEASE_MK
+  # Dynamic loading when targets are requested by name
+  include $(ONF_MAKE)/release/targets.mk
+endif
+
+# [EOF]
+
+
diff --git a/makefiles/release/required.mk b/makefiles/release/required.mk
new file mode 100644
index 0000000..59366ce
--- /dev/null
+++ b/makefiles/release/required.mk
@@ -0,0 +1,35 @@
+# -*- makefile -*-
+# -----------------------------------------------------------------------
+# Copyright 2022-2023 Open Networking Foundation (ONF) and the ONF Contributors
+#
+# 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.
+# -----------------------------------------------------------------------
+# Intent: Conditionally load when named targets are requested.
+#   var ?= $(error ...) definitions are fatal to "make help" and others
+# -----------------------------------------------------------------------
+
+voltha-release-mk-targets := null
+voltha-release-mk-targets += create-jobs-release
+voltha-release-mk-targets += create-jobs-release-nightly
+voltha-release-mk-targets += create-jobs-release-units
+voltha-release-mk-targets += sterile-create-jobs-release
+
+# -----------------------------------------------------------------------
+# Define a flag to only load release targets when mentioned by name
+# Makefile can also explicitly define the flag to force always loading.
+# -----------------------------------------------------------------------
+$(foreach tgt,$(voltha-release-mk-targets),\
+  $(if $(findstring $(tgt),$(MAKECMDGOALS)),$(eval USE_VOLTHA_RELEASE_MK := true))\
+)
+
+# [EOF]
diff --git a/makefiles/release/targets.mk b/makefiles/release/targets.mk
new file mode 100644
index 0000000..a984051
--- /dev/null
+++ b/makefiles/release/targets.mk
@@ -0,0 +1,109 @@
+# -*- makefile -*-
+# -----------------------------------------------------------------------
+# Copyright 2022-2023 Open Networking Foundation (ONF) and the ONF Contributors
+#
+# 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.
+# -----------------------------------------------------------------------
+# Intent: Helper makefile target used to setup for a release
+# -----------------------------------------------------------------------
+
+$(if $(DEBUG),$(warning ENTER))
+
+##-------------------##
+##---]  GLOBALS  [---##
+##-------------------##
+
+# TODO: Library function  $(call mk-path,makefiles/release/targets.mk)
+release-mk-top := $(abspath $(lastword $(MAKEFILE_LIST)))
+release-mk-top := $(subst /makefiles/release/targets.mk,$(null),$(release-mk-top))
+
+GIT	?= /usr/bin/env git
+
+# fatal to make help
+voltha-version ?= $(error $(MAKE) voltha-verison=voltha-x.yy is required)\
+
+## Known releases
+versions += master
+versions += voltha-2.12
+versions += voltha-2.11
+versions += voltha-2.8
+versions += playground
+
+##-------------------##
+##---]  TARGETS  [---##
+##-------------------##
+all: help
+
+## ---------------------------------------------------------------------------
+## Intent: Create branch driven pipeline test jobs.
+## ---------------------------------------------------------------------------
+## Build these deps to create a new release area
+create-jobs-release += create-jobs-release-nightly
+create-jobs-release += create-jobs-release-units
+
+create-jobs-release : $(create-jobs-release)
+
+	@echo
+	$(GIT) status
+
+## ---------------------------------------------------------------------------
+## Intent: Create branch driven pipeline test jobs.
+## ---------------------------------------------------------------------------
+units-yaml := $(release-mk-top)/jjb/pipeline/voltha/$(voltha-version)
+units-root := $(subst /$(voltha-version),$(null),$(units-yaml))
+create-jobs-release-units : $(units-yaml)
+$(units-yaml):
+
+	@echo
+	@echo "** Create branch driven pipeline: unit tests"
+	$(HIDE)mkdir -vp $@
+	rsync -r --checksum $(units-root)/master/. $@/.
+	$(HIDE)/bin/ls -l $(units-root)
+
+## ---------------------------------------------------------------------------
+## Intent: Create branch driven nightly test jobs.
+##   o Clone config for the last nightly release
+##   o In-place edit to the latest version.
+## ---------------------------------------------------------------------------
+## NOTE: WIP - nightly jobs have not yet migrated from the mega job config file
+## ---------------------------------------------------------------------------
+replace-ver  := voltha-2.11
+nightly-dir  := $(release-mk-top)/jjb/voltha-test/voltha-nightly-jobs
+nightly-yaml := $(nightly-dir)/$(voltha-version).yaml
+nightly-tmpl := $(nightly-dir)/$(replace-ver).yaml
+
+create-jobs-release-nightly : $(nightly-yaml)
+$(nightly-yaml) : $(nightly-tmpl)
+
+	@echo
+	@echo "** Create branch driven pipeline: nightly tests"
+	sed -e 's/$(replace-ver)/$(voltha-version)/g' $< > $@
+	$(HIDE)/bin/ls -l $(dir $@)
+
+## ---------------------------------------------------------------------------
+## Intent: Create branch driven nightly test jobs.
+## ---------------------------------------------------------------------------
+$(nightly-tmpl):
+	@echo "ERROR: Yaml template branch does not exist: $@"
+	@echo 1
+
+## ---------------------------------------------------------------------------
+## Intent: Create branch driven nightly test jobs.
+## ---------------------------------------------------------------------------
+sterile-create-jobs-release :
+	$(RM) $(nightly-yaml)
+	$(RM) -r $(units-yaml)
+
+$(if $(DEBUG),$(warning LEAVE))
+
+# [EOF]
diff --git a/makefiles/todo.mk b/makefiles/todo.mk
index d97dbbb..028eb6a 100644
--- a/makefiles/todo.mk
+++ b/makefiles/todo.mk
@@ -21,6 +21,7 @@
 $(if $(DEBUG),$(warning ENTER))
 
 todo ::
+	@echo
 	@echo '[TODO]'
 	@echo '  o volthaStackDeploy.groovy - post v2.11 release cleanup for 2.8'