@@ -3,17 +3,7 @@ name: Build
33on :
44 pull_request :
55 branches : ["flutter"]
6- paths-ignore :
7- - ' **.md'
8- - ' docs/**'
9- - ' **.png'
10- - ' **.jpg'
11- - ' **.jpeg'
12- - ' **.gif'
13- - ' **.svg'
14- - ' **.webp'
15- - ' **.txt'
16- - ' **.arb'
6+
177concurrency :
188 group : ${{ github.workflow }}-${{ github.ref }}
199 cancel-in-progress : true
@@ -25,138 +15,232 @@ env:
2515 IPAD_DEVICE_MODEL : iPad Pro 13-inch (M4)
2616
2717jobs :
18+ changes :
19+ name : Detect Changes
20+ runs-on : ubuntu-latest
21+ outputs :
22+ is_code : ${{ steps.filter.outputs.code }}
23+ steps :
24+ - uses : actions/checkout@v4
25+ - uses : dorny/paths-filter@v3
26+ id : filter
27+ with :
28+ filters : |
29+ code:
30+ - '**'
31+ - '!**.md'
32+ - '!docs/**'
33+ - '!**.png'
34+ - '!**.jpg'
35+ - '!**.jpeg'
36+ - '!**.gif'
37+ - '!**.svg'
38+ - '!**.webp'
39+ - '!**.txt'
40+ - '!**.arb'
41+
2842 common :
2943 name : Common Build
44+ needs : changes
3045 runs-on : ubuntu-latest
3146 steps :
32- - uses : actions/checkout@v6
47+ - uses : actions/checkout@v4
48+ if : needs.changes.outputs.is_code == 'true'
3349
3450 - name : Common Workflow
51+ if : needs.changes.outputs.is_code == 'true'
3552 uses : ./.github/actions/common
3653
3754 - name : Save PR number
55+ if : needs.changes.outputs.is_code == 'true'
3856 run : |
3957 mkdir -p ./pr
4058 echo ${{ github.event.number }} > ./pr/NR
4159
42- - uses : actions/upload-artifact@v7
60+ - uses : actions/upload-artifact@v4
61+ if : needs.changes.outputs.is_code == 'true'
4362 with :
4463 name : pr
4564 path : pr/
4665
66+ - name : Docs Only Bypass
67+ if : needs.changes.outputs.is_code != 'true'
68+ run : echo "Docs-only change detected. Bypassing common tasks."
69+
4770 android :
4871 name : Android Flutter Build
49- needs : common
72+ needs : [changes, common]
5073 runs-on : ubuntu-latest
5174 steps :
52- - uses : actions/checkout@v6
75+ - uses : actions/checkout@v4
76+ if : needs.changes.outputs.is_code == 'true'
5377
5478 - name : Android Workflow
79+ if : needs.changes.outputs.is_code == 'true'
5580 uses : ./.github/actions/android
5681
82+ - name : Docs Only Bypass
83+ if : needs.changes.outputs.is_code != 'true'
84+ run : echo "Docs-only change detected. Bypassing Android build."
85+
5786 ios :
5887 name : iOS Flutter Build
59- needs : common
60- runs-on : macos-latest
88+ needs : [changes, common]
89+ runs-on : ${{ needs.changes.outputs.is_code == 'true' && ' macos-latest' || 'ubuntu-latest' }}
6190 steps :
6291 - name : Set up Xcode
92+ if : needs.changes.outputs.is_code == 'true'
6393 uses : maxim-lobanov/setup-xcode@v1.7.0
6494 with :
6595 xcode-version : ' 16.4.0'
6696
67- - uses : actions/checkout@v6
97+ - uses : actions/checkout@v4
98+ if : needs.changes.outputs.is_code == 'true'
6899
69100 - name : iOS Workflow
101+ if : needs.changes.outputs.is_code == 'true'
70102 uses : ./.github/actions/ios
71103
104+ - name : Docs Only Bypass
105+ if : needs.changes.outputs.is_code != 'true'
106+ run : echo "Docs-only change detected. Bypassing iOS build."
107+
72108 screenshots-android :
73109 name : Screenshots (Android)
110+ needs : changes
74111 runs-on : ubuntu-latest
75112 timeout-minutes : 30
76113 steps :
77- - uses : actions/checkout@v6
114+ - uses : actions/checkout@v4
115+ if : needs.changes.outputs.is_code == 'true'
78116
79117 - name : Android Screenshot Workflow
118+ if : needs.changes.outputs.is_code == 'true'
80119 uses : ./.github/actions/screenshot-android
81120 with :
82121 ANDROID_EMULATOR_API : ${{ env.ANDROID_EMULATOR_API }}
83122 ANDROID_EMULATOR_ARCH : ${{ env.ANDROID_EMULATOR_ARCH }}
84123
124+ - name : Docs Only Bypass
125+ if : needs.changes.outputs.is_code != 'true'
126+ run : echo "Docs-only change detected. Bypassing Android screenshots."
127+
85128 screenshots-iphone :
86129 name : Screenshots (iPhone)
87- runs-on : macos-latest
130+ needs : changes
131+ runs-on : ${{ needs.changes.outputs.is_code == 'true' && 'macos-latest' || 'ubuntu-latest' }}
88132 timeout-minutes : 30
89133 steps :
90134 - name : Set up Xcode
135+ if : needs.changes.outputs.is_code == 'true'
91136 uses : maxim-lobanov/setup-xcode@v1.7.0
92137 with :
93138 xcode-version : ' 16.4.0'
94139
95- - uses : actions/checkout@v6
140+ - uses : actions/checkout@v4
141+ if : needs.changes.outputs.is_code == 'true'
96142
97143 - name : iPhone Screenshot Workflow
144+ if : needs.changes.outputs.is_code == 'true'
98145 uses : ./.github/actions/screenshot-iphone
99146 with :
100147 IPHONE_DEVICE_MODEL : ${{ env.IPHONE_DEVICE_MODEL }}
101-
148+
149+ - name : Docs Only Bypass
150+ if : needs.changes.outputs.is_code != 'true'
151+ run : echo "Docs-only change detected. Bypassing iPhone screenshots."
152+
102153 screenshots-ipad :
103154 name : Screenshots (iPad)
104- runs-on : macos-latest
155+ needs : changes
156+ runs-on : ${{ needs.changes.outputs.is_code == 'true' && 'macos-latest' || 'ubuntu-latest' }}
105157 timeout-minutes : 30
106158 steps :
107159 - name : Set up Xcode
160+ if : needs.changes.outputs.is_code == 'true'
108161 uses : maxim-lobanov/setup-xcode@v1.7.0
109162 with :
110163 xcode-version : ' 16.4.0'
111164
112- - uses : actions/checkout@v6
165+ - uses : actions/checkout@v4
166+ if : needs.changes.outputs.is_code == 'true'
113167
114168 - name : iPad Screenshot Workflow
169+ if : needs.changes.outputs.is_code == 'true'
115170 uses : ./.github/actions/screenshot-ipad
116171 with :
117172 IPAD_DEVICE_MODEL : ${{ env.IPAD_DEVICE_MODEL }}
118-
173+
174+ - name : Docs Only Bypass
175+ if : needs.changes.outputs.is_code != 'true'
176+ run : echo "Docs-only change detected. Bypassing iPad screenshots."
177+
119178 windows :
120179 name : Windows Flutter Build
121- needs : common
122- runs-on : windows-latest
180+ needs : [changes, common]
181+ runs-on : ${{ needs.changes.outputs.is_code == 'true' && ' windows-latest' || 'ubuntu-latest' }}
123182 steps :
124- - uses : actions/checkout@v6
183+ - uses : actions/checkout@v4
184+ if : needs.changes.outputs.is_code == 'true'
125185
126186 - name : Windows Workflow
187+ if : needs.changes.outputs.is_code == 'true'
127188 uses : ./.github/actions/windows
128-
189+
190+ - name : Docs Only Bypass
191+ if : needs.changes.outputs.is_code != 'true'
192+ run : echo "Docs-only change detected. Bypassing Windows build."
193+
129194 linux :
130195 name : Linux Flutter Build
131- needs : common
196+ needs : [changes, common]
132197 runs-on : ubuntu-latest
133198 steps :
134- - uses : actions/checkout@v6
199+ - uses : actions/checkout@v4
200+ if : needs.changes.outputs.is_code == 'true'
135201
136202 - name : Linux Workflow
203+ if : needs.changes.outputs.is_code == 'true'
137204 uses : ./.github/actions/linux
138205
206+ - name : Docs Only Bypass
207+ if : needs.changes.outputs.is_code != 'true'
208+ run : echo "Docs-only change detected. Bypassing Linux build."
209+
139210 linux-arm64 :
140211 name : Linux ARM64 Flutter Build
141- needs : common
142- runs-on : ubuntu-24.04-arm
212+ needs : [changes, common]
213+ runs-on : ${{ needs.changes.outputs.is_code == 'true' && ' ubuntu-24.04-arm' || 'ubuntu-latest' }}
143214 steps :
144- - uses : actions/checkout@v6
215+ - uses : actions/checkout@v4
216+ if : needs.changes.outputs.is_code == 'true'
145217
146218 - name : Linux ARM64 Workflow
219+ if : needs.changes.outputs.is_code == 'true'
147220 uses : ./.github/actions/linux-arm64
148221
222+ - name : Docs Only Bypass
223+ if : needs.changes.outputs.is_code != 'true'
224+ run : echo "Docs-only change detected. Bypassing Linux ARM64 build."
225+
149226 macos :
150227 name : macOS Flutter Build
151- needs : common
152- runs-on : macos-latest
228+ needs : [changes, common]
229+ runs-on : ${{ needs.changes.outputs.is_code == 'true' && ' macos-latest' || 'ubuntu-latest' }}
153230 steps :
154231 - name : Set up Xcode
232+ if : needs.changes.outputs.is_code == 'true'
155233 uses : maxim-lobanov/setup-xcode@v1.7.0
156234 with :
157235 xcode-version : ' 16.4.0'
158236
159- - uses : actions/checkout@v6
237+ - uses : actions/checkout@v4
238+ if : needs.changes.outputs.is_code == 'true'
160239
161240 - name : macOS Workflow
162- uses : ./.github/actions/macos
241+ if : needs.changes.outputs.is_code == 'true'
242+ uses : ./.github/actions/macos
243+
244+ - name : Docs Only Bypass
245+ if : needs.changes.outputs.is_code != 'true'
246+ run : echo "Docs-only change detected. Bypassing macOS build."
0 commit comments