I have posted on CI workflow on firmware but seems I am running into as many issues on library load.
Ex:
I have CI workflow that parses all .h files noted in sketch and loads library
Read in current files but ignore secrets.h as that is not a library but the SSID and passcode for site.
Ex:
#include <WiFiS3.h>
#include <ArduinoGraphics.h>
#include <ArduinoLEDMatrix.h>
#include <ArduinoHttpClient.h>
#include <ArduinoJson.h>
#include "/opt/shuffleboard/secrets.h" // Explicit path to secrets.h
// Static variables
Ansible tasks:
- name: Read .ino file content
ansible.builtin.slurp:
src: "{{ ino_file_path }}"
register: ino_file_content
when: ino_file_stat.stat.exists
- name: Decode .ino content
ansible.builtin.set_fact:
ino_text: "{{ ino_file_content.content | b64decode | default('') }}"
when: ino_file_stat.stat.exists and ino_file_content.content is defined
- name: Debug .ino content (truncated to 1000 characters)
ansible.builtin.debug:
var: ino_text | truncate(1000)
when: ino_text is defined
- name: Extract valid Arduino library names
ansible.builtin.set_fact:
libraries: "{{ ino_text | regex_findall('#include\\s+[<\"]([^/][^>\"]+)\\.h[>\"]') | reject('search', '/') | reject('equalto', 'secrets') | list }}"
when: ino_text is defined
ignore_errors: true
- name: Debug extracted libraries
ansible.builtin.debug:
var: libraries
when: libraries is defined
- name: Install Arduino libraries
ansible.builtin.command:
cmd: arduino-cli lib install "{{ item }}"
loop: "{{ libraries }}"
when: libraries is defined and libraries | length > 0
register: lib_install_result
changed_when: lib_install_result.rc == 0
failed_when: lib_install_result.rc != 0
- name: List installed Arduino libraries
ansible.builtin.command:
cmd: arduino-cli lib list
register: libraries_installed
when: libraries is defined and libraries | length > 0
- name: Show library installation results
ansible.builtin.debug:
var: libraries_installed.stdout_lines
when: libraries_installed is defined
Error:
TASK [arduino-library-install : Install Arduino libraries] *********************
failed: [triton] (item=WiFiS3) => {"ansible_loop_var": "item", "changed": false, "cmd": ["arduino-cli", "lib", "install", "WiFiS3"], "delta": "0:00:00.487988", "end": "2025-06-09 23:38:11.257589", "failed_when_result": true, "item": "WiFiS3", "msg": "non-zero return code", "rc": 1, "start": "2025-06-09 23:38:10.769601", "stderr": "Error installing WiFiS3: Library 'WiFiS3@latest' not found", "stderr_lines": ["Error installing WiFiS3: Library 'WiFiS3@latest' not found"], "stdout": "", "stdout_lines": []}
changed: [triton] => (item=ArduinoGraphics)
failed: [triton] (item=ArduinoLEDMatrix) => {"ansible_loop_var": "item", "changed": false, "cmd": ["arduino-cli", "lib", "install", "ArduinoLEDMatrix"], "delta": "0:00:00.490689", "end": "2025-06-09 23:38:13.188581", "failed_when_result": true, "item": "ArduinoLEDMatrix", "msg": "non-zero return code", "rc": 1, "start": "2025-06-09 23:38:12.697892", "stderr": "Error installing ArduinoLEDMatrix: Library 'ArduinoLEDMatrix@latest' not found", "stderr_lines": ["Error installing ArduinoLEDMatrix: Library 'ArduinoLEDMatrix@latest' not found"], "stdout": "", "stdout_lines": []}
changed: [triton] => (item=ArduinoHttpClient)
changed: [triton] => (item=ArduinoJson)
Yet same search and manual install in UI via Windows client works fine, so this is just orchestration issue on PI V on how to take a sketch and parse out library and install it. I think the gap is that manual search I can select from libraries that match best a string, vs my crude way in CI which must meet exact match.
I have to imagine others have had this issue of parsing a sketch to pre-stage up libraries needed.