#!/bin/bash # theme repository THEME_REPO=$HOME/repositories/danix2-hugo-theme.git # repository logical name REPO="danix.xyz-2" # Directory where to work on our site TARGET_DIR=/tmp/danix.xyz-compile GIT_DIR=$HOME/repositories/${REPO}.git # Public dir where to push the site once compiled PUBLIC_WWW="/var/www/html" BACKUP_WWW=$HOME/danix.xyz-backup SITE_DOMAIN=https://danix.xyz # Branch that is going to be deployed to server BRANCH="master" # date to be appended to latest tag NOW=$(date +"%d%m%Y-%H%M") # Log file LOG_DIR=/tmp/hugo-danix-site LOG_FILE=$LOG_DIR/post-receive.log set -e # Ensure log directory exists mkdir -p "$LOG_DIR" # Tee all output (stdout + stderr) to the log file, appending exec > >(tee -a "$LOG_FILE") 2>&1 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" } log "========================================" log "POST-RECEIVE HOOK STARTED" log "Repo : $REPO" log "Branch : $BRANCH" log "Tag : release_$NOW" log "========================================" # delete the working directory first log "Removing old working directory: $TARGET_DIR" rm -rf $TARGET_DIR # create new temporary site log "Creating fresh Hugo site at: $TARGET_DIR" /usr/local/bin/hugo new site $TARGET_DIR # backup public www directory first then setup trap log "Backing up $PUBLIC_WWW → $BACKUP_WWW" rsync -avz --no-t $PUBLIC_WWW/ $BACKUP_WWW trap "log 'A problem occurred. Reverting to backup.'; rsync -avz --no-t --del $BACKUP_WWW/ $PUBLIC_WWW; rm -rf $TARGET_DIR; log 'Revert complete.'" EXIT while read oldrev newrev ref do log "Received ref: $ref (${oldrev:0:8} → ${newrev:0:8})" # if TARGET_DIR is empty we don't want deploy for this project if [[ ! $TARGET_DIR == "" ]]; then if [[ "$GL_REPO" == "$REPO" ]]; then # let's check that we are deploying to the correct branch if [[ $ref = refs/heads/${BRANCH} ]]; then log "Deploying '$BRANCH' branch to production..." log "Checking out content into $TARGET_DIR" git --git-dir=$GIT_DIR --work-tree=. -C "$TARGET_DIR" checkout -f log "Cloning theme from $THEME_REPO" git clone $THEME_REPO ${TARGET_DIR}/themes/danix-xyz-hacker log "Theme cloned at commit: $(git -C ${TARGET_DIR}/themes/danix-xyz-hacker rev-parse --short HEAD)" log "Clearing $PUBLIC_WWW" rm -rf $PUBLIC_WWW/* log "Tagging: release_$NOW" git tag release_$NOW $BRANCH log "Running Hugo build..." /usr/local/bin/hugo -s $TARGET_DIR -d $PUBLIC_WWW -b "${SITE_DOMAIN}" -t "danix-xyz-hacker" --noTimes --minify log "Hugo build complete." log "========================================" log "DEPLOYMENT COMPLETED - ${REPO}" log "Target branch : ${BRANCH}" log "Target folder : ${PUBLIC_WWW}" log "Tag name : release_${NOW}" log "========================================" else log "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server." fi else log "GL_REPO='$GL_REPO' does not match '$REPO'. Skipping." fi else log "Target directory not declared. Skipping deploy to server." fi done trap - EXIT log "Hook finished successfully."