diff --git a/templates/compose/celld.yaml b/templates/compose/celld.yaml new file mode 100644 index 000000000..850139727 --- /dev/null +++ b/templates/compose/celld.yaml @@ -0,0 +1,24 @@ +# documentation: https://celld.dev/docs +# slogan: Self-hosted, distributed Durable Objects powered by Deno. +# category: backend +# tags: deno, durable-objects, workers, sqlite, distributed, backend, serverless +# logo: svgs/denoKV.svg +# port: 8080 + +services: + celld: + image: 'ghcr.io/denoland/celld:${CELLD_VERSION:-latest}' + environment: + - SERVICE_URL_CELLD_8080 + - CELLD_BUCKET=${CELLD_BUCKET:?} + - S3_ENDPOINT=${S3_ENDPOINT:-} + - AWS_REGION=${AWS_REGION:-us-east-1} + - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:?} + - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:?} + - AWS_SESSION_TOKEN=${AWS_SESSION_TOKEN:-} + - CELLD_ADDR=0.0.0.0:8080 + - CELLD_ADVERTISE=celld:8080 + - CELLD_WATCH=/var/lib/celld/state + - RUST_LOG=${RUST_LOG:-info} + volumes: + - celld-data:/var/lib/celld diff --git a/templates/service-templates-latest.json b/templates/service-templates-latest.json index a4d1fb655..3ed26d4af 100644 --- a/templates/service-templates-latest.json +++ b/templates/service-templates-latest.json @@ -536,6 +536,25 @@ "template_last_updated_at": "2026-03-13T12:05:06+05:30", "port": "8080" }, + "celld": { + "documentation": "https://celld.dev/docs?utm_source=coolify.io", + "slogan": "Self-hosted, distributed Durable Objects powered by Deno.", + "compose": "c2VydmljZXM6CiAgY2VsbGQ6CiAgICBpbWFnZTogJ2doY3IuaW8vZGVub2xhbmQvY2VsbGQ6JHtDRUxMRF9WRVJTSU9OOi1sYXRlc3R9JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9VUkxfQ0VMTERfODA4MAogICAgICAtICdDRUxMRF9CVUNLRVQ9JHtDRUxMRF9CVUNLRVQ6P30nCiAgICAgIC0gJ1MzX0VORFBPSU5UPSR7UzNfRU5EUE9JTlQ6LX0nCiAgICAgIC0gJ0FXU19SRUdJT049JHtBV1NfUkVHSU9OOi11cy1lYXN0LTF9JwogICAgICAtICdBV1NfQUNDRVNTX0tFWV9JRD0ke0FXU19BQ0NFU1NfS0VZX0lEOj99JwogICAgICAtICdBV1NfU0VDUkVUX0FDQ0VTU19LRVk9JHtBV1NfU0VDUkVUX0FDQ0VTU19LRVk6P30nCiAgICAgIC0gJ0FXU19TRVNTSU9OX1RPS0VOPSR7QVdTX1NFU1NJT05fVE9LRU46LX0nCiAgICAgIC0gJ0NFTExEX0FERFI9MC4wLjAuMDo4MDgwJwogICAgICAtICdDRUxMRF9BRFZFUlRJU0U9Y2VsbGQ6ODA4MCcKICAgICAgLSBDRUxMRF9XQVRDSD0vdmFyL2xpYi9jZWxsZC9zdGF0ZQogICAgICAtICdSVVNUX0xPRz0ke1JVU1RfTE9HOi1pbmZvfScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ2NlbGxkLWRhdGE6L3Zhci9saWIvY2VsbGQnCg==", + "tags": [ + "deno", + "durable-objects", + "workers", + "sqlite", + "distributed", + "backend", + "serverless" + ], + "category": "backend", + "logo": "svgs/denoKV.svg", + "minversion": "0.0.0", + "template_last_updated_at": "2026-08-07T14:41:11+02:00", + "port": "8080" + }, "changedetection": { "documentation": "https://github.com/dgtlmoon/changedetection.io/?utm_source=coolify.io", "slogan": "Website change detection monitor and notifications.", diff --git a/templates/service-templates.json b/templates/service-templates.json index d9500219f..c1944c165 100644 --- a/templates/service-templates.json +++ b/templates/service-templates.json @@ -536,6 +536,25 @@ "template_last_updated_at": "2026-03-13T12:05:06+05:30", "port": "8080" }, + "celld": { + "documentation": "https://celld.dev/docs?utm_source=coolify.io", + "slogan": "Self-hosted, distributed Durable Objects powered by Deno.", + "compose": "c2VydmljZXM6CiAgY2VsbGQ6CiAgICBpbWFnZTogJ2doY3IuaW8vZGVub2xhbmQvY2VsbGQ6JHtDRUxMRF9WRVJTSU9OOi1sYXRlc3R9JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX0NFTExEXzgwODAKICAgICAgLSAnQ0VMTERfQlVDS0VUPSR7Q0VMTERfQlVDS0VUOj99JwogICAgICAtICdTM19FTkRQT0lOVD0ke1MzX0VORFBPSU5UOi19JwogICAgICAtICdBV1NfUkVHSU9OPSR7QVdTX1JFR0lPTjotdXMtZWFzdC0xfScKICAgICAgLSAnQVdTX0FDQ0VTU19LRVlfSUQ9JHtBV1NfQUNDRVNTX0tFWV9JRDo/fScKICAgICAgLSAnQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZPSR7QVdTX1NFQ1JFVF9BQ0NFU1NfS0VZOj99JwogICAgICAtICdBV1NfU0VTU0lPTl9UT0tFTj0ke0FXU19TRVNTSU9OX1RPS0VOOi19JwogICAgICAtICdDRUxMRF9BRERSPTAuMC4wLjA6ODA4MCcKICAgICAgLSAnQ0VMTERfQURWRVJUSVNFPWNlbGxkOjgwODAnCiAgICAgIC0gQ0VMTERfV0FUQ0g9L3Zhci9saWIvY2VsbGQvc3RhdGUKICAgICAgLSAnUlVTVF9MT0c9JHtSVVNUX0xPRzotaW5mb30nCiAgICB2b2x1bWVzOgogICAgICAtICdjZWxsZC1kYXRhOi92YXIvbGliL2NlbGxkJwo=", + "tags": [ + "deno", + "durable-objects", + "workers", + "sqlite", + "distributed", + "backend", + "serverless" + ], + "category": "backend", + "logo": "svgs/denoKV.svg", + "minversion": "0.0.0", + "template_last_updated_at": "2026-08-07T14:41:11+02:00", + "port": "8080" + }, "changedetection": { "documentation": "https://github.com/dgtlmoon/changedetection.io/?utm_source=coolify.io", "slogan": "Website change detection monitor and notifications.", diff --git a/tests/Unit/CelldServiceTemplateTest.php b/tests/Unit/CelldServiceTemplateTest.php new file mode 100644 index 000000000..0e3cb579f --- /dev/null +++ b/tests/Unit/CelldServiceTemplateTest.php @@ -0,0 +1,33 @@ +toContain('ghcr.io/denoland/celld:${CELLD_VERSION:-latest}') + ->toContain('SERVICE_URL_CELLD_8080') + ->toContain('CELLD_BUCKET=${CELLD_BUCKET:?}') + ->toContain('S3_ENDPOINT=${S3_ENDPOINT:-}') + ->toContain('CELLD_ADDR=0.0.0.0:8080') + ->toContain('CELLD_ADVERTISE=celld:8080') + ->toContain('celld-data:/var/lib/celld'); + + foreach (['service-templates.json', 'service-templates-latest.json'] as $templateFile) { + $templates = json_decode( + file_get_contents(__DIR__."/../../templates/{$templateFile}"), + associative: true, + flags: JSON_THROW_ON_ERROR, + ); + + expect($templates)->toHaveKey('celld'); + expect($templates['celld']['port'] ?? null)->toBe('8080'); + expect($templates['celld']['logo'] ?? null)->toBe('svgs/denoKV.svg'); + expect($templates['celld']['category'] ?? null)->toBe('backend'); + + $generatedCompose = base64_decode($templates['celld']['compose'], strict: true); + + expect($generatedCompose) + ->toContain('ghcr.io/denoland/celld:${CELLD_VERSION:-latest}') + ->toContain('CELLD_BUCKET=${CELLD_BUCKET:?}'); + } +});