-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall.sh
More file actions
125 lines (114 loc) Β· 4.96 KB
/
Copy pathinstall.sh
File metadata and controls
125 lines (114 loc) Β· 4.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/usr/bin/env bash
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# pgflow β installer (macOS / Linux)
#
# Descarga el binario prebuilt desde GitHub Releases (NO necesitas Go).
# Si lo corres dentro de un clon del repo y falla la descarga, compila del cΓ³digo.
#
# curl -fsSL https://raw.githubusercontent.com/ander0code/pgflow/main/install.sh | bash
#
# Variables:
# PGFLOW_INSTALL_DIR destino (default: ~/.local/bin)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
set -euo pipefail
REPO="ander0code/pgflow"
TOOL="pgflow"
INSTALL_DIR="${PGFLOW_INSTALL_DIR:-$HOME/.local/bin}"
say() { printf '%s\n' "$*"; }
# ββ detectar plataforma βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
os="$(uname -s)"; arch="$(uname -m)"
case "$os" in
Darwin) os="darwin" ;;
Linux) os="linux" ;;
*) say "β SO no soportado por este script: $os"
say " (ΒΏWindows? usa install.ps1 desde PowerShell)"; exit 1 ;;
esac
case "$arch" in
x86_64|amd64) arch="amd64" ;;
arm64|aarch64) arch="arm64" ;;
*) say "β arquitectura no soportada: $arch"; exit 1 ;;
esac
asset="${TOOL}-${os}-${arch}"
url="https://github.com/${REPO}/releases/latest/download/${asset}"
sums_url="https://github.com/${REPO}/releases/latest/download/checksums.txt"
say ""
say "π Instalando pgflow (${os}/${arch})..."
mkdir -p "$INSTALL_DIR"
tmp="$(mktemp)"
sums="$(mktemp)"
trap 'rm -f "$tmp" "$sums"' EXIT
verify_sha256() {
# verify_sha256 <file> <sha256_file> <expected_asset>
local file="$1" sums_file="$2" expected="$3"
# Expected line looks like: "<sha> asset"
local line expected_sha
line="$(grep -F " ${expected}" "$sums_file" 2>/dev/null || true)"
if [ -z "$line" ]; then
say "β No encuentro la firma de ${expected} en checksums.txt"
return 1
fi
expected_sha="$(printf '%s' "$line" | awk '{print $1}')"
local actual_sha
if command -v sha256sum >/dev/null 2>&1; then
actual_sha="$(sha256sum "$file" | awk '{print $1}')"
elif command -v shasum >/dev/null 2>&1; then
actual_sha="$(shasum -a 256 "$file" | awk '{print $1}')"
else
say "β οΈ No tengo ni sha256sum ni shasum β saltando verificaciΓ³n."
return 0
fi
if [ "$expected_sha" != "$actual_sha" ]; then
say "β SHA256 no coincide para ${expected}"
say " esperado: $expected_sha"
say " actual: $actual_sha"
return 1
fi
return 0
}
if curl -fsSL "$url" -o "$tmp" && curl -fsSL "$sums_url" -o "$sums"; then
if verify_sha256 "$tmp" "$sums" "$asset"; then
install -m 0755 "$tmp" "$INSTALL_DIR/$TOOL"
say "β
Descargado, verificado e instalado β $INSTALL_DIR/$TOOL"
else
say " No instalo un binario con firma incorrecta. Mira:"
say " https://github.com/${REPO}/releases/latest"
exit 1
fi
else
say "β οΈ No se pudo descargar el release ($url)."
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" 2>/dev/null && pwd || true)"
if [ -n "$script_dir" ] && [ "${script_dir}" != "." ] && [ -f "${script_dir}/go.mod" ] && command -v go >/dev/null 2>&1; then
say "π¨ Compilando desde el cΓ³digo (go build)..."
(cd "$script_dir" && go build -ldflags="-s -w -X main.version=dev" -o "$INSTALL_DIR/$TOOL" .)
say "β
Compilado e instalado β $INSTALL_DIR/$TOOL"
else
say " Para verificar el binario, clona el repo (donde sΓ hay checksums.txt)"
say " y corre: sha256sum -c dist/checksums.txt"
say " O instala Go y vuelve a correr el instalador."
exit 1
fi
fi
# ββ deps de runtime (solo aviso) ββββββββββββββββββββββββββββββββββββββββββββββββ
missing=()
for dep in psql pg_dump pg_restore ssh; do
command -v "$dep" >/dev/null 2>&1 || missing+=("$dep")
done
if [ ${#missing[@]} -gt 0 ]; then
say ""
say "β οΈ Faltan herramientas en runtime: ${missing[*]}"
say " macOS: brew install postgresql"
say " Debian: sudo apt install postgresql-client openssh-client"
fi
# ββ PATH ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
case ":$PATH:" in
*":$INSTALL_DIR:"*) : ;;
*)
rc="$HOME/.$(basename "${SHELL:-bash}")rc"
say ""
say "β οΈ $INSTALL_DIR no estΓ‘ en tu PATH. AΓ±ade a $rc:"
say ' export PATH="$HOME/.local/bin:$PATH"'
say " y luego: source $rc"
;;
esac
say ""
say "π Listo. Ejecuta: pgflow (ayuda: pgflow --help)"