mirror of
https://github.com/tiennm99/goclaw.git
synced 2026-06-09 20:13:24 +00:00
172684a5a7
* Add prepare-compose.sh for composible modules, options and overlays
* feat(prepare-compose): add --quiet and --skip-validation flags
Add loud() function for conditional output. Use --quiet to suppress
normal output, --skip-validation to bypass docker compose config check.
* chore: add mise config to gitignore
* chore: add GOCLAW_DIR env var and update context paths
- Add GOCLAW_DIR to prepare-compose.sh for .env generation
- Fix context paths in docker-compose files to use ${GOCLAW_DIR:-.}
- Restore symlinks in compose.d/ and compose.options/
* fix: broken symlink, safe .env update, export COMPOSE_FILE before validate
- Fix compose.d/00-goclaw.yml symlink: docker-compose.yml → ../docker-compose.yml
- Add compose.d/.gitkeep so directory is tracked
- Export COMPOSE_FILE before running docker compose config validation
- Replace rm+sed .env update pattern with safe temp file approach
- Quote GOCLAW_DIR value in .env to handle paths with spaces
---------
Co-authored-by: viettranx <viettranx@gmail.com>
77 lines
2.1 KiB
Bash
Executable File
77 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Generates COMPOSE_FILE from compose.d/*.yml
|
|
set -euo pipefail
|
|
|
|
SCRIPT="${BASH_SOURCE[0]}"
|
|
SCRIPT_DIR="$(cd "$(dirname "${SCRIPT}")" && pwd)"
|
|
ENV_FILE="${GOCLAW_ENV_FILE:-$SCRIPT_DIR/.env}"
|
|
|
|
loud() {
|
|
[[ "${QUIET:-false}" != true ]] && echo "$@"
|
|
true
|
|
}
|
|
|
|
# Show help
|
|
if [[ "${1:-}" == "--help" || "${1:-}" == "-h" ]]; then
|
|
echo "Usage: $SCRIPT [--quiet] [--skip-validation]"
|
|
echo ""
|
|
echo " --quiet Suppress normal output"
|
|
echo " --skip-validation Skip docker compose config validation"
|
|
echo ""
|
|
echo " Generates COMPOSE_FILE from compose.d/*.yml files (sorted)"
|
|
echo " Updates .env with the resulting COMPOSE_FILE value"
|
|
echo ""
|
|
echo "Note: docker-compose reads .env automatically"
|
|
echo " for podman-compose: source .env first"
|
|
exit 0
|
|
fi
|
|
|
|
# Parse flags
|
|
SKIP_VALIDATION=false
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--quiet) QUIET=true ;;
|
|
--skip-validation) SKIP_VALIDATION=true ;;
|
|
esac
|
|
done
|
|
|
|
cd "$SCRIPT_DIR" >/dev/null 2>&1
|
|
|
|
[[ ! -f "docker-compose.yml" ]] && echo "docker-compose.yml not found" && exit 1
|
|
|
|
# Build COMPOSE_FILE from compose.d files (sorted)
|
|
COMPOSE_FILE=""
|
|
for f in compose.d/*.yml; do
|
|
[[ -e "$f" ]] && COMPOSE_FILE="$COMPOSE_FILE${COMPOSE_FILE:+:}$f"
|
|
done
|
|
export COMPOSE_FILE
|
|
|
|
# Validate compose files
|
|
if [[ "$SKIP_VALIDATION" != true ]]; then
|
|
DOCKER_CMD="${DOCKER_CMD:-docker}"
|
|
$DOCKER_CMD compose config > /dev/null 2>&1 || { echo "Compose config validation failed"; exit 1; }
|
|
loud "Compose config valid"
|
|
fi
|
|
|
|
# Update a key=value line in .env safely (via temp file)
|
|
update_env() {
|
|
local key="$1" value="$2"
|
|
if grep -q "^${key}=" "$ENV_FILE" 2>/dev/null; then
|
|
sed "s|^${key}=.*|${key}='${value}'|" "$ENV_FILE" > "$ENV_FILE.tmp" && mv "$ENV_FILE.tmp" "$ENV_FILE"
|
|
else
|
|
echo "${key}='${value}'" >> "$ENV_FILE"
|
|
fi
|
|
}
|
|
|
|
# Update .env with COMPOSE_FILE and GOCLAW_DIR
|
|
if [[ -f "$ENV_FILE" ]]; then
|
|
update_env "COMPOSE_FILE" "$COMPOSE_FILE"
|
|
update_env "GOCLAW_DIR" "$SCRIPT_DIR"
|
|
loud "COMPOSE_FILE updated in $ENV_FILE"
|
|
loud " COMPOSE_FILE=$COMPOSE_FILE"
|
|
else
|
|
loud "File not found: $ENV_FILE"
|
|
fi
|
|
|
|
loud "(run '${SCRIPT} --help' for help)"
|