Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 222cc2594d | |||
| cb3226308f | |||
| 513705cc40 | |||
| 788064d019 | |||
| 77ec20a768 | |||
| aaab6af22e | |||
| 031d820f13 |
@@ -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.
|
||||||
|
|||||||
@@ -39,16 +39,33 @@ 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;
|
||||||
|
|
||||||
# Define base folders
|
# Define base folders
|
||||||
|
# folder where all the repositories are located
|
||||||
CLONE_BASE="clone-base/"
|
CLONE_BASE="clone-base/"
|
||||||
|
# log folder for all log files
|
||||||
LOG_FOLDER="log/"
|
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/"
|
SECRETS_FOLDER="secrets/"
|
||||||
|
# overall config file
|
||||||
CONFIG_FOLDER="config/"
|
CONFIG_FOLDER="config/"
|
||||||
|
# admin/webhook web interface
|
||||||
WWW_BASE="www/"
|
WWW_BASE="www/"
|
||||||
WWW_WEBHOOK_INCOMING="${WWW_BASE}webhook-incoming";
|
WWW_WEBHOOK_INCOMING="${WWW_BASE}webhook-incoming";
|
||||||
WWW_ADMIN="${WWW_BASE}admin";
|
WWW_ADMIN="${WWW_BASE}admin";
|
||||||
@@ -67,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}${SCRIPT_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;
|
||||||
@@ -119,12 +143,13 @@ EOF
|
|||||||
fi;
|
fi;
|
||||||
fi;
|
fi;
|
||||||
# All other FOLDER
|
# 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}" \
|
sudo -u "${SUDO_USER}" \
|
||||||
mkdir -p \
|
mkdir -p \
|
||||||
"${GIT_WEBHOOK_BASE_FOLDER}${CLONE_BASE}" \
|
"${GIT_WEBHOOK_BASE_FOLDER}${CLONE_BASE}" \
|
||||||
"${GIT_WEBHOOK_BASE_FOLDER}${LOG_FOLDER}" \
|
"${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}${CONFIG_FOLDER}" \
|
||||||
"${GIT_WEBHOOK_BASE_FOLDER}${SECRETS_FOLDER}" \
|
"${GIT_WEBHOOK_BASE_FOLDER}${SECRETS_FOLDER}" \
|
||||||
"${GIT_WEBHOOK_BASE_FOLDER}${WWW_WEBHOOK_INCOMING}" \
|
"${GIT_WEBHOOK_BASE_FOLDER}${WWW_WEBHOOK_INCOMING}" \
|
||||||
@@ -132,7 +157,8 @@ EOF
|
|||||||
# set basic folder rights, clone folder is excluded
|
# set basic folder rights, clone folder is excluded
|
||||||
sudo -u "${SUDO_USER}" chmod 700 \
|
sudo -u "${SUDO_USER}" chmod 700 \
|
||||||
"${GIT_WEBHOOK_BASE_FOLDER}${LOG_FOLDER}" \
|
"${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}${CONFIG_FOLDER}" \
|
||||||
"${GIT_WEBHOOK_BASE_FOLDER}${SECRETS_FOLDER}" \
|
"${GIT_WEBHOOK_BASE_FOLDER}${SECRETS_FOLDER}" \
|
||||||
"${GIT_WEBHOOK_BASE_FOLDER}${WWW_WEBHOOK_INCOMING}" \
|
"${GIT_WEBHOOK_BASE_FOLDER}${WWW_WEBHOOK_INCOMING}" \
|
||||||
@@ -149,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}${SCRIPT_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;
|
||||||
|
|||||||
@@ -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
43
src/bin/switch_branch.sh
Executable 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__
|
||||||
Reference in New Issue
Block a user