Skip to content

Commit 899967b

Browse files
committed
feat(ci): run install tests on 4 platforms, expand verification
- Add matrix strategy: Ubuntu 24.04 x64/arm64, macOS Intel/ARM - Verify all symlinks created by install.sh (26 per OS) - Verify all installed commands with strict failure on missing - Add Oh My Zsh plugins and themes verification step - Pin Ubuntu to 24.04 LTS, macOS to 15-intel and 26
1 parent 2dd475e commit 899967b

1 file changed

Lines changed: 153 additions & 10 deletions

File tree

.github/workflows/install.yml

Lines changed: 153 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,16 @@ env:
2424

2525
jobs:
2626
linux:
27-
name: Ubuntu
28-
runs-on: ubuntu-latest
27+
name: Ubuntu (${{ matrix.arch }})
28+
strategy:
29+
fail-fast: false
30+
matrix:
31+
include:
32+
- runner: ubuntu-24.04
33+
arch: x64
34+
- runner: ubuntu-24.04-arm
35+
arch: arm64
36+
runs-on: ${{ matrix.runner }}
2937
timeout-minutes: 30
3038
steps:
3139
- uses: actions/checkout@v6
@@ -47,27 +55,95 @@ jobs:
4755
errors=$((errors + 1))
4856
fi
4957
}
58+
59+
# Shell & Editor
5060
check "zshrc" "$HOME/.zshrc"
5161
check "gitconfig" "$HOME/.gitconfig"
5262
check "vimrc" "$HOME/.vimrc"
5363
check "vim" "$HOME/.vim"
5464
check "tmux.conf" "$HOME/.tmux.conf"
65+
check "tmux" "$HOME/.tmux"
66+
67+
# Network
5568
check "curlrc" "$HOME/.curlrc"
5669
check "wgetrc" "$HOME/.wgetrc"
70+
check "telnetrc" "$HOME/.telnetrc"
71+
72+
# Search & Input
5773
check "inputrc" "$HOME/.inputrc"
5874
check "ripgreprc" "$HOME/.ripgreprc"
75+
check "fdrc" "$HOME/.fdrc"
76+
77+
# Node.js
78+
check "npmrc" "$HOME/.npmrc"
79+
check "yarnrc" "$HOME/.yarnrc.yml"
80+
check "pnpmrc" "$HOME/.pnpmrc"
81+
82+
# Email
83+
check "muttrc" "$HOME/.muttrc"
84+
check "mutt" "$HOME/.mutt"
85+
check "mailcap" "$HOME/.mailcap"
86+
87+
# Security
88+
check "gnupg" "$HOME/.gnupg"
89+
check "ssh" "$HOME/.ssh"
90+
91+
# App configs
92+
check "htop" "$HOME/.config/htop/htoprc"
93+
check "ghostty" "$HOME/.config/ghostty"
94+
check "kitty" "$HOME/.config/kitty/kitty.conf"
95+
check "bat-config" "$HOME/.config/bat/config"
96+
check "bat-themes" "$HOME/.config/bat/themes"
97+
check "eza" "$HOME/.config/eza"
98+
check "cmus" "$HOME/.config/cmus/rc"
99+
check "yazi" "$HOME/.config/yazi"
100+
check "gh" "$HOME/.config/gh/config.yml"
101+
check "glab" "$HOME/.config/glab-cli/config.yml"
102+
check "tealdeer" "$HOME/.config/tealdeer/config.toml"
103+
check "bottom" "$HOME/.config/bottom/bottom.toml"
104+
check "lazygit" "$HOME/.config/lazygit/config.yml"
105+
check "lazydocker" "$HOME/.config/lazydocker/config.yml"
106+
check "k9s" "$HOME/.config/k9s/config.yml"
107+
108+
# Linux-only
109+
check "conkyrc" "$HOME/.conkyrc"
110+
59111
exit $errors
60112
61113
- name: Verify commands
62114
run: |
63115
set -euo pipefail
64-
for cmd in zsh git vim tmux curl wget fzf ripgrep bat; do
65-
if command -v "$cmd" >/dev/null 2>&1 || dpkg -l "$cmd" 2>/dev/null | grep -q "^ii"; then
66-
echo "OK: $cmd"
116+
errors=0
117+
for cmd in zsh git vim tmux curl wget fzf rg bat eza fd delta gh node go starship docker; do
118+
if command -v "$cmd" >/dev/null 2>&1; then
119+
echo "OK: $cmd ($(command -v "$cmd"))"
120+
elif dpkg -l "$cmd" 2>/dev/null | grep -q "^ii"; then
121+
echo "OK: $cmd (dpkg)"
122+
else
123+
echo "FAIL: $cmd not found"
124+
errors=$((errors + 1))
125+
fi
126+
done
127+
exit $errors
128+
129+
- name: Verify Oh My Zsh
130+
run: |
131+
set -euo pipefail
132+
errors=0
133+
for dir in \
134+
"$HOME/.oh-my-zsh" \
135+
"$HOME/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting" \
136+
"$HOME/.oh-my-zsh/custom/plugins/zsh-completions" \
137+
"$HOME/.oh-my-zsh/custom/plugins/fzf-tab" \
138+
"$HOME/.oh-my-zsh/custom/themes/spaceship-prompt"; do
139+
if [ -d "$dir/.git" ]; then
140+
echo "OK: $(basename "$dir")"
67141
else
68-
echo "WARN: $cmd not found (may use alternate name)"
142+
echo "FAIL: $(basename "$dir") not found"
143+
errors=$((errors + 1))
69144
fi
70145
done
146+
exit $errors
71147
72148
- name: Verify permissions
73149
run: |
@@ -86,8 +162,16 @@ jobs:
86162
check_perm "$HOME/.ssh" "700"
87163
88164
macos:
89-
name: macOS
90-
runs-on: macos-latest
165+
name: macOS (${{ matrix.arch }})
166+
strategy:
167+
fail-fast: false
168+
matrix:
169+
include:
170+
- runner: macos-15-intel
171+
arch: x64
172+
- runner: macos-26
173+
arch: arm64
174+
runs-on: ${{ matrix.runner }}
91175
timeout-minutes: 90
92176
steps:
93177
- uses: actions/checkout@v6
@@ -109,33 +193,92 @@ jobs:
109193
errors=$((errors + 1))
110194
fi
111195
}
196+
197+
# Shell & Editor
112198
check "zshrc" "$HOME/.zshrc"
113199
check "gitconfig" "$HOME/.gitconfig"
114200
check "vimrc" "$HOME/.vimrc"
115201
check "vim" "$HOME/.vim"
116202
check "tmux.conf" "$HOME/.tmux.conf"
203+
check "tmux" "$HOME/.tmux"
204+
205+
# Network
117206
check "curlrc" "$HOME/.curlrc"
118207
check "wgetrc" "$HOME/.wgetrc"
208+
check "telnetrc" "$HOME/.telnetrc"
209+
210+
# Search & Input
119211
check "inputrc" "$HOME/.inputrc"
120212
check "ripgreprc" "$HOME/.ripgreprc"
213+
check "fdrc" "$HOME/.fdrc"
214+
215+
# Node.js
216+
check "npmrc" "$HOME/.npmrc"
217+
check "yarnrc" "$HOME/.yarnrc.yml"
218+
check "pnpmrc" "$HOME/.pnpmrc"
219+
220+
# Email
221+
check "muttrc" "$HOME/.muttrc"
222+
check "mutt" "$HOME/.mutt"
223+
check "mailcap" "$HOME/.mailcap"
224+
225+
# Security
226+
check "gnupg" "$HOME/.gnupg"
227+
check "ssh" "$HOME/.ssh"
228+
229+
# App configs
230+
check "htop" "$HOME/.config/htop/htoprc"
121231
check "ghostty" "$HOME/.config/ghostty"
232+
check "kitty" "$HOME/.config/kitty/kitty.conf"
122233
check "bat-config" "$HOME/.config/bat/config"
234+
check "bat-themes" "$HOME/.config/bat/themes"
123235
check "eza" "$HOME/.config/eza"
236+
check "cmus" "$HOME/.config/cmus/rc"
124237
check "yazi" "$HOME/.config/yazi"
238+
check "gh" "$HOME/.config/gh/config.yml"
239+
check "glab" "$HOME/.config/glab-cli/config.yml"
240+
check "tealdeer" "$HOME/.config/tealdeer/config.toml"
241+
check "bottom" "$HOME/.config/bottom/bottom.toml"
242+
check "lazygit" "$HOME/.config/lazygit/config.yml"
243+
check "lazydocker" "$HOME/.config/lazydocker/config.yml"
244+
check "k9s" "$HOME/.config/k9s/config.yml"
245+
check "k9s-skins" "$HOME/.config/k9s/skins"
246+
125247
exit $errors
126248
127249
- name: Verify Homebrew packages
128250
run: |
129251
set -euo pipefail
130252
eval "$(/opt/homebrew/bin/brew shellenv 2>/dev/null || /usr/local/bin/brew shellenv 2>/dev/null)"
131-
for cmd in bat eza fzf fd rg delta git zsh tmux vim; do
253+
errors=0
254+
for cmd in bat eza fzf fd rg delta git zsh tmux vim gh node nvm bun pnpm; do
132255
if command -v "$cmd" >/dev/null 2>&1; then
133256
echo "OK: $cmd ($(command -v "$cmd"))"
134257
else
135258
echo "FAIL: $cmd not found"
136-
exit 1
259+
errors=$((errors + 1))
260+
fi
261+
done
262+
exit $errors
263+
264+
- name: Verify Oh My Zsh
265+
run: |
266+
set -euo pipefail
267+
errors=0
268+
for dir in \
269+
"$HOME/.oh-my-zsh" \
270+
"$HOME/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting" \
271+
"$HOME/.oh-my-zsh/custom/plugins/zsh-completions" \
272+
"$HOME/.oh-my-zsh/custom/plugins/fzf-tab" \
273+
"$HOME/.oh-my-zsh/custom/themes/spaceship-prompt"; do
274+
if [ -d "$dir/.git" ]; then
275+
echo "OK: $(basename "$dir")"
276+
else
277+
echo "FAIL: $(basename "$dir") not found"
278+
errors=$((errors + 1))
137279
fi
138280
done
281+
exit $errors
139282
140283
- name: Verify permissions
141284
run: |

0 commit comments

Comments
 (0)