mirror of
https://github.com/dokku/dokku.git
synced 2025-12-16 12:07:45 +01:00
This makes standard use of shellcheck work without needing to provide extra configuration anywhere. Also remove use of inline 'shellcheck disable' calls that are already defined in the .shellcheckrc and don't need to be set inline.
79 lines
3.3 KiB
Bash
Executable File
79 lines
3.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
source "$PLUGIN_CORE_AVAILABLE_PATH/common/property-functions"
|
|
source "$PLUGIN_AVAILABLE_PATH/git/functions"
|
|
source "$PLUGIN_AVAILABLE_PATH/git/internal-functions"
|
|
set -eo pipefail
|
|
[[ $DOKKU_TRACE ]] && set -x
|
|
|
|
trigger-git-git-from-directory() {
|
|
declare desc="updates a repository from a directory"
|
|
declare trigger="git-from-directory"
|
|
declare APP="$1" SOURCECODE_WORK_DIR="$2" USER_NAME="${3:-Dokku}" USER_EMAIL="${4:-automated@dokku.sh}"
|
|
|
|
local APP_ROOT="$DOKKU_ROOT/$APP"
|
|
local DOKKU_DEPLOY_BRANCH="$(fn-git-deploy-branch "$APP")"
|
|
local REV
|
|
local TMP_WORK_DIR=$(mktemp -d "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX")
|
|
local TMP_WORK_DIR_2=$(mktemp -d "/tmp/dokku-${DOKKU_PID}-${FUNCNAME[0]}.XXXXXX")
|
|
trap "rm -rf '$TMP_WORK_DIR' '$TMP_WORK_DIR_2' >/dev/null" RETURN INT TERM EXIT
|
|
|
|
local has_code=true
|
|
local git_objects="$(fn-git-cmd "$APP_ROOT" count-objects 2>/dev/null || true)"
|
|
if [[ -z "$git_objects" ]] || [[ "$git_objects" == "0 objects, 0 kilobytes" ]]; then
|
|
local has_code=false
|
|
fi
|
|
|
|
dokku_log_info1 "Updating git repository with specified build context"
|
|
if [[ "$has_code" == "false" ]]; then
|
|
# setup new repo
|
|
local DEPLOY_BRANCH="$(fn-git-deploy-branch "$APP")"
|
|
cp -rT "$SOURCECODE_WORK_DIR" "$TMP_WORK_DIR"
|
|
suppress_output fn-git-cmd "$TMP_WORK_DIR" init
|
|
suppress_output fn-git-cmd "$TMP_WORK_DIR" checkout -b "$DEPLOY_BRANCH"
|
|
suppress_output fn-git-cmd "$TMP_WORK_DIR" config init.defaultBranch "$DEPLOY_BRANCH"
|
|
suppress_output fn-git-cmd "$TMP_WORK_DIR" config user.name "$USER_NAME"
|
|
suppress_output fn-git-cmd "$TMP_WORK_DIR" config user.email "$USER_EMAIL"
|
|
suppress_output fn-git-cmd "$TMP_WORK_DIR" add --all
|
|
suppress_output fn-git-cmd "$TMP_WORK_DIR" commit -m "Initial commit"
|
|
|
|
REV="$(fn-git-cmd "$TMP_WORK_DIR" rev-parse HEAD)"
|
|
fn-git-create-hook "$APP"
|
|
fn-git-clone "$APP" "$TMP_WORK_DIR" "$DEPLOY_BRANCH"
|
|
else
|
|
# update existing repo
|
|
GIT_TERMINAL_PROMPT=0 suppress_output git clone "$APP_ROOT" "$TMP_WORK_DIR_2"
|
|
cp -rT "$SOURCECODE_WORK_DIR" "$TMP_WORK_DIR"
|
|
mv "$TMP_WORK_DIR_2/.git" "$TMP_WORK_DIR/.git"
|
|
suppress_output fn-git-cmd "$TMP_WORK_DIR" config user.name "$USER_NAME"
|
|
suppress_output fn-git-cmd "$TMP_WORK_DIR" config user.email "$USER_EMAIL"
|
|
suppress_output fn-git-cmd "$TMP_WORK_DIR" add --all
|
|
suppress_output fn-git-cmd "$TMP_WORK_DIR" update-index --refresh
|
|
if suppress_output fn-git-cmd "$TMP_WORK_DIR" diff-index --quiet HEAD --; then
|
|
dokku_log_warn "No changes detected, skipping git commit"
|
|
dokku_log_warn "Call 'ps:rebuild' on app to rebuild the app from existing source"
|
|
return 1
|
|
fi
|
|
|
|
suppress_output fn-git-cmd "$TMP_WORK_DIR" commit -m "Automated commit @ $(date +%s)"
|
|
|
|
REV="$(fn-git-cmd "$TMP_WORK_DIR" rev-parse HEAD)"
|
|
fn-git-fetch "$APP" "$TMP_WORK_DIR" "$REV"
|
|
fi
|
|
|
|
rm -rf "$TMP_WORK_DIR" "$TMP_WORK_DIR_2" >/dev/null
|
|
if git_receive_app "$APP" "$REV"; then
|
|
return
|
|
else
|
|
local exit_code=$?
|
|
local DOKKU_DEPLOY_BRANCH="$(fn-git-deploy-branch "$APP")"
|
|
if [[ "$has_code" == "false" ]]; then
|
|
fn-git-cmd "$APP_ROOT" update-ref -d HEAD
|
|
else
|
|
fn-git-cmd "$APP_ROOT" update-ref "refs/heads/$DOKKU_DEPLOY_BRANCH" "$DOKKU_DEPLOY_BRANCH^"
|
|
fi
|
|
return "$exit_code"
|
|
fi
|
|
}
|
|
|
|
trigger-git-git-from-directory "$@"
|