3 Commits

Author SHA1 Message Date
77ec20a768 Make switch branch executable 2025-07-15 09:47:20 +09:00
aaab6af22e Add switch branch script 2025-07-15 09:23:13 +09:00
031d820f13 Add a deploy-scripts folder 2025-07-09 14:30:24 +09:00
2 changed files with 78 additions and 9 deletions

View File

@@ -44,11 +44,19 @@ if [ $error -eq 1 ]; then
fi;
# Define base folders
# folder where all the repositories are located
CLONE_BASE="clone-base/"
# log folder for all log files
LOG_FOLDER="log/"
SCRIPT_FOLDER="scripts/"
# sync/lone/etc scripts
CLONE_SCRIPTS_FOLDER="scripts/"
# any scripts that have to be run before deploy
DEPLOY_SCRIPTS="deploy-scripts/";
# any secrets that might be needed after clone
SECRETS_FOLDER="secrets/"
# overall config file
CONFIG_FOLDER="config/"
# admin/webhook web interface
WWW_BASE="www/"
WWW_WEBHOOK_INCOMING="${WWW_BASE}webhook-incoming";
WWW_ADMIN="${WWW_BASE}admin";
@@ -67,14 +75,21 @@ if [ -d "${GIT_WEBHOOK_BASE_FOLDER}" ]; then
echo "[TODO] -> Not implemented: check folder, check ACL";
# copy scripts & default config
echo "~ Copy basic script and config files";
# 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}${SCRIPT_FOLDER}";
cp "${CONFIG_BASE}/webhook.default.cfg" "${GIT_WEBHOOK_BASE_FOLDER}${CONFIG_FOLDER}";
# 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" \
"${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
chown "${SUDO_USER}" \
"${BASE_FOLDER}new_clone.sh" \
"${BASE_FOLDER}init.sh" \
"${BASE_FOLDER}git_sync.sh" \
"${BASE_FOLDER}switch_branch.sh" \
"${CONFIG_BASE}/webhook.default.cfg";
# check config entries missing
exit;
@@ -119,12 +134,13 @@ EOF
fi;
fi;
# All other FOLDER
echo "+ Other folders for clone base: ${CLONE_BASE}, ${LOG_FOLDER}, ${SCRIPT_FOLDER}, ${CONFIG_FOLDER}, ${WWW_WEBHOOK_INCOMING}, ${WWW_ADMIN}"
echo "+ Other folders for clone base: ${CLONE_BASE}, ${LOG_FOLDER}, ${CLONE_SCRIPTS_FOLDER}, ${CONFIG_FOLDER}, ${WWW_WEBHOOK_INCOMING}, ${WWW_ADMIN}"
sudo -u "${SUDO_USER}" \
mkdir -p \
"${GIT_WEBHOOK_BASE_FOLDER}${CLONE_BASE}" \
"${GIT_WEBHOOK_BASE_FOLDER}${LOG_FOLDER}" \
"${GIT_WEBHOOK_BASE_FOLDER}${SCRIPT_FOLDER}" \
"${GIT_WEBHOOK_BASE_FOLDER}${CLONE_SCRIPTS_FOLDER}" \
"${GIT_WEBHOOK_BASE_FOLDER}${DEPLOY_SCRIPTS}" \
"${GIT_WEBHOOK_BASE_FOLDER}${CONFIG_FOLDER}" \
"${GIT_WEBHOOK_BASE_FOLDER}${SECRETS_FOLDER}" \
"${GIT_WEBHOOK_BASE_FOLDER}${WWW_WEBHOOK_INCOMING}" \
@@ -132,7 +148,8 @@ EOF
# set basic folder rights, clone folder is excluded
sudo -u "${SUDO_USER}" chmod 700 \
"${GIT_WEBHOOK_BASE_FOLDER}${LOG_FOLDER}" \
"${GIT_WEBHOOK_BASE_FOLDER}${SCRIPT_FOLDER}" \
"${GIT_WEBHOOK_BASE_FOLDER}${CLONE_SCRIPTS_FOLDER}" \
"${GIT_WEBHOOK_BASE_FOLDER}${DEPLOY_SCRIPTS}" \
"${GIT_WEBHOOK_BASE_FOLDER}${CONFIG_FOLDER}" \
"${GIT_WEBHOOK_BASE_FOLDER}${SECRETS_FOLDER}" \
"${GIT_WEBHOOK_BASE_FOLDER}${WWW_WEBHOOK_INCOMING}" \
@@ -149,13 +166,22 @@ EOF
# Copy files
echo "+ Copy basic script and config files";
# 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}${SCRIPT_FOLDER}";
cp "${CONFIG_BASE}/webhook.cfg" "${CONFIG_BASE}/webhook.default.cfg" "${GIT_WEBHOOK_BASE_FOLDER}${CONFIG_FOLDER}";
cp \
"${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
chown "${SUDO_USER}" \
"${BASE_FOLDER}new_clone.sh" \
"${BASE_FOLDER}init.sh" \
"${BASE_FOLDER}git_sync.sh" \
"${BASE_FOLDER}switch_branch.sh" \
"${CONFIG_BASE}/webhook.cfg" \
"${CONFIG_BASE}/webhook.default.cfg";
fi;

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__