Skip to content

Jekyll's _site/ folder is the deploy — ship it

bundle exec jekyll build renders your whole site into _site/ — the exact artifact GitHub Pages would serve. You can put it on a URL without the Pages machinery.

Drop your Jekyll report here — get a live link

free, no account, live for 7 days.

The artifact dead-end

Jekyll's default hosting story is GitHub Pages: pinned gem versions, a branch or workflow, one site per repo. Previewing a draft post shouldn't require any of that.

Local jekyll serve shows you the site on localhost:4000 — useless for the person you want feedback from.

Two lines to a live link

Build your output like you already do, then hand the folder to the action:

Build the site

bundle exec jekyll build

.github/workflows/ci.yml

- uses: bitgate/ship-page-action@v1
  if: always()
  with:
    path: _site/

Or with plain curl — no account needed

cd _site && zip -qr - . | curl -fsS -X POST https://ship.page/deploy \
  -H "Content-Type: application/zip" \
  --data-binary @- | jq -r .url

path: _site/ deploys exactly what the tool wrote — no detection to configure. The link goes in the job summary — add comment: true and it lands on the pull request too.

What you get

  • _site/ deploys as-is — permalinks, pagination and assets resolve at the drop root
  • One curl from your shell; the action deploys path: _site/ from CI on every push
  • Anonymous drops expire after 7 days — draft previews clean themselves up

Questions

What about baseurl and url config?

Leave baseurl empty (the default) — drops mount at a subdomain root, exactly what Jekyll assumes. A custom baseurl like /blog would have to exist as a path under the drop URL.

Do the github-pages gem constraints apply?

No — build with whatever gems you use locally. _site/ is static output; there are no Pages runtime constraints here.

Can the site stay up permanently?

On a paid plan, a named drop with ttl set to never expire gives the site a permanent URL you control, redeployed by CI on every push.

Try it on your next run

Anonymous deploys need no account and no key — paste the step, get a link. When you want stable URLs that redeploy in place, an API key and a name are all it takes.

Need to share the report with someone outside GitHub? How to share a GitHub Actions artifact without a login.