mirror of
https://github.com/dokku/dokku.git
synced 2025-12-16 12:07:45 +01:00
78 lines
3.2 KiB
Bash
Executable File
78 lines
3.2 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=false
|
|
if fn-git-cmd "$APP_ROOT" rev-parse "$DOKKU_DEPLOY_BRANCH" &>/dev/null; then
|
|
has_code=true
|
|
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 "$@"
|