diff --git a/jjb/github-release/voltha.yaml b/jjb/github-release/voltha.yaml
index e874bd2..a3ec8be 100644
--- a/jjb/github-release/voltha.yaml
+++ b/jjb/github-release/voltha.yaml
@@ -1,5 +1,25 @@
 ---
-# publishing artifacts to GitHub releases
+
+# -----------------------------------------------------------------------
+# Copyright 2023-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: 2023-2024 Open Networking Foundation Contributors
+# SPDX-License-Identifier: Apache-2.0
+# -----------------------------------------------------------------------
+# Intent: Config for publishing artifacts to GitHub releases
+# -----------------------------------------------------------------------
 
 - job-template:
     id: github-release-voltha
diff --git a/jjb/shell/github-release.sh b/jjb/shell/github-release.sh
index dddfe0c..fe206ac 100755
--- a/jjb/shell/github-release.sh
+++ b/jjb/shell/github-release.sh
@@ -6,7 +6,7 @@
 # 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
+# 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,
@@ -33,9 +33,23 @@
 declare -g __githost=github.com
 # export DEBUG=1
 
+declare -g pgm
+pgm="$(readlink --canonicalize-existing "$0")"
+readonly pgm
+declare libdir="${pgm:0:-3}"
+readonly libdir
+
+##--------------------##
+##---]  INCLUDES  [---##
+##--------------------##
+source "$libdir/help.sh"
+source "$libdir/parse-args.sh"
+
 ## -----------------------------------------------------------------------
 ## Uncomment to activate
 ## -----------------------------------------------------------------------
+# declare -g -i debug
+
 # Debug arguments
 # declare -i -g argv_gen_version=1
 # declare -i -g draft_release=1
@@ -45,7 +59,7 @@
 
 declare -g scratch              # temp workspace for downloads
 
-declare -g SCRIPT_VERSION='1.4' # git changeset needed
+declare -g SCRIPT_VERSION='1.5' # git changeset needed
 
 ##--------------------##
 ##---]  INCLUDES  [---##
@@ -54,6 +68,34 @@
 ## -----------------------------------------------------------------------
 ## Intent: Register an interrupt handler to display a stack trace on error
 ## -----------------------------------------------------------------------
+function bannerEL()
+{
+    # echo " $i: ${BASH_SOURCE[$i+1]}:${BASH_LINENO[$i]} ${FUNCNAME[$i]}(...)"
+
+    # iam="${0##*/}"
+    if [[ -v debug ]]; then
+        if [[ $# -gt 0 ]]; then
+            local type="$1"; shift
+        else
+            local type='LEAVE'
+        fi
+
+        local func="${FUNCNAME[1]}"
+        local line="${BASH_LINENO[1]}"
+        case "$type" in
+            LEAVE) ;;
+            *) type='ENTER' ;;
+        esac
+
+        printf "** %s %s (LINENO:%s)\n" "$func" "$type" "$line"
+    fi
+
+    return
+}
+
+## -----------------------------------------------------------------------
+## Intent: Register an interrupt handler to display a stack trace on error
+## -----------------------------------------------------------------------
 function errexit()
 {
     local err=$?
@@ -71,11 +113,11 @@
     # Print out the stack trace described by $function_stack
     if [ ${#FUNCNAME[@]} -gt 2 ]
     then
-            echo "Call tree:"
-            for ((i=1;i<${#FUNCNAME[@]}-1;i++))
-            do
-                echo " $i: ${BASH_SOURCE[$i+1]}:${BASH_LINENO[$i]} ${FUNCNAME[$i]}(...)"
-            done
+        echo "Call tree:"
+        for ((i=1;i<${#FUNCNAME[@]}-1;i++))
+        do
+            echo " $i: ${BASH_SOURCE[$i+1]}:${BASH_LINENO[$i]} ${FUNCNAME[$i]}(...)"
+        done
     fi
 
     echo "Exiting with status ${code}"
@@ -109,7 +151,9 @@
         /bin/rm -fr "$scratch"
     fi
 
-    do_logout 'shellcheck-SC2119'
+    # shellcheck disable=SC2119
+    do_logout
+    
     return
 }
 trap sigtrap EXIT
@@ -131,7 +175,7 @@
     rev+=("$(( RANDOM % 10000 + 1 ))")
     local ver="v${rev[0]}.${rev[1]}.${rev[2]}"
 
-    func_echo "VERSION: $ver"
+    func_echo "GENERATED VERSION STRING: $ver"
     ref="$ver"
     return
 }
@@ -172,6 +216,8 @@
     local pkgbase="${0##*/}" # basename
     local pkgname="${pkgbase%.*}"
 
+    bannerEL 'ENTER'
+
     # initEnvVars # moved to full_banner()
 
     ## Create a temp directory for auto-cleanup
@@ -221,7 +267,7 @@
 
     initEnvVars   # set defaults
 
-cat <<EOH
+    cat <<EOH
 
 ** -----------------------------------------------------------------------
 ** IAM: ${iam} :: ${FUNCNAME[0]}
@@ -258,17 +304,33 @@
 function error()
 {
     local iam="${0##*/}"
-    echo "ERROR ${iam} :: ${FUNCNAME[1]}: $*"
+    local func="${FUNCNAME[1]}"
+    local line="${BASH_LINENO[1]}"
+    printf "\nERROR %s :: %s (LINENO:%s): %s" "$iam" "$func" "$line" "$*"
     exit 1
 }
 
 ## -----------------------------------------------------------------------
+## Intent: Script self checking, direct API access for troubleshooting
+## -----------------------------------------------------------------------
+function do_api_validation()
+{
+    # if --verify credentials
+    do_login
+    # shellcheck disable=SC2119
+    do_logout
+    return
+}
+
+## -----------------------------------------------------------------------
 ## Intent: Verify sandbox/build is versioned for release.
 ## -----------------------------------------------------------------------
 function getGitVersion()
 {
     local -n varname=$1; shift
 
+    bannerEL 'ENTER'
+
     local __ver # use prefix('__') to protect callers variable name
     if [[ -v cached_getGitVersion ]]; then
         __ver="$cached_getGitVersion"
@@ -280,21 +342,33 @@
 
     elif [[ -v WORKSPACE ]] && [[ -v GITHUB_TOKEN ]]; then # i_am_jenkins
         local path="$GERRIT_PROJECT"
-        pushd "$path" || error "pushd GERRIT_PROJECT= failed $(declare -p path)"
+        pushd "$path" || { error "pushd GERRIT_PROJECT= failed $(declare -p path)"; }
         __ver="$(git tag -l --points-at HEAD)"
-        popd || error "popd GERRIT_PROJECT= failed"
+        popd || { error "popd GERRIT_PROJECT= failed"; }
 
     elif [[ -v argv_version_file ]]; then # local debug
         [[ ! -f VERSION ]] && error "./VERSION file not found"
         readarray -t tmp < <(sed -e 's/[[:blank:]]//g' 'VERSION')
         __ver="v${tmp[0]}"
 
-    else
+    elif [[ ${#GERRIT_PROJECT} -gt 0 ]]; then
         cd ..
         local path="$GERRIT_PROJECT"
-        pushd "$path" || error "pushd GERRIT_PROJECT= failed $(declare -p path)"
+        declare -p path
+        pushd "$path" || { error "pushd GERRIT_PROJECT= failed $(declare -p path)"; }
         __ver="$(git tag -l --points-at HEAD)"
-        popd || error "popd GERRIT_PROJECT= failed"
+        popd || { error "popd GERRIT_PROJECT= failed"; }
+
+    else # pwd==sandbox
+
+        local line="${BASH_LINENO[0]}"
+        local message="
+GERRIT_PROJECT= is not defined:
+  o One of the following are required:
+    - Define GERRIT_PROJECT= (~jenkins).
+    - Argument --verison-file.
+"
+        error "$message"
     fi
 
     # ------------------------------------------------------
@@ -306,12 +380,12 @@
         echo "Building artifacts for GitHub release."
 
     elif [[ "$__ver" =~ ^v?([0-9]+)\.([0-9]+)\.([0-9]+)-dev([0-9]+)$ ]]; then
-	# v1.2.3-dev (*-dev*) is an implicit draft release.
+        # v1.2.3-dev (*-dev*) is an implicit draft release.
         declare -i -g draft_release=1
         echo "Detected --draft SemVer release version tag [$__ver]"
         echo "Building artifacts for GitHub release."
 
-    # Should also accept:  X.Y.Z-{alpha,beta,...}
+        # Should also accept:  X.Y.Z-{alpha,beta,...}
 
     else
         echo "Version string contains: [${__ver}]"
@@ -325,6 +399,8 @@
 
     varname="$__ver"
     func_echo "Version is [$__ver] from $(/bin/pwd)"
+
+    bannerEL 'LEAVE'
     return
 }
 
@@ -428,7 +504,7 @@
     get_gh_repo_name repo_name
 
     ref="repos/${repo_org}/${repo_name}/releases"
-    func_echo "ref=$ref"
+    func_echo "releases_uri=$ref"
     return
 }
 
@@ -517,9 +593,9 @@
     ## Verify pwd is OK
     for path in \
         "${varpath}/Makefile"\
-        "${varpath}/makefile"\
-        "__ERROR__"\
-    ; do
+            "${varpath}/makefile"\
+            "__ERROR__"\
+        ; do
         case "$path" in
             __ERROR__) error "Makefile not found at ${varpath} !" ;;
             *) [[ -f "$path" ]] && break ;;
@@ -536,7 +612,7 @@
 {
     local iam="${0##*/}"
 
-cat <<EOT
+    cat <<EOT
 
 ** -----------------------------------------------------------------------
 ** IAM: ${iam} :: ${FUNCNAME[0]}
@@ -572,7 +648,7 @@
 
     # Glob available files, exclude checksums
     readarray -t __artifacts < <(find "$dir" -mindepth 1 ! -type d \
-                                | grep -iv -e 'sum256' -e 'checksum')
+                                     | grep -iv -e 'sum256' -e 'checksum')
     # func_echo "$(declare -p __artifacts)"
 
     # -----------------------------------------------------------------------
@@ -582,7 +658,7 @@
     #   o docker container filesystem mount problem (~volume)
     # -----------------------------------------------------------------------
     [[ ${#__artifacts[@]} -eq 0 ]] \
-          && error "Artifact dir is empty: $(declare -p dir)"
+        && error "Artifact dir is empty: $(declare -p dir)"
 
     refA=("${__artifacts[@]}")
     return
@@ -622,14 +698,14 @@
 
 ## -----------------------------------------------------------------------
 ## https://docs.github.com/en/rest/releases?apiVersion=2022-11-28
-    # https://cli.github.com/manual/gh_release_create
-    # --target <branch> or commit SHA
-    # --title
-    # --generate-notes
-    # --release-notes (notes file)
-    # --release
-    # release create dist/*.tgz
-    # --discussion-category "General"
+# https://cli.github.com/manual/gh_release_create
+# --target <branch> or commit SHA
+# --title
+# --generate-notes
+# --release-notes (notes file)
+# --release
+# release create dist/*.tgz
+# --discussion-category "General"
 ## -----------------------------------------------------------------------
 # https://cli.github.com/manual/gh_release_create
 ## -----------------------------------------------------------------------
@@ -682,7 +758,7 @@
 {
     # shellcheck disable=SC2120
     # shellcheck disable=SC2034
-    local unused="$1"; shift
+    [[ $# -gt 0 ]] && { local unused="$1"; shift; }
 
     declare -g pac
     declare -a login_args=()
@@ -692,13 +768,13 @@
     # (sigh) why not quietly return VS forcing a special logic path
     # [[ -v WORKSPACE ]] && [[ -v GITHUB_TOKEN ]] && return
 
-# 12:58:36 ** -----------------------------------------------------------------------
-# 12:58:36 ** jenkins582353203049151829.sh::do_login: --hostname github.com
-# 12:58:36 ** --------------------------------------------------------------------# ---
-# 12:58:36 ** jenkins582353203049151829.sh :: do_login: Detected ENV{GITHUB_TOKEN}=
-# 12:58:36 The value of the GITHUB_TOKEN environment variable is being used for authentication.
-# 12:58:36 To have GitHub CLI store credentials instead, first clear the value from the environment.
-# -----------------------------------------------------------------------
+    # 12:58:36 ** -----------------------------------------------------------------------
+    # 12:58:36 ** jenkins582353203049151829.sh::do_login: --hostname github.com
+    # 12:58:36 ** --------------------------------------------------------------------# ---
+    # 12:58:36 ** jenkins582353203049151829.sh :: do_login: Detected ENV{GITHUB_TOKEN}=
+    # 12:58:36 The value of the GITHUB_TOKEN environment variable is being used for authentication.
+    # 12:58:36 To have GitHub CLI store credentials instead, first clear the value from the environment.
+    # -----------------------------------------------------------------------
 
     get_gh_hostname login_args
 
@@ -745,7 +821,6 @@
     banner "${logout_args[@]}"
     func_echo "$gh_cmd auth logout ${logout_args[*]} <<< 'Y'"
     "$gh_cmd" auth logout "${logout_args[@]}" <<< 'Y'
-
     unset active_login
     return
 }
@@ -764,7 +839,8 @@
     # gh api repos/{owner}/{repo}/releases
     local releases_uri
     get_gh_releases releases_uri
-    # declare -p releases_uri
+
+    func_echo "RUNNING: $gh_cmd api $releases_uri | jq . > release.raw"
 
     refA=()
     "$gh_cmd" api "$releases_uri" | jq . > 'release.raw'
@@ -817,8 +893,8 @@
     local tarball="gh.tar.tgz"
 
     readarray -t latest < <(\
-        curl --silent -qI "$latest" \
-        | awk -F '/' '/^location/ {print  substr($NF, 1, length($NF)-1)}')
+                            curl --silent -qI "$latest" \
+                                | awk -F '/' '/^location/ {print  substr($NF, 1, length($NF)-1)}')
     declare -p latest
     if [ ${#latest[@]} -ne 1 ]; then
         error "Unable to determine latest gh package version"
@@ -883,7 +959,7 @@
     func_echo "Packaging release files"
 
     pushd "$release_temp" >/dev/null \
-        || error "pushd failed: dir is [$release_temp]"
+        || { error "pushd failed: dir is [$release_temp]"; }
 
     declare -a to_release=()
     get_artifacts '.' to_release
@@ -913,7 +989,7 @@
 
     gh_release_create # publish
 
-    popd  >/dev/null || error "pushd failed: dir is [$release_temp]"
+    popd  >/dev/null || { error "pushd failed: dir is [$release_temp]"; }
 
     return
 }
@@ -939,8 +1015,7 @@
 ## -----------------------------------------------------------------------
 function my_gh()
 {
-    func_echo "ENTER"
-    set -x
+    bannerEL 'ENTER'
 
     declare -a cmd=()
     cmd+=("$gh_cmd")
@@ -954,14 +1029,14 @@
 
     while [ $# -gt 0 ]; do
         local arg="$1"; shift
-	func_echo "function arg is [$arg]"
+        func_echo "function arg is [$arg]"
         case "$arg" in
 
             # Modes
             -*debug)
-		# shellcheck disable=SC2034
-		declare -i -g debug=1
-		;;
+                # shellcheck disable=SC2034
+                declare -i -g debug=1
+                ;;
             -*verbose) args+=('--verbose') ;;
 
             -*hostname)
@@ -976,7 +1051,7 @@
                 args+=('--repo' "${__githost}/${val}")
                 ;;
 
-# args+=('--repo' 'github.com/opencord/bbsim')
+            # args+=('--repo' 'github.com/opencord/bbsim')
 
             --repo)
                 local val
@@ -986,7 +1061,7 @@
 
             --tag)
                 local val
-                       get_argv_tag val
+                get_argv_tag val
                 args+=("$val")       # No switch, pass inline
                 ;;
 
@@ -1010,120 +1085,21 @@
     "${cmd[@]}"
     local status=$?
 
-    set +x
-    func_echo "LEAVE"
+    bannerEL 'LEAVE'
 
     if [[ $status -eq 0 ]]; then
-	true
+        true
     else
-	false
+        false
     fi
 
     return
 }
 
-## ---------------------------------------------------------------------------
-## Intent:
-## ---------------------------------------------------------------------------
-function usage()
-{
-    cat <<EOH
-
-Usage: $0
-Usage: make [options] [target] ...
-  --help                      This mesage
-  --pac                       Personal Access Token (path to containing file or a string)
-  --repo-name                 ex: voltctl
-  --repo-org                  ex: opencord
-  --release-notes [f]         Release notes are passed by file argument
-
-[DEBUG]
-  --gen-version               Generate a random release version string.
-  --git-hostname              Git server hostname (default=github.com)
-  --version-file              Read version string from local version file (vs env var)
-
-[MODES]
-  --debug                     Enable script debug mode
-  --draft                     Create a draft release (vs published)
-  --dry-run                   Simulation mode
-  --todo                      Display future enhancement list
-
-All other arguments are pass-through to the gh command.
-
-Usage: $0 --draft --repo-org opencord --repo-name voltctl --git-hostname github.com --pac ~/access.pac
-
-EOH
-
-    return
-}
-
-## ---------------------------------------------------------------------------
-## Intent: Parse script command line arguments
-## ---------------------------------------------------------------------------
-function parse_args()
-{
-    [[ -v DEBUG ]] && func_echo "ENTER"
-
-    while [ $# -gt 0 ]; do
-        local arg="$1"; shift
-        func_echo "ARGV: $arg"
-
-	# shellcheck disable=SC2034
-        case "$arg" in
-
-            -*debug)   declare -i -g debug=1         ;;
-            --draft)   declare -i -g draft_release=1 ;;
-            --dry-run) declare -i -g dry_run=1       ;;
-
-            --version-file)
-                declare -i -g argv_version_file=1
-                ;;
-
-            -*gen-version)
-                declare -g -i argv_gen_version=1
-                ;;
-
-            -*git-hostname)
-                __githost="$1"; shift
-                ;;
-
-            -*release-notes)
-		[[ ! -f "$1" ]] && error "--release-notes: file path required (arg=\"$arg\")"
-                declare -g release_notes="$1"; shift
-                ;;
-
-            -*repo-name)
-                __repo_name="$1"; shift
-                ;;
-
-            -*repo-org)
-                __repo_org="$1"; shift
-                ;;
-
-            -*pac)
-                declare -g pac="$1"; shift
-                readonly pac
-                [[ ! -f "$pac" ]] && error "--token= does not exist ($pac)"
-                : # nop/true
-                ;;
-
-            -*todo) todo ;;
-
-            -*help)
-                usage
-                exit 0
-                ;;
-
-            *) error "Detected unknown argument $arg" ;;
-        esac
-    done
-
-    return
-}
-
 ##----------------##
 ##---]  MAIN  [---##
 ##----------------##
+bannerEL 'ENTER'
 iam="${0##*/}"
 
 full_banner
@@ -1131,48 +1107,51 @@
 init
 install_gh_binary
 
+[[ -v argv_self_check ]] && { do_api_validation; exit 0; }
+
 do_login "$*"
 
 release_path='/dev/null'
 get_release_path release_path
 declare -p release_path
 
-pushd "$release_path" || error "pushd failed: dir is [$release_path]"
+pushd "$release_path" || { error "pushd failed: dir is [$release_path]"; }
 
-    # legacy: getGitVersion "$GERRIT_PROJECT" GIT_VERSION
-    getGitVersion GIT_VERSION
-    getReleaseDescription RELEASE_DESCRIPTION
-    if [[ ! -v release_notes ]]; then
-	func_echo "Generating release notes from RELEASE_DESCRIPTION"
-        declare -g release_notes="$scratch/release.notes"
-        echo "$RELEASE_DESCRIPTION" > "$release_notes"
-    fi
-    cat "$release_notes"
+# legacy: getGitVersion "$GERRIT_PROJECT" GIT_VERSION
+getGitVersion GIT_VERSION
+getReleaseDescription RELEASE_DESCRIPTION
+if [[ ! -v release_notes ]]; then
+    func_echo "Generating release notes from RELEASE_DESCRIPTION"
+    declare -g release_notes="$scratch/release.notes"
+    echo "$RELEASE_DESCRIPTION" > "$release_notes"
+fi
+cat "$release_notes"
 
-    cat <<EOM
+cat <<EOM
 
 ** -----------------------------------------------------------------------
 **         GIT VERSION: $(declare -p GIT_VERSION)
 ** RELEASE_DESCRIPTION: $(declare -p RELEASE_DESCRIPTION)
 **     RELEASE_TARGETS: $(declare -p RELEASE_TARGETS)
 ** -----------------------------------------------------------------------
-** URL: https://github.com/opencord/bbsim/releases
+** URL: https://github.com/opencord/{repo}/releases
 ** -----------------------------------------------------------------------
 ** Running: make ${RELEASE_TARGETS}
 ** -----------------------------------------------------------------------
 EOM
-    # build the release, can be multiple space separated targets
-    # -----------------------------------------------------------------------
-    # % go build command-line-arguments:
-    #      copying /tmp/go-build4212845548/b001/exe/a.out:
-    #      open release/voltctl-1.8.25-linux-amd64: permission denied
-    #   missing: docker run mkdir
-    # -----------------------------------------------------------------------
-    # shellcheck disable=SC2086
-    make "$RELEASE_TARGETS"
-    copyToRelease
 
-  cat <<EOM
+# build the release, can be multiple space separated targets
+# -----------------------------------------------------------------------
+# % go build command-line-arguments:
+#      copying /tmp/go-build4212845548/b001/exe/a.out:
+#      open release/voltctl-1.8.25-linux-amd64: permission denied
+#   missing: docker run mkdir
+# -----------------------------------------------------------------------
+# shellcheck disable=SC2086
+make "$RELEASE_TARGETS"
+copyToRelease
+
+cat <<EOM
 
 ** -----------------------------------------------------------------------
 ** Create the release:
@@ -1183,14 +1162,15 @@
 ** -----------------------------------------------------------------------
 EOM
 
-  showReleases
-  release_staging
+showReleases
+release_staging
 
-  # Useful to display but --draft images use a non-standard subdir identifier.
-  # showReleaseUrl
+# Useful to display but --draft images use a non-standard subdir identifier.
+# showReleaseUrl
 
-  popd  || error "pushd failed: dir is [$release_path]"
+popd  || { error "pushd failed: dir is [$release_path]"; }
 
+# shellcheck disable=SC2119
 do_logout
 
 # [SEE ALSO]
diff --git a/jjb/shell/github-release/help.sh b/jjb/shell/github-release/help.sh
new file mode 100755
index 0000000..7e409a5
--- /dev/null
+++ b/jjb/shell/github-release/help.sh
@@ -0,0 +1,66 @@
+#!/usr/bin/env bash
+# -----------------------------------------------------------------------
+# Copyright 2018-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: 2018-2024 Open Networking Foundation Contributors
+# SPDX-License-Identifier: Apache-2.0
+# -----------------------------------------------------------------------
+# Intent:
+# builds (with make) and uploads release artifacts (binaries, etc.) to github
+# given a tag also create checksums files and release notes from the commit
+# message
+# -----------------------------------------------------------------------
+
+## ---------------------------------------------------------------------------
+## Intent: Display program usage
+## ---------------------------------------------------------------------------
+function usage()
+{
+    cat <<EOH
+
+Usage: $0
+Usage: make [options] [target] ...
+  --help                      This mesage
+  --pac                       Personal Access Token (path to containing file or a string)
+  --repo-name                 ex: voltctl
+  --repo-org                  ex: opencord
+  --release-notes [f]         Release notes are passed by file argument
+
+[DEBUG]
+  --gen-version               Generate a random release version string.
+  --git-hostname              Git server hostname (default=github.com)
+  --version-file [f]          Read version string from local version file (vs env var)
+                              Assume ./VERSION if [f] not passed
+[MODES]
+  --debug                     Enable script debug mode
+  --draft                     Create a draft release (vs published)
+  --dry-run                   Simulation mode
+  --todo                      Display future enhancement list
+
+All other arguments are pass-through to the gh command.
+
+Usage: $0 --draft --repo-org opencord --repo-name voltctl --git-hostname github.com --pac ~/access.pac
+
+# Troubleshoot credentials:
+Usage: $0 --pac ~/.access.pac --verify
+
+EOH
+
+    return
+}
+
+: # assign $?=0 for source $script
+
+# [EOF]
diff --git a/jjb/shell/github-release/parse-args.sh b/jjb/shell/github-release/parse-args.sh
new file mode 100644
index 0000000..fb79412
--- /dev/null
+++ b/jjb/shell/github-release/parse-args.sh
@@ -0,0 +1,97 @@
+#!/usr/bin/env bash
+# -----------------------------------------------------------------------
+# Copyright 2018-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: 2018-2024 Open Networking Foundation Contributors
+# SPDX-License-Identifier: Apache-2.0
+# -----------------------------------------------------------------------
+# Intent:
+# builds (with make) and uploads release artifacts (binaries, etc.) to github
+# given a tag also create checksums files and release notes from the commit
+# message
+# -----------------------------------------------------------------------
+
+## ---------------------------------------------------------------------------
+## Intent: Parse script command line arguments
+## ---------------------------------------------------------------------------
+function parse_args()
+{
+    while [ $# -gt 0 ]; do
+        local arg="$1"; shift
+        func_echo "ARGV: $arg"
+
+        # shellcheck disable=SC2034
+        case "$arg" in
+
+            -*debug)   declare -i -g debug=1         ;;
+            --draft)   declare -i -g draft_release=1 ;;
+            --dry-run) declare -i -g dry_run=1       ;;
+
+            --version-file)
+                # [TODO] pass arg and infer path from that
+                declare -i -g argv_version_file=1
+
+                if [[ $# -gt 0 ]] && [[ "$1" == *"/VERSION" ]]; then
+                    arg="$1"; shift
+                    [[ ! -e "$arg" ]] && { error "--version-file $arg does not exist"; }
+                    local path="${arg%/*}"
+                    cd "$path" || { error "cd $path: directory does not exist"; }
+                fi
+                ;;
+
+            -*gen-version)
+                declare -g -i argv_gen_version=1
+                ;;
+
+            -*git-hostname)
+                __githost="$1"; shift
+                ;;
+
+            -*release-notes)
+                [[ ! -f "$1" ]] && error "--release-notes: file path required (arg=\"$arg\")"
+                declare -g release_notes="$1"; shift
+                ;;
+
+            -*repo-name)
+                __repo_name="$1"; shift
+                ;;
+
+            -*repo-org)
+                __repo_org="$1"; shift
+                ;;
+
+            -*pac)
+                declare -g pac="$1"; shift
+                readonly pac
+                [[ ! -f "$pac" ]] && error "--token= does not exist ($pac)"
+                : # nop/true
+                ;;
+
+            -*todo) todo ;;
+
+            --self-check) declare -g -i argv_self_check=1 ;;
+
+            -*help) usage; exit 0 ;;
+
+            *) error "Detected unknown argument $arg" ;;
+        esac
+    done
+
+    return
+}
+
+: # assign $?=0 for source $script
+
+# [EOF]
