test(ci): run suite under bash 4+ (re-exec + install in CI) #39
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| jobs: | |
| lint: | |
| name: Lint & Validate | |
| runs-on: macos-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Install ShellCheck & bash 4+ | |
| run: brew install shellcheck bash | |
| - name: ShellCheck | |
| run: | | |
| find . -name "*.sh" -not -path "./.git/*" | while read -r file; do | |
| echo "Checking $file" | |
| shellcheck -x -s bash -e SC2034,SC1091,SC2016,SC2024 "$file" || exit 1 | |
| done | |
| - name: Bash syntax | |
| run: | | |
| find . -name "*.sh" -not -path "./.git/*" | while read -r file; do | |
| echo "Validating $file" | |
| bash -n "$file" || exit 1 | |
| done | |
| - name: Tests | |
| run: bash tests/run.sh | |
| - name: Brewfile syntax | |
| run: | | |
| for bf in config/Brewfile.*; do | |
| [ -f "$bf" ] || continue | |
| echo "Validating $bf" | |
| grep -vE '^\s*(#|$|brew |cask |tap |mas )' "$bf" && exit 1 || true | |
| done | |
| - name: Config files exist | |
| run: | | |
| for f in config/Brewfile.dev config/Brewfile.browsers config/Brewfile.utils \ | |
| config/Brewfile.media config/Brewfile.comm config/Brewfile.fonts \ | |
| config/Brewfile.games config/Brewfile.appstore config/shell/.zshrc \ | |
| config/shell/config.jsonc config/ghostty/config \ | |
| config/vscode/settings.json; do | |
| [ -f "$f" ] && echo "OK: $f" || { echo "MISSING: $f"; exit 1; } | |
| done |