77 branches : [ master ]
88
99jobs :
10- validate_library : # job id
10+ check_dockerfile_changed :
1111 runs-on : ubuntu-latest
12+ outputs :
13+ changed : ${{ steps.filter.outputs.changed }}
14+
1215 steps :
13- - name : Checkout Code
14- id : checkout
16+ - name : Checkout code
1517 uses : actions/checkout@v3
16- - name : Run Tests In Container
17- id : containerized_tests
18- uses : ./.github/actions/run-tests-in-container
19- - name : Coveralls Action Bug Workaround
20- id : coveralls_bug_workaround
21- run : sudo sed -i 's/github\/workspace/home\/runner\/work\/note-arduino\/note-arduino/g' ./coverage/lcov.info
22- - name : Publish Test Coverage
23- id : publish_coverage
18+
19+ # TODO: This is a 3rd party GitHub action from some dude. Ideally, we'd
20+ # use something more "official".
21+ - name : Check if Dockerfile changed
22+ uses : dorny/paths-filter@v2
23+ id : filter
24+ with :
25+ base : ' master'
26+ filters : |
27+ changed:
28+ - 'Dockerfile'
29+ build_ci_docker_image :
30+ runs-on : ubuntu-latest
31+ needs : [check_dockerfile_changed]
32+ if : ${{ needs.check_dockerfile_changed.outputs.changed == 'true' }}
33+
34+ steps :
35+ - name : Checkout code
36+ uses : actions/checkout@v3
37+
38+ - name : Login to GitHub Container Registry
39+ uses : docker/login-action@v2
40+ with :
41+ registry : ghcr.io
42+ username : ${{ github.actor }}
43+ password : ${{ secrets.GITHUB_TOKEN }}
44+
45+ - name : Set up Docker Buildx
46+ uses : docker/setup-buildx-action@v2
47+
48+ - name : Rebuild image
49+ uses : docker/build-push-action@v4
50+ with :
51+ context : .
52+ load : true
53+ tags : ghcr.io/blues/note_arduino_ci:latest
54+ outputs : type=docker,dest=/tmp/note_arduino_ci_image.tar
55+
56+ - name : Upload image artifact
57+ uses : actions/upload-artifact@v3
58+ with :
59+ name : note_arduino_ci_image
60+ path : /tmp/note_arduino_ci_image.tar
61+
62+ run_tests :
63+ runs-on : ubuntu-latest
64+ if : ${{ always() }}
65+ needs : [build_ci_docker_image]
66+
67+ steps :
68+ - name : Checkout code
69+ uses : actions/checkout@v3
70+
71+ - name : Load CI Docker image
72+ if : ${{ needs.build_ci_docker_image.result == 'success' }}
73+ uses : ./.github/actions/load-ci-image
74+
75+ - name : Run tests
76+ run : |
77+ docker run --rm --volume $(pwd):/note-arduino/ \
78+ --workdir /note-arduino/ \
79+ --entrypoint ./test/run_all_tests.sh \
80+ --user root \
81+ ghcr.io/blues/note_arduino_ci:latest
82+
83+ - name : Adjust lcov source file paths for Coveralls
84+ run : sudo sed -i 's/\/note-arduino\///g' ./coverage/lcov.info
85+
86+ - name : Publish test coverage
2487 uses : coverallsapp/github-action@master
2588 with :
2689 github-token : ${{ secrets.GITHUB_TOKEN }}
27- validate_examples : # job id
90+ path-to-lcov : ./coverage/lcov.info
91+
92+ build_examples :
2893 runs-on : ubuntu-latest
94+ if : ${{ always() }}
95+ needs : [build_ci_docker_image]
2996 continue-on-error : true
3097 strategy :
3198 matrix :
@@ -38,26 +105,60 @@ jobs:
38105 - ./examples/Example5_UsingTemplates/Example5_UsingTemplates.ino
39106 - ./examples/Example6_SensorTutorial/Example6_SensorTutorial.ino
40107 - ./examples/Example7_PowerControl/Example7_PowerControl.ino
41- - ./examples/Example8_BinarySendReceive/Example8_BinarySendReceive.ino
42- - ./examples/Example9_BinarySendReceiveChunked/Example9_BinarySendReceiveChunked.ino
108+ # TODO: Uncomment these once note-c is updated with the necessary NoteBinary* functions.
109+ # - ./examples/Example8_BinarySendReceive/Example8_BinarySendReceive.ino
110+ # - ./examples/Example9_BinarySendReceiveChunked/Example9_BinarySendReceiveChunked.ino
43111 fully-qualified-board-name :
44112 - STMicroelectronics:stm32:BluesW:pnum=SWAN_R5
45113 - esp32:esp32:featheresp32
46114 - adafruit:samd:adafruit_feather_m4
47115 - STMicroelectronics:stm32:GenF4:pnum=FEATHER_F405
48- - arduino:mbed_nano:nano33ble
116+ # TODO: Fix this. May require upstream fix.
117+ # - arduino:mbed_nano:nano33ble
49118 - SparkFun:apollo3:sfe_artemis_thing_plus
50119 - STMicroelectronics:stm32:Nucleo_32:pnum=NUCLEO_L432KC
51120 - adafruit:nrf52:feather52840:softdevice=s140v6
52121 - rp2040:rp2040:rpipico
53122 - arduino:avr:uno
123+
54124 steps :
55- - name : Checkout Code
125+ - name : Checkout code
56126 id : checkout
57127 uses : actions/checkout@v3
128+
129+ - name : Load CI docker image
130+ if : ${{ needs.build_ci_docker_image.result == 'success' }}
131+ uses : ./.github/actions/load-ci-image
132+
58133 - name : Compile Examples
59- id : compile_examples
60- uses : ./.github/actions/compile-examples
134+ run : |
135+ docker run --rm --volume $(pwd):/note-arduino/ \
136+ --workdir /note-arduino/ \
137+ --entrypoint ./examples/build_example.sh \
138+ ghcr.io/blues/note_arduino_ci:latest \
139+ ${{ matrix.fully-qualified-board-name }} \
140+ ${{ matrix.example-sketch }}
141+
142+ publish_ci_image :
143+ runs-on : ubuntu-latest
144+ # Make sure tests passed and examples built successfully before publishing.
145+ needs : [build_ci_docker_image, run_tests, build_examples]
146+ # Only publish the image if this is a push event and the Docker image was rebuilt.
147+ if : ${{ github.event_name == 'push' && needs.build_ci_docker_image.result == 'success' }}
148+
149+ steps :
150+ - name : Login to GitHub Container Registry
151+ uses : docker/login-action@v2
152+ with :
153+ registry : ghcr.io
154+ username : ${{ github.actor }}
155+ password : ${{ secrets.GITHUB_TOKEN }}
156+
157+ - name : Set up Docker Buildx
158+ uses : docker/setup-buildx-action@v2
159+
160+ - name : Push image to registry
161+ uses : docker/build-push-action@v4
61162 with :
62- example-sketch : ${{ matrix.example-sketch }}
63- fully-qualified-board-name : ${{ matrix.fully-qualified-board-name }}
163+ push : true
164+ tags : ghcr.io/blues/note_arduino_ci:latest
0 commit comments