feat(celld-deploy): add reusable Cloudflare Worker & Durable Objects celld deployment action
Update README Actions Table / update-readme (push) Successful in 6s
Update README Actions Table / update-readme (push) Successful in 6s
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
name: 'Deploy Cloudflare Worker to celld'
|
||||
description: 'Bundles a Cloudflare Worker / Durable Objects project (wrangler.json) and deploys it to a self-hosted celld fleet backed by RustFS S3 and TrueNAS Docker Ingress.'
|
||||
inputs:
|
||||
ssh_key:
|
||||
description: 'Private SSH key for authenticating to TrueNAS SCALE'
|
||||
required: true
|
||||
s3_access_key:
|
||||
description: 'S3 Access Key ID for the celld fleet bucket (defaults to CELLD_S3_ACCESS_KEY)'
|
||||
required: true
|
||||
s3_secret_key:
|
||||
description: 'S3 Secret Access Key for the celld fleet bucket (defaults to CELLD_S3_SECRET_KEY)'
|
||||
required: true
|
||||
working_directory:
|
||||
description: 'Path to the Wrangler project directory containing wrangler.json / wrangler.toml'
|
||||
required: false
|
||||
default: '.'
|
||||
app_name:
|
||||
description: 'Application subpath under /mnt/jupiter/apps/<owner>/<repo> (defaults to <owner>/<repo>)'
|
||||
required: false
|
||||
default: ''
|
||||
bucket:
|
||||
description: 'S3 bucket name for the celld fleet (defaults to celld-<repo-name>)'
|
||||
required: false
|
||||
default: ''
|
||||
domain:
|
||||
description: 'Target domain(s) for Traefik router, comma-separated (defaults to <repo-name>.rodydavis.dev)'
|
||||
required: false
|
||||
default: ''
|
||||
s3_endpoint:
|
||||
description: 'External S3 endpoint used by the CI runner during celld deploy'
|
||||
required: false
|
||||
default: 'https://s3.rodydavis.dev'
|
||||
internal_s3_endpoint:
|
||||
description: 'Internal S3 endpoint used by the celld container on TrueNAS over apps-net'
|
||||
required: false
|
||||
default: 'http://minio-s3:9000'
|
||||
s3_region:
|
||||
description: 'S3 bucket region'
|
||||
required: false
|
||||
default: 'us-east-1'
|
||||
d1_database:
|
||||
description: 'Optional D1 database name to automatically apply migrations for (celld d1 migrations apply)'
|
||||
required: false
|
||||
default: ''
|
||||
env_file_content:
|
||||
description: 'Optional additional environment variables to append to the TrueNAS .env file'
|
||||
required: false
|
||||
default: ''
|
||||
idle_evict_s:
|
||||
description: 'Seconds before idle Durable Object cells hibernate from memory (CELLD_IDLE_EVICT_S)'
|
||||
required: false
|
||||
default: '60'
|
||||
ltx_retention_secs:
|
||||
description: 'Seconds to retain superseded LTX SQLite epoch logs before garbage collection (CELLD_LTX_RETENTION_SECS)'
|
||||
required: false
|
||||
default: '86400'
|
||||
deploy_poll_s:
|
||||
description: 'Seconds between bucket deployment pointer checks on the celld node (CELLD_DEPLOY_POLL_S)'
|
||||
required: false
|
||||
default: '5'
|
||||
host:
|
||||
description: 'TrueNAS SSH host IP or domain'
|
||||
required: false
|
||||
default: '10.0.0.218'
|
||||
user:
|
||||
description: 'TrueNAS SSH user'
|
||||
required: false
|
||||
default: 'root'
|
||||
network:
|
||||
description: 'Docker external network name for Traefik ingress'
|
||||
required: false
|
||||
default: 'apps-net'
|
||||
traefik_entrypoints:
|
||||
description: 'Traefik entrypoint (e.g. web)'
|
||||
required: false
|
||||
default: 'web'
|
||||
|
||||
runs:
|
||||
using: 'composite'
|
||||
steps:
|
||||
- name: Deploy Worker Bundle and Ensure celld Fleet on TrueNAS
|
||||
shell: bash
|
||||
env:
|
||||
INPUT_SSH_KEY: ${{ inputs.ssh_key }}
|
||||
INPUT_S3_ACCESS_KEY: ${{ inputs.s3_access_key }}
|
||||
INPUT_S3_SECRET_KEY: ${{ inputs.s3_secret_key }}
|
||||
INPUT_WORKING_DIRECTORY: ${{ inputs.working_directory }}
|
||||
INPUT_APP_NAME: ${{ inputs.app_name }}
|
||||
INPUT_BUCKET: ${{ inputs.bucket }}
|
||||
INPUT_DOMAIN: ${{ inputs.domain }}
|
||||
INPUT_S3_ENDPOINT: ${{ inputs.s3_endpoint }}
|
||||
INPUT_INTERNAL_S3_ENDPOINT: ${{ inputs.internal_s3_endpoint }}
|
||||
INPUT_S3_REGION: ${{ inputs.s3_region }}
|
||||
INPUT_D1_DATABASE: ${{ inputs.d1_database }}
|
||||
INPUT_ENV_CONTENT: ${{ inputs.env_file_content }}
|
||||
INPUT_IDLE_EVICT_S: ${{ inputs.idle_evict_s }}
|
||||
INPUT_LTX_RETENTION_SECS: ${{ inputs.ltx_retention_secs }}
|
||||
INPUT_DEPLOY_POLL_S: ${{ inputs.deploy_poll_s }}
|
||||
INPUT_HOST: ${{ inputs.host }}
|
||||
INPUT_USER: ${{ inputs.user }}
|
||||
INPUT_NETWORK: ${{ inputs.network }}
|
||||
INPUT_ENTRYPOINTS: ${{ inputs.traefik_entrypoints }}
|
||||
REPO_FULL_NAME: ${{ github.repository }}
|
||||
REPO_OWNER: ${{ github.repository_owner }}
|
||||
REPO_NAME: ${{ github.event.repository.name }}
|
||||
run: |
|
||||
bash "${{ github.action_path }}/deploy.sh"
|
||||
Reference in New Issue
Block a user