Deploy Cloudflare Worker to celld Action
Custom Gitea Action for bundling and deploying Cloudflare Workers, Durable Objects, D1, KV, Queues, Workflows, R2, and Static Assets (wrangler.json) to a self-hosted denoland/celld fleet on TrueNAS SCALE backed by RustFS S3 (s3.rodydavis.dev).
Features
- Zero-Docker-Build Hot Deploys: Bundles TypeScript/JS Worker projects via
esbuildand publishes directly tos3://celld-<repo-name>. Runningcellddaemons on TrueNAS adopt new deployments in place with zero container restarts. - Auto-Bucket Provisioning: Automatically creates the S3 fleet bucket on RustFS (
s3.rodydavis.dev) on first deploy. - Sub-Millisecond Internal S3 Path: Configures the TrueNAS
cellddaemon to communicate directly withhttp://minio-s3:9000over the internalapps-netDocker bridge. - Automated D1 Migrations: Optionally applies
.sqlmigrations from./migrationsviacelld d1 migrations apply.
Inputs
| Name | Description | Default | Required |
|---|---|---|---|
ssh_key |
Private SSH key for authenticating to TrueNAS SCALE | — | Yes |
s3_access_key |
S3 Access Key ID (secrets.CELLD_S3_ACCESS_KEY) |
— | Yes |
s3_secret_key |
S3 Secret Key (secrets.CELLD_S3_SECRET_KEY) |
— | Yes |
working_directory |
Path to Wrangler project directory | . |
No |
app_name |
Application subpath under /mnt/jupiter/apps/<owner>/<repo> |
<owner>/<repo> |
No |
bucket |
S3 bucket name for the celld fleet |
celld-<repo-name> |
No |
domain |
Target domain(s) for Traefik router (comma-separated) | <repo-name>.rodydavis.dev |
No |
d1_database |
Optional D1 database name to run celld d1 migrations apply |
"" |
No |
env_file_content |
Optional additional .env variables for the TrueNAS container |
"" |
No |
idle_evict_s |
Seconds before idle Durable Objects hibernate (CELLD_IDLE_EVICT_S) |
60 |
No |
ltx_retention_secs |
Seconds to retain old LTX epochs before GC (CELLD_LTX_RETENTION_SECS) |
86400 |
No |
deploy_poll_s |
Seconds between bucket deployment checks (CELLD_DEPLOY_POLL_S) |
5 |
No |
Usage Example
name: Deploy Worker to celld
on:
push:
branches: [main]
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Deploy to TrueNAS celld Fleet
uses: https://git.rodydavis.dev/rodydavis/shared-actions/celld-deploy@main
with:
ssh_key: ${{ secrets.TRUENAS_SSH_KEY }}
s3_access_key: ${{ secrets.CELLD_S3_ACCESS_KEY }}
s3_secret_key: ${{ secrets.CELLD_S3_SECRET_KEY }}
domain: my-worker.rodydavis.dev
# Optional if using D1 SQLite migrations in ./migrations:
# d1_database: main-db