Recover from a broken Bee Hub deploy
Symptom
  • ~/Library/Logs/bee-hub-deploy.log shows Hugo build FAILED (rc=1). Aborting deploy.
  • Live site at hub.edmd.me looks current (not stale)
  • A Gotify alert may have fired if Hugo’s stderr was wrapped (it isn’t currently โ€” only validator failures alert)

The good news: the deploy script has strict mode (--panicOnWarning) and the exit-code check aborts on any Hugo error before rsyncing. So a broken local build doesn’t propagate to live. The live site stays on the last good tree until you fix it.

Find the error
cd ~/Sync/ED/homelab/bee_hub
/opt/homebrew/bin/hugo --panicOnWarning --printPathWarnings 2>&1 | tail -20

Hugo’s strict-mode errors are usually one of:

Error Likely cause
shortcode "section" must be closed or self-closed Missing close tag for a section shortcode (forgot the /section line)
failed to extract shortcode "<name>": shortcode "<name>" not found Typo in shortcode name
failed to render shortcode "<name>" Bad params or unclosed nested block
parse failed YAML frontmatter syntax error โ€” usually a missing quote or bad indent
duplicate path warning Two pages compile to the same URL โ€” check slug: overrides
template render error A custom layout/partial references something that doesn’t exist

The error message includes a file path and line number. Jump straight there.

Fix

Edit the file, fix the issue, run Hugo again locally before redeploying:

cd ~/Sync/ED/homelab/bee_hub
/opt/homebrew/bin/hugo --panicOnWarning --printPathWarnings 2>&1 | tail -5
# Want to see "Total in NNNms" and no ERROR lines

Once it builds clean, re-run the full deploy:

zsh ~/Sync/ED/homelab/bee_hub/deploy-vps.sh
tail -5 ~/Library/Logs/bee-hub-deploy.log

Should end with Deploy complete.

Emergency rollback

If you pushed a broken change before the strict-mode protection caught it (shouldn’t happen now), the live site lives on:

  • VPS (public): root@100.123.69.155:/var/www/bee-hub/
  • CT103 (internal): root@192.168.8.54:/var/www/bee-hub/

To roll back to a previous Hugo build:

# Move current tree aside, rebuild from a known-good git commit, redeploy
cd ~/Sync/ED/homelab/bee_hub
git stash             # set aside in-progress edits
git log --oneline -20 # find a good commit
git checkout <hash>
zsh deploy-vps.sh     # rebuilds + rsyncs the old tree
git checkout main     # come back to current
git stash pop         # restore edits

The deploy targets are rsync targets, not git checkouts on the remote โ€” so “rollback” means re-deploying an older local build over the top.

Verify live state
curl -s -o /dev/null -w 'public: %{http_code} %{size_download} bytes\n' https://hub.edmd.me/
curl -s -o /dev/null -w 'internal: %{http_code} %{size_download} bytes\n' http://192.168.8.54/

# spot-check a known page
curl -s https://hub.edmd.me/runbooks/ | grep -c 'Runbooks'

Both should return 200 and a non-trivial size. The index regen log should also confirm: Wrote /Users/bee/Sync/ED/BEE_HUB_INDEX.md (322 pages, ...).