Compare commits
1 commit
master
...
pb-matrixp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5d3232280f |
7 changed files with 103 additions and 272 deletions
2
.github/workflows/githubci.yml
vendored
2
.github/workflows/githubci.yml
vendored
|
|
@ -16,5 +16,5 @@ jobs:
|
||||||
run: bash ./actions_install.sh
|
run: bash ./actions_install.sh
|
||||||
- name: test platforms
|
- name: test platforms
|
||||||
run: |
|
run: |
|
||||||
python3 build_platform.py uno leonardo mega2560 zero esp8266 esp32 pico_rp2040
|
python3 build_platform.py uno leonardo mega2560 zero esp8266 esp32
|
||||||
|
|
||||||
|
|
|
||||||
12
.travis.yml
12
.travis.yml
|
|
@ -1,15 +1,19 @@
|
||||||
language: python
|
language: c
|
||||||
|
sudo: false
|
||||||
dist: focal
|
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
directories:
|
directories:
|
||||||
- ~/arduino_ide
|
- ~/arduino_ide
|
||||||
|
- ~/.arduino15/packages/
|
||||||
|
|
||||||
git:
|
git:
|
||||||
depth: false
|
depth: false
|
||||||
quiet: true
|
quiet: true
|
||||||
|
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- python3
|
||||||
|
- python3-pip
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- source $TRAVIS_BUILD_DIR/install.sh
|
- source $TRAVIS_BUILD_DIR/install.sh
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
# Travis CI Arduino Init Script [](https://travis-ci.com/adafruit/travis-ci-arduino)
|
# Travis CI Arduino Init Script [](https://travis-ci.com/adafruit/travis-ci-arduino)
|
||||||
|
|
||||||
The purpose of this repo is to create a centrally managed dependency
|
The purpose of this repo is to create a centrally managed dependency
|
||||||
install script for all Adafruit Arduino Library Travis CI and Github Actions configs.
|
install script for all Adafruit Arduino Library Travis CI configs.
|
||||||
This will allow us to easily update the install steps without
|
This will allow us to easily update the install steps without
|
||||||
having to manually or programmatically update 100+ `.travis.yml` files.
|
having to manually or programatically update 100+ `.travis.yml` files.
|
||||||
|
|
||||||
We have a guide that you can use to follow along to install both TravisCI and Doxygen generation here https://learn.adafruit.com/the-well-automated-arduino-library/
|
We have a guide that you can use to follow along to install both TravisCI and Doxygen generation here https://learn.adafruit.com/the-well-automated-arduino-library/
|
||||||
|
|
||||||
|
|
@ -17,7 +17,7 @@ source <(curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/
|
||||||
```
|
```
|
||||||
|
|
||||||
If you only want to install and build on certain platforms, you can set the
|
If you only want to install and build on certain platforms, you can set the
|
||||||
`INSTALL_PLATFORMS` environment variable to a comma-separated list of platforms.
|
`INSTALL_PLATFORMS` envionrment variable to a comma-seperated list of platforms.
|
||||||
|
|
||||||
**Example `.travis.yml`:**
|
**Example `.travis.yml`:**
|
||||||
```yaml
|
```yaml
|
||||||
|
|
@ -181,7 +181,7 @@ deploy:
|
||||||
```
|
```
|
||||||
6. Still in the top-level directory of the library you'll be testing, copy the current library to Adafruit_Test_Library
|
6. Still in the top-level directory of the library you'll be testing, copy the current library to Adafruit_Test_Library
|
||||||
```bash
|
```bash
|
||||||
adafruit@adafruit:~/Adafruit_BMP183_Library$ cp * ~/Arduino/libraries/Adafruit_Test_Library/
|
adafruit@adafruit:~/Adafruit_BMP183_Library$ cp * ~/Arduino/libraryes/Adafruit_Test_Library/
|
||||||
```
|
```
|
||||||
7. Grep for build_platform.py in githubci.yml to find out what boards to test.
|
7. Grep for build_platform.py in githubci.yml to find out what boards to test.
|
||||||
```bash
|
```bash
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ set -e
|
||||||
|
|
||||||
pip3 install clint pyserial setuptools adafruit-nrfutil
|
pip3 install clint pyserial setuptools adafruit-nrfutil
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y libllvm8 -V
|
sudo apt-get install -y --allow-downgrades libllvm8=1:8-3~ubuntu18.04.2 -V
|
||||||
sudo apt install -fy cppcheck clang-format-8
|
sudo apt install -fy cppcheck clang-format-8
|
||||||
if [ ! -f /usr/bin/clang-format ]; then
|
if [ ! -f /usr/bin/clang-format ]; then
|
||||||
sudo ln -s /usr/bin/clang-format-8 /usr/bin/clang-format
|
sudo ln -s /usr/bin/clang-format-8 /usr/bin/clang-format
|
||||||
|
|
@ -18,6 +18,6 @@ mkdir ${HOME}/Arduino/libraries
|
||||||
|
|
||||||
# install arduino IDE
|
# install arduino IDE
|
||||||
export PATH=$PATH:$GITHUB_WORKSPACE/bin
|
export PATH=$PATH:$GITHUB_WORKSPACE/bin
|
||||||
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh
|
curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh -s 0.11.0 2>&1
|
||||||
arduino-cli config init > /dev/null
|
arduino-cli config init > /dev/null
|
||||||
arduino-cli core update-index > /dev/null
|
arduino-cli core update-index > /dev/null
|
||||||
|
|
|
||||||
|
|
@ -2,36 +2,20 @@ import sys
|
||||||
import glob
|
import glob
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
import shutil
|
|
||||||
from distutils.dir_util import copy_tree
|
|
||||||
import subprocess
|
import subprocess
|
||||||
import collections
|
import collections
|
||||||
|
|
||||||
# optional wall option cause build failed if has warnings
|
|
||||||
BUILD_WALL = False
|
|
||||||
BUILD_WARN = True
|
|
||||||
if "--wall" in sys.argv:
|
|
||||||
BUILD_WALL = True
|
|
||||||
sys.argv.remove("--wall")
|
|
||||||
|
|
||||||
if "--no_warn" in sys.argv:
|
|
||||||
BUILD_WARN = False
|
|
||||||
sys.argv.remove("--no_warn")
|
|
||||||
|
|
||||||
# add user bin to path!
|
# add user bin to path!
|
||||||
BUILD_DIR = ''
|
BUILD_DIR = ''
|
||||||
# add user bin to path!
|
# add user bin to path!
|
||||||
try:
|
try:
|
||||||
# If we're on actions
|
|
||||||
BUILD_DIR = os.environ["GITHUB_WORKSPACE"]
|
|
||||||
except KeyError:
|
|
||||||
try:
|
|
||||||
# If we're on travis
|
|
||||||
BUILD_DIR = os.environ["TRAVIS_BUILD_DIR"]
|
BUILD_DIR = os.environ["TRAVIS_BUILD_DIR"]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
# If we're running on local machine
|
pass # ok maybe we're on actions?
|
||||||
BUILD_DIR = os.path.abspath(".")
|
try:
|
||||||
pass
|
BUILD_DIR = os.environ["GITHUB_WORKSPACE"]
|
||||||
|
except KeyError:
|
||||||
|
pass # ok maybe we're on travis?
|
||||||
|
|
||||||
os.environ["PATH"] += os.pathsep + BUILD_DIR + "/bin"
|
os.environ["PATH"] += os.pathsep + BUILD_DIR + "/bin"
|
||||||
print("build dir:", BUILD_DIR)
|
print("build dir:", BUILD_DIR)
|
||||||
|
|
@ -40,11 +24,6 @@ IS_LEARNING_SYS = False
|
||||||
if "Adafruit_Learning_System_Guides" in BUILD_DIR:
|
if "Adafruit_Learning_System_Guides" in BUILD_DIR:
|
||||||
print("Found learning system repo")
|
print("Found learning system repo")
|
||||||
IS_LEARNING_SYS = True
|
IS_LEARNING_SYS = True
|
||||||
os.remove(BUILD_DIR + "/ci/examples/Blink/Blink.ino")
|
|
||||||
os.rmdir(BUILD_DIR + "/ci/examples/Blink")
|
|
||||||
elif "METROX-Examples-and-Project-Sketches" in BUILD_DIR:
|
|
||||||
print("Found MetroX Examples Repo")
|
|
||||||
IS_LEARNING_SYS = True
|
|
||||||
|
|
||||||
#os.system('pwd')
|
#os.system('pwd')
|
||||||
#os.system('ls -lA')
|
#os.system('ls -lA')
|
||||||
|
|
@ -54,106 +33,60 @@ CHECK = u'\N{check mark}'
|
||||||
|
|
||||||
ALL_PLATFORMS={
|
ALL_PLATFORMS={
|
||||||
# classic Arduino AVR
|
# classic Arduino AVR
|
||||||
"uno" : ["arduino:avr:uno", None],
|
"uno" : "arduino:avr:uno",
|
||||||
"leonardo" : ["arduino:avr:leonardo", None],
|
"leonardo" : "arduino:avr:leonardo",
|
||||||
"mega2560" : ["arduino:avr:mega:cpu=atmega2560", None],
|
"mega2560" : "arduino:avr:mega:cpu=atmega2560",
|
||||||
# Arduino SAMD
|
# Arduino SAMD
|
||||||
"zero" : ["arduino:samd:arduino_zero_native", "0x68ed2b88"],
|
"zero" : "arduino:samd:arduino_zero_native",
|
||||||
"cpx" : ["arduino:samd:adafruit_circuitplayground_m0", "0x68ed2b88"],
|
"cpx" : "arduino:samd:adafruit_circuitplayground_m0",
|
||||||
# Espressif
|
# Espressif
|
||||||
"esp8266" : ["esp8266:esp8266:huzzah:eesz=4M3M,xtal=80", None],
|
"esp8266" : "esp8266:esp8266:huzzah:eesz=4M3M,xtal=80",
|
||||||
"esp32" : ["esp32:esp32:featheresp32:FlashFreq=80", None],
|
"esp32" : "esp32:esp32:featheresp32:FlashFreq=80",
|
||||||
"magtag" : ["esp32:esp32:adafruit_magtag29_esp32s2", "0xbfdd4eee"],
|
|
||||||
"funhouse" : ["esp32:esp32:adafruit_funhouse_esp32s2", "0xbfdd4eee"],
|
|
||||||
"metroesp32s2" : ["esp32:esp32:adafruit_metro_esp32s2", "0xbfdd4eee"],
|
|
||||||
"qtpy_esp32s2" : ["esp32:esp32:adafruit_qtpy_esp32s2", "0xbfdd4eee"],
|
|
||||||
"feather_esp32s2" : ["esp32:esp32:adafruit_feather_esp32s2", "0xbfdd4eee"],
|
|
||||||
"feather_esp32s2_tft" : ["esp32:esp32:adafruit_feather_esp32s2_tft", "0xbfdd4eee"],
|
|
||||||
# Adafruit AVR
|
# Adafruit AVR
|
||||||
"trinket_3v" : ["adafruit:avr:trinket3", None],
|
"trinket_3v" : "adafruit:avr:trinket3",
|
||||||
"trinket_5v" : ["adafruit:avr:trinket5", None],
|
"trinket_5v" : "adafruit:avr:trinket5",
|
||||||
"protrinket_3v" : ["adafruit:avr:protrinket3", None],
|
"protrinket_3v" : "adafruit:avr:protrinket3",
|
||||||
"protrinket_5v" : ["adafruit:avr:protrinket5", None],
|
"protrinket_5v" : "adafruit:avr:protrinket5",
|
||||||
"gemma" : ["adafruit:avr:gemma", None],
|
"gemma" : "adafruit:avr:gemma",
|
||||||
"flora" : ["adafruit:avr:flora8", None],
|
"flora" : "adafruit:avr:flora8",
|
||||||
"feather32u4" : ["adafruit:avr:feather32u4", None],
|
"feather32u4" : "adafruit:avr:feather32u4",
|
||||||
"cpc" : ["arduino:avr:circuitplay32u4cat", None],
|
"cpc" : "arduino:avr:circuitplay32u4cat",
|
||||||
# Adafruit SAMD
|
# Adafruit SAMD
|
||||||
"gemma_m0" : ["adafruit:samd:adafruit_gemma_m0", "0x68ed2b88"],
|
"gemma_m0" : "adafruit:samd:adafruit_gemma_m0",
|
||||||
"trinket_m0" : ["adafruit:samd:adafruit_trinket_m0", "0x68ed2b88"],
|
"trinket_m0" : "adafruit:samd:adafruit_trinket_m0",
|
||||||
"feather_m0_express" : ["adafruit:samd:adafruit_feather_m0_express", "0x68ed2b88"],
|
"feather_m0_express" : "adafruit:samd:adafruit_feather_m0_express",
|
||||||
"feather_m4_express" : ["adafruit:samd:adafruit_feather_m4:speed=120", "0x68ed2b88"],
|
"metro_m0" : "adafruit:samd:adafruit_metro_m0",
|
||||||
"feather_m4_express_tinyusb" : ["adafruit:samd:adafruit_feather_m4:speed=120,usbstack=tinyusb", "0x68ed2b88"],
|
"metro_m0_tinyusb" : "adafruit:samd:adafruit_metro_m0:usbstack=tinyusb",
|
||||||
"feather_m4_can" : ["adafruit:samd:adafruit_feather_m4_can:speed=120", "0x68ed2b88"],
|
"metro_m4" : "adafruit:samd:adafruit_metro_m4:speed=120",
|
||||||
"feather_m4_can_tinyusb" : ["adafruit:samd:adafruit_feather_m4_can:speed=120,usbstack=tinyusb", "0x68ed2b88"],
|
"metro_m4_tinyusb" : "adafruit:samd:adafruit_metro_m4:speed=120,usbstack=tinyusb",
|
||||||
"metro_m0" : ["adafruit:samd:adafruit_metro_m0", "0x68ed2b88"],
|
"metro_m4_airliftlite" : "adafruit:samd:adafruit_metro_m4_airliftlite:speed=120",
|
||||||
"metro_m0_tinyusb" : ["adafruit:samd:adafruit_metro_m0:usbstack=tinyusb", "0x68ed2b88"],
|
"pybadge" : "adafruit:samd:adafruit_pybadge_m4:speed=120",
|
||||||
"metro_m4" : ["adafruit:samd:adafruit_metro_m4:speed=120", "0x55114460"],
|
"pybadge_tinyusb" : "adafruit:samd:adafruit_pybadge_m4:speed=120,usbstack=tinyusb",
|
||||||
"metro_m4_tinyusb" : ["adafruit:samd:adafruit_metro_m4:speed=120,usbstack=tinyusb", "0x55114460"],
|
"pygamer" : "adafruit:samd:adafruit_pygamer_m4:speed=120",
|
||||||
"metro_m4_airliftlite" : ["adafruit:samd:adafruit_metro_m4_airliftlite:speed=120", "0x55114460"],
|
"hallowing_m0" : "adafruit:samd:adafruit_hallowing",
|
||||||
"metro_m4_airliftlite_tinyusb" : ["adafruit:samd:adafruit_metro_m4_airliftlite:speed=120,usbstack=tinyusb", "0x55114460"],
|
"hallowing_m4" : "adafruit:samd:adafruit_hallowing_m4:speed=120,usbstack=tinyusb",
|
||||||
"pybadge" : ["adafruit:samd:adafruit_pybadge_m4:speed=120", "0x55114460"],
|
"neotrellis_m4" : "adafruit:samd:adafruit_trellis_m4:speed=120",
|
||||||
"pybadge_tinyusb" : ["adafruit:samd:adafruit_pybadge_m4:speed=120,usbstack=tinyusb", "0x55114460"],
|
"monster_m4sk" : "adafruit:samd:adafruit_monster_m4sk:speed=120,usbstack=tinyusb",
|
||||||
"pygamer" : ["adafruit:samd:adafruit_pygamer_m4:speed=120", "0x55114460"],
|
"pyportal" : "adafruit:samd:adafruit_pyportal_m4:speed=120,usbstack=tinyusb",
|
||||||
"pygamer_tinyusb" : ["adafruit:samd:adafruit_pygamer_m4:speed=120,usbstack=tinyusb", "0x55114460"],
|
"pyportal_titano" : "adafruit:samd:adafruit_pyportal_m4_titano:speed=120,usbstack=tinyusb",
|
||||||
"hallowing_m0" : ["adafruit:samd:adafruit_hallowing", "0x68ed2b88"],
|
"cpx_ada" : "adafruit:samd:adafruit_circuitplayground_m0",
|
||||||
"hallowing_m4" : ["adafruit:samd:adafruit_hallowing_m4:speed=120", "0x55114460"],
|
"grand_central" : "adafruit:samd:adafruit_grandcentral_m4:speed=120,usbstack=tinyusb",
|
||||||
"hallowing_m4_tinyusb" : ["adafruit:samd:adafruit_hallowing_m4:speed=120,usbstack=tinyusb", "0x55114460"],
|
"matrixportal" : "adafruit:samd:adafruit_matrixportal_m4:speed=120,usbstack=tinyusb",
|
||||||
"neotrellis_m4" : ["adafruit:samd:adafruit_trellis_m4:speed=120", "0x55114460"],
|
|
||||||
"monster_m4sk" : ["adafruit:samd:adafruit_monster_m4sk:speed=120", "0x55114460"],
|
|
||||||
"monster_m4sk_tinyusb" : ["adafruit:samd:adafruit_monster_m4sk:speed=120,usbstack=tinyusb", "0x55114460"],
|
|
||||||
"pyportal" : ["adafruit:samd:adafruit_pyportal_m4:speed=120", "0x55114460"],
|
|
||||||
"pyportal_tinyusb" : ["adafruit:samd:adafruit_pyportal_m4:speed=120,usbstack=tinyusb", "0x55114460"],
|
|
||||||
"pyportal_titano" : ["adafruit:samd:adafruit_pyportal_m4_titano:speed=120", "0x55114460"],
|
|
||||||
"pyportal_titano_tinyusb" : ["adafruit:samd:adafruit_pyportal_m4_titano:speed=120,usbstack=tinyusb", "0x55114460"],
|
|
||||||
"cpx_ada" : ["adafruit:samd:adafruit_circuitplayground_m0", "0x68ed2b88"],
|
|
||||||
"grand_central" : ["adafruit:samd:adafruit_grandcentral_m4:speed=120", "0x55114460"],
|
|
||||||
"grand_central_tinyusb" : ["adafruit:samd:adafruit_grandcentral_m4:speed=120,usbstack=tinyusb", "0x55114460"],
|
|
||||||
"matrixportal" : ["adafruit:samd:adafruit_matrixportal_m4:speed=120", "0x55114460"],
|
|
||||||
"matrixportal_tinyusb" : ["adafruit:samd:adafruit_matrixportal_m4:speed=120,usbstack=tinyusb", "0x55114460"],
|
|
||||||
"neotrinkey_m0" : ["adafruit:samd:adafruit_neotrinkey_m0", "0x68ed2b88"],
|
|
||||||
"rotarytrinkey_m0" : ["adafruit:samd:adafruit_rotarytrinkey_m0", "0x68ed2b88"],
|
|
||||||
"neokeytrinkey_m0" : ["adafruit:samd:adafruit_neokeytrinkey_m0", "0x68ed2b88"],
|
|
||||||
"slidetrinkey_m0" : ["adafruit:samd:adafruit_slidetrinkey_m0", "0x68ed2b88"],
|
|
||||||
"proxlighttrinkey_m0" : ["adafruit:samd:adafruit_proxlighttrinkey_m0", "0x68ed2b88"],
|
|
||||||
"qtpy_m0" : ["adafruit:samd:adafruit_qtpy_m0", "0x68ed2b88"],
|
|
||||||
"qtpy_m0_tinyusb" : ["adafruit:samd:adafruit_qtpy_m0:usbstack=tinyusb", "0x68ed2b88"],
|
|
||||||
# Arduino nRF
|
# Arduino nRF
|
||||||
"microbit" : ["sandeepmistry:nRF5:BBCmicrobit:softdevice=s110", None],
|
"microbit" : "sandeepmistry:nRF5:BBCmicrobit:softdevice=s130",
|
||||||
# Adafruit nRF
|
# Adafruit nRF
|
||||||
"nrf52832" : ["adafruit:nrf52:feather52832:softdevice=s132v6,debug=l0", None],
|
"nrf52832" : "adafruit:nrf52:feather52832:softdevice=s132v6,debug=l0",
|
||||||
"nrf52840" : ["adafruit:nrf52:feather52840:softdevice=s140v6,debug=l0", "0xada52840"],
|
"nrf52840" : "adafruit:nrf52:feather52840:softdevice=s140v6,debug=l0",
|
||||||
"cpb" : ["adafruit:nrf52:cplaynrf52840:softdevice=s140v6,debug=l0", "0xada52840"],
|
"cpb" : "adafruit:nrf52:cplaynrf52840:softdevice=s140v6,debug=l0",
|
||||||
"clue" : ["adafruit:nrf52:cluenrf52840:softdevice=s140v6,debug=l0", "0xada52840"],
|
"clue" : "adafruit:nrf52:cluenrf52840:softdevice=s140v6,debug=l0",
|
||||||
"ledglasses_nrf52840" : ["adafruit:nrf52:ledglasses_nrf52840:softdevice=s140v6,debug=l0", "0xada52840"],
|
|
||||||
# RP2040 (Philhower)
|
|
||||||
"pico_rp2040" : ["rp2040:rp2040:rpipico:freq=125,flash=2097152_0", "0xe48bff56"],
|
|
||||||
"pico_rp2040_tinyusb" : ["rp2040:rp2040:rpipico:flash=2097152_0,freq=125,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56"],
|
|
||||||
"feather_rp2040" : ["rp2040:rp2040:adafruit_feather:freq=125,flash=8388608_0", "0xe48bff56"],
|
|
||||||
"feather_rp2040_tinyusb" : ["rp2040:rp2040:adafruit_feather:flash=8388608_0,freq=125,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56"],
|
|
||||||
"qt2040_trinkey" : ["rp2040:rp2040:adafruit_trinkeyrp2040qt:freq=125,flash=8388608_0", "0xe48bff56"],
|
|
||||||
"qt2040_trinkey_tinyusb" : ["rp2040:rp2040:adafruit_trinkeyrp2040qt:flash=8388608_0,freq=125,dbgport=Disabled,dbglvl=None,usbstack=tinyusb", "0xe48bff56"],
|
|
||||||
# Attiny8xy, 16xy, 32xy (SpenceKonde)
|
|
||||||
"attiny3217" : ["megaTinyCore:megaavr:atxy7:chip=3217", None],
|
|
||||||
"attiny3216" : ["megaTinyCore:megaavr:atxy6:chip=3216", None],
|
|
||||||
"attiny1617" : ["megaTinyCore:megaavr:atxy7:chip=1617", None],
|
|
||||||
"attiny1616" : ["megaTinyCore:megaavr:atxy6:chip=1616", None],
|
|
||||||
"attiny1607" : ["megaTinyCore:megaavr:atxy7:chip=1607", None],
|
|
||||||
"attiny1606" : ["megaTinyCore:megaavr:atxy6:chip=1606", None],
|
|
||||||
"attiny817" : ["megaTinyCore:megaavr:atxy7:chip=817", None],
|
|
||||||
"attiny816" : ["megaTinyCore:megaavr:atxy6:chip=816", None],
|
|
||||||
"attiny807" : ["megaTinyCore:megaavr:atxy7:chip=807", None],
|
|
||||||
"attiny806" : ["megaTinyCore:megaavr:atxy6:chip=806", None],
|
|
||||||
# groupings
|
# groupings
|
||||||
"main_platforms" : ("uno", "leonardo", "mega2560", "zero", "qtpy_m0",
|
"main_platforms" : ("uno", "leonardo", "mega2560", "zero",
|
||||||
"esp8266", "esp32", "metro_m4", "trinket_m0"),
|
"esp8266", "esp32", "metro_m4", "nrf52840"),
|
||||||
"arcada_platforms" : ("pybadge", "pygamer", "hallowing_m4",
|
"arcada_platforms" : ("pybadge", "pygamer", "hallowing_m4",
|
||||||
"cpb", "cpx_ada"),
|
"cpb", "cpx_ada")
|
||||||
"wippersnapper_platforms" : ("metro_m4_airliftlite_tinyusb", "pyportal_tinyusb"),
|
|
||||||
"rp2040_platforms" : ("pico_rp2040", "feather_rp2040")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BSP_URLS = "https://adafruit.github.io/arduino-board-index/package_adafruit_index.json,http://arduino.esp8266.com/stable/package_esp8266com_index.json,https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json,https://sandeepmistry.github.io/arduino-nRF5/package_nRF5_boards_index.json,https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json,http://drazzy.com/package_drazzy.com_index.json"
|
BSP_URLS = "https://adafruit.github.io/arduino-board-index/package_adafruit_index.json,http://arduino.esp8266.com/stable/package_esp8266com_index.json,https://dl.espressif.com/dl/package_esp32_index.json,https://sandeepmistry.github.io/arduino-nRF5/package_nRF5_boards_index.json"
|
||||||
|
|
||||||
class ColorPrint:
|
class ColorPrint:
|
||||||
|
|
||||||
|
|
@ -186,18 +119,10 @@ def install_platform(platform):
|
||||||
ColorPrint.print_fail("FAILED to install "+platform)
|
ColorPrint.print_fail("FAILED to install "+platform)
|
||||||
exit(-1)
|
exit(-1)
|
||||||
ColorPrint.print_pass(CHECK)
|
ColorPrint.print_pass(CHECK)
|
||||||
# print installed core version
|
|
||||||
print(os.popen('arduino-cli core list | grep {}'.format(platform)).read(), end='')
|
|
||||||
|
|
||||||
def run_or_die(cmd, error):
|
def run_or_die(cmd, error):
|
||||||
print(cmd)
|
print(cmd)
|
||||||
attempt = 0
|
if os.system(cmd) != 0:
|
||||||
while attempt < 3:
|
|
||||||
if os.system(cmd) == 0:
|
|
||||||
return
|
|
||||||
attempt += 1
|
|
||||||
print('attempt {} failed, {} retry left'.format(attempt, 3-attempt))
|
|
||||||
time.sleep(5)
|
|
||||||
ColorPrint.print_fail(error)
|
ColorPrint.print_fail(error)
|
||||||
exit(-1)
|
exit(-1)
|
||||||
|
|
||||||
|
|
@ -208,10 +133,17 @@ print("INSTALLING ARDUINO BOARDS")
|
||||||
ColorPrint.print_info('#'*40)
|
ColorPrint.print_info('#'*40)
|
||||||
|
|
||||||
run_or_die("arduino-cli core update-index --additional-urls "+BSP_URLS+
|
run_or_die("arduino-cli core update-index --additional-urls "+BSP_URLS+
|
||||||
" > /dev/null", "FAILED to update core indices")
|
" > /dev/null", "FAILED to update core indecies")
|
||||||
print()
|
print()
|
||||||
|
|
||||||
################################ Install dependencies
|
# link test library folder to the arduino libraries folder
|
||||||
|
if not IS_LEARNING_SYS:
|
||||||
|
try:
|
||||||
|
os.symlink(BUILD_DIR, os.environ['HOME']+'/Arduino/libraries/Adafruit_Test_Library')
|
||||||
|
except FileExistsError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
################################ Install dependancies
|
||||||
our_name=None
|
our_name=None
|
||||||
try:
|
try:
|
||||||
if IS_LEARNING_SYS:
|
if IS_LEARNING_SYS:
|
||||||
|
|
@ -227,74 +159,18 @@ try:
|
||||||
dep = dep.strip()
|
dep = dep.strip()
|
||||||
print("Installing "+dep)
|
print("Installing "+dep)
|
||||||
run_or_die('arduino-cli lib install "'+dep+'" > /dev/null',
|
run_or_die('arduino-cli lib install "'+dep+'" > /dev/null',
|
||||||
"FAILED to install dependency "+dep)
|
"FAILED to install dependancy "+dep)
|
||||||
except OSError:
|
except OSError:
|
||||||
print("No library dep or properties found!")
|
print("No library dep or properties found!")
|
||||||
pass # no library properties
|
pass # no library properties
|
||||||
|
|
||||||
# Delete the existing library if we somehow downloaded
|
# Delete the existing library if we somehow downloaded
|
||||||
# due to dependencies
|
# due to dependancies
|
||||||
if our_name:
|
if our_name:
|
||||||
run_or_die("arduino-cli lib uninstall \""+our_name+"\"", "Could not uninstall")
|
run_or_die("arduino-cli lib uninstall \""+our_name+"\"", "Could not uninstall")
|
||||||
|
|
||||||
print("Libraries installed: ", glob.glob(os.environ['HOME']+'/Arduino/libraries/*'))
|
print("Libraries installed: ", glob.glob(os.environ['HOME']+'/Arduino/libraries/*'))
|
||||||
|
|
||||||
# link our library folder to the arduino libraries folder
|
|
||||||
if not IS_LEARNING_SYS:
|
|
||||||
try:
|
|
||||||
os.symlink(BUILD_DIR, os.environ['HOME']+'/Arduino/libraries/' + os.path.basename(BUILD_DIR))
|
|
||||||
except FileExistsError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
################################ UF2 Utils.
|
|
||||||
|
|
||||||
def glob1(pattern):
|
|
||||||
result = glob.glob(pattern)
|
|
||||||
if len(result) != 1:
|
|
||||||
raise RuntimeError(f"Required pattern {pattern} to match exactly 1 file, got {result}")
|
|
||||||
return result[0]
|
|
||||||
|
|
||||||
def download_uf2_utils():
|
|
||||||
"""Downloads uf2conv tools if we don't already have them
|
|
||||||
"""
|
|
||||||
cmd = "wget -nc --no-check-certificate http://raw.githubusercontent.com/microsoft/uf2/master/utils/uf2families.json https://raw.githubusercontent.com/microsoft/uf2/master/utils/uf2conv.py"
|
|
||||||
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
|
|
||||||
r = proc.wait(timeout=60)
|
|
||||||
out = proc.stdout.read()
|
|
||||||
err = proc.stderr.read()
|
|
||||||
if r != 0:
|
|
||||||
ColorPrint.print_fail("Failed to download UF2 Utils!")
|
|
||||||
ColorPrint.print_fail(out.decode("utf-8"))
|
|
||||||
ColorPrint.print_fail(err.decode("utf-8"))
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
def generate_uf2(example_path):
|
|
||||||
"""Generates a .uf2 file from a .bin or .hex file.
|
|
||||||
:param str example_path: A path to the compiled .bin or .hex file.
|
|
||||||
|
|
||||||
"""
|
|
||||||
if not download_uf2_utils():
|
|
||||||
return None
|
|
||||||
cli_build_path = "build/*.*." + fqbn.split(':')[2] + "/*.hex"
|
|
||||||
input_file = glob1(os.path.join(example_path, cli_build_path))
|
|
||||||
output_file = os.path.splitext(input_file)[0] + ".uf2"
|
|
||||||
family_id = ALL_PLATFORMS[platform][1]
|
|
||||||
cmd = ['python3', 'uf2conv.py', input_file, '-c', '-f', family_id, '-o', output_file]
|
|
||||||
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
|
||||||
r = proc.wait(timeout=60)
|
|
||||||
out = proc.stdout.read()
|
|
||||||
err = proc.stderr.read()
|
|
||||||
if r == 0 and not err:
|
|
||||||
ColorPrint.print_pass(CHECK)
|
|
||||||
ColorPrint.print_info(out.decode("utf-8"))
|
|
||||||
else:
|
|
||||||
ColorPrint.print_fail(CROSS)
|
|
||||||
ColorPrint.print_fail(out.decode("utf-8"))
|
|
||||||
ColorPrint.print_fail(err.decode("utf-8"))
|
|
||||||
return None
|
|
||||||
return output_file
|
|
||||||
|
|
||||||
################################ Test platforms
|
################################ Test platforms
|
||||||
platforms = []
|
platforms = []
|
||||||
success = 0
|
success = 0
|
||||||
|
|
@ -302,9 +178,9 @@ success = 0
|
||||||
# expand groups:
|
# expand groups:
|
||||||
for arg in sys.argv[1:]:
|
for arg in sys.argv[1:]:
|
||||||
platform = ALL_PLATFORMS.get(arg, None)
|
platform = ALL_PLATFORMS.get(arg, None)
|
||||||
if isinstance(platform, list):
|
if isinstance(platform, str):
|
||||||
platforms.append(arg)
|
platforms.append(arg)
|
||||||
elif isinstance(platform, tuple):
|
elif isinstance(platform, collections.Iterable):
|
||||||
for p in platform:
|
for p in platform:
|
||||||
platforms.append(p)
|
platforms.append(p)
|
||||||
else:
|
else:
|
||||||
|
|
@ -325,62 +201,21 @@ def test_examples_in_folder(folderpath):
|
||||||
# check if we should SKIP
|
# check if we should SKIP
|
||||||
skipfilename = folderpath+"/."+platform+".test.skip"
|
skipfilename = folderpath+"/."+platform+".test.skip"
|
||||||
onlyfilename = folderpath+"/."+platform+".test.only"
|
onlyfilename = folderpath+"/."+platform+".test.only"
|
||||||
# check if we should GENERATE UF2
|
|
||||||
gen_file_name = folderpath+"/."+platform+".generate"
|
|
||||||
if os.path.exists(skipfilename):
|
if os.path.exists(skipfilename):
|
||||||
ColorPrint.print_warn("skipping")
|
ColorPrint.print_warn("skipping")
|
||||||
continue
|
continue
|
||||||
if glob.glob(folderpath+"/.*.test.only"):
|
if glob.glob(folderpath+"/.*.test.only") and not os.path.exists(onlyfilename):
|
||||||
platformname = glob.glob(folderpath+"/.*.test.only")[0].split('.')[1]
|
|
||||||
if platformname != "none" and not platformname in ALL_PLATFORMS:
|
|
||||||
# uh oh, this isnt a valid testonly!
|
|
||||||
ColorPrint.print_fail(CROSS)
|
|
||||||
ColorPrint.print_fail("This example does not have a valid .platform.test.only file")
|
|
||||||
success = 1
|
|
||||||
continue
|
|
||||||
if not os.path.exists(onlyfilename):
|
|
||||||
ColorPrint.print_warn("skipping")
|
ColorPrint.print_warn("skipping")
|
||||||
continue
|
continue
|
||||||
if os.path.exists(gen_file_name):
|
|
||||||
ColorPrint.print_info("generating")
|
|
||||||
|
|
||||||
if BUILD_WARN:
|
|
||||||
if os.path.exists(gen_file_name):
|
|
||||||
cmd = ['arduino-cli', 'compile', '--warnings', 'all', '--fqbn', fqbn, '-e', folderpath]
|
|
||||||
else:
|
|
||||||
cmd = ['arduino-cli', 'compile', '--warnings', 'all', '--fqbn', fqbn, folderpath]
|
|
||||||
else:
|
|
||||||
cmd = ['arduino-cli', 'compile', '--warnings', 'none', '--export-binaries', '--fqbn', fqbn, folderpath]
|
|
||||||
|
|
||||||
|
cmd = ['arduino-cli', 'compile', '--fqbn', fqbn, examplepath]
|
||||||
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
|
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE)
|
stderr=subprocess.PIPE)
|
||||||
try:
|
r = proc.wait()
|
||||||
out, err = proc.communicate(timeout=60)
|
out = proc.stdout.read()
|
||||||
r = proc.returncode
|
err = proc.stderr.read()
|
||||||
except:
|
if r == 0:
|
||||||
proc.kill()
|
|
||||||
out, err = proc.communicate()
|
|
||||||
r = 1
|
|
||||||
|
|
||||||
if r == 0 and not (err and BUILD_WALL == True):
|
|
||||||
ColorPrint.print_pass(CHECK)
|
ColorPrint.print_pass(CHECK)
|
||||||
if err:
|
|
||||||
# also print out warning message
|
|
||||||
ColorPrint.print_fail(err.decode("utf-8"))
|
|
||||||
if os.path.exists(gen_file_name):
|
|
||||||
if ALL_PLATFORMS[platform][1] == None:
|
|
||||||
ColorPrint.print_info("Platform does not support UF2 files, skipping...")
|
|
||||||
else:
|
|
||||||
ColorPrint.print_info("Generating UF2...")
|
|
||||||
filename = generate_uf2(folderpath)
|
|
||||||
if filename is None:
|
|
||||||
success = 1 # failure
|
|
||||||
if IS_LEARNING_SYS:
|
|
||||||
fqbnpath, uf2file = filename.split("/")[-2:]
|
|
||||||
os.makedirs(BUILD_DIR+"/build", exist_ok=True)
|
|
||||||
os.makedirs(BUILD_DIR+"/build/"+fqbnpath, exist_ok=True)
|
|
||||||
shutil.copy(filename, BUILD_DIR+"/build/"+fqbnpath+"-"+uf2file)
|
|
||||||
os.system("ls -lR "+BUILD_DIR+"/build")
|
|
||||||
else:
|
else:
|
||||||
ColorPrint.print_fail(CROSS)
|
ColorPrint.print_fail(CROSS)
|
||||||
ColorPrint.print_fail(out.decode("utf-8"))
|
ColorPrint.print_fail(out.decode("utf-8"))
|
||||||
|
|
@ -397,7 +232,7 @@ def test_examples_in_learningrepo(folderpath):
|
||||||
if not projectpath.endswith(".ino"):
|
if not projectpath.endswith(".ino"):
|
||||||
continue
|
continue
|
||||||
# found an INO!
|
# found an INO!
|
||||||
print('\t'+projectpath, end=' ', flush=True)
|
print('\t'+projectpath, end=' ')
|
||||||
# check if we should SKIP
|
# check if we should SKIP
|
||||||
skipfilename = folderpath+"/."+platform+".test.skip"
|
skipfilename = folderpath+"/."+platform+".test.skip"
|
||||||
onlyfilename = folderpath+"/."+platform+".test.only"
|
onlyfilename = folderpath+"/."+platform+".test.only"
|
||||||
|
|
@ -408,7 +243,7 @@ def test_examples_in_learningrepo(folderpath):
|
||||||
ColorPrint.print_warn("skipping")
|
ColorPrint.print_warn("skipping")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
cmd = ['arduino-cli', 'compile', '--warnings', 'all', '--fqbn', fqbn, projectpath]
|
cmd = ['arduino-cli', 'compile', '--fqbn', fqbn, projectpath]
|
||||||
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
|
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE)
|
stderr=subprocess.PIPE)
|
||||||
r = proc.wait()
|
r = proc.wait()
|
||||||
|
|
@ -416,9 +251,6 @@ def test_examples_in_learningrepo(folderpath):
|
||||||
err = proc.stderr.read()
|
err = proc.stderr.read()
|
||||||
if r == 0:
|
if r == 0:
|
||||||
ColorPrint.print_pass(CHECK)
|
ColorPrint.print_pass(CHECK)
|
||||||
if err:
|
|
||||||
# also print out warning message
|
|
||||||
ColorPrint.print_fail(err.decode("utf-8"))
|
|
||||||
else:
|
else:
|
||||||
ColorPrint.print_fail(CROSS)
|
ColorPrint.print_fail(CROSS)
|
||||||
ColorPrint.print_fail(out.decode("utf-8"))
|
ColorPrint.print_fail(out.decode("utf-8"))
|
||||||
|
|
@ -427,7 +259,7 @@ def test_examples_in_learningrepo(folderpath):
|
||||||
|
|
||||||
|
|
||||||
for platform in platforms:
|
for platform in platforms:
|
||||||
fqbn = ALL_PLATFORMS[platform][0]
|
fqbn = ALL_PLATFORMS[platform]
|
||||||
print('#'*80)
|
print('#'*80)
|
||||||
ColorPrint.print_info("SWITCHING TO "+fqbn)
|
ColorPrint.print_info("SWITCHING TO "+fqbn)
|
||||||
install_platform(":".join(fqbn.split(':', 2)[0:2])) # take only first two elements
|
install_platform(":".join(fqbn.split(':', 2)[0:2])) # take only first two elements
|
||||||
|
|
|
||||||
|
|
@ -44,8 +44,6 @@ if [[ -z "${TRAVIS_BUILD_DIR}" ]]; then
|
||||||
export BUILD_DIR=${GITHUB_WORKSPACE}
|
export BUILD_DIR=${GITHUB_WORKSPACE}
|
||||||
export AUTH=${GITHUB_ACTOR}:${GH_REPO_TOKEN}
|
export AUTH=${GITHUB_ACTOR}:${GH_REPO_TOKEN}
|
||||||
export REPO_SLUG=${GITHUB_REPOSITORY}
|
export REPO_SLUG=${GITHUB_REPOSITORY}
|
||||||
export COMMIT_SHA1=${GITHUB_SHA}
|
|
||||||
export BUILD_ID="GitHub Actions run: ${GITHUB_RUN_ID}"
|
|
||||||
if [ "$GITHUB_EVENT_NAME" == "pull_request" ]; then
|
if [ "$GITHUB_EVENT_NAME" == "pull_request" ]; then
|
||||||
export IS_PULL=1
|
export IS_PULL=1
|
||||||
fi
|
fi
|
||||||
|
|
@ -53,8 +51,6 @@ else
|
||||||
export BUILD_DIR=${TRAVIS_BUILD_DIR}
|
export BUILD_DIR=${TRAVIS_BUILD_DIR}
|
||||||
export AUTH=${GH_REPO_TOKEN}
|
export AUTH=${GH_REPO_TOKEN}
|
||||||
export REPO_SLUG=${TRAVIS_REPO_SLUG}
|
export REPO_SLUG=${TRAVIS_REPO_SLUG}
|
||||||
export COMMIT_SHA1=${TRAVIS_COMMIT}
|
|
||||||
export BUILD_ID="Travis build: ${TRAVIS_BUILD_NUMBER}"
|
|
||||||
if [ "${TRAVIS_PULL_REQUEST}" != "false" ]; then
|
if [ "${TRAVIS_PULL_REQUEST}" != "false" ]; then
|
||||||
export IS_PULL=1
|
export IS_PULL=1
|
||||||
fi
|
fi
|
||||||
|
|
@ -82,7 +78,7 @@ cd ${REPO_NAME}
|
||||||
git config --global push.default simple
|
git config --global push.default simple
|
||||||
# Pretend to be an user called Doxygen CI.
|
# Pretend to be an user called Doxygen CI.
|
||||||
git config user.name "Doxygen CI"
|
git config user.name "Doxygen CI"
|
||||||
git config user.email "ci-arduino@invalid"
|
git config user.email "travis@travis-ci.org"
|
||||||
|
|
||||||
# Remove everything currently in the gh-pages branch.
|
# Remove everything currently in the gh-pages branch.
|
||||||
# GitHub is smart enough to know which files have changed and which files have
|
# GitHub is smart enough to know which files have changed and which files have
|
||||||
|
|
@ -175,12 +171,10 @@ if [ -d "html" ] && [ -f "html/index.html" ]; then
|
||||||
# Commit the added files with a title and description containing the Travis CI
|
# Commit the added files with a title and description containing the Travis CI
|
||||||
# build number and the GitHub commit reference that issued this build.
|
# build number and the GitHub commit reference that issued this build.
|
||||||
echo 'Git committing'
|
echo 'Git committing'
|
||||||
git commit \
|
git commit -m "Deploy code docs to GitHub Pages Travis build: ${TRAVIS_BUILD_NUMBER}" -m "Commit: ${TRAVIS_COMMIT}"
|
||||||
-m "Deploy docs to GitHub Pages from commit ${COMMIT_SHA1:0:10}" \
|
|
||||||
-m "Commit: ${COMMIT_SHA1}"$'\n'"${BUILD_ID}"
|
|
||||||
|
|
||||||
# Force push to the remote gh-pages branch.
|
# Force push to the remote gh-pages branch.
|
||||||
# The output is redirected to /dev/null to hide any sensitive credential data
|
# The ouput is redirected to /dev/null to hide any sensitive credential data
|
||||||
# that might otherwise be exposed.
|
# that might otherwise be exposed.
|
||||||
echo 'Git pushing'
|
echo 'Git pushing'
|
||||||
git push --force "https://${AUTH}@github.com/${REPO_SLUG}.git" > /dev/null 2>&1
|
git push --force "https://${AUTH}@github.com/${REPO_SLUG}.git" > /dev/null 2>&1
|
||||||
|
|
|
||||||
11
install.sh
11
install.sh
|
|
@ -109,7 +109,6 @@ INSTALL_NRF52=$([[ $INSTALL_PLATFORMS == *"nrf52"* || -z "$INSTALL_PLATFORMS" ]]
|
||||||
|
|
||||||
if [[ $INSTALL_ESP32 == 1 ]]; then
|
if [[ $INSTALL_ESP32 == 1 ]]; then
|
||||||
echo -n "ESP32: "
|
echo -n "ESP32: "
|
||||||
pip install pyserial
|
|
||||||
DEPENDENCY_OUTPUT=$(arduino --install-boards esp32:esp32 2>&1)
|
DEPENDENCY_OUTPUT=$(arduino --install-boards esp32:esp32 2>&1)
|
||||||
if [ $? -ne 0 ]; then echo -e "\xe2\x9c\x96 OR CACHED"; else echo -e """$GREEN""\xe2\x9c\x93"; fi
|
if [ $? -ne 0 ]; then echo -e "\xe2\x9c\x96 OR CACHED"; else echo -e """$GREEN""\xe2\x9c\x93"; fi
|
||||||
fi
|
fi
|
||||||
|
|
@ -140,10 +139,12 @@ fi
|
||||||
|
|
||||||
if [[ $INSTALL_NRF52 == 1 ]]; then
|
if [[ $INSTALL_NRF52 == 1 ]]; then
|
||||||
echo -n "ADAFRUIT NRF5X: "
|
echo -n "ADAFRUIT NRF5X: "
|
||||||
pip install wheel
|
pip3 install --user setuptools
|
||||||
pip install setuptools
|
pip3 install --user adafruit-nrfutil
|
||||||
pip install adafruit-nrfutil
|
pip3 install --user pyserial
|
||||||
pip install pyserial
|
sudo pip3 install setuptools
|
||||||
|
sudo pip3 install adafruit-nrfutil
|
||||||
|
sudo pip3 install pyserial
|
||||||
DEPENDENCY_OUTPUT=$(arduino --install-boards adafruit:nrf52 2>&1)
|
DEPENDENCY_OUTPUT=$(arduino --install-boards adafruit:nrf52 2>&1)
|
||||||
if [ $? -ne 0 ]; then echo -e "\xe2\x9c\x96 OR CACHED"; else echo -e """$GREEN""\xe2\x9c\x93"; fi
|
if [ $? -ne 0 ]; then echo -e "\xe2\x9c\x96 OR CACHED"; else echo -e """$GREEN""\xe2\x9c\x93"; fi
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue