HERON

Semi-automatic: you only push

Publish with git push

The semi-automatic way. After a one-time setup, every update is the same: you edit a page, commit and push. GitHub Actions builds the site, checks that it opens and publishes it. You open the site and check the change.

Git is the best place to store the content of a site: every change is kept, any version can be brought back, and you and an AI agent work in one history. GitHub adds the rest: the image build is built in (GitHub Actions), and the image is stored right there (GitHub's own registry), so no other accounts are needed. Push a change, and a fresh image is built by itself; with HERON Agent (paid) it is also updated on your server. The setup takes about half an hour once. The site can live on your own server with Docker or for free on GitHub Pages.

How an update goes

  1. 1

    Edit a page

    Open a page file in the folder of your language inside content/, for example services.md, and change the text. To add a page, copy an existing file under a new name and fill it in. Look at the result with heron serve . on localhost:8000.
  2. 2

    Save the change in git

    A commit is one saved step of history with a short note. You can always look at it or roll it back.
  3. 3

    Push

    git push sends the commit to GitHub. Steps 2 and 3 are one line: git add . && git commit -m "New prices" && git push.
  4. 4

    GitHub builds

    GitHub Actions runs the strict build with the stable HERON image. A broken link or an empty description stops the build, and the log names the file and the line.
  5. 5

    GitHub checks

    The finished site is started and asked: home 200, a missing page 404, every redirect 301 or 410. A broken site never goes further.
  6. 6

    GitHub publishes

    The image goes to the registry, or the files go to GitHub Pages.
  7. 7

    The site updates

    On GitHub Pages at once. On your server with one command, or by itself with HERON Agent.
  8. 8

    You check

    Open the page you changed.

Set up once

Five steps, in order. The configurator does steps 2 and 3 for you when you choose GitHub with the automatic build on.

Update the server

After each push, a new image waits in the registry. Take it on the server with one command: download, replace the container, start.

docker pull ghcr.io/you/my-site:prod && docker rm -f my-site && docker run -d --name my-site -p 80:8080 --restart unless-stopped ghcr.io/you/my-site:prod

Downtime

A second or two while the container restarts.

Roll back

Every image keeps its own tag in the registry; start the previous one with the same command.

Without a server: git push to GitHub Pages

GitHub can publish the built files straight to GitHub Pages. Put this workflow in .github/workflows/pages.yml, then in the repository Settings → Pages choose «GitHub Actions» as the source.

name: pages
on:
  push:
    branches: [main]
permissions:
  contents: read
  pages: write
  id-token: write
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - run: docker run --rm -v "$PWD":/site -w /site --user $(id -u):$(id -g) ghcr.io/fmstm/heron:prod build . --env prod --strict
      - uses: actions/upload-pages-artifact@v3
        with:
          path: dist
  deploy:
    needs: build
    runs-on: ubuntu-latest
    environment:
      name: github-pages
    steps:
      - uses: actions/deploy-pages@v4

fetch-depth: 0

Gives the build the full history, so every page gets its real date of change.

Limits

A site up to 1 GB, a soft limit of 100 GB of traffic a month, public repositories on the free plan. Free hosting in detail

Redirects

GitHub Pages has no server-side 301. If you move an old site with many addresses, prefer a server.

A preview before the live site

Add a second workflow for a dev branch with env: dev. The preview is built closed to search engines; you merge into main when it looks right.

name: preview
on:
  push:
    branches: [dev]
jobs:
  image:
    uses: FMSTM/HERON/.github/workflows/site-image.yml@prod
    permissions:
      contents: read
      packages: write
    with:
      env: dev
      engine: prod

Add-on: HERON Agent

Questions

Do I need a GitHub token for the build?

No. GitHub gives the build its own short-lived token to publish the image. A personal token is needed only on a server that pulls a private image.

What if the build fails?

The run turns red, and the log names the file, the line and what to do. Nothing changes on the site: the previous version keeps working.

Can an AI agent push for me?

Yes. Codex or Claude Code can edit the content in a branch and open a pull request; GitHub builds and checks it before you merge. A website with Codex

Do I need HERON Agent?

No. Without it you update the server with one command, or use GitHub Pages, which updates by itself. The Agent is a paid add-on for those who do not want to touch the server at all.