ci: add shellcheck lint workflow; fix 6 violations
Lint / Shell (shellcheck) (push) Successful in 14s
Lint / Shell (shellcheck) (push) Successful in 14s
Removes unused drive_width variable (SC2034). Splits local+assign
for emmc_size, host, drive (SC2155). Uses ${var#...} instead of sed
for PCI desc parsing (SC2001). Pipes smartctl through sudo tee to fix
redirect privilege (SC2024).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,20 @@
|
|||||||
|
name: Lint
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: ["**"]
|
||||||
|
pull_request:
|
||||||
|
branches: ["**"]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
shell-lint:
|
||||||
|
name: Shell (shellcheck)
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Install shellcheck
|
||||||
|
run: apt-get update -qq && apt-get install -y -qq shellcheck
|
||||||
|
|
||||||
|
- name: Run shellcheck
|
||||||
|
run: find . -name "*.sh" -exec shellcheck {} +
|
||||||
+8
-8
@@ -410,9 +410,6 @@ generate_10bay_layout() {
|
|||||||
local hostname="$1"
|
local hostname="$1"
|
||||||
build_drive_map
|
build_drive_map
|
||||||
|
|
||||||
# Fixed width for consistent box drawing (fits device names like "nvme0n1")
|
|
||||||
local drive_width=10
|
|
||||||
|
|
||||||
# Box interior width = 136 (determined by 10 bay boxes: 4 + 10*13 + 2)
|
# Box interior width = 136 (determined by 10 bay boxes: 4 + 10*13 + 2)
|
||||||
# Total box width = 138 (136 interior + 2 for │ borders)
|
# Total box width = 138 (136 interior + 2 for │ borders)
|
||||||
|
|
||||||
@@ -493,7 +490,8 @@ generate_micro_layout() {
|
|||||||
|
|
||||||
# Show eMMC if present
|
# Show eMMC if present
|
||||||
if [[ -n "$emmc_device" ]]; then
|
if [[ -n "$emmc_device" ]]; then
|
||||||
local emmc_size=$(lsblk -d -n -o SIZE "/dev/$emmc_device" 2>/dev/null | xargs)
|
local emmc_size
|
||||||
|
emmc_size=$(lsblk -d -n -o SIZE "/dev/$emmc_device" 2>/dev/null | xargs)
|
||||||
printf "│ ┌─────────────────────────────────────────────────────┐ │\n"
|
printf "│ ┌─────────────────────────────────────────────────────┐ │\n"
|
||||||
printf "│ │ Onboard eMMC: %-10s (%s) │ │\n" "$emmc_device" "$emmc_size"
|
printf "│ │ Onboard eMMC: %-10s (%s) │ │\n" "$emmc_device" "$emmc_size"
|
||||||
printf "│ └─────────────────────────────────────────────────────┘ │\n"
|
printf "│ └─────────────────────────────────────────────────────┘ │\n"
|
||||||
@@ -689,7 +687,7 @@ get_storage_controllers() {
|
|||||||
[[ -z "$line" ]] && continue
|
[[ -z "$line" ]] && continue
|
||||||
pci_addr="$(echo "$line" | awk '{print $1}')"
|
pci_addr="$(echo "$line" | awk '{print $1}')"
|
||||||
# Get short description (strip PCI address)
|
# Get short description (strip PCI address)
|
||||||
desc="$(echo "$line" | sed 's/^[0-9a-f:.]\+ //')"
|
desc="${line#*[0-9a-f:.] }"
|
||||||
echo " $pci_addr: $desc"
|
echo " $pci_addr: $desc"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
@@ -709,7 +707,8 @@ get_storage_controllers() {
|
|||||||
# Values: PCI path strings (for --show-pci option)
|
# Values: PCI path strings (for --show-pci option)
|
||||||
#------------------------------------------------------------------------------
|
#------------------------------------------------------------------------------
|
||||||
build_drive_map() {
|
build_drive_map() {
|
||||||
local host="$(hostname | tr -cd '[:alnum:]-_.')"
|
local host
|
||||||
|
host="$(hostname | tr -cd '[:alnum:]-_.')"
|
||||||
local mapping="${SERVER_MAPPINGS[$host]}"
|
local mapping="${SERVER_MAPPINGS[$host]}"
|
||||||
|
|
||||||
# Declare global arrays directly
|
# Declare global arrays directly
|
||||||
@@ -728,7 +727,8 @@ build_drive_map() {
|
|||||||
|
|
||||||
BAY_TO_PCI_PATH[$slot]="$path"
|
BAY_TO_PCI_PATH[$slot]="$path"
|
||||||
if [[ -L "${DISK_BY_PATH}/$path" ]]; then
|
if [[ -L "${DISK_BY_PATH}/$path" ]]; then
|
||||||
local drive="$(readlink -f "${DISK_BY_PATH}/$path" | sed 's/.*\///')"
|
local drive
|
||||||
|
drive="$(readlink -f "${DISK_BY_PATH}/$path" | sed 's/.*\///')"
|
||||||
DRIVE_MAP[$slot]="$drive"
|
DRIVE_MAP[$slot]="$drive"
|
||||||
((mapped_count++))
|
((mapped_count++))
|
||||||
else
|
else
|
||||||
@@ -1090,7 +1090,7 @@ if [[ "$SKIP_SMART" != true ]]; then
|
|||||||
device="${DRIVE_MAP[$bay]}"
|
device="${DRIVE_MAP[$bay]}"
|
||||||
if [[ -n "$device" && "$device" != "EMPTY" && -b "/dev/$device" ]]; then
|
if [[ -n "$device" && "$device" != "EMPTY" && -b "/dev/$device" ]]; then
|
||||||
# Launch background job to collect raw smartctl data
|
# Launch background job to collect raw smartctl data
|
||||||
(sudo smartctl -A -i -H "/dev/$device" > "$SMART_CACHE_DIR/${device}.raw" 2>/dev/null) &
|
(sudo smartctl -A -i -H "/dev/$device" 2>/dev/null | sudo tee "$SMART_CACHE_DIR/${device}.raw" > /dev/null) &
|
||||||
((job_count++))
|
((job_count++))
|
||||||
if ((job_count >= max_parallel_jobs)); then
|
if ((job_count >= max_parallel_jobs)); then
|
||||||
wait -n 2>/dev/null || wait # wait -n requires bash 4.3+, fall back to wait
|
wait -n 2>/dev/null || wait # wait -n requires bash 4.3+, fall back to wait
|
||||||
|
|||||||
Reference in New Issue
Block a user