Skip to content

Commit b8e46c4

Browse files
committed
ci: skip unchanged platform builds using path filters
Use dorny/paths-filter to detect which components changed: - hostsync-core or Cargo.* → rebuild all platforms - hostsync-desktop only → rebuild desktop only - mobile/android only → rebuild Android only - mobile/ios only → rebuild iOS only - docs only → skip all builds Pre-release runs if any build succeeded, uploading only the artifacts that were actually built.
1 parent 0f0baac commit b8e46c4

1 file changed

Lines changed: 39 additions & 5 deletions

File tree

.github/workflows/ci.yml

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,36 @@ env:
1313
CARGO_TERM_COLOR: always
1414

1515
jobs:
16+
changes:
17+
name: Detect changes
18+
runs-on: ubuntu-latest
19+
outputs:
20+
core: ${{ steps.filter.outputs.core }}
21+
desktop: ${{ steps.filter.outputs.desktop }}
22+
android: ${{ steps.filter.outputs.android }}
23+
ios: ${{ steps.filter.outputs.ios }}
24+
steps:
25+
- uses: actions/checkout@v4
26+
- uses: dorny/paths-filter@v3
27+
id: filter
28+
with:
29+
filters: |
30+
core:
31+
- 'crates/hostsync-core/**'
32+
- 'Cargo.toml'
33+
- 'Cargo.lock'
34+
- '.github/workflows/ci.yml'
35+
desktop:
36+
- 'crates/hostsync-desktop/**'
37+
android:
38+
- 'mobile/android/**'
39+
ios:
40+
- 'mobile/ios/**'
41+
1642
test:
1743
name: Test
44+
needs: changes
45+
if: needs.changes.outputs.core == 'true' || needs.changes.outputs.desktop == 'true' || needs.changes.outputs.android == 'true' || needs.changes.outputs.ios == 'true'
1846
runs-on: ubuntu-latest
1947
steps:
2048
- uses: actions/checkout@v4
@@ -25,7 +53,8 @@ jobs:
2553

2654
build-desktop:
2755
name: Desktop ${{ matrix.name }}
28-
needs: test
56+
needs: [changes, test]
57+
if: needs.changes.outputs.core == 'true' || needs.changes.outputs.desktop == 'true'
2958
runs-on: ${{ matrix.os }}
3059
strategy:
3160
matrix:
@@ -119,7 +148,8 @@ jobs:
119148

120149
build-android:
121150
name: Android APK
122-
needs: test
151+
needs: [changes, test]
152+
if: needs.changes.outputs.core == 'true' || needs.changes.outputs.android == 'true'
123153
runs-on: ubuntu-latest
124154
steps:
125155
- uses: actions/checkout@v4
@@ -165,7 +195,8 @@ jobs:
165195

166196
build-ios:
167197
name: iOS IPA
168-
needs: test
198+
needs: [changes, test]
199+
if: needs.changes.outputs.core == 'true' || needs.changes.outputs.ios == 'true'
169200
runs-on: macos-latest
170201
steps:
171202
- uses: actions/checkout@v4
@@ -228,9 +259,12 @@ jobs:
228259

229260
pre-release:
230261
name: Pre-release
231-
needs: [build-desktop, build-android, build-ios]
262+
needs: [changes, build-desktop, build-android, build-ios]
263+
if: |
264+
always() &&
265+
github.event_name == 'push' && github.ref == 'refs/heads/main' &&
266+
(needs.build-desktop.result == 'success' || needs.build-android.result == 'success' || needs.build-ios.result == 'success')
232267
runs-on: ubuntu-latest
233-
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
234268
steps:
235269
- uses: actions/checkout@v4
236270
- uses: actions/download-artifact@v4

0 commit comments

Comments
 (0)