Files

139 lines
4.8 KiB
YAML

###############################################################################
# .gitlab-ci.yml — CI pipeline for linux-scripts repository
#
# All scripts are tested on every push:
# 1. lint — ShellCheck + bash syntax + PowerShell syntax
# 2. test — --help and --dry-run validation on Ubuntu and Rocky Linux
#
# On success on master, scripts are ready to sync to the website.
###############################################################################
stages:
- lint
- test
variables:
# Start at "error" for a clean baseline, tighten to "warning" as scripts are cleaned up
SHELLCHECK_SEVERITY: "error"
# ─────────────────────────────────────────────
# Lint Stage
# ─────────────────────────────────────────────
shellcheck:
stage: lint
image: koalaman/shellcheck-alpine:stable
script:
- echo "Running ShellCheck on $(find . -name '*.sh' -not -path './.git/*' | wc -l) scripts..."
- find . -name "*.sh" -not -path "./.git/*" -print0 |
xargs -0 -r shellcheck --severity="$SHELLCHECK_SEVERITY" --format=tty
- echo "ShellCheck passed"
bash-syntax:
stage: lint
image: bash:5
script:
- echo "Checking bash syntax..."
- |
errors=0
total=0
for script in $(find . -name "*.sh" -not -path "./.git/*"); do
total=$((total + 1))
if ! bash -n "$script" 2>&1; then
errors=$((errors + 1))
fi
done
if [ "$errors" -gt 0 ]; then
echo "FAILED: $errors/$total script(s) have syntax errors"
exit 1
fi
echo "All $total scripts pass syntax check"
powershell-syntax:
stage: lint
image: mcr.microsoft.com/powershell:lts-ubuntu-22.04
script:
- echo "Checking PowerShell syntax..."
- |
errors=0
total=0
for script in $(find . -name "*.ps1" -not -path "./.git/*"); do
total=$((total + 1))
echo "Checking: $script"
if ! pwsh -Command "try { \$null = [System.Management.Automation.Language.Parser]::ParseFile('$script', [ref]\$null, [ref]\$null); Write-Host 'OK: $script' } catch { Write-Error \$_; exit 1 }" 2>&1; then
errors=$((errors + 1))
fi
done
if [ "$errors" -gt 0 ]; then
echo "FAILED: $errors/$total PowerShell script(s) have syntax errors"
exit 1
fi
echo "All $total PowerShell scripts pass syntax check"
rules:
- exists:
- "*.ps1"
# ─────────────────────────────────────────────
# Test Stage — Ubuntu 24.04
# ─────────────────────────────────────────────
test-ubuntu:
stage: test
image: ubuntu:24.04
before_script:
- apt-get update -qq
- apt-get install -y -qq procps iproute2 kmod >/dev/null 2>&1
script:
- echo "=== Testing --help flags on Ubuntu 24.04 ==="
- |
passed=0
failed=0
for script in $(find . -maxdepth 1 -name "*.sh" -not -path "./.git/*" | sort); do
name=$(basename "$script")
if bash "$script" --help >/dev/null 2>&1; then
echo "✓ $name --help"
passed=$((passed + 1))
elif bash "$script" -h >/dev/null 2>&1; then
echo "✓ $name -h"
passed=$((passed + 1))
else
echo "○ $name (no --help flag)"
fi
done
echo ""
echo "$passed scripts have working --help"
- echo ""
- echo "=== Testing networktuning.sh --dry-run ==="
- bash networktuning.sh --dry-run 2>&1 || true
# ─────────────────────────────────────────────
# Test Stage — Rocky Linux 9
# ─────────────────────────────────────────────
test-rhel:
stage: test
image: rockylinux:9
before_script:
- dnf install -y -q procps iproute kmod >/dev/null 2>&1
script:
- echo "=== Testing --help flags on Rocky Linux 9 ==="
- |
passed=0
for script in $(find . -maxdepth 1 -name "*.sh" -not -path "./.git/*" | sort); do
name=$(basename "$script")
if bash "$script" --help >/dev/null 2>&1; then
echo "✓ $name --help"
passed=$((passed + 1))
elif bash "$script" -h >/dev/null 2>&1; then
echo "✓ $name -h"
passed=$((passed + 1))
else
echo "○ $name (no --help flag)"
fi
done
echo ""
echo "$passed scripts have working --help"
- echo ""
- echo "=== Testing networktuning.sh --dry-run ==="
- bash networktuning.sh --dry-run 2>&1 || true