On this page

Manual

Continuous delivery

Build once in CI and publish only the generated static artifact.

The deployment unit is the contents of site/build/. CI should install the Node package, run the production build, and hand that directory to a static host.

GitHub Actions baseline

name: site
 
on:
  push:
    branches: [main]
 
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: npm
      - run: npm ci
      - run: npx tidypress build
      - uses: actions/upload-pages-artifact@v3
        with:
          path: site/build

Add the deployment job or provider action required by your host. The important boundary is that downstream deployment consumes site/build, not source files or a second unverified build.

Generate a provider workflow

tidypress deploy cloudflare --with-ci
tidypress deploy vercel --with-ci

--with-ci writes the matching workflow template. Review the generated file and add the provider secrets named in it before pushing.

Cache safely

Cache the package manager store and, when useful, TidyPress’s generated cache. Never treat build/ as a source cache: it is replaceable output and should be rebuilt from the commit under test.

Publication checks

Run `tidypress build` with Node.js 22.12 or newer. Check that expected routes, `pagefind/`, and `llms.txt` exist. Publish only the generated build directory. Request the homepage, a docs route, search assets, and `llms.txt` from production.