Merge branch 'Dokploy:main' into main

This commit is contained in:
Naterfute 2025-04-02 23:51:37 -07:00 committed by GitHub
commit 29d76e31e1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 203 additions and 10 deletions

View File

@ -49,6 +49,82 @@ jobs:
echo "✅ Blueprint folders validated successfully."
fi
- name: Validate meta.json structure and required fields
run: |
echo "🔍 Validating meta.json structure and required fields..."
# First check if meta.json exists and is valid JSON
if [ ! -f "meta.json" ]; then
echo "❌ meta.json file not found"
exit 1
fi
if ! jq empty meta.json 2>/dev/null; then
echo "❌ meta.json is not a valid JSON file"
exit 1
fi
ERROR=0
ERRORS_FOUND=""
# Debug: Show total number of entries
TOTAL_ENTRIES=$(jq '. | length' meta.json)
echo "📊 Total entries in meta.json: $TOTAL_ENTRIES"
# Get all entries at once and process them
TOTAL_INDEX=$(($TOTAL_ENTRIES - 1))
for i in $(seq 0 $TOTAL_INDEX); do
entry=$(jq -c ".[$i]" meta.json)
INDEX=$((i + 1))
echo "-------------------------------------------"
echo "🔍 Checking entry #$INDEX..."
# Get the ID for better error reporting
ID=$(echo "$entry" | jq -r '.id // "UNKNOWN"')
echo "📝 Processing entry with ID: $ID"
# Validate required top-level fields
for field in "id" "name" "version" "description" "logo" "links" "tags"; do
if [ "$(echo "$entry" | jq "has(\"$field\")")" != "true" ]; then
ERROR_MSG="❌ Entry #$INDEX (ID: $ID) is missing required field: $field"
echo "$ERROR_MSG"
ERRORS_FOUND="${ERRORS_FOUND}${ERROR_MSG}\n"
ERROR=1
fi
done
# Validate links object required fields
if [ "$(echo "$entry" | jq 'has("links")')" == "true" ]; then
for link_field in "github" "website" "docs"; do
if [ "$(echo "$entry" | jq ".links | has(\"$link_field\")")" != "true" ]; then
ERROR_MSG="❌ Entry #$INDEX (ID: $ID): links object is missing required field: $link_field"
echo "$ERROR_MSG"
ERRORS_FOUND="${ERRORS_FOUND}${ERROR_MSG}\n"
ERROR=1
fi
done
fi
# Validate tags array is not empty
if [ "$(echo "$entry" | jq '.tags | length')" -eq 0 ]; then
ERROR_MSG="❌ Entry #$INDEX (ID: $ID): tags array cannot be empty"
echo "$ERROR_MSG"
ERRORS_FOUND="${ERRORS_FOUND}${ERROR_MSG}\n"
ERROR=1
fi
done
echo "-------------------------------------------"
if [ $ERROR -eq 1 ]; then
echo "❌ meta.json structure validation failed."
echo -e "Summary of all errors found:${ERRORS_FOUND}"
exit 1
else
echo "✅ meta.json structure validated successfully."
fi
- name: Validate meta.json matches blueprint folders and logo files
run: |
echo "🔍 Validating meta.json against blueprint folders and logos..."

View File

@ -7,7 +7,7 @@ This is the official repository for the Dokploy Open Source Templates.
1. Fork the repository
2. Create a new branch
3. Add the template to the `blueprints` folder (docker-compose.yml, template.yml)
3. Add the template to the `blueprints` folder (`docker-compose.yml`, `template.toml`)
4. Add the template metadata (name, description, version, logo, links, tags) to the `meta.json` file
5. Add the logo to the template folder
6. Commit and push your changes
@ -58,7 +58,7 @@ port = 3000
host = "${main_domain}"
[[config.env]]
[config.env]
[[config.mounts]]
```
@ -131,7 +131,7 @@ My content
"""
```
Important: you can reference any variable in the `domains`, `env` and `mounts` sections. just use the `${variable_name}` syntax, in the case you don't want to define a variable, you can use the `domain`, `base64`, `password`, `hash`, `uuid`, `randomPort` or `timestamp` helpers.
Important: you can reference any variable in the `domains`, `env` and `mounts` sections. just use the `${variable_name}` syntax, in the case you don't want to define a variable, you can use the `domain`, `base64`, `password`, `hash`, `uuid`, `randomPort`, `timestamp`, `jwt`, `email`, or `username` helpers.
### Helpers
@ -145,6 +145,8 @@ We have a few helpers that are very common when creating a template, these are:
- `randomPort`: This is a helper that will generate a random port for the template.
- `timestamp`: This is a helper that will generate a timestamp.
- `jwt or jwt:length`: This is a helper that will generate a jwt for the template.
- `email`: This is a helper that will generate a random email for the template.
- `username`: This is a helper that will generate a random username in lowercase for the template.

View File

@ -0,0 +1,65 @@
volumes:
postgres-data:
driver: local
kestra-data:
driver: local
services:
postgres:
image: postgres
volumes:
- postgres-data:/var/lib/postgresql/data
environment:
POSTGRES_DB: kestra
POSTGRES_USER: kestra
POSTGRES_PASSWORD: k3str4
healthcheck:
test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
interval: 30s
timeout: 10s
retries: 10
kestra:
image: kestra/kestra:latest
pull_policy: always
# Note that this setup with a root user is intended for development purpose.
# Our base image runs without root, but the Docker Compose implementation needs root to access the Docker socket
# To run Kestra in a rootless mode in production, see: https://kestra.io/docs/installation/podman-compose
user: "root"
command: server standalone
volumes:
- kestra-data:/app/storage
- /var/run/docker.sock:/var/run/docker.sock
- /tmp/kestra-wd:/tmp/kestra-wd
environment:
KESTRA_CONFIGURATION: |
datasources:
postgres:
url: jdbc:postgresql://postgres:5432/kestra
driverClassName: org.postgresql.Driver
username: kestra
password: k3str4
kestra:
server:
basicAuth:
enabled: false
username: "admin@localhost.dev" # it must be a valid email address
password: kestra
repository:
type: postgres
storage:
type: local
local:
basePath: "/app/storage"
queue:
type: postgres
tasks:
tmpDir:
path: /tmp/kestra-wd/tmp
url: http://localhost:8080/
ports:
- "8080"
- "8081"
depends_on:
postgres:
condition: service_started

View File

@ -0,0 +1,17 @@
<svg width="600" height="601" viewBox="0 0 600 601" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_380_149)">
<path d="M0 68.0229C0 30.9784 30.0305 0.947876 67.075 0.947876H532.925C569.97 0.947876 600 30.9784 600 68.0229V533.873C600 570.917 569.969 600.948 532.925 600.948H67.075C30.0305 600.948 0 570.917 0 533.873V68.0229Z" fill="#2C0059"/>
<path d="M285.264 252.767C293.401 244.63 306.594 244.63 314.731 252.767L348.179 286.215C356.317 294.352 356.317 307.545 348.179 315.682L314.731 349.13C306.594 357.268 293.401 357.268 285.264 349.13L251.816 315.682C243.679 307.545 243.679 294.352 251.816 286.215L285.264 252.767Z" fill="#A950FF"/>
<path d="M439.322 252.5C447.313 244.509 460.27 244.509 468.261 252.5L502.237 286.476C510.228 294.467 510.228 307.424 502.237 315.415L468.261 349.391C460.27 357.382 447.313 357.383 439.322 349.391L405.346 315.415C397.355 307.424 397.355 294.467 405.346 286.476L439.322 252.5Z" fill="#A950FF"/>
<path d="M285.528 98.7109C293.519 90.7194 306.476 90.7194 314.468 98.7109L348.443 132.686C356.435 140.678 356.435 153.635 348.443 161.626L314.468 195.602C306.476 203.593 293.519 203.593 285.528 195.602L251.552 161.626C243.561 153.635 243.561 140.678 251.552 132.686L285.528 98.7109Z" fill="#E9C1FF"/>
<path d="M271.29 209.32C279.427 217.457 279.427 230.65 271.29 238.787L237.842 272.235C229.705 280.372 216.512 280.372 208.375 272.235L174.927 238.787C166.789 230.65 166.789 217.457 174.927 209.32L208.375 175.871C216.512 167.734 229.705 167.734 237.842 175.871L271.29 209.32Z" fill="#CD88FF"/>
<path d="M194.654 286.476C202.645 294.467 202.645 307.424 194.654 315.415L160.678 349.391C152.687 357.382 139.73 357.382 131.738 349.391L97.7629 315.415C89.7714 307.424 89.7714 294.467 97.7629 286.476L131.738 252.5C139.73 244.509 152.687 244.509 160.678 252.5L194.654 286.476Z" fill="#A950FF"/>
<path d="M425.078 209.32C433.215 217.457 433.215 230.65 425.078 238.787L391.63 272.235C383.492 280.372 370.3 280.372 362.163 272.235L328.714 238.787C320.577 230.65 320.577 217.457 328.714 209.32L362.163 175.871C370.3 167.734 383.492 167.734 391.63 175.871L425.078 209.32Z" fill="#CD88FF"/>
<path d="M332.916 428.992C351.095 447.171 351.095 476.645 332.916 494.824C314.737 513.003 285.263 513.003 267.084 494.824C248.905 476.645 248.905 447.171 267.084 428.992C285.263 410.813 314.737 410.813 332.916 428.992Z" fill="#F62E76"/>
</g>
<defs>
<clipPath id="clip0_380_149">
<rect width="600" height="600" fill="white" transform="translate(0 0.947876)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,13 @@
[variables]
main_domain = "${domain}"
[config]
[[config.domains]]
serviceName = "kestra"
port = 8080
host = "${main_domain}"
[config.env]
[[config.mounts]]

View File

@ -1,5 +1,4 @@
[
{
[ {
"id": "appwrite",
"name": "Appwrite",
"version": "1.6.0",
@ -273,6 +272,21 @@
"automation"
]
},
{
"id": "kestra",
"name": "Kestra",
"version": "latest",
"description": "Unified Orchestration Platform to Simplify Business-Critical Workflows and Govern them as Code and from the UI.",
"logo": "kestra.svg",
"links": {
"github": "https://github.com/kestra-io/kestra",
"website": "https://kestra.io",
"docs": "https://kestra.io/docs"
},
"tags": [
"automation"
]
},
{
"id": "wordpress",
"name": "Wordpress",
@ -1636,7 +1650,8 @@
"logo": "it-tools.svg",
"links": {
"github": "https://github.com/CorentinTh/it-tools",
"website": "https://it-tools.tech"
"website": "https://it-tools.tech",
"docs": "https://it-tools.tech/docs"
},
"tags": [
"developer",
@ -1670,7 +1685,8 @@
"logo": "glance.png",
"links": {
"github": "https://github.com/glanceapp/glance",
"docs": "https://github.com/glanceapp/glance/blob/main/docs/configuration.md"
"docs": "https://github.com/glanceapp/glance/blob/main/docs/configuration.md",
"website": "https://glance.app/"
},
"tags": [
"dashboard",
@ -2148,7 +2164,8 @@
"logo": "logo.png",
"links": {
"github": "https://github.com/supernova3339/anonupload",
"docs": "https://github.com/Supernova3339/anonupload/blob/main/env.md"
"docs": "https://github.com/Supernova3339/anonupload/blob/main/env.md",
"website": "https://anonupload.com/"
},
"tags": [
"file-sharing",
@ -2265,7 +2282,9 @@
"description": "Barrage is a minimalistic Deluge WebUI app with full mobile support. It features a responsive mobile-first design, allowing you to manage your torrents with ease from any device.",
"logo": "logo.png",
"links": {
"github": "https://github.com/maulik9898/barrage"
"github": "https://github.com/maulik9898/barrage",
"website": "https://github.com/maulik9898/barrage",
"docs": "https://github.com/maulik9898/barrage/blob/main/README.md"
},
"tags": [
"torrents",
@ -2536,7 +2555,8 @@
"logo": "logo.png",
"links": {
"github": "https://github.com/linuxserver/docker-chromium",
"docs": "https://docs.linuxserver.io/images/docker-chromium"
"docs": "https://docs.linuxserver.io/images/docker-chromium",
"website": "https://docs.linuxserver.io/images/docker-chromium"
},
"tags": [
"browser",