@imdeadpool/guardex 7.0.13 → 7.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
+ compose_file="${GUARDEX_DOCKER_COMPOSE_FILE:-}"
6
+ service="${GUARDEX_DOCKER_SERVICE:-}"
7
+ mode="${GUARDEX_DOCKER_MODE:-auto}"
8
+ workdir_override="${GUARDEX_DOCKER_WORKDIR:-}"
9
+
10
+ usage() {
11
+ cat >&2 <<'EOF'
12
+ Usage: bash scripts/guardex-docker-loader.sh [--] <command...>
13
+
14
+ Environment:
15
+ GUARDEX_DOCKER_SERVICE=<compose-service> required unless compose defines exactly one service
16
+ GUARDEX_DOCKER_COMPOSE_FILE=<path> optional docker compose file override
17
+ GUARDEX_DOCKER_MODE=auto|exec|run default: auto
18
+ GUARDEX_DOCKER_WORKDIR=<path> optional working directory override inside the container
19
+ EOF
20
+ }
21
+
22
+ choose_compose_cmd() {
23
+ if command -v docker >/dev/null 2>&1 && docker compose version >/dev/null 2>&1; then
24
+ printf 'docker compose'
25
+ return 0
26
+ fi
27
+ if command -v docker-compose >/dev/null 2>&1; then
28
+ printf 'docker-compose'
29
+ return 0
30
+ fi
31
+ return 1
32
+ }
33
+
34
+ mapfile_from_lines() {
35
+ local raw="$1"
36
+ local -n out_ref="$2"
37
+ out_ref=()
38
+ while IFS= read -r line; do
39
+ [[ -n "$line" ]] || continue
40
+ out_ref+=("$line")
41
+ done <<<"$raw"
42
+ }
43
+
44
+ if [[ "${1:-}" == "--" ]]; then
45
+ shift
46
+ fi
47
+
48
+ if [[ $# -eq 0 ]]; then
49
+ usage
50
+ exit 1
51
+ fi
52
+
53
+ if [[ "$mode" != "auto" && "$mode" != "exec" && "$mode" != "run" ]]; then
54
+ echo "[guardex-docker-loader] Invalid GUARDEX_DOCKER_MODE: $mode" >&2
55
+ usage
56
+ exit 1
57
+ fi
58
+
59
+ compose_cmd_raw="$(choose_compose_cmd)" || {
60
+ echo "[guardex-docker-loader] Docker Compose is not available. Install docker compose or docker-compose first." >&2
61
+ exit 1
62
+ }
63
+ IFS=' ' read -r -a compose_cmd <<<"$compose_cmd_raw"
64
+ compose_args=()
65
+ if [[ -n "$compose_file" ]]; then
66
+ compose_args=(-f "$compose_file")
67
+ fi
68
+
69
+ cd "$repo_root"
70
+
71
+ services_raw="$("${compose_cmd[@]}" "${compose_args[@]}" config --services 2>/dev/null || true)"
72
+ declare -a services
73
+ mapfile_from_lines "$services_raw" services
74
+ if [[ ${#services[@]} -eq 0 ]]; then
75
+ echo "[guardex-docker-loader] No Docker Compose services found. Add a compose file or set GUARDEX_DOCKER_COMPOSE_FILE." >&2
76
+ exit 1
77
+ fi
78
+
79
+ if [[ -z "$service" ]]; then
80
+ if [[ ${#services[@]} -eq 1 ]]; then
81
+ service="${services[0]}"
82
+ else
83
+ echo "[guardex-docker-loader] Multiple services found (${services[*]}). Set GUARDEX_DOCKER_SERVICE." >&2
84
+ exit 1
85
+ fi
86
+ fi
87
+
88
+ service_known=0
89
+ for candidate in "${services[@]}"; do
90
+ if [[ "$candidate" == "$service" ]]; then
91
+ service_known=1
92
+ break
93
+ fi
94
+ done
95
+ if [[ $service_known -ne 1 ]]; then
96
+ echo "[guardex-docker-loader] Compose service not found: $service" >&2
97
+ exit 1
98
+ fi
99
+
100
+ run_mode="$mode"
101
+ if [[ "$run_mode" == "auto" ]]; then
102
+ run_mode="run"
103
+ running_raw="$("${compose_cmd[@]}" "${compose_args[@]}" ps --status running --services 2>/dev/null || true)"
104
+ declare -a running_services
105
+ mapfile_from_lines "$running_raw" running_services
106
+ for candidate in "${running_services[@]}"; do
107
+ if [[ "$candidate" == "$service" ]]; then
108
+ run_mode="exec"
109
+ break
110
+ fi
111
+ done
112
+ fi
113
+
114
+ workdir_args=()
115
+ if [[ -n "$workdir_override" ]]; then
116
+ workdir_args=(-w "$workdir_override")
117
+ fi
118
+
119
+ if [[ "$run_mode" == "exec" ]]; then
120
+ exec "${compose_cmd[@]}" "${compose_args[@]}" exec -T "${workdir_args[@]}" "$service" "$@"
121
+ fi
122
+
123
+ exec "${compose_cmd[@]}" "${compose_args[@]}" run --rm -T "${workdir_args[@]}" "$service" "$@"