Skip to content

Commit 797e8ed

Browse files
authored
feat(shell): add minimum version validation for shell dependencies (#2316)
1 parent ec75871 commit 797e8ed

1 file changed

Lines changed: 53 additions & 4 deletions

File tree

shell-plugin/doctor.zsh

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -204,14 +204,51 @@ else
204204
print_result code "eval \"\$(forge zsh theme)\""
205205
fi
206206

207+
# Helper function to compare versions
208+
# Returns 0 if version1 >= version2, 1 otherwise
209+
function version_gte() {
210+
local version1=$1
211+
local version2=$2
212+
213+
# Remove 'v' prefix if present
214+
version1=${version1#v}
215+
version2=${version2#v}
216+
217+
# Split versions into arrays
218+
local -a ver1_parts=(${(s:.:)version1})
219+
local -a ver2_parts=(${(s:.:)version2})
220+
221+
# Compare each part
222+
for i in {1..3}; do
223+
local v1=${ver1_parts[$i]:-0}
224+
local v2=${ver2_parts[$i]:-0}
225+
226+
# Remove any non-numeric suffix (e.g., "0-rc1" -> "0")
227+
v1=${v1%%[^0-9]*}
228+
v2=${v2%%[^0-9]*}
229+
230+
if [[ $v1 -gt $v2 ]]; then
231+
return 0
232+
elif [[ $v1 -lt $v2 ]]; then
233+
return 1
234+
fi
235+
done
236+
237+
return 0 # versions are equal
238+
}
239+
207240
# 5. Check dependencies
208241
print_section "Dependencies"
209242

210243
# Check for fzf - required for interactive selection
211244
if command -v fzf &> /dev/null; then
212245
local fzf_version=$(fzf --version 2>&1 | head -n1 | awk '{print $1}')
213246
if [[ -n "$fzf_version" ]]; then
214-
print_result pass "fzf: ${fzf_version}"
247+
if version_gte "$fzf_version" "0.36.0"; then
248+
print_result pass "fzf: ${fzf_version}"
249+
else
250+
print_result fail "fzf: ${fzf_version}" "Version 0.36.0 or higher required. Update: https://github.com/junegunn/fzf#installation"
251+
fi
215252
else
216253
print_result pass "fzf: installed"
217254
fi
@@ -223,14 +260,22 @@ fi
223260
if command -v fd &> /dev/null; then
224261
local fd_version=$(fd --version 2>&1 | awk '{print $2}')
225262
if [[ -n "$fd_version" ]]; then
226-
print_result pass "fd: ${fd_version}"
263+
if version_gte "$fd_version" "10.0.0"; then
264+
print_result pass "fd: ${fd_version}"
265+
else
266+
print_result fail "fd: ${fd_version}" "Version 10.0.0 or higher required. Update: https://github.com/sharkdp/fd#installation"
267+
fi
227268
else
228269
print_result pass "fd: installed"
229270
fi
230271
elif command -v fdfind &> /dev/null; then
231272
local fd_version=$(fdfind --version 2>&1 | awk '{print $2}')
232273
if [[ -n "$fd_version" ]]; then
233-
print_result pass "fdfind: ${fd_version}"
274+
if version_gte "$fd_version" "10.0.0"; then
275+
print_result pass "fdfind: ${fd_version}"
276+
else
277+
print_result fail "fdfind: ${fd_version}" "Version 10.0.0 or higher required. Update: https://github.com/sharkdp/fd#installation"
278+
fi
234279
else
235280
print_result pass "fdfind: installed"
236281
fi
@@ -242,7 +287,11 @@ fi
242287
if command -v bat &> /dev/null; then
243288
local bat_version=$(bat --version 2>&1 | awk '{print $2}')
244289
if [[ -n "$bat_version" ]]; then
245-
print_result pass "bat: ${bat_version}"
290+
if version_gte "$bat_version" "0.20.0"; then
291+
print_result pass "bat: ${bat_version}"
292+
else
293+
print_result fail "bat: ${bat_version}" "Version 0.20.0 or higher required. Update: https://github.com/sharkdp/bat#installation"
294+
fi
246295
else
247296
print_result pass "bat: installed"
248297
fi

0 commit comments

Comments
 (0)