-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathgenFormula.sh
More file actions
115 lines (97 loc) · 3.08 KB
/
genFormula.sh
File metadata and controls
115 lines (97 loc) · 3.08 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
#!/usr/bin/env bash
set -Eeuo pipefail
REPO="nxtrace/NTrace-V1"
API_URL="https://api.github.com/repos/${REPO}/releases/latest"
FORMULA_PATH="Formula/nexttrace.rb"
# Ensure required tools are present
for cmd in curl jq; do
if ! command -v "${cmd}" >/dev/null 2>&1; then
echo "Missing required command: ${cmd}" >&2
exit 1
fi
done
if command -v sha256sum >/dev/null 2>&1; then
CHECKSUM_CMD=(sha256sum)
elif command -v shasum >/dev/null 2>&1; then
CHECKSUM_CMD=(shasum -a 256)
else
echo "Missing required command: sha256sum or shasum" >&2
exit 1
fi
release_json="$(curl -fsSL "${API_URL}")"
tag_name="$(jq -r '.tag_name // empty' <<<"${release_json}")"
if [[ -z "${tag_name}" ]]; then
echo "Failed to determine latest release tag." >&2
exit 1
fi
version="${tag_name#v}"
base_url="https://github.com/${REPO}/releases/download/${tag_name}"
declare -A assets=(
[darwin_amd64]="${base_url}/nexttrace_darwin_amd64"
[darwin_arm64]="${base_url}/nexttrace_darwin_arm64"
[linux_amd64]="${base_url}/nexttrace_linux_amd64"
[linux_arm64]="${base_url}/nexttrace_linux_arm64"
)
armv7_asset="${base_url}/nexttrace_linux_armv7"
if curl -fsI "${armv7_asset}" >/dev/null 2>&1; then
assets[linux_armv7]="${armv7_asset}"
fi
declare -A shas
for key in "${!assets[@]}"; do
url="${assets[${key}]}"
echo "Calculating sha256 for ${key} (${url})" >&2
hash_output="$(curl -fsSL "${url}" | "${CHECKSUM_CMD[@]}")"
shas["${key}"]="${hash_output%% *}"
if [[ -z "${shas[${key}]}" ]]; then
echo "Failed to compute sha256 for ${url}" >&2
exit 1
fi
done
mkdir -p "$(dirname "${FORMULA_PATH}")"
printf -v linux_arm_block ' else\n odie "Unsupported Linux architecture for nexttrace"\n end'
if [[ -n "${shas[linux_armv7]:-}" ]]; then
printf -v linux_arm_block ' elsif Hardware::CPU.arm?\n url "%s"\n sha256 "%s"\n else\n odie "Unsupported Linux architecture for nexttrace"\n end' \
"${assets[linux_armv7]}" "${shas[linux_armv7]}"
fi
cat >"${FORMULA_PATH}" <<EOF
class Nexttrace < Formula
desc "An open source visual route tracking CLI tool"
homepage "https://github.com/nxtrace/NTrace-V1"
version "${version}"
license "GPL-3.0"
livecheck do
url :stable
strategy :github_latest
end
on_macos do
if Hardware::CPU.intel?
url "${assets[darwin_amd64]}"
sha256 "${shas[darwin_amd64]}"
elsif Hardware::CPU.arm?
url "${assets[darwin_arm64]}"
sha256 "${shas[darwin_arm64]}"
else
odie "Unsupported macOS architecture for nexttrace"
end
end
on_linux do
if Hardware::CPU.intel?
url "${assets[linux_amd64]}"
sha256 "${shas[linux_amd64]}"
elsif Hardware::CPU.arm? && Hardware::CPU.is_64_bit?
url "${assets[linux_arm64]}"
sha256 "${shas[linux_arm64]}"
${linux_arm_block}
end
def install
binary = Dir["nexttrace_*"].first
odie "nexttrace binary not found" unless binary
chmod 0o755, binary
bin.install binary => "nexttrace"
end
test do
assert_match "NextTrace", shell_output("#{bin}/nexttrace -V")
end
end
EOF
echo "Updated ${FORMULA_PATH} for ${tag_name}" >&2