Skip to content

Deploying

For a statically built site, publishing content is only half of getting it live: something has to rebuild the site.

Telling the CMS how to rebuild

A project declares a deploy target, set in the console under the project's settings:

TargetUse it when
noneYour site reads the API at request time and never needs rebuilding.
pages_hookCloudflare Pages. Paste the deploy hook URL.
github_workflowGitHub Actions. Give the repo, workflow file and ref.

Publishing a release then triggers it.

GitHub Actions

Your workflow needs a workflow_dispatch trigger:

yaml
on:
  workflow_dispatch:
    inputs:
      cms_env:
        description: Which CMS environment to build against
        default: production

The token the CMS uses needs actions: write on the repository.

Confirming it worked

A deploy hook returning 200 means your request was accepted, not that the site is serving new content. The CMS therefore checks, and keeps checking on a schedule until it knows.

For each published route it fetches the live URL and looks for two things: markup rendered from CMS content, and this document's own title or description. Both are needed — a coded page can carry the same description as the document replacing it.

A release stays rebuild not confirmed until that passes, and if it fails you get the route and the reason:

ReasonFix
Not rendered from the CMSThe build that renders this route has not shipped, or a coded page still takes precedence. Republishing will not help.
Older contentA build ran before the release published. Retry the rebuild.
No page returnedRead the build log.

Making your build depend on content

Two checks worth adding, both of which stop a broken deploy rather than reporting one:

Refuse to build when a cut-over route has no document. See The registry manifest.

Refuse to build when the content API is down. A build that generates pages from a failed fetch produces a site with pages missing, and it does it quietly.

A Nubisco product. Not open source.