7
7
branches : [ master ]
8
8
9
9
jobs :
10
- validate_library : # job id
10
+ check_dockerfile_changed :
11
11
runs-on : ubuntu-latest
12
+ outputs :
13
+ changed : ${{ steps.filter.outputs.changed }}
14
+
12
15
steps :
13
- - name : Checkout Code
14
- id : checkout
16
+ - name : Checkout code
15
17
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
24
87
uses : coverallsapp/github-action@master
25
88
with :
26
89
github-token : ${{ secrets.GITHUB_TOKEN }}
27
- validate_examples : # job id
90
+ path-to-lcov : ./coverage/lcov.info
91
+
92
+ build_examples :
28
93
runs-on : ubuntu-latest
94
+ if : ${{ always() }}
95
+ needs : [build_ci_docker_image]
29
96
continue-on-error : true
30
97
strategy :
31
98
matrix :
@@ -38,26 +105,60 @@ jobs:
38
105
- ./examples/Example5_UsingTemplates/Example5_UsingTemplates.ino
39
106
- ./examples/Example6_SensorTutorial/Example6_SensorTutorial.ino
40
107
- ./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
43
111
fully-qualified-board-name :
44
112
- STMicroelectronics:stm32:BluesW:pnum=SWAN_R5
45
113
- esp32:esp32:featheresp32
46
114
- adafruit:samd:adafruit_feather_m4
47
115
- STMicroelectronics:stm32:GenF4:pnum=FEATHER_F405
48
- - arduino:mbed_nano:nano33ble
116
+ # TODO: Fix this. May require upstream fix.
117
+ # - arduino:mbed_nano:nano33ble
49
118
- SparkFun:apollo3:sfe_artemis_thing_plus
50
119
- STMicroelectronics:stm32:Nucleo_32:pnum=NUCLEO_L432KC
51
120
- adafruit:nrf52:feather52840:softdevice=s140v6
52
121
- rp2040:rp2040:rpipico
53
122
- arduino:avr:uno
123
+
54
124
steps :
55
- - name : Checkout Code
125
+ - name : Checkout code
56
126
id : checkout
57
127
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
+
58
133
- 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
61
162
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