How it works
Every repository on g.xil.no can publish a static site here. A small CI workflow uploads your files to the pages server on every push; about a minute later the site is live. No build step is required — plain HTML works as-is, and anything that produces HTML works too.
Addresses
Sites live under <[branch.]repo.]user>.p.xil.no:
| Address | Serves |
|---|---|
alice.p.xil.no |
repo pages of user alice, branch main — the owner's index site |
blog.alice.p.xil.no |
repo blog, branch main |
draft.blog.alice.p.xil.no |
repo blog, branch draft |
The same content also answers path-style:
alice.p.xil.no/blog/ is blog.alice.p.xil.no.
Ship a 404.html at your site root to control the not-found page.
Deploy
Put this in .forgejo/workflows/pages.yml in your repo (Actions
must be enabled in the repo settings), adjust the site: address
and file list, and push to main:
name: Deploy to Pages
on:
push:
branches: [main]
jobs:
deploy:
runs-on: docker
steps:
- uses: actions/checkout@v4
- name: Collect site
run: |
mkdir -p _site
cp index.html 404.html _site/
- name: Deploy
uses: https://g.xil.no/git-pages/action@v2
with:
site: http://alice.p.xil.no/blog/
server: git-pages.git-pages.svc.cluster.local:3000
token: ${{ forge.token }}
source: _site/
The values are g.xil.no-specific: the runners reach the pages
server over its in-cluster address, so site: uses plain
http and server: names the internal host. The
automatic Actions token authorizes sites whose address matches the pushing
repository — user.p.xil.no/repo/ from user/repo,
or user.p.xil.no/ from user/pages. Fresh deploys
can take about a minute to appear.