Skip to content

Commit ab54472

Browse files
authored
Checkbox based CI workflow (#2177)
- Add a PULL_REQUEST_TEMPLATE.md - Add a linux_fast CI - Add a checkbox checking logic to detect which CI to run
1 parent cd2956a commit ab54472

File tree

3 files changed

+147
-26
lines changed

3 files changed

+147
-26
lines changed

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
### Describe your changes
2+
3+
### Issue ticket number and link if any
4+
5+
### Checklist for finalizing the PR
6+
7+
- [ ] I have performed a [self-review](https://f3d.app/doc/dev/CODING_STYLE.html) of my code
8+
- [ ] I have added [tests](https://f3d.app/doc/dev/TESTING.html) for new features and bugfixes
9+
- [ ] I have added [documentation](https://f3d.app/doc/dev/TESTING.html) for new features
10+
- [ ] If it is a modifying the libf3d API, I have updated bindings
11+
- [ ] If it is a modifying the default versions, I have updated timestamp
12+
13+
### Continuous integration
14+
15+
Please check the checkbox of the CI you want to run, then push again on your branch.
16+
17+
- [ ] Style checks
18+
- [ ] Fast CI
19+
- [ ] Coverage cached CI
20+
- [ ] Analysis cached CI
21+
- [ ] WASM CI
22+
- [ ] Android CI
23+
- [ ] macOS Intel cached CI
24+
- [ ] macOS ARM cached CI
25+
- [ ] Windows cached CI
26+
- [ ] Linux cached CI
27+
- [ ] Other cached CI

.github/workflows/ci.yml

Lines changed: 89 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,42 @@ concurrency:
1515

1616
jobs:
1717

18+
#----------------------------------------------------------------------------
19+
# Detect checkboxes are checked
20+
#----------------------------------------------------------------------------
21+
detect_checkboxes:
22+
name: Detect Checkboxes
23+
runs-on: ubuntu-latest
24+
if: github.event.pull_request.draft == false
25+
outputs:
26+
checked: ${{ steps.detect.outputs.checked }}
27+
unchecked: ${{ steps.detect.outputs.unchecked }}
28+
29+
permissions:
30+
pull-requests: write
31+
32+
steps:
33+
- name: Checkbox Trigger
34+
id: detect
35+
uses: AhmedBaset/checklist@3
36+
with:
37+
token: ${{ github.token }}
38+
39+
- name: list changes
40+
run: |
41+
echo "checked=${{ steps.detect.outputs.checked }}"
42+
echo "unchecked=${{ steps.detect.outputs.unchecked }}"
43+
echo "${{ github.ref }}"
44+
1845
#----------------------------------------------------------------------------
1946
# Default versions: Set default version for all dependencies
2047
#----------------------------------------------------------------------------
2148
default_versions:
2249
runs-on: ubuntu-22.04
2350
container: ghcr.io/f3d-app/f3d-ci
2451
name: Set default versions
52+
needs: detect_checkboxes
53+
if: ${{ (contains(needs.detect_checkboxes.outputs.checked, 'CI')) || (github.ref == 'refs/heads/master') }}
2554
outputs:
2655
alembic_version: ${{ steps.set_default_versions.outputs.alembic_version }}
2756
alembic_min_version: ${{ steps.set_default_versions.outputs.alembic_min_version }}
@@ -67,6 +96,8 @@ jobs:
6796
cache_lfs:
6897
runs-on: ubuntu-22.04
6998
name: Update LFS data cache
99+
needs: detect_checkboxes
100+
if: ${{ (contains(needs.detect_checkboxes.outputs.checked, 'CI')) || (github.ref == 'refs/heads/master') }}
70101
outputs:
71102
lfs_sha: ${{ steps.lfs_sha_recover.outputs.lfs_sha }}
72103
steps:
@@ -89,7 +120,8 @@ jobs:
89120
#----------------------------------------------------------------------------
90121
cache_dependencies:
91122
name: Cache dependencies
92-
needs: default_versions
123+
needs: [default_versions, detect_checkboxes]
124+
if: ${{ (contains(needs.detect_checkboxes.outputs.checked, 'cached CI')) || (github.ref == 'refs/heads/master') }}
93125
strategy:
94126
fail-fast: false
95127
matrix:
@@ -148,9 +180,8 @@ jobs:
148180
# Windows CI: Build and test, cross-vtk build matrix
149181
#----------------------------------------------------------------------------
150182
windows:
151-
if: github.event.pull_request.draft == false
152-
needs: [cache_lfs, cache_dependencies, default_versions]
153-
183+
needs: [cache_lfs, cache_dependencies, default_versions, detect_checkboxes]
184+
if: ${{ (contains(needs.detect_checkboxes.outputs.checked, 'Windows cached CI')) || (github.ref == 'refs/heads/master') }}
154185
strategy:
155186
fail-fast: false
156187
matrix:
@@ -188,12 +219,45 @@ jobs:
188219
usd_version: ${{needs.default_versions.outputs.usd_version}}
189220
java_version: ${{needs.default_versions.outputs.java_version}}
190221

222+
#----------------------------------------------------------------------------
223+
# Linux fast CI: Build and test a single fast CI
224+
#----------------------------------------------------------------------------
225+
linux_fast:
226+
needs: [cache_lfs, detect_checkboxes]
227+
if: ${{ (contains(needs.detect_checkboxes.outputs.checked, 'Fast CI')) || (github.ref == 'refs/heads/master') }}
228+
229+
runs-on: ubuntu-22.04
230+
container: ghcr.io/f3d-app/f3d-ci
231+
232+
env:
233+
DISPLAY: :0
234+
235+
steps:
236+
- name: Checkout
237+
uses: actions/checkout@v4
238+
with:
239+
path: 'source'
240+
fetch-depth: 0
241+
lfs: false
242+
243+
- name: Generic CI
244+
uses: ./source/.github/actions/generic-ci
245+
with:
246+
build_type: fast
247+
vtk_version: v9.4.2
248+
raytracing_label: no-raytracing
249+
rendering_backend: auto
250+
optional_deps_label: no-optional-deps
251+
exclude_deprecated_label: exclude-deprecated
252+
static_label: no-static
253+
lfs_sha: ${{ needs.cache_lfs.outputs.lfs_sha}}
254+
191255
#----------------------------------------------------------------------------
192256
# Linux CI: Build and test, cross-vtk build matrix
193257
#----------------------------------------------------------------------------
194258
linux:
195-
if: github.event.pull_request.draft == false
196-
needs: [cache_lfs, cache_dependencies, default_versions]
259+
needs: [cache_lfs, cache_dependencies, default_versions, detect_checkboxes]
260+
if: ${{ (contains(needs.detect_checkboxes.outputs.checked, 'Linux cached CI')) || (github.ref == 'refs/heads/master') }}
197261

198262
strategy:
199263
fail-fast: false
@@ -349,8 +413,9 @@ jobs:
349413
# MacOS CI: Build and test, cross-vtk build matrix
350414
#----------------------------------------------------------------------------
351415
macos:
352-
if: github.event.pull_request.draft == false
353-
needs: [cache_lfs, cache_dependencies, default_versions]
416+
needs: [cache_lfs, cache_dependencies, default_versions, detect_checkboxes]
417+
if: ${{ (contains(needs.detect_checkboxes.outputs.checked, 'macOS Intel cached CI')) || (github.ref == 'refs/heads/master') }}
418+
354419
strategy:
355420
fail-fast: false
356421
matrix:
@@ -387,8 +452,8 @@ jobs:
387452
# MacOS ARM CI: Build and test, cross-vtk build matrix with a few optional builds
388453
#----------------------------------------------------------------------------
389454
macos_arm:
390-
if: github.event.pull_request.draft == false
391-
needs: [cache_lfs, cache_dependencies, default_versions]
455+
needs: [cache_lfs, cache_dependencies, default_versions, detect_checkboxes]
456+
if: ${{ (contains(needs.detect_checkboxes.outputs.checked, 'macOS ARM cached CI')) || (github.ref == 'refs/heads/master') }}
392457

393458
strategy:
394459
fail-fast: false
@@ -437,8 +502,8 @@ jobs:
437502
# Python packaging: Build and test the Python wheel
438503
#----------------------------------------------------------------------------
439504
python-packaging:
440-
if: github.event.pull_request.draft == false
441-
needs: [cache_lfs, cache_dependencies, default_versions]
505+
needs: [cache_lfs, cache_dependencies, default_versions, detect_checkboxes]
506+
if: ${{ (contains(needs.detect_checkboxes.outputs.checked, 'Other cached CI')) || (github.ref == 'refs/heads/master') }}
442507

443508
strategy:
444509
fail-fast: false
@@ -491,8 +556,8 @@ jobs:
491556
# Coverage: Build and test on linux with last VTK with coverage option
492557
#----------------------------------------------------------------------------
493558
coverage:
494-
needs: [cache_lfs, cache_dependencies, default_versions]
495-
if: github.event.pull_request.draft == false
559+
needs: [cache_lfs, cache_dependencies, default_versions, detect_checkboxes]
560+
if: ${{ (contains(needs.detect_checkboxes.outputs.checked, 'Coverage cached CI')) || (github.ref == 'refs/heads/master') }}
496561

497562
runs-on: ubuntu-22.04
498563
container: ghcr.io/f3d-app/f3d-ci
@@ -532,8 +597,8 @@ jobs:
532597
# "memory" returns false positives in VTK:
533598
# https://stackoverflow.com/questions/60097307/memory-sanitizer-reports-use-of-uninitialized-value-in-global-object-constructio
534599
sanitizer:
535-
needs: [cache_lfs, cache_dependencies, default_versions]
536-
if: github.event.pull_request.draft == false
600+
needs: [cache_lfs, cache_dependencies, default_versions, detect_checkboxes]
601+
if: ${{ (contains(needs.detect_checkboxes.outputs.checked, 'Other cached CI')) || (github.ref == 'refs/heads/master') }}
537602

538603
strategy:
539604
fail-fast: false
@@ -574,8 +639,8 @@ jobs:
574639
# static-analysis: Run static analysis on linux
575640
#----------------------------------------------------------------------------
576641
static-analysis:
577-
needs: [cache_lfs, cache_dependencies, default_versions]
578-
if: github.event.pull_request.draft == false
642+
needs: [cache_lfs, cache_dependencies, default_versions, detect_checkboxes]
643+
if: ${{ (contains(needs.detect_checkboxes.outputs.checked, 'Analysis cached CI')) || (github.ref == 'refs/heads/master') }}
579644

580645
strategy:
581646
fail-fast: false
@@ -613,8 +678,8 @@ jobs:
613678
# external-build: Check build of F3D as sub-project
614679
#----------------------------------------------------------------------------
615680
external-build:
616-
needs: [cache_dependencies, default_versions]
617-
if: github.event.pull_request.draft == false
681+
needs: [cache_dependencies, default_versions, detect_checkboxes]
682+
if: ${{ (contains(needs.detect_checkboxes.outputs.checked, 'Other cached CI')) || (github.ref == 'refs/heads/master') }}
618683

619684
strategy:
620685
fail-fast: false
@@ -640,8 +705,8 @@ jobs:
640705
# android: Check build of F3D for android
641706
#----------------------------------------------------------------------------
642707
android:
643-
if: github.event.pull_request.draft == false
644-
needs: default_versions
708+
needs: [default_versions, detect_checkboxes]
709+
if: ${{ (contains(needs.detect_checkboxes.outputs.checked, 'Android CI')) || (github.ref == 'refs/heads/master') }}
645710

646711
strategy:
647712
fail-fast: false
@@ -669,8 +734,8 @@ jobs:
669734
# webassembly: Build webassembly artifacts
670735
#----------------------------------------------------------------------------
671736
webassembly:
672-
if: github.event.pull_request.draft == false
673-
needs: default_versions
737+
needs: [default_versions, detect_checkboxes]
738+
if: ${{ (contains(needs.detect_checkboxes.outputs.checked, 'WASM CI')) || (github.ref == 'refs/heads/master') }}
674739

675740
strategy:
676741
fail-fast: false

.github/workflows/style-checks.yml

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,39 @@ on:
77
name: Style Checks
88
jobs:
99

10-
style-checks:
11-
name: Formatting Check
10+
#----------------------------------------------------------------------------
11+
# Detect checkboxes are checked
12+
#----------------------------------------------------------------------------
13+
detect_checkboxes:
14+
name: Detect Checkboxes
1215
runs-on: ubuntu-latest
16+
outputs:
17+
checked: ${{ steps.detect.outputs.checked }}
18+
unchecked: ${{ steps.detect.outputs.unchecked }}
19+
20+
permissions:
21+
pull-requests: write
22+
23+
steps:
24+
- name: Checkbox Trigger
25+
id: detect
26+
uses: AhmedBaset/checklist@3
27+
with:
28+
token: ${{ github.token }}
1329

30+
- name: list changes
31+
run: |
32+
echo "checked=${{ steps.detect.outputs.checked }}"
33+
echo "unchecked=${{ steps.detect.outputs.unchecked }}"
34+
35+
#----------------------------------------------------------------------------
36+
# Style checks
37+
#----------------------------------------------------------------------------
38+
style_checks:
39+
name: Formatting Check
40+
runs-on: ubuntu-latest
41+
needs: detect_checkboxes
42+
if: ${{ (contains(needs.detect_checkboxes.outputs.checked, 'Style checks')) }}
1443
env:
1544
ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
1645

0 commit comments

Comments
 (0)