static-site-deploy/action.yml
Eric Wendland 4490557f13
All checks were successful
Test / test (push) Successful in 6s
feat(static-sites): let project sites declare Bunny edge rules
Project sites can pass a TOML file of edge rules (redirects, status
codes, blocking, response headers, cache times) to the deploy action.
The gateway validates them when a deployment starts and reconciles its
own rules on the site's Pull Zones when it finalizes, deleting dropped
rules and purging when a rule changed. Actions that could reach beyond
the site, such as origin changes, are not available.

The purge retry is limited to recorded purge failures, so a deployment
whose rules failed to apply cannot be completed by a purge alone.
2026-10-02 17:14:42 +02:00

59 lines
2 KiB
YAML

---
name: Deploy static site to Bunny
description: Safely synchronize a completed static website build to Bunny Storage.
inputs:
directory:
description: Directory containing the completed static build and index.html.
required: true
storage-zone:
description: Bunny Storage Zone name.
required: true
storage-endpoint:
description: Regional Bunny Storage API hostname.
required: false
default: storage.bunnycdn.com
purge-endpoint:
description: Optional trusted Gandalf deployment gateway base URL.
required: false
default: ""
edge-rules:
description: >-
Optional TOML file with [[edge_rules]] (redirects, status codes, headers,
cache times) for the site's Pull Zones. Needs purge-endpoint. Through the
gateway, leaving it empty removes rules from earlier deployments.
required: false
default: ""
dry-run:
description: Report changes without uploading or deleting files.
required: false
default: "false"
workers:
description: Maximum concurrent Bunny Storage transfers.
required: false
default: "16"
runs:
using: composite
steps:
- name: Synchronize static build
shell: bash
env:
STATIC_SITE_DIRECTORY: ${{ inputs.directory }}
BUNNY_STORAGE_ZONE: ${{ inputs.storage-zone }}
BUNNY_STORAGE_ENDPOINT: ${{ inputs.storage-endpoint }}
BUNNY_PURGE_ENDPOINT: ${{ inputs.purge-endpoint }}
STATIC_SITE_REVISION: ${{ github.sha }}
STATIC_SITE_DRY_RUN: ${{ inputs.dry-run }}
STATIC_SITE_WORKERS: ${{ inputs.workers }}
STATIC_SITE_EDGE_RULES: ${{ inputs.edge-rules }}
run: |
set -euo pipefail
args=(bunny "$STATIC_SITE_DIRECTORY" --workers "$STATIC_SITE_WORKERS")
if [[ "$STATIC_SITE_DRY_RUN" == "true" ]]; then
args+=(--dry-run)
elif [[ "$STATIC_SITE_DRY_RUN" != "false" ]]; then
echo "dry-run must be true or false" >&2
exit 2
fi
python3 "$FORGEJO_ACTION_PATH/static_site.py" "${args[@]}"