mirror of
https://github.com/sbrl/Minetest-WorldEditAdditions.git
synced 2024-08-20 13:34:05 +02:00
....unfortunately my CI server is down right now though, so we're still running it manually for now.
166 lines
5.7 KiB
Bash
Executable File
166 lines
5.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -e;
|
|
|
|
# ██████ ██ ██████ ██ ██ ██ ██ ██████
|
|
# ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
|
|
# ██ ██ ██████ ██ ██ ██ ██ ██ ██
|
|
# ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
|
|
# ██████ ██ ██████ ██████ ██ ███████ ██████
|
|
|
|
# This script's purpose is to execute CI build tasks for WorlEditAdditions.
|
|
#
|
|
# Currently this involves building the website & uploading it to the web
|
|
# server (though the upload obviously requires an SSH key).
|
|
#
|
|
# You do NOT need to run this script to use WorldEditAdditions - only to build
|
|
# the website.
|
|
|
|
# If you try and submit malware to this file, you WILL receive a PERMANENT BAN,
|
|
# and I WILL report you to all the places I possibly can.
|
|
|
|
deploy_ssh_user="ci";
|
|
deploy_ssh_host="starbeamrainbowlabs.com";
|
|
deploy_ssh_port="2403";
|
|
|
|
deploy_root_dir="WorldEditAdditions";
|
|
|
|
# Make sure $WORKSPACE is set to ensure compatilibity with a regular shell
|
|
# This is important until we get our CI server back up and running
|
|
WORKSPACE="${WORKSPACE:-$PWD}";
|
|
|
|
###############################################################################
|
|
|
|
log_msg() {
|
|
echo "[ $SECONDS ] >>> $*" >&2;
|
|
}
|
|
|
|
# $1 - Command name to check for
|
|
check_command() {
|
|
set +e;
|
|
which $1 >/dev/null 2>&1; exit_code=$?
|
|
if [[ "${exit_code}" -ne 0 ]]; then
|
|
log_msg "Error: Couldn't locate $1. Make sure it's installed and in your path.";
|
|
fi
|
|
set -e;
|
|
}
|
|
|
|
###############################################################################
|
|
|
|
log_msg "WorldEditAdditions build script starting";
|
|
log_msg "You do NOT need to run this script to use WorldEditAdditions - this script is for my Continuous Integration server to build and deploy the website :-)";
|
|
|
|
check_command node;
|
|
check_command npm;
|
|
check_command npx;
|
|
check_command cat;
|
|
check_command sftp;
|
|
check_command lftp;
|
|
|
|
if [[ -z "${SSH_KEY_PATH}" ]]; then
|
|
echo "Error: SSH_KEY_PATH environment variable is not set.";
|
|
exit 1;
|
|
fi
|
|
|
|
temp_dir="$(mktemp --tmpdir -d "WorldEditAdditions-XXXXXXX")";
|
|
on_exit() {
|
|
rm -rf "${temp_dir}";
|
|
}
|
|
trap on_exit EXIT;
|
|
|
|
###############################################################################
|
|
|
|
|
|
cd "./.docs" || { echo "Failed to cd into ./.docs"; exit 1; };
|
|
|
|
# ██████ ██ ██ ██ ██ ██████
|
|
# ██ ██ ██ ██ ██ ██ ██ ██
|
|
# ██████ ██ ██ ██ ██ ██ ██
|
|
# ██ ██ ██ ██ ██ ██ ██ ██
|
|
# ██████ ██████ ██ ███████ ██████
|
|
|
|
log_msg "Installing website dependencies";
|
|
|
|
npm install;
|
|
|
|
log_msg "Building website";
|
|
|
|
npm run build;
|
|
|
|
if [[ ! -d "_site" ]]; then
|
|
log_msg "Error: No website build output generated (eh?)";
|
|
exit 1;
|
|
fi
|
|
|
|
|
|
# █████ ██████ ██████ ██ ██ ██ ██ ██ ███████
|
|
# ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
|
|
# ███████ ██████ ██ ███████ ██ ██ ██ █████
|
|
# ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
|
|
# ██ ██ ██ ██ ██████ ██ ██ ██ ████ ███████
|
|
|
|
if [[ ! -z "${ARCHIVE}" ]]; then
|
|
log_msg "Archiving content";
|
|
check_command tar;
|
|
check_command gzip;
|
|
|
|
cd "_site" || { echo "Failed to cd into _site"; exit 1; };
|
|
|
|
tar -caf "${ARCHIVE}/WorldEditAdditions-website.tar.gz" .;
|
|
|
|
log_msg "Archived to ${ARCHIVE}/WorldEditAdditions-website.tar.gz:";
|
|
ls -lh "${ARCHIVE}/WorldEditAdditions-website.tar.gz";
|
|
|
|
cd ".." || { echo "Failed to parent directory again"; exit 1; };
|
|
fi
|
|
|
|
|
|
# ██ ██ ██████ ██ ██████ █████ ██████
|
|
# ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
|
|
# ██ ██ ██████ ██ ██ ██ ███████ ██ ██
|
|
# ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
|
|
# ██████ ██ ███████ ██████ ██ ██ ██████
|
|
|
|
log_msg "Acquiring upload lock";
|
|
# Acquire an exclusive project-wide lock so that we only upload stuff one-at-a-time
|
|
exec 9<"${WORKSPACE}";
|
|
flock --exclusive 9;
|
|
|
|
log_msg "Deploying to server";
|
|
|
|
# Actions:
|
|
# [sftp] 1. Connect to remote server
|
|
# [sftp] 2. Upload new files
|
|
# [lftp] 4. Swap in new directory
|
|
# [lftp] 5. Delete old directory
|
|
|
|
sftp -i "${SSH_KEY_PATH}" -P "${deploy_ssh_port}" -o PasswordAuthentication=no "${deploy_ssh_user}@${deploy_ssh_host}" << SFTPCOMMANDS
|
|
mkdir ${deploy_root_dir}/www-new
|
|
put -r _site/* ${deploy_root_dir}/www-new
|
|
bye
|
|
SFTPCOMMANDS
|
|
|
|
lftp_commands_filename="${temp_dir}/commands.lftp";
|
|
|
|
(
|
|
echo "set sftp:connect-program 'ssh -x -i ${SSH_KEY_PATH}'";
|
|
# We have an extra : before the @ here to avoid the password prompt
|
|
echo "connect sftp://${deploy_ssh_user}:@${deploy_ssh_host}:${deploy_ssh_port}";
|
|
|
|
echo "mv \"${deploy_root_dir}/www\" \"${deploy_root_dir}/www-old\"";
|
|
echo "mv \"${deploy_root_dir}/www-new\" \"${deploy_root_dir}/www\"";
|
|
echo "rm -r \"${deploy_root_dir}/www-old\"";
|
|
echo "bye";
|
|
) >"${lftp_commands_filename}";
|
|
|
|
|
|
lftp --version;
|
|
cat "${lftp_commands_filename}";
|
|
lftp -f "${lftp_commands_filename}";
|
|
exit_code=$?
|
|
|
|
log_msg "Releasing lock";
|
|
exec 9>&- # Close file descriptor 9 and release the lock
|
|
|
|
|
|
log_msg "Complete!";
|