Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[CI] External libraries compile test #8002

Closed
wants to merge 41 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
397a4cc
Update README.md
P-R-O-C-H-Y Mar 14, 2023
910c20c
Update README.md
P-R-O-C-H-Y Mar 14, 2023
b71d467
Update README.md
P-R-O-C-H-Y Mar 14, 2023
4ae7b80
Workflow final + docs added
P-R-O-C-H-Y Mar 14, 2023
c2ac6ad
Merge branch 'master' into Libraries_CI_test
P-R-O-C-H-Y Mar 15, 2023
1ecb751
fix readme links
P-R-O-C-H-Y Mar 15, 2023
b5f5904
added JSON + lib_v2 YAML
P-R-O-C-H-Y Mar 21, 2023
633e41f
Update lib_v2.yml
P-R-O-C-H-Y Mar 21, 2023
8b8c837
Update lib_v2.yml
P-R-O-C-H-Y Mar 21, 2023
83e0d38
Update lib_v2.yml
P-R-O-C-H-Y Mar 21, 2023
dcd0c1f
Update lib_v2.yml
P-R-O-C-H-Y Mar 21, 2023
ef3a49b
Update lib_v2.yml
P-R-O-C-H-Y Mar 21, 2023
085497f
Update lib_v2.yml
P-R-O-C-H-Y Mar 21, 2023
aabadd1
Update lib_v2.yml
P-R-O-C-H-Y Mar 21, 2023
0568603
update JSON file
P-R-O-C-H-Y Mar 21, 2023
86a4bea
Added json file
P-R-O-C-H-Y Mar 22, 2023
a883b8d
Update lib.yml
P-R-O-C-H-Y Mar 22, 2023
1d7f186
Update lib_v2.yml
P-R-O-C-H-Y Mar 22, 2023
2d5bb5c
Update lib_v2.yml
P-R-O-C-H-Y Mar 22, 2023
e3013f8
change JSON
P-R-O-C-H-Y Mar 22, 2023
884f7fe
edit json + add version
P-R-O-C-H-Y Mar 24, 2023
c1ac969
edit json
P-R-O-C-H-Y Mar 24, 2023
4d7fc3f
update version
P-R-O-C-H-Y Mar 24, 2023
69d3745
fix path
P-R-O-C-H-Y Mar 24, 2023
a730253
update fqbn platform name
P-R-O-C-H-Y Mar 24, 2023
123dad1
add empty test result file
P-R-O-C-H-Y Mar 24, 2023
bdf8c4b
Generated External Libraries Test Results
invalid-email-address Mar 24, 2023
08648be
Update lib.json
P-R-O-C-H-Y Mar 24, 2023
2fcd4b4
Generated External Libraries Test Results
invalid-email-address Mar 24, 2023
d90a66f
Merge branch 'espressif:master' into master
P-R-O-C-H-Y Mar 27, 2023
35f7959
Merge branch 'master' into Libraries_CI_test
P-R-O-C-H-Y Mar 27, 2023
00c1f23
Generated External Libraries Test Results
invalid-email-address Mar 27, 2023
8535b77
run lib test on push only for dbg
P-R-O-C-H-Y Mar 27, 2023
94a0578
Generated External Libraries Test Results
invalid-email-address Mar 27, 2023
6d97e54
Add multiple sketches to json
P-R-O-C-H-Y Mar 27, 2023
0245c54
Generated External Libraries Test Results
invalid-email-address Mar 27, 2023
0db957f
Update lib_v2.yml
P-R-O-C-H-Y Mar 27, 2023
4ee878b
Generated External Libraries Test Results
invalid-email-address Mar 27, 2023
7d8aab4
run LIB test on PR
P-R-O-C-H-Y Mar 27, 2023
0b20cbe
Replace lib.yaml with V2
P-R-O-C-H-Y Mar 28, 2023
709cd74
Delete LIBRARIES_TEST.md
P-R-O-C-H-Y Mar 28, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
43 changes: 43 additions & 0 deletions .github/workflows/lib.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
[
{
"name": "Adafruit NeoPixel",
"version": "1.10.6",
"exclude_targets": [],
"sketch_path": [
"~/Arduino/libraries/Adafruit_NeoPixel/examples/strandtest/strandtest.ino"
]
},
{
"name": "FastLED",
"exclude_targets": [],
"sketch_path": [
"~/Arduino/libraries/FastLED/examples/Blink/Blink.ino"
]
},
{
"name": "IRremote",
"exclude_targets": [],
"sketch_path": [
"~/Arduino/libraries/IRremote/examples/SendDemo/SendDemo.ino"
]
},
{
"name": "ESP32Servo",
"exclude_targets": [],
"sketch_path": [
"~/Arduino/libraries/ESP32Servo/examples/Knob/Knob.ino",
"~/Arduino/libraries/ESP32Servo/examples/Sweep/Sweep.ino",
"~/Arduino/libraries/ESP32Servo/examples/PWMExample/PWMExample.ino",
"~/Arduino/libraries/ESP32Servo/examples/Multiple-Servo-Example-Arduino/Multiple-Servo-Example-Arduino.ino"
]
},
{
"name": "ArduinoBLE",
"exclude_targets": [
"esp32s2"
],
"sketch_path": [
"~/Arduino/libraries/ArduinoBLE/examples/Central/Scan/Scan.ino"
]
}
]
147 changes: 147 additions & 0 deletions .github/workflows/lib.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
name: External Libraries Test V2

# The workflow will run on schedule and labeled pull requests
on:
pull_request:
types: [opened, reopened, synchronize, labeled]

# Schedule weekly builds on every Sunday at 4 am
schedule:
- cron: '0 4 * * SUN'

env:
# It's convenient to set variables for values used multiple times in the workflow
SKETCHES_REPORTS_PATH: libraries-report
SKETCHES_REPORTS_ARTIFACT_NAME: libraries-report
RESULT_LIBRARY_TEST_FILE: LIBRARIES_TEST.md
JSON_LIBRARY_LIST_FILE: .github/workflows/lib.json
jobs:
compile-sketch:
if: |
contains(github.event.pull_request.labels.*.name, 'lib_test') ||
(github.event_name == 'schedule' && github.repository == 'espressif/arduino-esp32')
runs-on: ubuntu-latest

env:
# Options of how will be the ESP32 Arduino core installed
BOARD_MANAGER: |
- name: "espressif:esp32"
source-url: https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json
version: 2.0.7

REPOSITORY: |
- source-path: '.'
name: "espressif:esp32"

GITHUB_URL: |
- name: "espressif:esp32"
source-url: https://github.com/espressif/arduino-esp32.git
version: 2.0.7

strategy:
matrix:
target:
- esp32
- esp32s2
- esp32c3
- esp32s3

include:
- target: esp32
fqbn: espressif:esp32:esp32
- target: esp32s2
fqbn: espressif:esp32:esp32s2
- target: esp32c3
fqbn: espressif:esp32:esp32c3
- target: esp32s3
fqbn: espressif:esp32:esp32s3


steps:
# This step makes the contents of the repository available to the workflow
- name: Checkout repository
uses: actions/checkout@v3

# Possible platforms input for compile-sketches
# ${{ env.BOARD_MANAGER }}
# ${{ env.GITHUB_URL }}
# ${{ env.REPOSITORY }}

- name: Compile sketch
uses: P-R-O-C-H-Y/compile-sketches@main
with:
platforms: |
${{ env.GITHUB_URL }}
target: ${{ matrix.target }}
fqbn: ${{ matrix.fqbn }}
#libraries: commented as json file is used instead
#sketch-paths: commented as json file is used instead
use-json-file: true
json-path: ${{ env.JSON_LIBRARY_LIST_FILE }}
enable-deltas-report: true
sketches-report-path: ${{ env.SKETCHES_REPORTS_PATH }}
enable-warnings-report: true
#verbose: true
cli-compile-flags: |
- --warnings="all"

- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: ${{ env.SKETCHES_REPORTS_ARTIFACT_NAME }}
path: ${{ env.SKETCHES_REPORTS_PATH }}

report-comment:
needs: compile-sketch # Wait for the compile job to finish to get the data for the report
if: github.event_name == 'pull_request' # Only run the job when the workflow is triggered by a pull request
runs-on: ubuntu-latest
steps:
# This step is needed to get the size data produced by the compile jobs
- name: Download sketches reports artifact
uses: actions/download-artifact@v3
with:
name: ${{ env.SKETCHES_REPORTS_ARTIFACT_NAME }}
path: ${{ env.SKETCHES_REPORTS_PATH }}

- name: Report results
uses: P-R-O-C-H-Y/report-size-deltas@main
with:
sketches-reports-source: ${{ env.SKETCHES_REPORTS_PATH }}

report-to-file:
needs: compile-sketch # Wait for the compile job to finish to get the data for the report
if: github.event_name == 'schedule' # Only run the job when the workflow is triggered by a schedule
runs-on: ubuntu-latest
steps:
# Check out repository
- name: Checkout repository
uses: actions/checkout@v3

# This step is needed to get the size data produced by the compile jobs
- name: Download sketches reports artifact
uses: actions/download-artifact@v3
with:
name: ${{ env.SKETCHES_REPORTS_ARTIFACT_NAME }}
path: ${{ env.SKETCHES_REPORTS_PATH }}

- name: Report results
uses: P-R-O-C-H-Y/report-size-deltas@main
with:
sketches-reports-source: ${{ env.SKETCHES_REPORTS_PATH }}
destination-file: ${{ env.RESULT_LIBRARY_TEST_FILE }}

- name: Append file with action URL
uses: DamianReeves/write-file-action@master
with:
path: ${{ env.RESULT_LIBRARY_TEST_FILE }}
contents: |
/ [GitHub Action Link](https://github.com/${{github.repository}}/actions/runs/${{github.run_id}})
write-mode: append

- name: Push to github repo
run: |
git config user.name github-actions
git config user.email [email protected]
git add ${{ env.RESULT_LIBRARY_TEST_FILE }}
git commit -m "Generated External Libraries Test Results"
git push
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Arduino core for the ESP32, ESP32-S2, ESP32-S3 and ESP32-C3

![Build Status](https://github.com/espressif/arduino-esp32/workflows/ESP32%20Arduino%20CI/badge.svg) [![Documentation Status](https://readthedocs.com/projects/espressif-arduino-esp32/badge/?version=latest)](https://docs.espressif.com/projects/arduino-esp32/en/latest/?badge=latest)
[![External Libraries Test](https://github.com/P-R-O-C-H-Y/arduino-esp32/actions/workflows/lib.yml/badge.svg?branch=Libraries_CI_test&event=push)](https://github.com/P-R-O-C-H-Y/arduino-esp32/actions/workflows/lib.yml?link=http://https://github.com/P-R-O-C-H-Y/arduino-esp32/LIBRARIES_TEST.md)

### Need help or have a question? Join the chat at [Gitter](https://gitter.im/espressif/arduino-esp32) or [open a new Discussion](https://github.com/espressif/arduino-esp32/discussions)

Expand Down Expand Up @@ -51,6 +52,11 @@ Before reporting an issue, make sure you've searched for similar one that was al

Finally, if you are sure no one else had the issue, follow the **Issue template** or **Feature request template** while reporting any [new Issue](https://github.com/espressif/arduino-esp32/issues/new/choose).

### External libraries compilation test

We have set-up CI testing for external libraries for ESP32 Arduino core. You can check test results in file [LIBRARIES_TEST](https://github.com/espressif/arduino-esp32/blob/Libraries_CI_test/LIBRARIES_TEST.md).
For more information and how to add your library to the test see [external library testing](https://docs.espressif.com/projects/arduino-esp32/en/latest/external_library_test.html) in documentation.

### Contributing

We welcome contributions to the Arduino ESP32 project!
Expand Down
Binary file added docs/source/_static/cross.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/source/_static/external_library_test_pr.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/source/_static/green_checkmark.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/source/_static/warning.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
140 changes: 140 additions & 0 deletions docs/source/external_libraries_test.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
##########################
External Libraries Testing
##########################

About
-----

External libraries testing is a compilation test for listed libraries on arduino-esp32 master branch. The test was made for users, so they can check which libraries are compiling without errors on which SoC.
External libraries test is running periodicaly (once a week) agains master branch and can also run on PR by adding a label ``lib_test``.
The test is running on all supported ESP32 chips.

.. note::
As the test is just a compilation of example, that does not guarrantee that the library/sketch will run without any problems after flashing it on your device.

How to Add Library to Test
--------------------------

.. note::
Library must be listed in Arduino Library Manager.
If you want to add your library to the Arduino Library Manager see `Adding a library to library manager <https://github.com/arduino/library-registry#adding-a-library-to-library-manager>`_

Adding a library is divided to 2 categories:

1. Adding a library which can work on all chips (eg. all chips have support for the peripherals used)
2. Adding a chip specific library which cannot work on all chips (e.g. BLE / Ethernet peripheral is not supported by all chips)

For both categories only 2 simple steps are required to add a library to the test workflow file ``lib.yml``.
Workflow file is located in ``./github/workflows/lib.yml``.

Library uses peripheral which is has all chips
**********************************************

* Add new line with the library name to the list of ``UNIVERSAL_LIBRARIES`` in ``lib.yml`` file:

.. code-block:: yaml

# Libraries list to be installed
UNIVERSAL_LIBRARIES: |
- source-path: ./
- name: Adafruit NeoPixel
- name: FastLED
- name: IRremote
- name: ESP32Servo

* Add new line with the sketch path to the list of ``UNIVERSAL_SKETCHES`` in ``lib.yml`` file (sketch needs to be from the examples of the library):

.. code-block:: yaml

# List of sketches to build (1 for each library)
UNIVERSAL_SKETCHES:
~/Arduino/libraries/Adafruit_NeoPixel/examples/strandtest/strandtest.ino
~/Arduino/libraries/FastLED/examples/Blink/Blink.ino
~/Arduino/libraries/IRremote/examples/SendDemo/SendDemo.ino
~/Arduino/libraries/ESP32Servo/examples/Knob/Knob.ino

Library uses peripheral specific to some chips
**********************************************

* Add new line with the library name to the list of ``additional-libraries`` under each SOC which supports the peripheral used by library in ``lib.yml`` file:

* Add new line with the sketch path to the list of ``additional-sketches`` under each SOC which supports the peripheral in ``lib.yml`` file
(sketch needs to be from the examples of the library):

Example for adding ``ArduinoBLE`` library (ESP32-S2 dont have BLE peripheral)

.. code-block:: yaml

include:
- fqbn: espressif:esp32:esp32
additional-libraries: |
- name: ArduinoBLE
additional-sketches: |
~/Arduino/libraries/ArduinoBLE/examples/Central/Scan/Scan.ino
- fqbn: espressif:esp32:esp32s2
additional-libraries:
additional-sketches:
- fqbn: espressif:esp32:esp32c3
additional-libraries: |
- name: ArduinoBLE
additional-sketches: |
~/Arduino/libraries/ArduinoBLE/examples/Central/Scan/Scan.ino
- fqbn: espressif:esp32:esp32s3
additional-libraries: |
- name: ArduinoBLE
additional-sketches: |
~/Arduino/libraries/ArduinoBLE/examples/Central/Scan/Scan.ino

Common part
***********

* Open a PR with the changes and someone from Espressif team will add a label ``lib_test`` to the PR and CI will run the test to check, if the addition is fine and library / example are compiling.

* After merging your PR, the next scheduled test will test your library and add the results to the `LIBRARIES_TEST.md`_.

Test Results
------------

Icons meaning
*************

* |success| - Compilation was successful.

* |warning| - Compilation was successful with some warnings. (number of warnings is printed next to the icon)

* |fail| - Compilation failed.

* ``N/A`` - Not tested.

Scheduled test result
*********************

You can check the results in `LIBRARIES_TEST.md`_.

The results file example:

.. image:: _static/external_library_test_schedule.png
:width: 600

Pull Request test result
************************

If the test run on Pull Request, it will compile all libraries and sketches 2 times (before/after changes in PR) to see, if the PR is breaking/fixing libraries.
In the table the results are in order ``BEFORE -> AFTER``.

.. image:: _static/external_library_test_pr.png
:width: 600

.. |success| image:: _static/green_checkmark.png
:height: 2ex
:class: no-scaled-link

.. |warning| image:: _static/warning.png
:height: 2ex
:class: no-scaled-link

.. |fail| image:: _static/cross.png
:height: 2ex
:class: no-scaled-link

.. _LIBRARIES_TEST.md: https://github.com/espressif/arduino-esp32/LIBRARIES_TEST.md
1 change: 1 addition & 0 deletions docs/source/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,4 @@ Here you will find all the relevant information about the project.
FAQ <faq>
Troubleshooting <troubleshooting>
Contributing <contributing>
External Libraries Testing <external_libraries_test>