66 pull_request :
77 branches : [main]
88
9+ # Cancel in-progress runs when a new commit is pushed to the same PR.
10+ # PR: same group per PR so new push cancels previous run. Push to main: unique group so no cancel.
911concurrency :
10- group : ${{ github.workflow }}-${{ github.ref }}
11- cancel-in-progress : true
12+ group : ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
13+ cancel-in-progress : ${{ github.event_name == 'pull_request' }}
1214
1315env :
1416 CARGO_TERM_COLOR : always
1517 RUST_BACKTRACE : 1
1618 # Cache keys for better hit rates
1719 RUST_CACHE_KEY : v1
1820 PLAYWRIGHT_BROWSERS_PATH : ${{ github.workspace }}/.cache/ms-playwright
21+ # Linux: pkg-config must find glib-2.0.pc (set before any cargo step; only used on Linux)
22+ PKG_CONFIG_PATH : /usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
1923
2024jobs :
2125 # ─────────────────────────────────────────────────────────────
@@ -25,24 +29,40 @@ jobs:
2529 runs-on : ubuntu-latest
2630 steps :
2731 - uses : actions/checkout@v4
28- - uses : dtolnay/rust-toolchain@stable
29- with :
30- components : rustfmt, clippy
31- - uses : Swatinem/rust-cache@v2
3232
3333 - name : Install Linux deps
3434 run : |
3535 sudo apt-get update
36- sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libsecret-1-dev
36+ sudo apt-get install -y build-essential pkg-config libglib2.0-dev libgtk-3-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libsecret-1-dev
37+ echo "=== Verifying glib-2.0 installation ==="
38+ dpkg -l | grep libglib2.0-dev || echo "libglib2.0-dev not installed"
39+ find /usr -name 'glib-2.0.pc' 2>/dev/null || echo "glib-2.0.pc not found"
40+ pkg-config --modversion glib-2.0 || echo "pkg-config cannot find glib-2.0"
41+ pkg-config --exists 'glib-2.0 >= 2.70' && echo "glib-2.0 >= 2.70 found" || (echo "ERROR: glib-2.0 >= 2.70 not found"; exit 1)
42+ echo "PKG_CONFIG_PATH=$(pkg-config --variable pc_path pkg-config)" >> $GITHUB_ENV
43+
44+ - uses : dtolnay/rust-toolchain@stable
45+ with :
46+ components : rustfmt, clippy
47+ env :
48+ PKG_CONFIG_PATH : /usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
49+
50+ - uses : Swatinem/rust-cache@v2
51+ env :
52+ PKG_CONFIG_PATH : /usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
3753
3854 - name : Format check
3955 run : cargo fmt --all --check
4056
4157 - name : Clippy
4258 run : cargo clippy --workspace -- -D warnings
59+ env :
60+ PKG_CONFIG_PATH : /usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
4361
4462 - name : Check (no features)
4563 run : cargo check --workspace
64+ env :
65+ PKG_CONFIG_PATH : /usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
4666
4767 # ─────────────────────────────────────────────────────────────
4868 # TypeScript Checks (fast)
@@ -82,20 +102,27 @@ jobs:
82102 runs-on : ${{ matrix.os }}
83103 steps :
84104 - uses : actions/checkout@v4
105+
106+ - name : Install Linux deps
107+ if : matrix.os == 'ubuntu-latest'
108+ run : |
109+ sudo apt-get update
110+ sudo apt-get install -y build-essential pkg-config libglib2.0-dev libgtk-3-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libsecret-1-dev
111+ echo "=== Verifying glib-2.0 installation ==="
112+ dpkg -l | grep libglib2.0-dev || echo "libglib2.0-dev not installed"
113+ find /usr -name 'glib-2.0.pc' 2>/dev/null || echo "glib-2.0.pc not found"
114+ pkg-config --modversion glib-2.0 || echo "pkg-config cannot find glib-2.0"
115+ pkg-config --exists 'glib-2.0 >= 2.70' && echo "glib-2.0 >= 2.70 found" || (echo "ERROR: glib-2.0 >= 2.70 not found"; exit 1)
116+ echo "PKG_CONFIG_PATH=$(pkg-config --variable pc_path pkg-config)" >> $GITHUB_ENV
117+
85118 - uses : dtolnay/rust-toolchain@stable
86119 with :
87120 targets : ${{ matrix.target }}
121+
88122 - uses : Swatinem/rust-cache@v2
89123 with :
90124 key : ${{ matrix.target }}
91125
92- # Linux dependencies for Tauri
93- - name : Install Linux deps
94- if : matrix.os == 'ubuntu-latest'
95- run : |
96- sudo apt-get update
97- sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libsecret-1-dev
98-
99126 # Install cargo-nextest
100127 - name : Install nextest
101128 uses : taiki-e/install-action@nextest
@@ -131,27 +158,40 @@ jobs:
131158 runs-on : ${{ matrix.os }}
132159 steps :
133160 - uses : actions/checkout@v4
161+
162+ - name : Install Linux deps
163+ if : matrix.os == 'ubuntu-latest'
164+ run : |
165+ sudo apt-get update
166+ sudo apt-get install -y build-essential pkg-config libglib2.0-dev libgtk-3-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libsecret-1-dev
167+ echo "=== Verifying glib-2.0 installation ==="
168+ dpkg -l | grep libglib2.0-dev || echo "libglib2.0-dev not installed"
169+ find /usr -name 'glib-2.0.pc' 2>/dev/null || echo "glib-2.0.pc not found"
170+ pkg-config --modversion glib-2.0 || echo "pkg-config cannot find glib-2.0"
171+ pkg-config --exists 'glib-2.0 >= 2.70' && echo "glib-2.0 >= 2.70 found" || (echo "ERROR: glib-2.0 >= 2.70 not found"; exit 1)
172+ echo "PKG_CONFIG_PATH=$(pkg-config --variable pc_path pkg-config)" >> $GITHUB_ENV
173+
134174 - uses : dtolnay/rust-toolchain@stable
135175 with :
136176 targets : ${{ matrix.target }}
177+ env :
178+ PKG_CONFIG_PATH : /usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
179+
137180 - uses : Swatinem/rust-cache@v2
138181 with :
139182 key : ${{ matrix.target }}-build
183+ env :
184+ PKG_CONFIG_PATH : /usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
140185 - uses : pnpm/action-setup@v4
141186 - uses : actions/setup-node@v4
142187 with :
143188 node-version : 20
144189 cache : ' pnpm'
145190
146- - name : Install Linux deps
147- if : matrix.os == 'ubuntu-latest'
148- run : |
149- sudo apt-get update
150- sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libsecret-1-dev
151-
152191 - run : pnpm install --frozen-lockfile
153192 - run : pnpm build
154193 env :
194+ PKG_CONFIG_PATH : /usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
155195 TAURI_SIGNING_PRIVATE_KEY : ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
156196
157197 # ─────────────────────────────────────────────────────────────
@@ -215,21 +255,34 @@ jobs:
215255 runs-on : ${{ matrix.os }}
216256 steps :
217257 - uses : actions/checkout@v4
258+
259+ - name : Install Linux deps
260+ if : matrix.os == 'ubuntu-latest'
261+ run : |
262+ sudo apt-get update
263+ sudo apt-get install -y build-essential pkg-config libglib2.0-dev libgtk-3-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libsecret-1-dev webkit2gtk-driver xvfb
264+ echo "=== Verifying glib-2.0 installation ==="
265+ dpkg -l | grep libglib2.0-dev || echo "libglib2.0-dev not installed"
266+ find /usr -name 'glib-2.0.pc' 2>/dev/null || echo "glib-2.0.pc not found"
267+ pkg-config --modversion glib-2.0 || echo "pkg-config cannot find glib-2.0"
268+ pkg-config --exists 'glib-2.0 >= 2.70' && echo "glib-2.0 >= 2.70 found" || (echo "ERROR: glib-2.0 >= 2.70 not found"; exit 1)
269+ echo "PKG_CONFIG_PATH=$(pkg-config --variable pc_path pkg-config)" >> $GITHUB_ENV
270+
218271 - uses : dtolnay/rust-toolchain@stable
219- - uses : Swatinem/rust-cache@v2
220- with :
221- key : ${{ matrix.os }}-e2e
272+ env :
273+ PKG_CONFIG_PATH : /usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
274+
222275 - uses : pnpm/action-setup@v4
223276 - uses : actions/setup-node@v4
224277 with :
225278 node-version : 20
226279 cache : ' pnpm'
227280
228- - name : Install Linux deps
229- if : matrix.os == 'ubuntu-latest'
230- run : |
231- sudo apt-get update
232- sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libsecret-1-dev webkit2gtk-driver xvfb
281+ - uses : Swatinem/rust-cache@v2
282+ with :
283+ key : ${{ matrix.os }}-e2e
284+ env :
285+ PKG_CONFIG_PATH : /usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
233286
234287 # Cache tauri-driver binary
235288 - name : Cache tauri-driver
@@ -242,12 +295,15 @@ jobs:
242295 - name : Install tauri-driver
243296 if : steps.tauri-driver-cache.outputs.cache-hit != 'true'
244297 run : cargo install tauri-driver --locked
298+ env :
299+ PKG_CONFIG_PATH : /usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
245300
246301 - run : pnpm install --frozen-lockfile
247302
248303 - name : Build app
249304 run : pnpm build
250305 env :
306+ PKG_CONFIG_PATH : /usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
251307 TAURI_SIGNING_PRIVATE_KEY : ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
252308
253309 - name : Run Tauri E2E tests (Linux)
0 commit comments