Makefile library merge with onf-make and voltha-lib-go

makefiles/
----------
  o Import standalone makefile directories to checkin smaller parts of a mega patch.
  o Build out directory hierarchy by topic and feature.

makefiles/lint/yaml/
--------------------
  o Pull in logic evolved in repo:voltha-lib-go.
  o Refactoring: support special snowflake targets by repository.
  o ci-management and voltha-lib-go use distinct yamllint.conf files.
  o Separate until there is time to review and consolidate.
  o Added deps for on-demand local install of yamllint.
    - requirements.txt could be used but every build would incur overhead.

Makefile
--------
  o Use latest syntax from repo:onf-make.
  o No need to set path variables, makefiles/include.mk can infer them.
  o Added a help target to explicitly display targets and suggestions.
  o Logic is bundled in libraries and use of 'make help' is not well known.

Change-Id: Id8eba6f914a7bfe9a31637901bd8fb78a387e0c2
diff --git a/makefiles/git/byrepo/ci-management.mk b/makefiles/git/byrepo/ci-management.mk
new file mode 100644
index 0000000..373dc23
--- /dev/null
+++ b/makefiles/git/byrepo/ci-management.mk
@@ -0,0 +1,80 @@
+# -*- 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))
+
+GIT ?= git
+
+## -----------------------------------------------------------------------
+## Intent: Checkout submodules required by ci-management
+## -----------------------------------------------------------------------
+submodule-repos := $(null)
+submodule-repos += global-jjb
+submodule-repos += lf-ansible
+submodule-repos += packer
+
+submodule-deps := $(null)
+submodule-deps += submodules#     # named pseudo target
+submodule-deps += $(submodule-repos)
+
+.PHONY: $(submodule-deps)
+$(submodule-deps):
+	@echo
+	@echo "Checkout dependent submodules"
+	$(GIT) submodule init
+	$(GIT) submodule update
+
+# Abstraction: named target for submodule checkout
+checkout-ci-management-sub-modules: $(submodule-repos)
+
+## -----------------------------------------------------------------------
+## Intent: Revert sandbox to a pristine state.
+## -----------------------------------------------------------------------
+sterile ::
+	$(RM) -r $(submodule-repos)
+
+        # FIXME:
+        #   o restore hierarchy to avoid git status 'deleted:'
+        #   o remove: externals should not be under revision control
+	$(GIT) co $(submodule-repos)
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+help ::
+	@echo
+	@echo '[GIT-SUBMODULES: docs]'
+	@echo '  reload              Setup to auto-reload sphinx doc changes in browser'
+	@echo
+	@echo '[GIT-SUBMODULES: deps]'
+	@echo '  submodules          Checkout dependent git submodules'
+  ifdef VERBOSE
+	@echo '  global-jjb          Checkout ci-management submodule global-jjb'
+	@echo '  lf-ansible          Checkout ci-management submodule lf-ansible'
+	@echo '  packer              Checkout ci-management submodule packer'
+  endif
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+todo ::
+	@echo "Generalize logc, update to depend on .git/ rather than named targets."
+
+$(if $(DEBUG),$(warning LEAVE))
+
+# [EOF]
diff --git a/makefiles/git/ci-management.mk b/makefiles/git/ci-management.mk
new file mode 100644
index 0000000..373dc23
--- /dev/null
+++ b/makefiles/git/ci-management.mk
@@ -0,0 +1,80 @@
+# -*- 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))
+
+GIT ?= git
+
+## -----------------------------------------------------------------------
+## Intent: Checkout submodules required by ci-management
+## -----------------------------------------------------------------------
+submodule-repos := $(null)
+submodule-repos += global-jjb
+submodule-repos += lf-ansible
+submodule-repos += packer
+
+submodule-deps := $(null)
+submodule-deps += submodules#     # named pseudo target
+submodule-deps += $(submodule-repos)
+
+.PHONY: $(submodule-deps)
+$(submodule-deps):
+	@echo
+	@echo "Checkout dependent submodules"
+	$(GIT) submodule init
+	$(GIT) submodule update
+
+# Abstraction: named target for submodule checkout
+checkout-ci-management-sub-modules: $(submodule-repos)
+
+## -----------------------------------------------------------------------
+## Intent: Revert sandbox to a pristine state.
+## -----------------------------------------------------------------------
+sterile ::
+	$(RM) -r $(submodule-repos)
+
+        # FIXME:
+        #   o restore hierarchy to avoid git status 'deleted:'
+        #   o remove: externals should not be under revision control
+	$(GIT) co $(submodule-repos)
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+help ::
+	@echo
+	@echo '[GIT-SUBMODULES: docs]'
+	@echo '  reload              Setup to auto-reload sphinx doc changes in browser'
+	@echo
+	@echo '[GIT-SUBMODULES: deps]'
+	@echo '  submodules          Checkout dependent git submodules'
+  ifdef VERBOSE
+	@echo '  global-jjb          Checkout ci-management submodule global-jjb'
+	@echo '  lf-ansible          Checkout ci-management submodule lf-ansible'
+	@echo '  packer              Checkout ci-management submodule packer'
+  endif
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+todo ::
+	@echo "Generalize logc, update to depend on .git/ rather than named targets."
+
+$(if $(DEBUG),$(warning LEAVE))
+
+# [EOF]
diff --git a/makefiles/git/include.mk b/makefiles/git/include.mk
index 9125178..42f2a47 100644
--- a/makefiles/git/include.mk
+++ b/makefiles/git/include.mk
@@ -20,17 +20,24 @@
 
 $(if $(DEBUG),$(warning ENTER))
 
+ifdef USE-ONF-GIT-MK
+  mk-include--onf-git := seen
+endif
+
+ifndef mk-include--onf-git
+
 ##--------------------##
 ##---]  INCLUDES  [---##
 ##--------------------##
-include $(MAKEDIR)/git/help.mk
-include $(MAKEDIR)/git/required.mk
+include $(ONF_MAKEDIR)/git/help.mk
+include $(ONF_MAKEDIR)/git/required.mk
 
-ifdef USE_ONF_GIT_MK
-  # Dynamic loading when targets are requested by name
-  include $(ONF_MAKE)/git/submodules.mk
-endif
+## Special snowflake: per-repository logic loader
+-include $(ONF_MAKEDIR)/git/byrepo/$(--repo-name--).mk
+
+# Dynamic loading when targets are requested by name
+include $(ONF_MAKEDIR)/git/submodules.mk
+
+endif # mk-include--onf-git
 
 # [EOF]
-
-
diff --git a/makefiles/git/required.mk b/makefiles/git/required.mk
index 29fba88..44f498d 100644
--- a/makefiles/git/required.mk
+++ b/makefiles/git/required.mk
@@ -26,7 +26,7 @@
 # Makefile can also explicitly define the flag to force always loading.
 # -----------------------------------------------------------------------
 $(foreach tgt,$(git-mk-targets),\
-  $(if $(findstring $(tgt),$(MAKECMDGOALS)),$(eval USE_ONF_GIT_MK := true))\
+  $(if $(findstring $(tgt),$(MAKECMDGOALS)),$(eval USE-ONF-GIT-MK := true))\
 )
 
 # [EOF]