fix(fish): expose portable Linux tool paths #84
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: | |
| pull_request: | |
| push: | |
| branches: | |
| - main | |
| permissions: | |
| contents: read | |
| jobs: | |
| smoke: | |
| name: Smoke checks | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
| with: | |
| persist-credentials: false | |
| - name: Install minimal tools | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends fish zsh jq shellcheck | |
| - name: Validate shell syntax | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| shopt -s nullglob globstar | |
| zsh_files=(zsh/zshrc zsh/cortex-dotfiles.zsh zsh/scripts/*.zsh) | |
| for file in "${zsh_files[@]}"; do | |
| [[ -f "$file" ]] || continue | |
| zsh -n "$file" | |
| done | |
| while IFS= read -r -d '' file; do | |
| fish --no-execute "$file" | |
| done < <(find fish -type f -name '*.fish' -print0) | |
| bash_files=( | |
| install.sh | |
| claude/statusline.sh | |
| zsh/scripts/*.sh | |
| scripts/*.sh | |
| sketchybar/**/*.sh | |
| ) | |
| for file in "${bash_files[@]}"; do | |
| [[ -f "$file" ]] || continue | |
| bash -n "$file" | |
| done | |
| if command -v shellcheck >/dev/null 2>&1; then | |
| shellcheck --severity=error --shell=bash "${bash_files[@]}" | |
| fi | |
| - name: Run Fish migration harnesses | |
| shell: bash | |
| run: | | |
| fish fish/tests/w2-core.fish | |
| fish fish/tests/w3-helpers.fish | |
| fish fish/tests/w4b-screenshots.fish | |
| fish fish/tests/w5a-hremote.fish | |
| fish fish/tests/w5b-herdr-ssh.fish | |
| fish fish/tests/w6-agent-helpers.fish | |
| - name: Validate JSON configs | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| while IFS= read -r file; do | |
| jq empty "$file" | |
| done < <(git ls-files '*.json') | |
| - name: Check Cortex shell integration | |
| run: ./scripts/check-cortex-shell-integration.sh | |
| - name: Check navigation shortcuts | |
| run: ./scripts/check-navigation-shortcuts.sh | |
| - name: Check installer symlink safety | |
| run: ./scripts/check-install-symlinks.sh | |
| - name: Check Nix Home Manager preflight contracts | |
| run: bash scripts/test-nix-preflight.sh | |
| - name: Validate TOML configs | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| python3 - <<'PY' | |
| import pathlib | |
| import subprocess | |
| import tomllib | |
| files = subprocess.check_output( | |
| ["git", "ls-files", "*.toml"], text=True | |
| ).splitlines() | |
| for file in files: | |
| with pathlib.Path(file).open("rb") as handle: | |
| tomllib.load(handle) | |
| PY | |
| - name: Run installer check when available | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| if grep -Eq -- '(^|[[:space:]])--check([^[:alnum:]_-]|$)' install.sh; then | |
| ./install.sh --check | |
| else | |
| printf '%s\n' 'install.sh --check not available; skipping.' | |
| fi |