Add snippets.d auto-import for modular config

This commit is contained in:
Azat
2026-02-02 22:20:28 +01:00
parent 4821a20380
commit 79ea29b7c5
3 changed files with 51 additions and 8 deletions

View File

@@ -42,6 +42,17 @@ Create a `Caddyfile` in your skill's directory or set `CADDYFILE_PATH` environme
# } # }
``` ```
## Auto-Import from Skills
Other skills can drop `.caddy` snippets into `caddy/snippets.d/` and they'll be automatically merged at startup.
Example: If `ttyd` skill is present with `TTYD_DOMAIN=terminal.example.com`, it creates:
```
caddy/snippets.d/ttyd.caddy
```
Caddy's `run.sh` merges all snippets into the config before starting.
## Usage ## Usage
This skill is typically used as a dependency by other skills that need a web server: This skill is typically used as a dependency by other skills that need a web server:

View File

@@ -25,11 +25,16 @@ install_caddy() {
echo "Caddy installed: $(caddy version)" echo "Caddy installed: $(caddy version)"
} }
# Create data directory # Create data directory and snippets folder
setup_dirs() { setup_dirs() {
local data_dir="${CADDY_DATA_DIR:-/data/caddy}" local data_dir="${CADDY_DATA_DIR:-/data/caddy}"
local skill_dir="$(dirname "$(dirname "$0")")"
mkdir -p "$data_dir" mkdir -p "$data_dir"
mkdir -p "$skill_dir/snippets.d"
echo "Caddy data directory: $data_dir" echo "Caddy data directory: $data_dir"
echo "Caddy snippets directory: $skill_dir/snippets.d"
} }
install_caddy install_caddy

View File

@@ -1,13 +1,40 @@
#!/bin/bash #!/bin/bash
set -e set -e
CADDYFILE_PATH="${CADDYFILE_PATH:-/skills/caddy/Caddyfile}" SKILL_DIR="$(dirname "$(dirname "$0")")"
CADDYFILE_PATH="${CADDYFILE_PATH:-$SKILL_DIR/Caddyfile}"
CADDY_DATA_DIR="${CADDY_DATA_DIR:-/data/caddy}" CADDY_DATA_DIR="${CADDY_DATA_DIR:-/data/caddy}"
SNIPPETS_DIR="$SKILL_DIR/snippets.d"
MERGED_CONFIG="/tmp/Caddyfile.merged"
if [ ! -f "$CADDYFILE_PATH" ]; then # Merge base Caddyfile with snippets from other skills
echo "Error: Caddyfile not found at $CADDYFILE_PATH" merge_config() {
exit 1 if [ ! -f "$CADDYFILE_PATH" ]; then
fi echo "Error: Caddyfile not found at $CADDYFILE_PATH"
exit 1
fi
echo "Starting Caddy with config: $CADDYFILE_PATH" # Start with base config
exec caddy run --config "$CADDYFILE_PATH" --adapter caddyfile cat "$CADDYFILE_PATH" > "$MERGED_CONFIG"
# Append snippets from other skills
if [ -d "$SNIPPETS_DIR" ] && [ "$(ls -A "$SNIPPETS_DIR" 2>/dev/null)" ]; then
echo "" >> "$MERGED_CONFIG"
echo "# === Auto-imported from skills ===" >> "$MERGED_CONFIG"
for snippet in "$SNIPPETS_DIR"/*.caddy; do
if [ -f "$snippet" ]; then
echo "" >> "$MERGED_CONFIG"
cat "$snippet" >> "$MERGED_CONFIG"
echo "Imported: $(basename "$snippet")"
fi
done
fi
echo "Merged config written to: $MERGED_CONFIG"
}
merge_config
echo "Starting Caddy..."
exec caddy run --config "$MERGED_CONFIG" --adapter caddyfile