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]
