#
################################################################################
#
-# Name: lf-echo-stderr
+# NAME
+# lf-echo-stderr
#
# SYNOPSIS
# source ~/lf-env.sh
#
################################################################################
-function lf-echo-stderr() { echo "$@" 1>&2; }
+lf-echo-stderr () {
+ echo "$@" 1>&2
+}
################################################################################
#
# NAME
-# lf-boolean()
+# lf-boolean
#
# SYNOPSIS
# # shellcheck disable=SC1090
#
################################################################################
-function lf-boolean()
-{
+lf-boolean () {
if (( $# != 1 )); then
- echo "ERROR: ${FUNCNAME[0]}() line: ${BASH_LINENO[0]} : Missing Required Argument"
+ echo "ERROR: ${FUNCNAME[0]}() line: ${BASH_LINENO[0]} :"\
+ " Missing Required Argument"
return 1
fi
local bool
true) return 0 ;;
false) return 1 ;;
'')
- lf-echo-stderr "ERROR: ${FUNCNAME[0]}() line:{BASH_LINENO[0]} : A boolean cannot be a empty string" >&2
- return 2
- ;;
+ lf-echo-stderr "ERROR: ${FUNCNAME[0]}() line:{BASH_LINENO[0]} :"\
+ " A boolean cannot be a empty string" >&2
+ return 2
+ ;;
*)
- lf-echo-stderr "ERROR: ${FUNCNAME[0]}() line: ${BASH_LINENO[0]} : Invalid value for a boolean: '$bool'"
+ lf-echo-stderr "ERROR: ${FUNCNAME[0]}() line: ${BASH_LINENO[0]} :"\
+ " Invalid value for a boolean: '$bool'"
return 2
;;
esac
# or
# lf-activate-venv lftools
# or
-# lf-activate-venv --python 3.6 git-review
+# lf-activate-venv --python python3.8 git-review
#
# DESCRIPTION
# This function will create a new Python Virtual Environment (venv) and
#
################################################################################
-function lf-activate-venv()
-{
+lf-activate-venv () {
lf_venv=$(mktemp -d /tmp/venv-XXXX)
local python=python3
local options
local set_path=true
local install_args=""
- options=$(getopt -o 'n:p:' -l 'no-path,python:,system-site-packages' -n "${FUNCNAME[0]}" -- "$@" )
+ options=$(getopt -o 'n:p:' -l 'no-path,python:,system-site-packages' \
+ -n "${FUNCNAME[0]}" -- "$@" )
eval set -- "$options"
while true; do
case $1 in
-n|--no-path) set_path=false ; shift ;;
-p|--python) python=$2 ; shift 2 ;;
- --system-site-packages) install_args="--system-site-packages" ; shift ;;
+ --system-site-packages) install_args="--system-site-packages" ;
+ shift ;;
--) shift; break ;;
- *) lf-echo-stderr "${FUNCNAME[0]}(): ERROR: Unknown switch '$1'." ; return 1 ;;
+ *) lf-echo-stderr \
+ "${FUNCNAME[0]}(): ERROR: Unknown switch '$1'." ;
+ return 1 ;;
esac
done
- if ! type "$python" > /dev/null; then
- lf-echo-stderr "${FUNCNAME[0]}(): ERROR: Unknown Python: $python"
- return 1
- fi
echo "${FUNCNAME[0]}(): INFO: Creating $python venv at $lf_venv"
;;
python3*)
local pkg_list=""
+ # Use pyenv for selecting the python version
+ if [[ -d "/opt/pyenv" ]]; then
+ # set_python_version = pyver "${python//[a-zA-Z]/}"
+ echo "---> Setting up pyenv"
+ export PYENV_ROOT="/opt/pyenv"
+ export PATH="$PYENV_ROOT/bin:$PATH"
+ pyenv versions
+ if command -v pyenv 1>/dev/null 2>&1; then
+ eval "$(pyenv init - --no-rehash)"
+ pyenv local $(lf-pyver "${python}")
+ fi
+ fi
# Add version specifier for some packages
for arg in "$@"; do
case $arg in
- jenkins-job-builder) pkg_list+="jenkins-job-builder==${JJB_VERSION:-2.8.0} " ;;
+ jenkins-job-builder)
+ pkg_list+="jenkins-job-builder==${JJB_VERSION:-2.8.0} " ;;
*) pkg_list+="$arg " ;;
esac
done
# $pkg_list is expected to be unquoted
# shellcheck disable=SC2086
"$lf_venv/bin/pip" install --upgrade --quiet --upgrade-strategy eager \
- $pkg_list || return 1
+ $pkg_list || return 1
;;
*)
lf-echo-stderr "${FUNCNAME[0]}(): ERROR: No support for: $python"
return 1
;;
esac
+
+ if ! type "$python" > /dev/null; then
+ lf-echo-stderr "${FUNCNAME[0]}(): ERROR: Unknown Python: $python"
+ return 1
+ fi
+
if $set_path; then
echo "${FUNCNAME[0]}(): INFO: Adding $lf_venv/bin to PATH"
PATH=$lf_venv/bin:$PATH
echo "${FUNCNAME[0]}(): INFO: Path not set, lf_venv set to: $lf_venv"
fi
-} # End lf-activate-venv()
+} # End lf-activate-venv
################################################################################
#
#
################################################################################
-function lf-git-validate-jira-urls()
-{
+lf-git-validate-jira-urls () {
echo "Checking for JIRA URLs in commit message..."
# if JIRA_URL is not defined, nothing to do
if [[ -v JIRA_URL ]]; then
base_url=$(echo "$JIRA_URL" | awk -F'/' '{print $3}')
- jira_link=$(git rev-list --format=%B --max-count=1 HEAD | grep -io "http[s]*://$base_url/" || true)
+ jira_link=$(git rev-list --format=%B --max-count=1 HEAD | \
+ grep -io "http[s]*://$base_url/" || true)
if [[ -n $jira_link ]]; then
- lf-echo-stderr "${FUNCNAME[0]}(): ERROR: JIRA URL found in commit message"
- lf-echo-stderr 'Add jira references as: Issue: <JIRAKEY>-<ISSUE#>, instead of URLs'
+ lf-echo-stderr \
+ "${FUNCNAME[0]}(): ERROR: JIRA URL found in commit message"
+ lf-echo-stderr \
+ 'Add jira references as: Issue: <JIRAKEY>-<ISSUE#>,'\
+ ' instead of URLs'
return 1
fi
else
################################################################################
#
# NAME
-# lf-jjb-check-ascii()
+# lf-jjb-check-ascii
#
# SYNOPSIS
# # shellcheck disable=SC1090
#
################################################################################
-function lf-jjb-check-ascii()
-{
+lf-jjb-check-ascii () {
if [[ ! -d "jjb" ]]; then
lf-echo-stderr "${FUNCNAME[0]}(): ERROR: missing jjb directory"
- lf-echo-stderr "This function can only be run from top of global-jjb directory"
+ lf-echo-stderr \
+ "This function can only be run from top of global-jjb directory"
return 1
fi
if LC_ALL=C grep -I -r '[^[:print:][:space:]]' jjb/; then
- lf-echo-stderr "${FUNCNAME[0]}(): ERROR: Found YAML files containing non-printable characters."
+ lf-echo-stderr \
+ "${FUNCNAME[0]}(): ERROR: Found YAML files containing"\
+ " non-printable characters."
return 1
fi
- echo "${FUNCNAME[0]}(): INFO: All JJB YAML files contain only printable ASCII characters"
+ echo "${FUNCNAME[0]}(): INFO: All JJB YAML files contain only printable"\
+ " ASCII characters"
return 0
}
# Shellcheck knows they are shell variables and will check for
# 'used-before-set'.
-function lf-set-maven-options()
-{
+lf-set-maven-options () {
# Disable 'unused-variable' check
# shellcheck disable=SC2034
maven_options="--show-version --batch-mode -Djenkins \
- -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \
- -Dmaven.repo.local=/tmp/r -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r"
+ -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.\
+ transfer.Slf4jMavenTransferListener=warn \
+ -Dmaven.repo.local=/tmp/r \
+ -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r"
+}
+
+################################################################################
+#
+# NAME
+# lf-pyver [python-version X.Y]
+#
+# SYNOPSIS
+# pyver 3.8 (outputs 3.8.13)
+# or
+# pyver 3.10 (outputs 3.10.6)
+# or
+# pyver 3 (outputs the most recent version 3.10.6)
+#
+# DESCRIPTION
+# The function takes short python version in the format and X.Y and prints
+# the semver format (X.Y.Z) of the version that has been installed on the system
+# with pyenv.
+#
+# When the expected version is not installed, nothing is returned.
+#
+# RETURN VALUES
+# OK: 0
+# Fail: 1
+#
+################################################################################
+
+lf-pyver() {
+ local py_version_xy="${1:-python3}"
+ local py_version_xyz=""
+
+ pyenv versions | sed 's/^[ *]* //' | awk '{ print $1 }' | grep -E '^[0-9.]*[0-9]$' \
+ > "/tmp/.pyenv_versions"
+ if [[ ! -s "/tmp/.pyenv_versions" ]]; then
+ lf-echo-stderr "${FUNCNAME[0]}(): ERROR: pyenv not available"
+ return 1
+ fi
+
+ # strip out any prefix for (ex: 'python3.8' or 'v3.8') and match regex
+ # to the output return by pyenv
+ py_version_xyz=$(grep "^${py_version_xy//[a-zA-Z]/}" "/tmp/.pyenv_versions" |
+ sort -V | tail -n 1;)
+ if [[ -z ${py_version_xyz} ]]; then
+ lf-echo-stderr "${FUNCNAME[0]}(): ERROR: Not installed on host: ${py_version_xy}"
+ return 1
+ fi
+ echo "${py_version_xyz}"
+ return 0
}