diff --git a/test/bats/check_repo_tags.bats b/test/bats/check_repo_tags.bats
new file mode 100755
index 0000000..d36ead1
--- /dev/null
+++ b/test/bats/check_repo_tags.bats
@@ -0,0 +1,170 @@
+#!/usr/bin/env bats
+# -----------------------------------------------------------------------
+# Copyright 2024 Open Networking Foundation 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: 2024 Open Networking Foundation Contributors
+# SPDX-License-Identifier: Apache-2.0
+# -----------------------------------------------------------------------#
+# Source: /sandbox/ci-management/jjb/pipeline/voltha/software-upgrades.groovy
+# -----------------------------------------------------------------------
+
+bats_require_minimum_version 1.5.0
+
+## -----------------------------------------------------------------------
+# This runs before each of the following tests are executed.
+## -----------------------------------------------------------------------
+setup() {
+    source './utils/check_repo_tags.sh'
+
+    declare -g components=()
+    components+=('voltha-docs')
+    components+=('voltha-onos')
+    components+=('voltha-openolt-adapter')
+    components+=('voltha-openonu-adapter-go')
+    components+=('voltha-lib-go')
+    components+=('voltha-protos')
+}
+
+## -----------------------------------------------------------------------
+## Intent:
+## -----------------------------------------------------------------------
+@test 'Validate comp_deploy_tag()' {
+
+    local component
+    for component in "${components[@]}";
+    do
+        ## --------------
+        ## Known problems
+        ## --------------
+        case "$component" in
+            voltha-docs)
+                # skip 'declare -a gerrit=([0]="2.12.35")'
+                continue
+                ;;
+            voltha-lib-go)
+                # skip 'declare -a gerrit=([0]="7.5.3")'
+                continue
+                ;;
+            voltha-onos)
+                # skip 'declare -a gerrit=([0]="2.11.0")'
+                continue
+                ;;
+            voltha-openolt-adapter)
+                # skip 'declare -a gerrit=([0]="4.4.10")'
+                continue
+                ;;
+            voltha-openonu-adapter-go)
+                # skip 'declare -a gerrit=([0]="2.12.0~beta")'
+                continue
+                ;;
+            voltha-protos)
+                # skip 'declare -a gerrit=([0]="5.4.11")'
+                continue
+                ;;
+        esac
+
+        # local component='voltha-openonu-adapter-go'
+        declare -a gerrit=()
+        gather_comp_deploy gerrit "http://gerrit.opencord.org/${component}"
+
+        declare -a github=()
+        gather_comp_deploy gerrit "http://github.com/opencord/${component}"
+
+        printf "\nCOMPONENT: %s\n" "$component" 1>&2
+        declare -p gerrit 1>&2
+        declare -p github 1>&2
+
+        ## Check for deltas
+        [[ "${gerrit[*]}" == "${github[@]}" ]]
+    done
+    
+    ## -----------------------------------------
+    ## Compare by size, filtered list is smaller
+    ## -----------------------------------------
+    [ true ]
+}
+
+## -----------------------------------------------------------------------
+## Intent: Compare tags between gerrit and github repositories
+## -----------------------------------------------------------------------
+@test 'Validate comp_test_tag()' {
+ 
+    local component
+    for component in "${components[@]}";
+    do
+        ## --------------
+        ## Known problems
+        ## --------------
+        case "$component" in
+            voltha-docs)
+                # skip "$component not mirrored on github"
+                continue
+                ;;
+            voltha-onos)
+                # skip "declare -a gerrit=([0]="2.12.0~beta")"
+                continue
+                ;;
+            voltha-lib-go)
+                # skip "declare -a gerrit=([0]="7.6.0")"
+                continue
+                ;;
+            voltha-openolt-adapter)
+                # skip "declare -a gerrit=([0]="4.4.11")"
+                continue
+                ;;
+            voltha-openonu-adapter-go)
+                # skip 'github repo lacks tag 2.12.0 (voltha-openonu-adapter-go)'
+                continue
+                ;;
+            voltha-protos)
+                # skip "declare -a gerrit=([0]="5.5.0")"
+                continue
+                ;;
+        esac
+
+        # local component='voltha-openonu-adapter-go'
+        declare -a gerrit=()
+        gather_comp_test gerrit "http://gerrit.opencord.org/${component}"
+
+        declare -a github=()
+        gather_comp_test gerrit "http://github.com/opencord/${component}"
+
+        printf "\nCOMPONENT: %s\n" "$component" 1>&2
+        declare -p gerrit 1>&2
+        declare -p github 1>&2
+
+        ## Check for deltas
+        [[ "${gerrit[*]}" == "${github[@]}" ]]
+    done
+}
+
+## -----------------------------------------------------------------------
+## Intent:
+## -----------------------------------------------------------------------
+@test 'todo()' {
+
+    cat <<EOM
+
+1) Compare repository branches and tags:
+   - Iterate over all repositories.
+   - Retrieve branches and tags from gerrit.
+   - Retrieve branches and tags from github.
+   - Compare contents for discrepancies.
+EOM
+
+    [ true ]
+}
+
+# [EOF]
diff --git a/test/bats/makefile b/test/bats/makefile
new file mode 100644
index 0000000..fa4fbe9
--- /dev/null
+++ b/test/bats/makefile
@@ -0,0 +1,77 @@
+# -*- makefile -*-
+# -----------------------------------------------------------------------
+# Copyright 2024 Open Networking Foundation 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: 2024 Open Networking Foundation Contributors
+# SPDX-License-Identifier: Apache-2.0
+# -----------------------------------------------------------------------
+# Intent: This test suite will validate repo:helm-repo-tools scripts
+# -----------------------------------------------------------------------
+
+null	:=#
+space	:=$(null) $(null)
+HIDE	?= @
+
+src = $(wildcard *.bats)
+bats := $(subst .bats,$(null),$(src))
+.PHONY: $(bats)
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+all:
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+.PHONY: test
+test += test-bats
+test : $(test)
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+.PHONY: test-bats
+test-bats : $(bats)
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+$(bats) :
+	$(HIDE)./$@.bats
+
+## -----------------------------------------------------------------------
+## Intent: Display target help
+## -----------------------------------------------------------------------
+help ::
+	@echo 'Usage: $(MAKE) [options] [target] ...'
+	@printf '  %-33.33s %s\n' \
+	  'test' 'Launch available test suites'
+	@printf '  %-33.33s %s\n' 'test-bats' \
+	  'Launch available BATS shell test suites'
+
+	@echo
+	@echo '[TEST: by name]'
+	@$(MAKE) --no-print-directory help-bats
+
+	@echo
+	@echo '[HELP]'
+	@printf '  %-33.33s %s\n' 'help'      'Display target usage'
+	@printf '  %-33.33s %s\n' 'help-bats' 'Display a list of test suites'
+
+## -----------------------------------------------------------------------
+## -----------------------------------------------------------------------
+help-bats := $(addprefix help--,$(bats))
+help-bats : $(help-bats)
+$(help-bats) :
+	@printf '  $(MAKE) %-33.33s %s\n' "$(lastword $(subst -,$(space),$@))" ''
+
+# [EOF]
diff --git a/test/bats/utils/check_repo_tags.sh b/test/bats/utils/check_repo_tags.sh
new file mode 100644
index 0000000..e1fed39
--- /dev/null
+++ b/test/bats/utils/check_repo_tags.sh
@@ -0,0 +1,64 @@
+#!/bin/bash
+# -----------------------------------------------------------------------
+# Copyright 2024 Open Networking Foundation 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: 2024 Open Networking Foundation Contributors
+# SPDX-License-Identifier: Apache-2.0
+# -----------------------------------------------------------------------#
+# Source: /sandbox/ci-management/jjb/pipeline/voltha/software-upgrades.groovy
+# -----------------------------------------------------------------------
+
+## -----------------------------------------------------------------------
+## Intent: Shell snippet from software-upgrades.groovy for testing
+## -----------------------------------------------------------------------
+function gather_comp_deploy()
+{
+    local -n ref=$1; shift
+    local url="$1"; shift
+
+    readarray -t buffer < <(git ls-remote --refs --tags "$url" \
+                                | cut --delimiter='/' --fields=3 \
+                                | tr '-' '~' \
+                                | sort --version-sort \
+                                | tail --lines=2 \
+                                | head -n 1 \
+                                | sed 's/v//' \
+                           )
+    ref=("${buffer[@]}")
+    return
+}
+
+## -----------------------------------------------------------------------
+## Intent: Shell snippet from software-upgrades.groovy for testing
+## -----------------------------------------------------------------------
+function gather_comp_test()
+{
+    local -n ref=$1; shift
+    local url="$1"; shift
+
+    readarray -t buffer < <(git ls-remote --refs --tags "$url" \
+                                | cut --delimiter='/' --fields=3 \
+                                | tr '-' '~' \
+                                | sort --version-sort \
+                                | tail --lines=1 \
+                                | sed 's/v//'
+                           )
+    ref=("${buffer[@]}")
+    return
+}
+
+: # ($?==0) for source script
+
+# [EOF]
