#!/bin/bash set -euo pipefail repository_url="https://codeberg.org/simoncarrignon/EACompanion.git" repository_dir="/srv/EACompanion" web_root="/var/www/html/randomdrift" releases_dir="${web_root}/.EACompanion-releases" public_link="${web_root}/EACompanion" exec 9>/run/lock/eacompanion-deploy.lock flock -n 9 || exit 0 if [[ ! -d "${repository_dir}/.git" ]]; then git clone --branch main --single-branch "${repository_url}" "${repository_dir}" fi git -C "${repository_dir}" fetch --prune origin main revision="$(git -C "${repository_dir}" rev-parse FETCH_HEAD)" release_dir="${releases_dir}/${revision}" if [[ -f "${release_dir}/index.html" ]] && [[ "$(readlink -f "${public_link}" 2>/dev/null || true)" == "${release_dir}" ]]; then chmod 0755 "${release_dir}" exit 0 fi git -C "${repository_dir}" checkout --detach --force "${revision}" mkdir -p "${releases_dir}" if [[ ! -f "${release_dir}/index.html" ]]; then staging_dir="$(mktemp -d "${releases_dir}/.${revision}.XXXXXX")" trap 'rm -rf -- "${staging_dir}"' EXIT cd "${repository_dir}" EA_OUTPUT_DIR="${staging_dir}" Rscript -e \ 'bookdown::render_book("index.Rmd", output_format = "bookdown::gitbook", output_dir = Sys.getenv("EA_OUTPUT_DIR"), clean = TRUE)' test -f "${staging_dir}/index.html" mv "${staging_dir}" "${release_dir}" trap - EXIT fi chmod 0755 "${release_dir}" temporary_link="${public_link}.new" ln -sfn "${release_dir}" "${temporary_link}" mv -Tf "${temporary_link}" "${public_link}"