Add snippets.d auto-import for modular config
This commit is contained in:
11
SKILL.md
11
SKILL.md
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user