|
1 | 1 | # Arduino CI Scripts
|
2 | 2 |
|
3 |
| -This repos contains various scripts and tools related to running |
4 |
| -continuous integration (CI) checks on Arduino Library Repos. |
| 3 | +This repos contains various scripts and tools related to running continuous integration (CI) checks on Arduino Library Repos. The operations include: |
| 4 | + |
| 5 | +* checking formatting using using [clang-format](https://clang.llvm.org/docs/ClangFormat.html), |
| 6 | +* generating documentation from source comments using using [Doxygen](https://www.doxygen.nl/), and |
| 7 | +* building each example in the library for selected targets. |
5 | 8 |
|
6 | 9 | There is an associated guide available here:
|
7 | 10 | https://learn.adafruit.com/the-well-automated-arduino-library/
|
8 | 11 |
|
9 | 12 | ## Adding GitHub Actions to Repo
|
10 | 13 |
|
| 14 | +To run these continuous integration checks on each push, pull-request or [repository dispatch](https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#create-a-repository-dispatch-event) using [GitHub actions](https://github.com/features/actions): |
| 15 | + |
11 | 16 | * Create a folder named `.github/worflows` in the root of the repo.
|
12 | 17 | * Copy `example_actions.yml` into the above directory and rename it `githubci.yml`.
|
13 |
| -* Edit `githubci.yml` and change `PRETTYNAME` to the library repo name. |
| 18 | +* Edit `githubci.yml` and change `PRETTYNAME` to the library repo name. Optionally, delete or comment out steps (using the `#` character), you don't want to include. |
14 | 19 | * Here's an example: [Adafruit_BME280_Library](https://github.com/adafruit/Adafruit_BME280_Library/blob/master/.github/workflows/githubci.yml)
|
15 |
| -* These actions will now run automatically on any pull, push, or dispatch. |
16 | 20 |
|
17 | 21 | ## Controlling Test Behavior
|
18 | 22 |
|
19 |
| -The `build_platform.py` script is used to test each `.ino` example in the repo for the |
20 |
| -selected build platforms. The `ALL_PLATFORMS` dictionary contains a listing of all |
21 |
| -available platforms. By default, `main_platforms` is used. Additionally, UF2 files |
22 |
| -of the compiled sketches can be generated for supported platforms. The behavior |
23 |
| -can be controlled using special hidden filenames. These are just empty files |
24 |
| -placed in the root folder: |
| 23 | +The `build_platform.py` script is used to test each `.ino` example in the repo for selected build platforms. The [`ALL_PLATFORMS`](ci-arduino/blob/master/build_platform.py#L54) dictionary contains a listing of all available platforms and selected platform groups. By default, `main_platforms` is used. To select a specific platform or group, replace `main_platforms` in [`githubci.yml`](`example_actions.yml`) with the group or platform name. |
| 24 | + |
| 25 | +Additionally, [UF2 files](https://github.com/microsoft/uf2) of the compiled sketches can be generated for supported platforms. |
| 26 | + |
| 27 | +### Fine tuning test selection |
25 | 28 |
|
26 |
| -* `.YOUR_PLATFORM_HERE.test.skip` - Skip the specified platform. All others are tested. |
27 |
| -* `.YOUR_PLATFORM_HERE.test.only` - Test only the specfied platform. All others are skipped. |
28 |
| -* `.YOUR_PLATFORM_HERE.generate` - Generate UF2 of sketch for specified platform (if supported). |
| 29 | +The script behavior can be controlled using special filenames: |
29 | 30 |
|
30 |
| -Replace `YOUR_PLATFORM_HERE` in the name with exact text from `ALL_PLATFORMS`. |
| 31 | +* `.PLATFORM_ID.test.skip` - Skip the specified platform. All others are tested. |
| 32 | +* `.PLATFORM_ID.test.only` - Test the specified platform. All others are skipped. |
| 33 | +* `.PLATFORM_ID.generate` - Generate UF2 of sketch for specified platform (if supported). |
| 34 | + |
| 35 | +These are just empty files placed in an example folder. Replace `PLATFORM_ID` in the name with the key from [`ALL_PLATFORMS`](ci-arduino/blob/master/build_platform.py#L54). `metro_m0` from the following line in `build_platform.py`, for example: |
| 36 | + |
| 37 | +```python |
| 38 | +"metro_m0" : ["adafruit:samd:adafruit_metro_m0", "0x68ed2b88", None], |
| 39 | +``` |
31 | 40 |
|
32 |
| -### Examples |
| 41 | +You can use several `.PLATFORM_ID.test.skip` or `.PLATFORM_ID.test.only` to exclude or include multiple platforms. For example: |
33 | 42 |
|
34 | 43 | * To **skip** testing on ESP8266, add a file named `.esp8266.test.skip`
|
35 | 44 | * To test **only** the Arduino UNO, add a file named `.uno.test.only`
|
36 | 45 | * To skip all and test **nothing**, add a file named `.none.test.only`
|
37 | 46 | * To generate UF2s for PyPortal, add a file named `.pyportal.generate`
|
38 | 47 |
|
| 48 | +### Dependencies |
| 49 | + |
| 50 | +Any library dependencies included in the [`library.properties`](https://arduino.github.io/arduino-cli/0.19/library-specification/#libraryproperties-file-format) are automatically installed before the tests are started. To install additional dependencies (e.g., those required for some examples but not the library itself) using [`arduino-cli`](https://arduino.github.io/arduino-cli/0.19/commands/arduino-cli_lib_install/), you could add additional steps to the `githubci.yml` file. For example: |
| 51 | + |
| 52 | +```yaml |
| 53 | +- name: Set configuration |
| 54 | + run: arduino-cli config set library.enable_unsafe_install true |
| 55 | + |
| 56 | +- name: Install test dependencies |
| 57 | + run: arduino-cli lib install --git-url https://github.com/arduino-libraries/Servo --git-url https://github.com/arduino-libraries/Ethernet |
| 58 | +``` |
| 59 | +
|
| 60 | +Note: you'll only need to enable the [`enable_unsafe_install`](https://arduino.github.io/arduino-cli/0.32/configuration/#configuration-keys) option if you want to identify libraries using urls. This isn't necessary when using the library name. |
| 61 | + |
39 | 62 | ## Formatting Check with Clang
|
40 | 63 |
|
41 |
| -The `run-clang-format.py` script is used to run ClangFormat and check file formatting. |
| 64 | +The `run-clang-format.py` script is used to run [clang-format](https://clang.llvm.org/docs/ClangFormat.html) and check file formatting. |
42 | 65 | See [the guide](https://learn.adafruit.com/the-well-automated-arduino-library/formatting-with-clang-format) for details on installing `clang-format` to run formatting locally.
|
43 | 66 | Even a single extra white space can cause the CI to fail on formatting.
|
44 | 67 | You can typically just let clang do its thing and edit files in place using:
|
| 68 | + |
45 | 69 | ```
|
46 | 70 | clang-format -i File_To_Format.cpp
|
47 | 71 | ```
|
48 | 72 |
|
49 | 73 | ## Documentation with Doxygen
|
50 | 74 |
|
51 |
| -The `doxy_gen_and_deploy.sh` script uses Doxygen to generate and deploy documentation |
| 75 | +The `doxy_gen_and_deploy.sh` script uses [Doxygen](https://www.doxygen.nl/) to generate and deploy documentation |
52 | 76 | for the library. Any issues, like missing documentation, will cause the CI to fail.
|
53 |
| -See the [the guide](https://learn.adafruit.com/the-well-automated-arduino-library/doxygen) |
54 |
| -for details on installing and running doxygen locally. The guide also has some |
55 |
| -[tips](https://learn.adafruit.com/the-well-automated-arduino-library/doxygen-tips) |
56 |
| -on basic usage of doxygen markup within your code. |
| 77 | +See the [the guide](https://learn.adafruit.com/the-well-automated-arduino-library/doxygen) for details on installing and running doxygen locally. The guide also has some |
| 78 | +[tips](https://learn.adafruit.com/the-well-automated-arduino-library/doxygen-tips) on basic usage of doxygen markup within your code. |
0 commit comments