mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-11-11 15:34:06 +01:00
analyze_repo.sh was shfmt-clean at133fccfand my split made it dirty (a double blank line). Fixed with shfmt -w, then restored the STEP 1 comment banner shfmt -w also stripped -- all eight banners re-counted. The three new shell_check libs inherited their parent's 2-space indentation; as new files they have no prior style to preserve, so they are now tabs like shfmt wants. Context for the exit code: 157 of 298 linux_configuration shell files already fail shfmt at133fccf. shfmt is not in .pre-commit-config.yaml and there is no .editorconfig, so run_linters exiting 1 on the full tree is the repo's standing state, not a regression here. Scoped this commit to what these splits touched rather than reformatting 157 files. Also closes the risk left open ina84556a: run_linters now verified directly over the three new libs -- all six passes PASS, exit 0 -- with install_linters never invoked, so decision 6 holds. That is the path .github/workflows/shell-check.yml runs. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011w2Pj4Ek3ZNMQVYcFHgXDY
87 lines
2.5 KiB
Bash
Executable File
87 lines
2.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Linter installation: command probes, Arch/AUR detection, and the pacman /
|
|
# AUR-helper dispatch for shellcheck, shfmt, checkbashisms and bashate.
|
|
#
|
|
# Sourced by shell_check.sh; split out to keep it under the 250-line cap.
|
|
# Sourced rather than run, so it inherits the caller's options and reads
|
|
# SKIP_INSTALL and VERBOSE, which the entry sets from its arguments above the
|
|
# source line.
|
|
|
|
is_cmd() { command -v "$1" >/dev/null 2>&1; }
|
|
|
|
is_arch() { is_cmd pacman; }
|
|
have_aur_helper() { is_cmd yay || is_cmd paru; }
|
|
|
|
install_if_missing() {
|
|
local pkg cmd
|
|
pkg="$1"
|
|
cmd="$2"
|
|
if is_cmd "$cmd"; then
|
|
[[ $VERBOSE == "true" ]] && log_info "Found $cmd"
|
|
return 0
|
|
fi
|
|
|
|
if [[ $SKIP_INSTALL == "true" ]]; then
|
|
log_warn "Skipping install of $pkg ($cmd not found)"
|
|
return 1
|
|
fi
|
|
|
|
if is_arch; then
|
|
log_info "Installing $pkg via pacman..."
|
|
if ! sudo pacman -S --needed --noconfirm "$pkg"; then
|
|
log_warn "Failed to install $pkg via pacman."
|
|
return 1
|
|
fi
|
|
return 0
|
|
else
|
|
log_warn "Non-Arch system detected. Please install '$pkg' manually."
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
install_linters() {
|
|
local ok=0
|
|
|
|
# Core linters
|
|
install_if_missing shellcheck shellcheck || ok=1
|
|
install_if_missing shfmt shfmt || ok=1
|
|
|
|
# Optional linters (best-effort)
|
|
# checkbashisms may be in repos or AUR; try pacman first, then AUR helper
|
|
if ! is_cmd checkbashisms; then
|
|
if is_arch; then
|
|
if ! sudo pacman -S --needed --noconfirm checkbashisms 2>/dev/null; then
|
|
if have_aur_helper; then
|
|
log_info "Installing checkbashisms from AUR (requires yay/paru)..."
|
|
if is_cmd yay; then yay -S --noconfirm checkbashisms || true; fi
|
|
if is_cmd paru; then paru -S --noconfirm checkbashisms || true; fi
|
|
else
|
|
log_warn "checkbashisms not installed (no AUR helper)."
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# bashate (python-based), typically available as python-bashate in AUR
|
|
if ! is_cmd bashate; then
|
|
if is_arch && have_aur_helper; then
|
|
log_info "Installing bashate from AUR (requires yay/paru)..."
|
|
if is_cmd yay; then yay -S --noconfirm python-bashate || true; fi
|
|
if is_cmd paru; then paru -S --noconfirm python-bashate || true; fi
|
|
else
|
|
# Try pip if user has it and wants to
|
|
if is_cmd pipx; then
|
|
log_info "Installing bashate via pipx..."
|
|
pipx install bashate || true
|
|
elif is_cmd pip3; then
|
|
log_info "Installing bashate via pip (user)..."
|
|
pip3 install --user bashate || true
|
|
else
|
|
log_warn "bashate not installed (no AUR helper or pip available)."
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
return "$ok"
|
|
}
|