70 lines
2.1 KiB
Bash
Executable File
70 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
function error_handler() {
|
|
>&2 echo "Exited with BAD EXIT CODE '${2}' in ${0} script at line: ${1}."
|
|
exit "$2"
|
|
}
|
|
trap 'error_handler ${LINENO} $?' ERR
|
|
set -o errtrace -o errexit -o nounset -o pipefail
|
|
|
|
# HELP: git adds and commits the entire BPMN models directory, including all process groups
|
|
|
|
bpmn_models_absolute_dir="$1"
|
|
git_commit_message="$2"
|
|
git_branch="$3"
|
|
git_commit_username="$4"
|
|
git_commit_email="$5"
|
|
git_commit_password="$6"
|
|
|
|
if [[ -z "${5:-}" ]]; then
|
|
>&2 echo "usage: $(basename "$0") [bpmn_models_absolute_dir] [git_commit_message] [git_branch] [git_commit_username] [git_commit_email]"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z "$git_commit_password" && -z "${SPIFFWORKFLOW_BACKEND_GIT_SSH_PRIVATE_KEY:-}" ]]; then
|
|
>&2 echo "ERROR: A git password or SPIFFWORKFLOW_BACKEND_GIT_SSH_PRIVATE_KEY must be provided"
|
|
exit 1
|
|
fi
|
|
|
|
function failed_to_get_lock() {
|
|
>&2 echo "ERROR: Failed to get lock."
|
|
exit 1
|
|
}
|
|
|
|
function run() {
|
|
cd "$bpmn_models_absolute_dir"
|
|
git add .
|
|
|
|
# https://unix.stackexchange.com/a/155077/456630
|
|
if [ -z "$(git status --porcelain)" ]; then
|
|
echo "No changes to commit"
|
|
else
|
|
|
|
git config --local user.name "$git_commit_username"
|
|
git config --local user.email "$git_commit_email"
|
|
|
|
if [[ -n "${SPIFFWORKFLOW_BACKEND_GIT_SSH_PRIVATE_KEY:-}" ]]; then
|
|
tmpfile=$(mktemp /tmp/tmp_git.XXXXXX)
|
|
chmod 600 "$tmpfile"
|
|
echo "$SPIFFWORKFLOW_BACKEND_GIT_SSH_PRIVATE_KEY" >"$tmpfile"
|
|
export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i ${tmpfile} -F /dev/null"
|
|
else
|
|
PAT="${git_commit_username}:${git_commit_password}"
|
|
AUTH=$(echo -n "$PAT" | openssl base64 | tr -d '\n')
|
|
git config --local http.extraHeader "Authorization: Basic $AUTH"
|
|
fi
|
|
|
|
git commit -m "$git_commit_message"
|
|
git push --set-upstream origin "$git_branch"
|
|
|
|
if [[ -z "${SPIFFWORKFLOW_BACKEND_GIT_SSH_PRIVATE_KEY:-}" ]]; then
|
|
git config --unset --local http.extraHeader
|
|
fi
|
|
fi
|
|
}
|
|
|
|
exec {lock_fd}>/var/lock/mylockfile || failed_to_get_lock
|
|
flock --timeout 60 "$lock_fd" || failed_to_get_lock
|
|
run
|
|
flock -u "$lock_fd"
|