C1 Content.One · git deploy

GitHub Actions → Zesty.io WebEngine

Ship your site
like software.

Treat Content.One like code. Branch anything, get a live preview, review the exact impact on a pull request, then promote local → stage → production — where stage saves and production is a clean publish-only gate.

branch & preview anything PR impact comments publish only real diffs AI-ready workflow
01

What it is

The webengine/ folder of this repo is the source of truth for the Content.One instance. A GitHub Action maps each file to its Zesty resource by ZUID (zesty.config.json) and syncs it over the Instance API.

No more pasting code into the Manager. Work in git, open a pull request, read a comment spelling out exactly what will change, and promote through branches. The CMS becomes a deploy target — versioned, reviewable, reversible.

02

Any branch. A live URL for each.

local is just one example. Spin up a branch for any piece of work, push it, and WebEngine serves it at its own preview domain — pulled straight from GitHub. Share the link so a teammate can review the real rendered site before it touches the instance.

new-homepage

Redesign the homepage in isolation. Preview & share before it ever reaches stage.

fix-footer-links

A tiny fix on its own branch — reviewable on its own URL.

campaign-q3

Build a whole campaign, demo the live preview to stakeholders, merge when approved.

// every branch is previewable
https://<hash>-new-homepage.webengine.zesty.io

These are working branches — make as many as you need, push them up, and the team reviews via the link. Nothing is written to the instance until a branch is merged into stage.

03

The promotion flow

Two gates. Each is previewed and explained before it acts.

any branchwork + preview

Where you build. No instance writes — but fully previewable and shareable.

stagesave · no publish

Merge here saves changed files (and creates new ones) on the instance's dev version.

productionpublish only

Merge here publishes — promotes the staged version live. No new files, no edits; just a publish trigger.

04

Stage saves. Production publishes.

PR ▶ stage

Save

  • writes changed files to the dev version
  • creates brand-new files (and tracks their ZUID)
  • compared against current dev content — identical = skipped
  • nothing goes live
PR ▶ production

Publish only

  • promotes the dev version to live
  • no new files, no content edits — a pure publish trigger
  • only resources where dev differs from live are published
  • already-live, identical resources are skipped

All authoring happens on stage. Production never introduces content — it just decides what goes live.

05

Setup & keys

Two secrets, two workflows. That's the footprint.

Settings → Secrets and variables → Actions
ZESTY_INSTANCE_ZUID = the instance id
ZESTY_DEVELOPER_TOKEN = instance API token with write
contents: write

commit new-resource ZUIDs back

pull-requests: write

post the impact comment

branches

stage · production (+ any)

.github/workflows/
zesty-deploy.yml on push → [stage, production] # the real sync
zesty-pr-preview.yml on pull_request → [stage, production] # impact comment
06

The PR tells you what will happen

Open a PR into stage or production and a read-only bot comment lands automatically — it diffs the change against the instance, writing nothing.

PR ▶ stage
💾 Stage sync preview
New files to create (1):
• /github-integration.html
Add/update vs dev (0): none
PR ▶ production
🚀 Production publish preview
Promote dev → live (10):
• homepage · articles · …
Already live, skipped: 117
07

How the hybrid sync works

Git says what was touched; the API says what actually differs. Only the intersection acts.

01

Candidate diff

A git diff against the pre-push commit lists what the merge changed.

02

Status-aware compare

Each candidate is compared to the instance — dev for stage, live for production.

03

Act on real diffs

Identical resources are skipped — no needless saves, no blind republish; Manager drift is caught.

04

Create on stage

New files are created on stage and their ZUID is written back to zesty.config.json.

08

Built for working with AI

This very page was built by an AI agent and shipped through the exact flow it describes.

Because everything is git + PRs + URLs, an AI assistant can do the heavy lifting and a human stays in control through review. A typical loop:

you → "build a page explaining X, open a PR"
agent → branches, writes the file, pushes, opens the PR
agent → drops the preview URL + impact comment on the PR
you → open the link, review, request tweaks
merge → stage saves it · production publishes it

Humans review, not retype

The agent proposes; previews + comments make approval fast and safe.

Guardrails built in

Nothing publishes without a merge — production stays a deliberate, gated step.

09

Why teams want this

Review before live

Previews + an impact comment mean no one publishes blind.

Only real changes ship

Idempotent — re-running never republishes identical content.

Full audit trail

Every content change is a commit — diffable and revertible.

Drift detection

Edits made directly in the Manager surface as a diff.

CI and CD, end to end

Real CI/CD for a website CMS with nothing but GitHub Actions:

CI — tests & checks

Linters, HTML/CSS validation, link checks, Lighthouse — run on the PR and gate the merge on green.

CD — the save / publish sync

Merge is the deploy. Stage saves; production publishes — automatically, scoped to real diffs. Roll back by reverting a commit.

Tests flow into the same pipeline: a check on the PR, a preview URL to eyeball, an impact comment to confirm scope — then a one-merge deploy. Production-grade delivery, built into the website with ease.