Skip to content

Commit d1e9a5a

Browse files
committed
Make changes to CI so Docker image is reused.
1 parent 3fc70ec commit d1e9a5a

File tree

9 files changed

+201
-114
lines changed

9 files changed

+201
-114
lines changed

.devcontainer/devcontainer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
// Update the 'dockerFile' property if you aren't using the standard 'Dockerfile' filename.
1010
//"dockerFile": "../.github/actions/compile-examples/Dockerfile",
11-
"dockerFile": "../.github/actions/run-tests-in-container/Dockerfile",
11+
"dockerFile": "../Dockerfile",
1212

1313
// Set *default* container specific settings.json values on container create.
1414
"settings": {},

.github/actions/compile-examples/action.yml

Lines changed: 0 additions & 17 deletions
This file was deleted.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
name: 'Load note-arduino CI Docker image'
2+
runs:
3+
using: 'composite'
4+
steps:
5+
- name: Set up Docker Buildx
6+
uses: docker/setup-buildx-action@v2
7+
8+
- name: Download image artifact
9+
uses: actions/download-artifact@v2
10+
with:
11+
name: note_arduino_ci_image
12+
path: /tmp
13+
14+
- name: Load Docker image
15+
shell: bash
16+
run: |
17+
docker load --input /tmp/note_arduino_ci_image.tar

.github/actions/run-tests-in-container/Dockerfile

Lines changed: 0 additions & 27 deletions
This file was deleted.

.github/actions/run-tests-in-container/action.yml

Lines changed: 0 additions & 6 deletions
This file was deleted.

.github/workflows/note-arduino-ci.yml

Lines changed: 151 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -7,57 +7,157 @@ on:
77
branches: [ master ]
88

99
jobs:
10-
validate_library: # job id
11-
runs-on: ubuntu-latest
12-
steps:
13-
- name: Checkout Code
14-
id: checkout
15-
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
24-
uses: coverallsapp/github-action@master
25-
with:
26-
github-token: ${{ secrets.GITHUB_TOKEN }}
27-
validate_examples: # job id
10+
# check_dockerfile_changed:
11+
# runs-on: ubuntu-latest
12+
# outputs:
13+
# changed: ${{ steps.filter.outputs.changed }}
14+
15+
# steps:
16+
# - name: Checkout code
17+
# uses: actions/checkout@v3
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:
2863
runs-on: ubuntu-latest
29-
continue-on-error: true
30-
strategy:
31-
matrix:
32-
example-sketch:
33-
- ./examples/Example0_LibrarylessCommunication/Example0_LibrarylessCommunication.ino
34-
- ./examples/Example1_NotecardBasics/Example1_NotecardBasics.ino
35-
- ./examples/Example2_PeriodicCommunications/Example2_PeriodicCommunications.ino
36-
- ./examples/Example3_InboundPolling/Example3_InboundPolling.ino
37-
- ./examples/Example4_InboundInterrupts/Example4_InboundInterrupts.ino
38-
- ./examples/Example5_UsingTemplates/Example5_UsingTemplates.ino
39-
- ./examples/Example6_SensorTutorial/Example6_SensorTutorial.ino
40-
- ./examples/Example7_PowerControl/Example7_PowerControl.ino
41-
- ./examples/Example8_BinarySendReceive/Example8_BinarySendReceive.ino
42-
- ./examples/Example9_BinarySendReceiveChunked/Example9_BinarySendReceiveChunked.ino
43-
fully-qualified-board-name:
44-
- STMicroelectronics:stm32:BluesW:pnum=SWAN_R5
45-
- esp32:esp32:featheresp32
46-
- adafruit:samd:adafruit_feather_m4
47-
- STMicroelectronics:stm32:GenF4:pnum=FEATHER_F405
48-
- arduino:mbed_nano:nano33ble
49-
- SparkFun:apollo3:sfe_artemis_thing_plus
50-
- STMicroelectronics:stm32:Nucleo_32:pnum=NUCLEO_L432KC
51-
- adafruit:nrf52:feather52840:softdevice=s140v6
52-
- rp2040:rp2040:rpipico
53-
- arduino:avr:uno
64+
if: ${{ always() }}
65+
# needs: [build_ci_docker_image]
66+
5467
steps:
55-
- name: Checkout Code
56-
id: checkout
68+
- name: Checkout code
5769
uses: actions/checkout@v3
58-
- name: Compile Examples
59-
id: compile_examples
60-
uses: ./.github/actions/compile-examples
61-
with:
62-
example-sketch: ${{ matrix.example-sketch }}
63-
fully-qualified-board-name: ${{ matrix.fully-qualified-board-name }}
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+
ghcr.io/blues/note_arduino_ci:latest
81+
82+
# - name: Adjust lcov source file paths for Coveralls
83+
# run: sudo sed -i 's/\/note-arduino\///g' ./coverage/lcov.info
84+
85+
# - name: Publish test coverage
86+
# uses: coverallsapp/github-action@master
87+
# with:
88+
# github-token: ${{ secrets.GITHUB_TOKEN }}
89+
# path-to-lcov: ./coverage/lcov.info
90+
91+
# build_examples:
92+
# runs-on: ubuntu-latest
93+
# if: ${{ always() }}
94+
# needs: [build_ci_docker_image]
95+
# continue-on-error: true
96+
# strategy:
97+
# matrix:
98+
# example-sketch:
99+
# - ./examples/Example0_LibrarylessCommunication/Example0_LibrarylessCommunication.ino
100+
# - ./examples/Example1_NotecardBasics/Example1_NotecardBasics.ino
101+
# - ./examples/Example2_PeriodicCommunications/Example2_PeriodicCommunications.ino
102+
# - ./examples/Example3_InboundPolling/Example3_InboundPolling.ino
103+
# - ./examples/Example4_InboundInterrupts/Example4_InboundInterrupts.ino
104+
# - ./examples/Example5_UsingTemplates/Example5_UsingTemplates.ino
105+
# - ./examples/Example6_SensorTutorial/Example6_SensorTutorial.ino
106+
# - ./examples/Example7_PowerControl/Example7_PowerControl.ino
107+
# # TODO: Uncomment these once note-c is updated with the necessary NoteBinary* functions.
108+
# # - ./examples/Example8_BinarySendReceive/Example8_BinarySendReceive.ino
109+
# # - ./examples/Example9_BinarySendReceiveChunked/Example9_BinarySendReceiveChunked.ino
110+
# fully-qualified-board-name:
111+
# - STMicroelectronics:stm32:BluesW:pnum=SWAN_R5
112+
# - esp32:esp32:featheresp32
113+
# - adafruit:samd:adafruit_feather_m4
114+
# - STMicroelectronics:stm32:GenF4:pnum=FEATHER_F405
115+
# # TODO: Fix this. May require upstream fix.
116+
# # - arduino:mbed_nano:nano33ble
117+
# - SparkFun:apollo3:sfe_artemis_thing_plus
118+
# - STMicroelectronics:stm32:Nucleo_32:pnum=NUCLEO_L432KC
119+
# - adafruit:nrf52:feather52840:softdevice=s140v6
120+
# - rp2040:rp2040:rpipico
121+
# - arduino:avr:uno
122+
123+
# steps:
124+
# - name: Checkout code
125+
# id: checkout
126+
# uses: actions/checkout@v3
127+
128+
# - name: Load CI docker image
129+
# if: ${{ needs.build_ci_docker_image.result == 'success' }}
130+
# uses: ./.github/actions/load-ci-image
131+
132+
# - name: Compile Examples
133+
# run: |
134+
# docker run --rm --volume $(pwd):/note-arduino/ \
135+
# --workdir /note-arduino/ \
136+
# --entrypoint ./examples/build_example.sh \
137+
# ghcr.io/blues/note_arduino_ci:latest \
138+
# ${{ matrix.fully-qualified-board-name }} \
139+
# ${{ matrix.example-sketch }}
140+
141+
# publish_ci_image:
142+
# runs-on: ubuntu-latest
143+
# # Make sure tests passed and examples built successfully before publishing.
144+
# needs: [build_ci_docker_image, run_tests, build_examples]
145+
# # Only publish the image if this is a push event and the Docker image was rebuilt.
146+
# if: ${{ github.event_name == 'push' && needs.build_ci_docker_image.result == 'success' }}
147+
148+
# steps:
149+
# - name: Login to GitHub Container Registry
150+
# uses: docker/login-action@v2
151+
# with:
152+
# registry: ghcr.io
153+
# username: ${{ github.actor }}
154+
# password: ${{ secrets.GITHUB_TOKEN }}
155+
156+
# - name: Set up Docker Buildx
157+
# uses: docker/setup-buildx-action@v2
158+
159+
# - name: Push image to registry
160+
# uses: docker/build-push-action@v4
161+
# with:
162+
# push: true
163+
# tags: ghcr.io/blues/note_arduino_ci:latest

.github/actions/compile-examples/Dockerfile renamed to Dockerfile

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright 2022 Blues Inc. All rights reserved.
1+
# Copyright 2023 Blues Inc. All rights reserved.
22
# Use of this source code is governed by licenses granted by the
33
# copyright holder including that found in the LICENSE file.
44

@@ -55,11 +55,16 @@ RUN ["dash", "-c", "\
5555
bash-completion \
5656
ca-certificates \
5757
curl \
58+
g++ \
59+
gdb \
60+
gzip \
61+
lcov \
5862
python-is-python3 \
5963
python3 \
6064
python3-pip \
6165
ssh \
6266
tree \
67+
valgrind \
6368
&& pip install \
6469
adafruit-nrfutil \
6570
pyserial \
@@ -104,11 +109,3 @@ RUN ["dash", "-c", "\
104109
&& arduino-cli core install STMicroelectronics:stm32 \
105110
&& arduino-cli lib install \"Blues Wireless Notecard Pseudo Sensor\" \
106111
"]
107-
108-
# Set Execution Environment
109-
USER root
110-
WORKDIR /host-volume
111-
112-
ENTRYPOINT ["arduino-cli"]
113-
114-
CMD ["help"]

examples/build_example.sh

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#!/bin/bash
2+
3+
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
4+
NOTE_ARDUINO_DIR="$SCRIPT_DIR/.."
5+
6+
# If this is being run inside a Docker container (i.e. for GitHub actions CI),
7+
# copy the latest note-arduino code into the appropriate place so that it can
8+
# be consumed when building the example.
9+
if grep -sq 'docker\|lxc' /proc/1/cgroup; then
10+
cp -r $NOTE_ARDUINO_DIR $HOME/Arduino/libraries/Blues_Wireless_Notecard
11+
fi
12+
13+
arduino-cli compile \
14+
--build-property compiler.cpp.extra_flags='-Wno-unused-parameter -Werror' \
15+
--fqbn $1 \
16+
--log-level trace \
17+
--verbose \
18+
--warnings all \
19+
$2

test/run_all_tests.sh

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ DEFAULT='\x1B[0;0m'
77

88
all_tests_result=0
99

10+
# This fixes a problem when running valgrind in a Docker container when the
11+
# host machine is running Fedora. See https://stackoverflow.com/a/75293014.
12+
ulimit -n 1024
13+
1014
if [ 0 -eq $all_tests_result ]; then
1115
echo && echo -e "${YELLOW}Compiling and running Notecard Test Suite...${DEFAULT}"
1216
g++ -fprofile-arcs -ftest-coverage -Wall -Wextra -Werror -Wpedantic -std=c++11 -O0 -g \
@@ -164,8 +168,8 @@ if [ 0 -eq ${all_tests_result} ]; then
164168

165169
# Run coverage if available
166170
if [ $(which lcov) ]; then
167-
rm mock-*.gc?? *_Mock.gc?? *test.gc?? \
168-
&& gcov --version \
171+
rm mock-*.gc?? *_Mock.gc?? *test.gc??
172+
gcov --version \
169173
&& lcov --version \
170174
&& mkdir -p ./coverage \
171175
&& lcov --capture \
@@ -177,7 +181,7 @@ if [ 0 -eq ${all_tests_result} ]; then
177181
echo -e "${YELLOW}COVERAGE REPORT NOT PRODUCED!!!${DEFAULT}";
178182
all_tests_result=998
179183
else
180-
lcov --summary ./coverage/lcov.info
184+
lcov --summary --rc lcov_branch_coverage=1 ./coverage/lcov.info
181185
fi
182186
fi
183187
rm -f failed_test_run

0 commit comments

Comments
 (0)