The site is published via a GitHub Actions workflow that builds Quartz and deploys the output to Cloudflare Pages on every push to the main branch.


Repository

Namehome-mgmt
GitHub (HTTPS)https://github.com/corneo/home-mgmt.git
GitHub (SSH)git@github.com:corneo/home-mgmt.git
Default branchmain

Pipeline overview

git push (main branch)
  → GitHub Actions: .github/workflows/deploy.yaml
    → npm ci               (working-directory: doc)
    → npx quartz build     (working-directory: doc, output: doc/public/)
    → wrangler pages deploy doc/public --project-name=home-mgmt
  → Cloudflare Pages: home-mgmt project
    → https://docs.cornillaud.com

GitHub Actions workflow

File: .github/workflows/deploy.yaml

Triggers on push to main and manual workflow_dispatch. Uses cloudflare/wrangler-action@v3 for the deploy step.

GitHub secrets required

SecretDescription
CLOUDFLARE_API_TOKENCloudflare Account API token with Cloudflare Pages: Edit permission
CLOUDFLARE_ACCOUNT_ID80342ba0bd1d0ab8114249ad2a6b05e4

The API token is stored in 1Password (Lab vault, item psmsr76pdhgqmhsv6ddslwzyxm, field “Account API Token for home-mgmt pages deploy”).

Cloudflare Pages project

  • Project name: home-mgmt
  • Production branch: main
  • Default URL: https://home-mgmt.pages.dev (confirm in Cloudflare dashboard)
  • Custom domain: https://docs.cornillaud.com
  • Setup method: Direct upload (wrangler) — Cloudflare does not run the build

Build commands (local, run from doc/)

cd doc
 
# Install dependencies (first time or after package changes)
npm install
 
# Build only
npx quartz build
 
# Build + local preview
npx quartz build --serve
 
# Build + local preview, with auto-restart on crash (see below)
python3 doc/tools/quartz-watch.py

Local preview: auto-restart supervisor

doc/tools/quartz-watch.py wraps npx quartz build --serve and automatically restarts it when it crashes — most commonly when a file is saved mid-edit with incomplete or invalid front matter YAML.

# From repo root:
python3 doc/tools/quartz-watch.py                # default: 5s restart delay, give up after 5 min
python3 doc/tools/quartz-watch.py --delay 10     # wait 10s before restarting
python3 doc/tools/quartz-watch.py --give-up 10   # give up after 10 min of repeated crashes

A restart counts as having “worked” if the server stays up for at least 10 seconds. If no restart has worked within the give-up window, the supervisor stops and prints a message — fix the error and relaunch manually. Ctrl+C cleanly shuts down both the supervisor and the Quartz process.

Tools

  • gh CLI installed via Homebrew — used for managing GitHub secrets
  • op CLI (1Password) available for secret retrieval