6 Commits

4 changed files with 76 additions and 6 deletions

View File

@@ -22,6 +22,8 @@ SUDO_USER="<SUDO USER NAME TO USE>"
USE_SUDO=<1: use sudo, 0: no sudo used> USE_SUDO=<1: use sudo, 0: no sudo used>
``` ```
The script will create the sudo user if needed automatically
### base_setup.sh ### base_setup.sh
as is, if the folder exists it will only copy the scripts, will not alter or change anything. as is, if the folder exists it will only copy the scripts, will not alter or change anything.

View File

@@ -39,6 +39,15 @@ if [ "$(whoami)" != "root" ]; then
error=1; error=1;
fi; fi;
if [ -z "$(command -v setfacl)" ]; then
echo "Missing setfacl command, aborting";
error=1;
fi;
if [ -z "$(command -v git)" ]; then
echo "Missing git command, aborting";
error=1;
fi;
if [ $error -eq 1 ]; then if [ $error -eq 1 ]; then
exit; exit;
fi; fi;
@@ -75,14 +84,21 @@ if [ -d "${GIT_WEBHOOK_BASE_FOLDER}" ]; then
echo "[TODO] -> Not implemented: check folder, check ACL"; echo "[TODO] -> Not implemented: check folder, check ACL";
# copy scripts & default config # copy scripts & default config
echo "~ Copy basic script and config files"; echo "~ Copy basic script and config files";
# git_sync.sh, init.sh, new_clone.sh, webhook.default.cfg # git_sync.sh, init.sh, new_clone.sh, switch_branch.sh, webhook.default.cfg
cp "${BASE_FOLDER}new_clone.sh" "${BASE_FOLDER}init.sh" "${BASE_FOLDER}git_sync.sh" "${GIT_WEBHOOK_BASE_FOLDER}${CLONE_SCRIPTS_FOLDER}"; cp \
cp "${CONFIG_BASE}/webhook.default.cfg" "${GIT_WEBHOOK_BASE_FOLDER}${CONFIG_FOLDER}"; "${BASE_FOLDER}new_clone.sh" \
"${BASE_FOLDER}init.sh" \
"${BASE_FOLDER}git_sync.sh" \
"${BASE_FOLDER}switch_branch.sh" \
"${GIT_WEBHOOK_BASE_FOLDER}${CLONE_SCRIPTS_FOLDER}";
cp "${CONFIG_BASE}/webhook.default.cfg" \
"${GIT_WEBHOOK_BASE_FOLDER}${CONFIG_FOLDER}";
# and make sure they are all owned by the correct user # and make sure they are all owned by the correct user
chown "${SUDO_USER}" \ chown "${SUDO_USER}" \
"${BASE_FOLDER}new_clone.sh" \ "${BASE_FOLDER}new_clone.sh" \
"${BASE_FOLDER}init.sh" \ "${BASE_FOLDER}init.sh" \
"${BASE_FOLDER}git_sync.sh" \ "${BASE_FOLDER}git_sync.sh" \
"${BASE_FOLDER}switch_branch.sh" \
"${CONFIG_BASE}/webhook.default.cfg"; "${CONFIG_BASE}/webhook.default.cfg";
# check config entries missing # check config entries missing
exit; exit;
@@ -159,13 +175,22 @@ EOF
# Copy files # Copy files
echo "+ Copy basic script and config files"; echo "+ Copy basic script and config files";
# git_sync.sh, init.sh, new_clone.sh, webhook.default.cfg # git_sync.sh, init.sh, new_clone.sh, webhook.default.cfg
cp "${BASE_FOLDER}new_clone.sh" "${BASE_FOLDER}init.sh" "${BASE_FOLDER}git_sync.sh" "${GIT_WEBHOOK_BASE_FOLDER}${CLONE_SCRIPTS_FOLDER}"; cp \
cp "${CONFIG_BASE}/webhook.cfg" "${CONFIG_BASE}/webhook.default.cfg" "${GIT_WEBHOOK_BASE_FOLDER}${CONFIG_FOLDER}"; "${BASE_FOLDER}new_clone.sh" \
"${BASE_FOLDER}init.sh" \
"${BASE_FOLDER}git_sync.sh" \
"${BASE_FOLDER}switch_branch.sh" \
"${GIT_WEBHOOK_BASE_FOLDER}${CLONE_SCRIPTS_FOLDER}";
cp \
"${CONFIG_BASE}/webhook.cfg" \
"${CONFIG_BASE}/webhook.default.cfg" \
"${GIT_WEBHOOK_BASE_FOLDER}${CONFIG_FOLDER}";
# and make sure they are all owned by the correct user # and make sure they are all owned by the correct user
chown "${SUDO_USER}" \ chown "${SUDO_USER}" \
"${BASE_FOLDER}new_clone.sh" \ "${BASE_FOLDER}new_clone.sh" \
"${BASE_FOLDER}init.sh" \ "${BASE_FOLDER}init.sh" \
"${BASE_FOLDER}git_sync.sh" \ "${BASE_FOLDER}git_sync.sh" \
"${BASE_FOLDER}switch_branch.sh" \
"${CONFIG_BASE}/webhook.cfg" \ "${CONFIG_BASE}/webhook.cfg" \
"${CONFIG_BASE}/webhook.default.cfg"; "${CONFIG_BASE}/webhook.default.cfg";
fi; fi;

View File

@@ -47,7 +47,7 @@ else
SSH_TEST=("${SUDO_COMMAND[@]}" "ssh" "${REMOTE_HOST}"); SSH_TEST=("${SUDO_COMMAND[@]}" "ssh" "${REMOTE_HOST}");
result=$("${SSH_TEST[@]}" 2>&1); result=$("${SSH_TEST[@]}" 2>&1);
# this can be key or deploy key # this can be key or deploy key
validate_string="You've successfully authenticated with the " validate_string="You've successfully authenticated"
if [[ "$result" != *"$validate_string"* ]]; then if [[ "$result" != *"$validate_string"* ]]; then
echo "Could not connect to ${REMOTE_HOST}: ${result}"; echo "Could not connect to ${REMOTE_HOST}: ${result}";
error=1; error=1;

43
src/bin/switch_branch.sh Executable file
View File

@@ -0,0 +1,43 @@
#!/usr/bin/env bash
# AUTHOR: Clemens Schwaighofer
# DATE: 2025/7/15
# DESC: Switch a branch, run this script if we have to switch to a different branch
# If not the new branch will merge into the branch that was originally selected
REPOSITORY="$1";
BRANCH="$2";
REMOTE_NAME="$3";
if [ -z "${REMOTE_NAME}" ]; then
REMOTE_NAME="origin"
fi;
BASE_FOLDER=$(dirname "$(readlink -f "$0")")"/";
# shellcheck source=init.sh
. "${BASE_FOLDER}init.sh";
GIT_REPOSITORY_FOLDER="${GIT_WEBHOOK_BASE_FOLDER}${CLONE_BASE}${REPOSITORY}";
if [ ! -d "${GIT_REPOSITORY_FOLDER}" ]; then
echo "[!] ${REPOSITORY} not found in clone folder";
echo "[!] Full path: ${GIT_REPOSITORY_FOLDER}";
exit;
fi;
LOG_FILE="${GIT_WEBHOOK_BASE_FOLDER}${LOG_FOLDER}${REPOSITORY}.log";
unique_id=$(uuidgen | tr -d '-' | head -c 8);
echo "[$(date +"%Y-%m-%d %H:%M:%S")] [${unique_id}] [START] On repository ${GIT_REPOSITORY_FOLDER} switch to branch ${REMOTE_NAME}/${BRANCH}" | tee -a "$LOG_FILE";
# add new branch to remote
GIT_COMMAND=("${GIT_COMMAND_BASE[@]}" "-C" "${GIT_REPOSITORY_FOLDER}" "remote" "set-branches" "--add" "${REMOTE_NAME}" "${BRANCH}")
"${GIT_COMMAND[@]}" 2>&1 | tee -a "$LOG_FILE";
# fetch new branch
GIT_COMMAND=("${GIT_COMMAND_BASE[@]}" "-C" "${GIT_REPOSITORY_FOLDER}" "fetch" "--depth" "1" "${REMOTE_NAME}" "${BRANCH}")
"${GIT_COMMAND[@]}" 2>&1 | tee -a "$LOG_FILE";
# checkout new branch
GIT_COMMAND=("${GIT_COMMAND_BASE[@]}" "-C" "${GIT_REPOSITORY_FOLDER}" "checkout" "${BRANCH}");
"${GIT_COMMAND[@]}" 2>&1 | tee -a "$LOG_FILE";
# get the latest changes from branch
GIT_COMMAND=("${GIT_COMMAND_BASE[@]}" "-C" "${GIT_REPOSITORY_FOLDER}" "pull" "${REMOTE_NAME}" "${BRANCH}")
"${GIT_COMMAND[@]}" 2>&1 | tee -a "$LOG_FILE";
echo "[$(date +"%Y-%m-%d %H:%M:%S")] [${unique_id}] [END] branch switch done" | tee -a "$LOG_FILE";
# __END__