name: hugo deploy on: push: branches: [ main ] paths: - "website/**" jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 0 - name: Install Hugo run: | sudo apt-get update sudo apt-get install -y wget tar openssh-client git rsync HUGO_VERSION=0.154.1 ARCH=Linux-64bit wget -q https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_${ARCH}.tar.gz -O /tmp/hugo.tar.gz tar -xzf /tmp/hugo.tar.gz -C /tmp sudo mv /tmp/hugo /usr/local/bin/hugo hugo version - name: Ensure submodules run: | git submodule sync --recursive git submodule update --init --recursive - name: Build site run: | hugo -s website -d public - name: Show build output run: | echo "CWD: $(pwd)" hugo version hugo -s website env echo "Listing repo root:" && ls -la echo "Listing website:" && ls -la website || true echo "Listing public:" && ls -la public || true echo "Listing website/public:" && ls -la website/public || true - name: Configure SSH env: HUGO_DEPLOY_SSH_PRIVATE_KEY: ${{ secrets.HUGO_DEPLOY_SSH_PRIVATE_KEY }} run: | mkdir -p ~/.ssh echo "$HUGO_DEPLOY_SSH_PRIVATE_KEY" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa chmod 700 ~/.ssh - name: Deploy to server run: | set -e # detect source directory with built site if [ -d public ] && [ "$(ls -A public 2>/dev/null)" ]; then SRC=public elif [ -d website/public ] && [ "$(ls -A website/public 2>/dev/null)" ]; then SRC=website/public else echo "ERROR: no build output found in public/ or website/public/" ls -la exit 1 fi echo "Deploying from $SRC" ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null hugo-deploy@10.20.20.102 "mkdir -p /opt/containers/website/content && rm -rf /opt/containers/website/content/*" rsync -avz --delete -e "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" "$SRC"/ hugo-deploy@10.20.20.102:/opt/containers/website/content/