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
| Name | home-mgmt |
| GitHub (HTTPS) | https://github.com/corneo/home-mgmt.git |
| GitHub (SSH) | git@github.com:corneo/home-mgmt.git |
| Default branch | main |
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
| Secret | Description |
|---|---|
CLOUDFLARE_API_TOKEN | Cloudflare Account API token with Cloudflare Pages: Edit permission |
CLOUDFLARE_ACCOUNT_ID | 80342ba0bd1d0ab8114249ad2a6b05e4 |
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.pyLocal 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 crashesA 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
ghCLI installed via Homebrew — used for managing GitHub secretsopCLI (1Password) available for secret retrieval