No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Eric Wendland 38ed25fb76
Some checks failed
Test / test (push) Failing after 15s
Add public Forgejo static site deploy action
2026-07-15 16:18:50 +02:00
.forgejo/workflows Add public Forgejo static site deploy action 2026-07-15 16:18:50 +02:00
tests Add public Forgejo static site deploy action 2026-07-15 16:18:50 +02:00
__init__.py Add public Forgejo static site deploy action 2026-07-15 16:18:50 +02:00
action.yml Add public Forgejo static site deploy action 2026-07-15 16:18:50 +02:00
LICENSE Add public Forgejo static site deploy action 2026-07-15 16:18:50 +02:00
README.md Add public Forgejo static site deploy action 2026-07-15 16:18:50 +02:00
static_site.py Add public Forgejo static site deploy action 2026-07-15 16:18:50 +02:00

Static Site Deploy

A small, dependency-free Forgejo Action that synchronizes a completed static website build to a dedicated Bunny Storage Zone.

The deployer requires index.html, rejects symbolic links, compares files with a checksum manifest, uploads changed assets before HTML, deletes stale files only after successful uploads, and publishes the new manifest last.

Forgejo Actions

Store the website-specific Storage Zone password as the repository secret BUNNY_STORAGE_PASSWORD, then pin the action to an immutable commit from the public action repository:

---
name: Deploy website

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: docker
    steps:
      - uses: https://data.forgejo.org/actions/checkout@v6
      - run: npm ci
      - run: npm run build
      - name: Deploy to Bunny
        uses: https://forge.tionis.dev/actions/static-site-deploy@<commit-sha>
        with:
          directory: dist
          storage-zone: example-org
        env:
          BUNNY_STORAGE_PASSWORD: ${{ secrets.BUNNY_STORAGE_PASSWORD }}

Only run deployments for trusted branches. A contributor able to change a workflow that receives production secrets can attempt to expose those secrets.

Command line

The script can also be used directly with Python 3.11 or newer:

export BUNNY_STORAGE_ZONE=example-org
export BUNNY_STORAGE_PASSWORD='zone-specific password'
python3 static_site.py bunny dist --dry-run
python3 static_site.py bunny dist

Set BUNNY_STORAGE_ENDPOINT when the Storage Zone is outside Frankfurt.

Development

python3 -m pytest tests

The canonical source lives in the private Gandalf infrastructure repository and is published to this repository as a Git subtree.