- Renamed DocStack to dockstack - Transformed toolbox-template into toolbox-qadocker with new functionality - Removed NewToolbox.sh script - Updated PROMPT and configuration files across all toolboxes - Consolidated audit and testing scripts - Updated QWEN.md to reflect new filesystem structure as authoritative source - Merged PROMPT content into QWEN.md as requested Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com> The filesystem structure has been intentionally restructured and is now the authoritative source of truth for the project organization.
74 lines
2.4 KiB
Bash
Executable File
74 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
# Security: Validate input parameters to prevent command injection
|
|
sanitized_input() {
|
|
local input="$1"
|
|
# Check for potentially dangerous characters/commands
|
|
case "$input" in
|
|
*[\;\|\&\`\$]*)
|
|
echo "Error: Invalid input detected: $input" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Validate dependencies
|
|
if ! command -v docker &> /dev/null; then
|
|
echo "Error: docker is required but not installed." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! command -v docker compose &> /dev/null; then
|
|
echo "Error: docker compose is required but not installed." >&2
|
|
exit 1
|
|
fi
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
COMPOSE_FILE="${SCRIPT_DIR}/docker-compose.yml"
|
|
|
|
export LOCAL_UID="${USER_ID_OVERRIDE:-$(id -u)}"
|
|
sanitized_input "$LOCAL_UID"
|
|
export LOCAL_GID="${GROUP_ID_OVERRIDE:-$(id -g)}"
|
|
sanitized_input "$LOCAL_GID"
|
|
export LOCAL_USERNAME="${USERNAME_OVERRIDE:-toolbox}"
|
|
sanitized_input "$LOCAL_USERNAME"
|
|
export TOOLBOX_IMAGE="${TOOLBOX_IMAGE_OVERRIDE:-tsysdevstack-toolboxstack-{{toolbox_name}}}"
|
|
sanitized_input "$TOOLBOX_IMAGE"
|
|
|
|
if [[ ! -f "${COMPOSE_FILE}" ]]; then
|
|
echo "Error: docker-compose.yml not found at ${COMPOSE_FILE}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
ACTION="${1:-up}"
|
|
sanitized_input "$ACTION"
|
|
shift || true
|
|
|
|
if [[ "${ACTION}" == "up" ]]; then
|
|
# Create necessary directories for the toolbox tools with proper permissions
|
|
mkdir -p "${HOME}/.local/share/mise" "${HOME}/.cache/mise"
|
|
mkdir -p "${HOME}/.config" "${HOME}/.local/share"
|
|
mkdir -p "${HOME}/.cache/openai" "${HOME}/.cache/gemini" "${HOME}/.cache/qwen" "${HOME}/.cache/code" "${HOME}/.cache/opencode"
|
|
mkdir -p "${HOME}/.config/openai" "${HOME}/.config/gemini" "${HOME}/.config/qwen" "${HOME}/.config/code" "${HOME}/.config/opencode"
|
|
mkdir -p "${HOME}/.config/codex" "${HOME}/.cache/codex"
|
|
|
|
# Set proper permissions for created directories
|
|
chmod 700 "${HOME}/.config" "${HOME}/.local/share" "${HOME}/.cache" 2>/dev/null || true
|
|
fi
|
|
|
|
case "${ACTION}" in
|
|
up)
|
|
docker compose -f "${COMPOSE_FILE}" up --build --detach "$@"
|
|
echo "Container started. Use 'docker exec -it tsysdevstack-toolboxstack-{{toolbox_name}} zsh' to access the shell."
|
|
;;
|
|
down)
|
|
docker compose -f "${COMPOSE_FILE}" down "$@"
|
|
echo "Container stopped."
|
|
;;
|
|
*)
|
|
echo "Usage: $0 [up|down] [additional docker compose args]" >&2
|
|
exit 1
|
|
;;
|
|
esac |