1062 lines
49 KiB
YAML
1062 lines
49 KiB
YAML
# SPDX-FileCopyrightText: Brent Rubell for Adafruit Industries, 2023
|
||
#
|
||
# SPDX-License-Identifier: MIT
|
||
name: WipperSnapper Build CI
|
||
|
||
on:
|
||
workflow_dispatch:
|
||
inputs:
|
||
board:
|
||
description: 'Build ONLY this board (must match a matrix entry exactly, or leave empty for all)'
|
||
required: false
|
||
default: ''
|
||
pull_request:
|
||
workflow_call:
|
||
secrets:
|
||
GH_REPO_TOKEN:
|
||
required: true
|
||
|
||
jobs:
|
||
build-esp32sx-esptool:
|
||
name: 🏗️ESP32-Sx(lvgl)
|
||
runs-on: ubuntu-latest
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
arduino-platform:
|
||
[
|
||
"feather_esp32s2",
|
||
"feather_esp32s2_reverse_tft",
|
||
"feather_esp32s2_tft",
|
||
"funhouse_noota",
|
||
"magtag",
|
||
"metroesp32s2",
|
||
"qtpy_esp32s2",
|
||
"esp32s3_devkitc_1_n8",
|
||
"feather_esp32s3_4mbflash_2mbpsram",
|
||
"feather_esp32s3_reverse_tft",
|
||
"feather_esp32s3_tft",
|
||
"qtpy_esp32s3_n4r2",
|
||
"xiao_esp32s3",
|
||
]
|
||
|
||
steps:
|
||
- name: "skip if unwanted"
|
||
continue-on-error: true
|
||
if: |
|
||
github.event_name == 'workflow_dispatch' &&
|
||
github.event.inputs.board != '' &&
|
||
matrix.arduino-platform != github.event.inputs.board
|
||
run: |
|
||
echo "don't build this one!"; exit 1
|
||
- uses: actions/setup-python@v5
|
||
with:
|
||
python-version: "3.x"
|
||
- uses: actions/checkout@v4
|
||
- name: Get WipperSnapper version
|
||
run: |
|
||
git fetch --prune --unshallow --tags
|
||
git describe --dirty --tags
|
||
echo >>$GITHUB_ENV WS_VERSION=$(git describe --dirty --tags)
|
||
- uses: actions/checkout@v4
|
||
with:
|
||
repository: adafruit/ci-arduino
|
||
ref: ci-wippersnapper
|
||
path: ci
|
||
- name: Checkout Board Definitions
|
||
uses: actions/checkout@v4
|
||
with:
|
||
repository: adafruit/Wippersnapper_Boards
|
||
path: ws-boards
|
||
- name: Install CI-Arduino
|
||
run: bash ci/actions_install.sh
|
||
- name: Install extra Arduino libraries
|
||
run: |
|
||
git clone --quiet --branch 2.2.54 https://github.com/adafruit/SdFat.git /home/runner/Arduino/libraries/SdFat
|
||
git clone --quiet --branch v4.0.3 https://github.com/milesburton/Arduino-Temperature-Control-Library.git /home/runner/Arduino/libraries/Arduino-Temperature-Control-Library
|
||
git clone --quiet https://github.com/pstolarz/OneWireNg.git /home/runner/Arduino/libraries/OneWireNg
|
||
git clone --quiet https://github.com/adafruit/Adafruit_HX8357_Library.git /home/runner/Arduino/libraries/Adafruit_HX8357_Library
|
||
git clone --quiet https://github.com/adafruit/Adafruit_ILI9341.git /home/runner/Arduino/libraries/Adafruit_ILI9341
|
||
git clone --quiet https://github.com/adafruit/Adafruit_STMPE610.git /home/runner/Arduino/libraries/Adafruit_STMPE610
|
||
git clone --quiet https://github.com/adafruit/Adafruit-ST7735-Library.git /home/runner/Arduino/libraries/Adafruit-ST7735-Library
|
||
git clone --quiet https://github.com/adafruit/Adafruit_TouchScreen.git /home/runner/Arduino/libraries/Adafruit_TouchScreen
|
||
git clone --quiet https://github.com/adafruit/Adafruit_TinyUSB_Arduino /home/runner/Arduino/libraries/Adafruit_TinyUSB_Arduino
|
||
git clone --depth 1 --branch wippersnapper https://github.com/brentru/lvgl.git /home/runner/Arduino/libraries/lvgl
|
||
git clone --depth 1 --branch development https://github.com/brentru/Adafruit_LvGL_Glue.git /home/runner/Arduino/libraries/Adafruit_LittlevGL_Glue_Library
|
||
- name: Download stable Nanopb
|
||
id: download-nanopb
|
||
continue-on-error: true
|
||
run: |
|
||
wget https://jpa.kapsi.fi/nanopb/download/nanopb-0.4.8.tar.gz
|
||
- if: ${{ failure() || steps.download-nanopb.outcome != 'success' }}
|
||
name: Restore cached nanopb
|
||
id: cache-nanopb-restore
|
||
uses: actions/cache/restore@v4
|
||
env:
|
||
cache-name: cache-node-modules
|
||
with:
|
||
path: ./nanopb-0.4.8.tar.gz
|
||
key: nanopb-0.4.8.tar.gz
|
||
- if: ${{ steps.download-nanopb.outcome == 'success' }}
|
||
name: Save nanopb to cache
|
||
id: cache-nanopb-save
|
||
uses: actions/cache/save@v4
|
||
env:
|
||
cache-name: cache-node-modules
|
||
with:
|
||
path: ./nanopb-0.4.8.tar.gz
|
||
key: nanopb-0.4.8.tar.gz
|
||
- name: Install stable Nanopb
|
||
run: |
|
||
tar -xf nanopb-0.4.8.tar.gz
|
||
# Copy files to WipperSnapper's src/nanopb directory
|
||
cp nanopb/pb_common.* nanopb/pb_encode.* nanopb/pb_decode.* src/nanopb
|
||
mv nanopb/pb.h src/nanopb/nanopb.pb.h
|
||
- name: List all files in Adafruit_LittlevGL_Glue_Library folder
|
||
run: |
|
||
ls /home/runner/Arduino/libraries/Adafruit_LittlevGL_Glue_Library
|
||
- name: Copy lv_conf.h file in Adafruit_LittlevGL_Glue_Library to the arduino library folder
|
||
run: |
|
||
cp /home/runner/Arduino/libraries/Adafruit_LittlevGL_Glue_Library/lv_conf.h /home/runner/Arduino/libraries
|
||
- name: Install Dependencies (esptool)
|
||
run: |
|
||
pip3 install esptool
|
||
- name: Build for ESP32-SX (esptool)
|
||
run: python3 ci/build_platform.py ${{ matrix.arduino-platform }} --build_timeout 48000
|
||
- name: list files
|
||
run: |
|
||
ls -Rla examples/
|
||
- name: Rename build artifacts to reflect the platform name
|
||
run: |
|
||
mv examples/Wippersnapper_demo/build/*/Wippersnapper_demo.ino.bin wippersnapper.${{ matrix.arduino-platform }}.fatfs.${{ env.WS_VERSION }}.bin
|
||
mv examples/Wippersnapper_demo/build/*/Wippersnapper_demo.ino.elf wippersnapper.${{ matrix.arduino-platform }}.fatfs.${{ env.WS_VERSION }}.elf
|
||
mv examples/Wippersnapper_demo/build/*/Wippersnapper_demo.ino.map wippersnapper.${{ matrix.arduino-platform }}.fatfs.${{ env.WS_VERSION }}.map
|
||
mv examples/Wippersnapper_demo/build/*/Wippersnapper_demo.ino.bootloader.bin wippersnapper.${{ matrix.arduino-platform }}.fatfs.${{ env.WS_VERSION }}.bootloader.bin
|
||
mv examples/Wippersnapper_demo/build/*/Wippersnapper_demo.ino.merged.bin wippersnapper.${{ matrix.arduino-platform }}.fatfs.${{ env.WS_VERSION }}.merged_auto.bin
|
||
mv examples/Wippersnapper_demo/build/*/Wippersnapper_demo.ino.partitions.bin wippersnapper.${{ matrix.arduino-platform }}.fatfs.${{ env.WS_VERSION }}.partitions.bin
|
||
- name: Get Board Flash Parameters
|
||
id: get_board_json
|
||
run: |
|
||
board_name=${{ matrix.arduino-platform }}
|
||
# Remove '_noota' suffix if present
|
||
board_name=${board_name%_noota}
|
||
# Remove 'wippersnapper_' prefix if present
|
||
board_name=${board_name#wippersnapper_}
|
||
content=$(cat ws-boards/boards/${board_name//_/-}/definition.json)
|
||
{
|
||
echo 'boardJson<<EOF'
|
||
echo $content
|
||
echo EOF
|
||
} >> "$GITHUB_OUTPUT"
|
||
- name: fetch tinyuf2 combined.bin
|
||
run: |
|
||
BOARD_NAME="${{fromJson(steps.get_board_json.outputs.boardJson).bootloaderBoardName}}"
|
||
set +e
|
||
for attempt in 1 2 3; do
|
||
echo "Attempt $attempt: Fetching tinyuf2 release info for board $BOARD_NAME"
|
||
API_RESPONSE=$(curl --silent --fail https://api.github.com/repos/adafruit/tinyuf2/releases/latest)
|
||
if [ $? -ne 0 ]; then
|
||
echo "Attempt $attempt: curl failed to fetch release info."
|
||
if [ "$attempt" -eq 3 ]; then exit 1; else sleep $((60 + RANDOM % 40)); continue; fi
|
||
fi
|
||
DOWNLOAD_URL=$(echo "$API_RESPONSE" | jq -r '.assets[] | select(.browser_download_url | contains("tinyuf2-'$BOARD_NAME'-") and endswith(".zip")) | .browser_download_url // empty'); JQ_EXIT=$?
|
||
if [ $JQ_EXIT -ne 0 ] || [ -z "$DOWNLOAD_URL" ]; then
|
||
echo "Attempt $attempt: jq failed or no matching zip found."
|
||
if [ "$attempt" -eq 3 ]; then exit 1; else sleep $((60 + RANDOM % 40)); continue; fi
|
||
fi
|
||
echo "Attempt $attempt: Downloading $DOWNLOAD_URL"
|
||
wget "$DOWNLOAD_URL" -O tinyuf2.zip
|
||
if [ $? -eq 0 ]; then
|
||
unzip -o tinyuf2.zip -d .
|
||
if [ $? -ne 0 ]; then
|
||
echo "Attempt $attempt: unzip failed"
|
||
if [ "$attempt" -eq 3 ]; then exit 1; else sleep $((60 + RANDOM % 40)); continue; fi
|
||
fi
|
||
break
|
||
else
|
||
echo "Attempt $attempt: wget failed to download $DOWNLOAD_URL"
|
||
if [ "$attempt" -eq 3 ]; then exit 1; else sleep $((60 + RANDOM % 40)); fi
|
||
fi
|
||
done
|
||
set -e
|
||
- name: move partition and bootloader files for tinyuf2 (to match flash_args)
|
||
run: |
|
||
# Copy files where they're expected to make flash_args happy
|
||
mkdir bootloader
|
||
cp bootloader.bin bootloader/bootloader.bin
|
||
mkdir partition_table
|
||
cp partition-table.bin partition_table/partition-table.bin
|
||
|
||
- name: Create new_flash_args file from flash_args with added app bin + output file
|
||
run: |
|
||
# Create new_flash_args with esptool parameters first and output file
|
||
echo "--flash-mode ${{fromJson(steps.get_board_json.outputs.boardJson).esptool.flashMode}}" > new_flash_args
|
||
echo "--flash-freq ${{fromJson(steps.get_board_json.outputs.boardJson).esptool.flashFreq}}" >> new_flash_args
|
||
echo "--flash-size ${{fromJson(steps.get_board_json.outputs.boardJson).esptool.flashSize}}" >> new_flash_args
|
||
echo "-o wippersnapper.${{ matrix.arduino-platform }}.fatfs.${{ env.WS_VERSION }}.combined.bin" >> new_flash_args
|
||
|
||
# Append flash_args content to new_flash_args, skipping the first line
|
||
tail -n +2 flash_args >> new_flash_args
|
||
|
||
# Append main app to flash_args file
|
||
echo "0x10000 wippersnapper.${{ matrix.arduino-platform }}.fatfs.${{ env.WS_VERSION }}.bin" >> new_flash_args
|
||
- name: Check boot_app0 file existence (esp32sx built from core, not-source)
|
||
id: check_files
|
||
uses: andstor/file-existence-action@v3
|
||
with:
|
||
files: "/home/runner/.arduino15/packages/esp32/hardware/esp32/*/tools/partitions/boot_app0.bin"
|
||
- name: list arduino esp32 core files
|
||
if: steps.check_files.outputs.files_exists == 'true'
|
||
run: |
|
||
ls /home/runner/.arduino15/packages/esp32/hardware/esp32/*/tools/partitions
|
||
- name: list arduino esp32 bsp core files
|
||
if: steps.check_files.outputs.files_exists == 'false'
|
||
run: |
|
||
ls /home/runner/Arduino/hardware/espressif/esp32/tools/partitions
|
||
- name: boot_app0 file from arduino-cli core
|
||
if: steps.check_files.outputs.files_exists == 'true'
|
||
run: cp /home/runner/.arduino15/packages/esp32/hardware/esp32/*/tools/partitions/boot_app0.bin wippersnapper.${{ matrix.arduino-platform }}.fatfs.${{ env.WS_VERSION }}.boot_app0.bin
|
||
- name: boot_app0 file from esp32 source bsp
|
||
if: steps.check_files.outputs.files_exists == 'false'
|
||
run: cp /home/runner/Arduino/hardware/espressif/esp32/tools/partitions/boot_app0.bin wippersnapper.${{ matrix.arduino-platform }}.fatfs.${{ env.WS_VERSION }}.boot_app0.bin
|
||
- name: Copy boot_app0 file to ota_data_initial.bin (overwrite tinyuf2 boot preference)
|
||
run: cp wippersnapper.${{ matrix.arduino-platform }}.fatfs.${{ env.WS_VERSION }}.boot_app0.bin ota_data_initial.bin
|
||
- name: Create combined binary using Esptool merge-bin
|
||
run: |
|
||
echo ${{ steps.get_board_json.outputs.boardJson }}
|
||
echo ${{ fromJson(steps.get_board_json.outputs.boardJson) }}
|
||
python3 -m esptool --chip ${{fromJson(steps.get_board_json.outputs.boardJson).esptool.chip}} merge-bin @new_flash_args
|
||
- name: Zip build artifacts
|
||
run: |
|
||
zip -r wippersnapper.${{ matrix.arduino-platform }}.fatfs.${{ env.WS_VERSION }}.zip wippersnapper.${{ matrix.arduino-platform }}.fatfs.${{ env.WS_VERSION }}.*
|
||
- name: Upload build artifacts zip
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: build-files-${{ matrix.arduino-platform }}-zip
|
||
path: |
|
||
wippersnapper.${{ matrix.arduino-platform }}.fatfs.${{ env.WS_VERSION }}.zip
|
||
- name: Rename build artifacts to reflect the platform name
|
||
run: |
|
||
mv examples/*/build/*/Wippersnapper_demo.ino.uf2 wippersnapper.${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}.uf2
|
||
- name: Upload build artifact UF2 file
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: build-files-${{ matrix.arduino-platform }}-uf2
|
||
path: |
|
||
wippersnapper.${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}.uf2
|
||
|
||
build-esp32sx:
|
||
name: 🏗️ESP32-Sx
|
||
runs-on: ubuntu-latest
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
arduino-platform:
|
||
[
|
||
"metro_esp32s3",
|
||
"feather_esp32s3",
|
||
"qtpy_esp32s3",
|
||
]
|
||
steps:
|
||
- name: "skip if unwanted"
|
||
continue-on-error: true
|
||
if: |
|
||
github.event_name == 'workflow_dispatch' &&
|
||
github.event.inputs.board != '' &&
|
||
matrix.arduino-platform != github.event.inputs.board
|
||
run: |
|
||
echo "don't build this one!"; exit 1
|
||
- uses: actions/setup-python@v5
|
||
with:
|
||
python-version: "3.x"
|
||
- uses: actions/checkout@v4
|
||
- name: Get WipperSnapper version
|
||
run: |
|
||
git fetch --prune --unshallow --tags
|
||
git describe --dirty --tags
|
||
echo >>$GITHUB_ENV WS_VERSION=$(git describe --dirty --tags)
|
||
- uses: actions/checkout@v4
|
||
with:
|
||
repository: adafruit/ci-arduino
|
||
ref: ci-wippersnapper
|
||
path: ci
|
||
- name: Install CI-Arduino
|
||
run: bash ci/actions_install.sh
|
||
- name: Install extra Arduino libraries
|
||
run: |
|
||
git clone --quiet --branch v4.0.3 https://github.com/milesburton/Arduino-Temperature-Control-Library.git /home/runner/Arduino/libraries/Arduino-Temperature-Control-Library
|
||
git clone --quiet https://github.com/pstolarz/OneWireNg.git /home/runner/Arduino/libraries/OneWireNg
|
||
git clone --quiet https://github.com/adafruit/Adafruit_HX8357_Library.git /home/runner/Arduino/libraries/Adafruit_HX8357_Library
|
||
git clone --quiet https://github.com/adafruit/Adafruit_ILI9341.git /home/runner/Arduino/libraries/Adafruit_ILI9341
|
||
git clone --quiet https://github.com/adafruit/Adafruit_STMPE610.git /home/runner/Arduino/libraries/Adafruit_STMPE610
|
||
git clone --quiet https://github.com/adafruit/Adafruit-ST7735-Library.git /home/runner/Arduino/libraries/Adafruit-ST7735-Library
|
||
git clone --quiet https://github.com/adafruit/Adafruit_TouchScreen.git /home/runner/Arduino/libraries/Adafruit_TouchScreen
|
||
git clone --quiet https://github.com/adafruit/Adafruit_TinyUSB_Arduino /home/runner/Arduino/libraries/Adafruit_TinyUSB_Arduino
|
||
git clone --depth 1 --branch wippersnapper https://github.com/brentru/lvgl.git /home/runner/Arduino/libraries/lvgl
|
||
git clone --depth 1 --branch development https://github.com/brentru/Adafruit_LvGL_Glue.git /home/runner/Arduino/libraries/Adafruit_LittlevGL_Glue_Library
|
||
- name: Download stable Nanopb
|
||
id: download-nanopb
|
||
continue-on-error: true
|
||
run: |
|
||
wget https://jpa.kapsi.fi/nanopb/download/nanopb-0.4.8.tar.gz
|
||
- if: ${{ failure() || steps.download-nanopb.outcome != 'success' }}
|
||
name: Restore cached nanopb
|
||
id: cache-nanopb-restore
|
||
uses: actions/cache/restore@v4
|
||
env:
|
||
cache-name: cache-node-modules
|
||
with:
|
||
path: ./nanopb-0.4.8.tar.gz
|
||
key: nanopb-0.4.8.tar.gz
|
||
- if: ${{ steps.download-nanopb.outcome == 'success' }}
|
||
name: Save nanopb to cache
|
||
id: cache-nanopb-save
|
||
uses: actions/cache/save@v4
|
||
env:
|
||
cache-name: cache-node-modules
|
||
with:
|
||
path: ./nanopb-0.4.8.tar.gz
|
||
key: nanopb-0.4.8.tar.gz
|
||
- name: Install stable Nanopb
|
||
run: |
|
||
tar -xf nanopb-0.4.8.tar.gz
|
||
# Copy files to WipperSnapper's src/nanopb directory
|
||
cp nanopb/pb_common.* nanopb/pb_encode.* nanopb/pb_decode.* src/nanopb
|
||
mv nanopb/pb.h src/nanopb/nanopb.pb.h
|
||
- name: List all files in Adafruit_LittlevGL_Glue_Library folder
|
||
run: |
|
||
ls /home/runner/Arduino/libraries/Adafruit_LittlevGL_Glue_Library
|
||
- name: Copy lv_conf.h file in Adafruit_LittlevGL_Glue_Library to the arduino library folder
|
||
run: |
|
||
cp /home/runner/Arduino/libraries/Adafruit_LittlevGL_Glue_Library/lv_conf.h /home/runner/Arduino/libraries
|
||
- name: Build for ESP32-SX
|
||
run: |
|
||
python3 ci/build_platform.py ${{ matrix.arduino-platform }} --build_timeout 48000
|
||
- name: list files (tree)
|
||
run: |
|
||
tree
|
||
- name: Rename build artifacts to reflect the platform name
|
||
run: |
|
||
mv examples/*/build/*/Wippersnapper_demo.ino.uf2 wippersnapper.${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}.uf2
|
||
mv examples/*/build/*/Wippersnapper_demo.ino.bin wippersnapper.${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}.bin
|
||
- name: upload build artifacts
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: build-files-${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}
|
||
path: |
|
||
wippersnapper.${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}.uf2
|
||
wippersnapper.${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}.bin
|
||
|
||
build-esp32:
|
||
name: 🏗️ESP32/Cx
|
||
runs-on: ubuntu-latest
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
arduino-platform:
|
||
[
|
||
"wippersnapper_feather_esp32",
|
||
"qtpy_esp32",
|
||
"sparklemotionmini_esp32",
|
||
"sparklemotionstick_esp32",
|
||
"feather_esp32_v2",
|
||
"itsybitsy_esp32",
|
||
"dfrobot_beetle_esp32c3",
|
||
"wippersnapper_qtpy_esp32c3",
|
||
"wippersnapper_feather_esp32c6"
|
||
]
|
||
include:
|
||
- offset: "0x1000"
|
||
- offset: "0x0"
|
||
arduino-platform: "dfrobot_beetle_esp32c3"
|
||
- offset: "0x0"
|
||
arduino-platform: "wippersnapper_qtpy_esp32c3"
|
||
- offset: "0x0"
|
||
arduino-platform: "wippersnapper_feather_esp32c6"
|
||
steps:
|
||
- name: "skip if unwanted"
|
||
continue-on-error: true
|
||
if: |
|
||
github.event_name == 'workflow_dispatch' &&
|
||
github.event.inputs.board != '' &&
|
||
matrix.arduino-platform != github.event.inputs.board
|
||
run: |
|
||
echo "don't build this one!"; exit 1
|
||
- uses: actions/setup-python@v5
|
||
with:
|
||
python-version: "3.x"
|
||
- uses: actions/checkout@v4
|
||
- name: Get WipperSnapper version
|
||
run: |
|
||
git fetch --prune --unshallow --tags
|
||
git describe --dirty --tags
|
||
echo >>$GITHUB_ENV WS_VERSION=$(git describe --dirty --tags)
|
||
- uses: actions/checkout@v4
|
||
with:
|
||
repository: adafruit/ci-arduino
|
||
ref: ci-wippersnapper
|
||
path: ci
|
||
- name: Checkout Board Definitions
|
||
uses: actions/checkout@v4
|
||
with:
|
||
repository: adafruit/Wippersnapper_Boards
|
||
path: ws-boards
|
||
- name: Install CI-Arduino
|
||
run: bash ci/actions_install.sh
|
||
- name: Install extra Arduino libraries
|
||
run: |
|
||
git clone --quiet --branch v4.0.3 https://github.com/milesburton/Arduino-Temperature-Control-Library.git /home/runner/Arduino/libraries/Arduino-Temperature-Control-Library
|
||
git clone --quiet https://github.com/pstolarz/OneWireNg.git /home/runner/Arduino/libraries/OneWireNg
|
||
- name: Download stable Nanopb
|
||
id: download-nanopb
|
||
continue-on-error: true
|
||
run: |
|
||
wget https://jpa.kapsi.fi/nanopb/download/nanopb-0.4.8.tar.gz
|
||
- if: ${{ failure() || steps.download-nanopb.outcome != 'success' }}
|
||
name: Restore cached nanopb
|
||
id: cache-nanopb-restore
|
||
uses: actions/cache/restore@v4
|
||
env:
|
||
cache-name: cache-node-modules
|
||
with:
|
||
path: ./nanopb-0.4.8.tar.gz
|
||
key: nanopb-0.4.8.tar.gz
|
||
- if: ${{ steps.download-nanopb.outcome == 'success' }}
|
||
name: Save nanopb to cache
|
||
id: cache-nanopb-save
|
||
uses: actions/cache/save@v4
|
||
env:
|
||
cache-name: cache-node-modules
|
||
with:
|
||
path: ./nanopb-0.4.8.tar.gz
|
||
key: nanopb-0.4.8.tar.gz
|
||
- name: Install stable Nanopb
|
||
run: |
|
||
tar -xf nanopb-0.4.8.tar.gz
|
||
# Copy files to WipperSnapper's src/nanopb directory
|
||
cp nanopb/pb_common.* nanopb/pb_encode.* nanopb/pb_decode.* src/nanopb
|
||
mv nanopb/pb.h src/nanopb/nanopb.pb.h
|
||
- name: Install Dependencies
|
||
run: |
|
||
pip install esptool
|
||
- name: build ESP32 platforms
|
||
run: python3 ci/build_platform.py ${{ matrix.arduino-platform }} --build_timeout 48000
|
||
- name: Check artifacts
|
||
run: |
|
||
ls examples/Wippersnapper_demo/build/*
|
||
- name: Rename build artifacts to reflect the platform name
|
||
run: |
|
||
mv examples/Wippersnapper_demo/build/*/Wippersnapper_demo.ino.bin wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.bin
|
||
mv examples/Wippersnapper_demo/build/*/Wippersnapper_demo.ino.elf wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.elf
|
||
mv examples/Wippersnapper_demo/build/*/Wippersnapper_demo.ino.map wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.map
|
||
mv examples/Wippersnapper_demo/build/*/Wippersnapper_demo.ino.bootloader.bin wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.bootloader.bin
|
||
mv examples/Wippersnapper_demo/build/*/Wippersnapper_demo.ino.partitions.bin wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.partitions.bin
|
||
- name: Check boot_app0 file existence (esp32 built from core, not-source)
|
||
id: check_files
|
||
uses: andstor/file-existence-action@v3
|
||
with:
|
||
files: "/home/runner/.arduino15/packages/esp32/hardware/esp32/*/tools/partitions/boot_app0.bin"
|
||
- name: boot_app0 file from arduino-cli core
|
||
if: steps.check_files.outputs.files_exists == 'true'
|
||
run: mv /home/runner/.arduino15/packages/esp32/hardware/esp32/*/tools/partitions/boot_app0.bin wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.boot_app0.bin
|
||
- name: boot_app0 file from esp32 source bsp
|
||
if: steps.check_files.outputs.files_exists == 'false'
|
||
run: mv /home/runner/Arduino/hardware/espressif/esp32/tools/partitions/boot_app0.bin wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.boot_app0.bin
|
||
- name: Get Board Flash Parameters
|
||
id: get_board_json
|
||
run: |
|
||
board_name=${{ matrix.arduino-platform }}
|
||
# Remove '_noota' suffix if present
|
||
board_name=${board_name%_noota}
|
||
# Remove 'wippersnapper_' prefix if present
|
||
board_name=${board_name#wippersnapper_}
|
||
content=$(cat ws-boards/boards/${board_name//_/-}/definition.json)
|
||
{
|
||
echo 'boardJson<<EOF'
|
||
echo $content
|
||
echo EOF
|
||
} >> "$GITHUB_OUTPUT"
|
||
- name: Create combined binary using Esptool merge-bin
|
||
run: |
|
||
echo ${{ steps.get_board_json.outputs.boardJson }}
|
||
echo ${{ fromJson(steps.get_board_json.outputs.boardJson) }}
|
||
python3 -m esptool --chip ${{fromJson(steps.get_board_json.outputs.boardJson).esptool.chip}} merge-bin \
|
||
--flash-mode ${{fromJson(steps.get_board_json.outputs.boardJson).esptool.flashMode}} \
|
||
--flash-freq ${{fromJson(steps.get_board_json.outputs.boardJson).esptool.flashFreq}} \
|
||
--flash-size ${{fromJson(steps.get_board_json.outputs.boardJson).esptool.flashSize}} \
|
||
-o wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.combined.bin \
|
||
${{ matrix.offset }} wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.bootloader.bin \
|
||
0x8000 wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.partitions.bin \
|
||
0xe000 wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.boot_app0.bin \
|
||
0x10000 wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.bin
|
||
- name: Zip build artifacts
|
||
run: |
|
||
zip -r wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.zip wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.*
|
||
- name: upload build artifacts zip
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: build-files-${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}
|
||
path: |
|
||
wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.zip
|
||
|
||
build-samd:
|
||
name: 🏗️SAMD
|
||
runs-on: ubuntu-latest
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
arduino-platform:
|
||
[
|
||
"pyportal_tinyusb",
|
||
"pyportal_titano_tinyusb",
|
||
"metro_m4_airliftlite_tinyusb",
|
||
]
|
||
steps:
|
||
- name: "skip if unwanted"
|
||
continue-on-error: true
|
||
if: |
|
||
github.event_name == 'workflow_dispatch' &&
|
||
github.event.inputs.board != '' &&
|
||
matrix.arduino-platform != github.event.inputs.board
|
||
run: |
|
||
echo "don't build this one!"; exit 1
|
||
- uses: actions/setup-python@v5
|
||
with:
|
||
python-version: "3.x"
|
||
- uses: actions/checkout@v4
|
||
- name: Get WipperSnapper version
|
||
run: |
|
||
git fetch --prune --unshallow --tags
|
||
git describe --dirty --tags
|
||
echo >>$GITHUB_ENV WS_VERSION=$(git describe --dirty --tags)
|
||
- uses: actions/checkout@v4
|
||
with:
|
||
repository: adafruit/ci-arduino
|
||
ref: ci-wippersnapper
|
||
path: ci
|
||
- name: Install CI-Arduino
|
||
run: bash ci/actions_install.sh
|
||
# manually install Adafruit WiFiNINA library fork
|
||
- name: Install extra Arduino libraries
|
||
run: |
|
||
git clone --quiet https://github.com/adafruit/WiFiNINA.git /home/runner/Arduino/libraries/WiFiNINA
|
||
git clone --quiet --branch v4.0.3 https://github.com/milesburton/Arduino-Temperature-Control-Library.git /home/runner/Arduino/libraries/Arduino-Temperature-Control-Library
|
||
git clone --quiet https://github.com/PaulStoffregen/OneWire.git /home/runner/Arduino/libraries/OneWire
|
||
git clone --quiet https://github.com/adafruit/Adafruit_TinyUSB_Arduino /home/runner/Arduino/libraries/Adafruit_TinyUSB_Arduino
|
||
- name: Download stable Nanopb
|
||
id: download-nanopb
|
||
continue-on-error: true
|
||
run: |
|
||
wget https://jpa.kapsi.fi/nanopb/download/nanopb-0.4.8.tar.gz
|
||
- if: ${{ failure() || steps.download-nanopb.outcome != 'success' }}
|
||
name: Restore cached nanopb
|
||
id: cache-nanopb-restore
|
||
uses: actions/cache/restore@v4
|
||
env:
|
||
cache-name: cache-node-modules
|
||
with:
|
||
path: ./nanopb-0.4.8.tar.gz
|
||
key: nanopb-0.4.8.tar.gz
|
||
- if: ${{ steps.download-nanopb.outcome == 'success' }}
|
||
name: Save nanopb to cache
|
||
id: cache-nanopb-save
|
||
uses: actions/cache/save@v4
|
||
env:
|
||
cache-name: cache-node-modules
|
||
with:
|
||
path: ./nanopb-0.4.8.tar.gz
|
||
key: nanopb-0.4.8.tar.gz
|
||
- name: Install stable Nanopb
|
||
run: |
|
||
tar -xf nanopb-0.4.8.tar.gz
|
||
# Copy files to WipperSnapper's src/nanopb directory
|
||
cp nanopb/pb_common.* nanopb/pb_encode.* nanopb/pb_decode.* src/nanopb
|
||
mv nanopb/pb.h src/nanopb/nanopb.pb.h
|
||
- name: build SAMD platforms
|
||
run: python3 ci/build_platform.py ${{ matrix.arduino-platform }} --build_timeout 48000
|
||
- name: Rename build artifacts to reflect the platform name
|
||
run: |
|
||
mv examples/*/build/*/Wippersnapper_demo.ino.uf2 wippersnapper.${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}.uf2
|
||
mv examples/*/build/*/Wippersnapper_demo.ino.hex wippersnapper.${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}.hex
|
||
- name: upload build artifacts
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: build-files-${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}
|
||
path: |
|
||
wippersnapper.${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}.uf2
|
||
wippersnapper.${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}.hex
|
||
|
||
build-rp2040:
|
||
name: 🏗️RP2040
|
||
runs-on: ubuntu-latest
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
arduino-platform: ["picow_rp2040_tinyusb", "picow_rp2350_tinyusb", "fruit_jam_tinyusb"]
|
||
steps:
|
||
- name: "skip if unwanted"
|
||
continue-on-error: true
|
||
if: |
|
||
github.event_name == 'workflow_dispatch' &&
|
||
github.event.inputs.board != '' &&
|
||
matrix.arduino-platform != github.event.inputs.board
|
||
run: |
|
||
echo "don't build this one!"; exit 1
|
||
- uses: actions/setup-python@v5
|
||
with:
|
||
python-version: "3.x"
|
||
- uses: actions/checkout@v4
|
||
- name: Get WipperSnapper version
|
||
run: |
|
||
git fetch --prune --unshallow --tags
|
||
git describe --dirty --tags
|
||
echo >>$GITHUB_ENV WS_VERSION=$(git describe --dirty --tags)
|
||
- uses: actions/checkout@v4
|
||
with:
|
||
repository: adafruit/ci-arduino
|
||
ref: ci-wippersnapper
|
||
path: ci
|
||
- name: Install CI-Arduino
|
||
run: bash ci/actions_install.sh
|
||
# manually install OneWireNG/TempControlLib for OneWireNg (RP2040 Supported OneWire w/backwards compat.)
|
||
- name: Install extra Arduino libraries
|
||
run: |
|
||
git clone --quiet https://github.com/pstolarz/OneWireNg.git /home/runner/Arduino/libraries/OneWireNg
|
||
git clone --quiet https://github.com/pstolarz/Arduino-Temperature-Control-Library.git /home/runner/Arduino/libraries/Arduino-Temperature-Control-Library
|
||
git clone --quiet https://github.com/adafruit/Adafruit_TinyUSB_Arduino /home/runner/Arduino/libraries/Adafruit_TinyUSB_Arduino
|
||
- name: Download stable Nanopb
|
||
id: download-nanopb
|
||
continue-on-error: true
|
||
run: |
|
||
wget https://jpa.kapsi.fi/nanopb/download/nanopb-0.4.8.tar.gz
|
||
- if: ${{ failure() || steps.download-nanopb.outcome != 'success' }}
|
||
name: Restore cached nanopb
|
||
id: cache-nanopb-restore
|
||
uses: actions/cache/restore@v4
|
||
env:
|
||
cache-name: cache-node-modules
|
||
with:
|
||
path: ./nanopb-0.4.8.tar.gz
|
||
key: nanopb-0.4.8.tar.gz
|
||
- if: ${{ steps.download-nanopb.outcome == 'success' }}
|
||
name: Save nanopb to cache
|
||
id: cache-nanopb-save
|
||
uses: actions/cache/save@v4
|
||
env:
|
||
cache-name: cache-node-modules
|
||
with:
|
||
path: ./nanopb-0.4.8.tar.gz
|
||
key: nanopb-0.4.8.tar.gz
|
||
- name: Install stable Nanopb
|
||
run: |
|
||
tar -xf nanopb-0.4.8.tar.gz
|
||
# Copy files to WipperSnapper's src/nanopb directory
|
||
cp nanopb/pb_common.* nanopb/pb_encode.* nanopb/pb_decode.* src/nanopb
|
||
mv nanopb/pb.h src/nanopb/nanopb.pb.h
|
||
- name: build RP2040 platforms
|
||
run: python3 ci/build_platform.py ${{ matrix.arduino-platform }} --build_timeout 48000
|
||
- name: Rename build artifacts to reflect the platform name
|
||
run: |
|
||
mv examples/*/build/*/Wippersnapper_demo.ino.uf2 wippersnapper.${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}.uf2
|
||
- name: upload build artifacts
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: build-files-${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}
|
||
path: |
|
||
wippersnapper.${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}.uf2
|
||
|
||
build-esp8266:
|
||
name: 🏗️ESP8266
|
||
runs-on: ubuntu-latest
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
arduino-platform: ["feather_esp8266"]
|
||
steps:
|
||
- name: "skip if unwanted"
|
||
continue-on-error: true
|
||
if: |
|
||
github.event_name == 'workflow_dispatch' &&
|
||
github.event.inputs.board != '' &&
|
||
matrix.arduino-platform != github.event.inputs.board
|
||
run: |
|
||
echo "don't build this one!"; exit 1
|
||
- uses: actions/setup-python@v5
|
||
with:
|
||
python-version: "3.x"
|
||
- uses: actions/checkout@v4
|
||
- name: Get WipperSnapper version
|
||
run: |
|
||
git fetch --prune --unshallow --tags
|
||
git describe --dirty --tags
|
||
echo >>$GITHUB_ENV WS_VERSION=$(git describe --dirty --tags)
|
||
- uses: actions/checkout@v4
|
||
with:
|
||
repository: adafruit/ci-arduino
|
||
ref: ci-wippersnapper
|
||
path: ci
|
||
- name: Install CI-Arduino
|
||
run: bash ci/actions_install.sh
|
||
- name: Install extra Arduino library
|
||
run: |
|
||
git clone --quiet --branch v4.0.3 https://github.com/milesburton/Arduino-Temperature-Control-Library.git /home/runner/Arduino/libraries/Arduino-Temperature-Control-Library
|
||
git clone --quiet https://github.com/PaulStoffregen/OneWire.git /home/runner/Arduino/libraries/OneWire
|
||
- name: Download stable Nanopb
|
||
id: download-nanopb
|
||
continue-on-error: true
|
||
run: |
|
||
wget https://jpa.kapsi.fi/nanopb/download/nanopb-0.4.8.tar.gz
|
||
- if: ${{ failure() || steps.download-nanopb.outcome != 'success' }}
|
||
name: Restore cached nanopb
|
||
id: cache-nanopb-restore
|
||
uses: actions/cache/restore@v4
|
||
env:
|
||
cache-name: cache-node-modules
|
||
with:
|
||
path: ./nanopb-0.4.8.tar.gz
|
||
key: nanopb-0.4.8.tar.gz
|
||
- if: ${{ steps.download-nanopb.outcome == 'success' }}
|
||
name: Save nanopb to cache
|
||
id: cache-nanopb-save
|
||
uses: actions/cache/save@v4
|
||
env:
|
||
cache-name: cache-node-modules
|
||
with:
|
||
path: ./nanopb-0.4.8.tar.gz
|
||
key: nanopb-0.4.8.tar.gz
|
||
- name: Install stable Nanopb
|
||
run: |
|
||
tar -xf nanopb-0.4.8.tar.gz
|
||
# Copy files to WipperSnapper's src/nanopb directory
|
||
cp nanopb/pb_common.* nanopb/pb_encode.* nanopb/pb_decode.* src/nanopb
|
||
mv nanopb/pb.h src/nanopb/nanopb.pb.h
|
||
- name: build ESP8266 platforms
|
||
run: python3 ci/build_platform.py ${{ matrix.arduino-platform }} --build_timeout 48000
|
||
- name: list build artifacts
|
||
run: |
|
||
ls
|
||
ls examples/*
|
||
- name: Rename build artifacts to reflect the platform name
|
||
run: |
|
||
mv examples/*/build/*/Wippersnapper_demo.ino.bin wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.bin
|
||
mv examples/*/build/*/Wippersnapper_demo.ino.elf wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.elf
|
||
mv examples/*/build/*/Wippersnapper_demo.ino.map wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.map
|
||
- name: Zip build artifacts
|
||
run: |
|
||
zip -r wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.zip wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.*
|
||
- name: upload build artifacts zip
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: build-files-${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}
|
||
path: |
|
||
wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.zip
|
||
|
||
build-esp32sx-dev:
|
||
name: 🏗️ESP32-Sx(DEV)
|
||
runs-on: ubuntu-latest
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
arduino-platform:
|
||
[
|
||
"esp32s3_devkitc_1_n8_debug",
|
||
"feather_esp32s2_debug",
|
||
"feather_esp32s2_tft_debug",
|
||
"feather_esp32s3_debug",
|
||
"feather_esp32s3_4mbflash_2mbpsram_debug",
|
||
"feather_esp32s3_tft_debug",
|
||
"wippersnapper_feather_esp32s3_reverse_tft_debug",
|
||
"metroesp32s2_debug",
|
||
"metro_esp32s3_debug",
|
||
]
|
||
steps:
|
||
- name: "skip if unwanted"
|
||
continue-on-error: true
|
||
if: |
|
||
github.event_name == 'workflow_dispatch' &&
|
||
github.event.inputs.board != '' &&
|
||
matrix.arduino-platform != github.event.inputs.board
|
||
run: |
|
||
echo "don't build this one!"; exit 1
|
||
- uses: actions/setup-python@v5
|
||
with:
|
||
python-version: "3.x"
|
||
- uses: actions/checkout@v4
|
||
- name: Get WipperSnapper version
|
||
run: |
|
||
git fetch --prune --unshallow --tags
|
||
git describe --dirty --tags
|
||
echo >>$GITHUB_ENV WS_VERSION=$(git describe --dirty --tags)
|
||
- uses: actions/checkout@v4
|
||
with:
|
||
repository: adafruit/ci-arduino
|
||
ref: ci-wippersnapper
|
||
path: ci
|
||
- name: Install CI-Arduino
|
||
run: bash ci/actions_install.sh
|
||
- name: Install extra Arduino libraries
|
||
run: |
|
||
git clone --quiet --branch v4.0.3 https://github.com/milesburton/Arduino-Temperature-Control-Library.git /home/runner/Arduino/libraries/Arduino-Temperature-Control-Library
|
||
git clone --quiet https://github.com/pstolarz/OneWireNg.git /home/runner/Arduino/libraries/OneWireNg
|
||
git clone --quiet https://github.com/adafruit/Adafruit_HX8357_Library.git /home/runner/Arduino/libraries/Adafruit_HX8357_Library
|
||
git clone --quiet https://github.com/adafruit/Adafruit_ILI9341.git /home/runner/Arduino/libraries/Adafruit_ILI9341
|
||
git clone --quiet https://github.com/adafruit/Adafruit_STMPE610.git /home/runner/Arduino/libraries/Adafruit_STMPE610
|
||
git clone --quiet https://github.com/adafruit/Adafruit-ST7735-Library.git /home/runner/Arduino/libraries/Adafruit-ST7735-Library
|
||
git clone --quiet https://github.com/adafruit/Adafruit_TouchScreen.git /home/runner/Arduino/libraries/Adafruit_TouchScreen
|
||
git clone --quiet https://github.com/adafruit/Adafruit_TinyUSB_Arduino /home/runner/Arduino/libraries/Adafruit_TinyUSB_Arduino
|
||
git clone --depth 1 --branch wippersnapper https://github.com/brentru/lvgl.git /home/runner/Arduino/libraries/lvgl
|
||
git clone --depth 1 --branch development https://github.com/brentru/Adafruit_LvGL_Glue.git /home/runner/Arduino/libraries/Adafruit_LittlevGL_Glue_Library
|
||
- name: Download stable Nanopb
|
||
id: download-nanopb
|
||
continue-on-error: true
|
||
run: |
|
||
wget https://jpa.kapsi.fi/nanopb/download/nanopb-0.4.8.tar.gz
|
||
- if: ${{ failure() || steps.download-nanopb.outcome != 'success' }}
|
||
name: Restore cached nanopb
|
||
id: cache-nanopb-restore
|
||
uses: actions/cache/restore@v4
|
||
env:
|
||
cache-name: cache-node-modules
|
||
with:
|
||
path: ./nanopb-0.4.8.tar.gz
|
||
key: nanopb-0.4.8.tar.gz
|
||
- if: ${{ steps.download-nanopb.outcome == 'success' }}
|
||
name: Save nanopb to cache
|
||
id: cache-nanopb-save
|
||
uses: actions/cache/save@v4
|
||
env:
|
||
cache-name: cache-node-modules
|
||
with:
|
||
path: ./nanopb-0.4.8.tar.gz
|
||
key: nanopb-0.4.8.tar.gz
|
||
- name: Install stable Nanopb
|
||
run: |
|
||
tar -xf nanopb-0.4.8.tar.gz
|
||
# Copy files to WipperSnapper's src/nanopb directory
|
||
cp nanopb/pb_common.* nanopb/pb_encode.* nanopb/pb_decode.* src/nanopb
|
||
mv nanopb/pb.h src/nanopb/nanopb.pb.h
|
||
- name: List all files in Adafruit_LittlevGL_Glue_Library folder
|
||
run: |
|
||
ls /home/runner/Arduino/libraries/Adafruit_LittlevGL_Glue_Library
|
||
- name: Copy lv_conf.h file in Adafruit_LittlevGL_Glue_Library to the arduino library folder
|
||
run: |
|
||
cp /home/runner/Arduino/libraries/Adafruit_LittlevGL_Glue_Library/lv_conf.h /home/runner/Arduino/libraries
|
||
- name: Build for ESP32-SX
|
||
run: python3 ci/build_platform.py ${{ matrix.arduino-platform }} --build_timeout 48000
|
||
- name: list
|
||
run: |
|
||
ls
|
||
ls -R examples/*/build/
|
||
- name: Rename build artifacts to reflect the platform name
|
||
run: |
|
||
mv examples/*/build/*/wippersnapper_debug.ino.uf2 wippersnapper.${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}.uf2
|
||
mv examples/*/build/*/wippersnapper_debug.ino.bin wippersnapper.${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}.bin
|
||
- name: upload build artifacts
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: build-files-dev-${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}
|
||
path: |
|
||
wippersnapper.${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}.uf2
|
||
wippersnapper.${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}.bin
|
||
|
||
build-esp32-dev:
|
||
name: 🏗️ESP32/Cx(DEV)
|
||
runs-on: ubuntu-latest
|
||
strategy:
|
||
fail-fast: false
|
||
matrix:
|
||
arduino-platform:
|
||
[
|
||
"wippersnapper_feather_esp32c6_debug",
|
||
]
|
||
include:
|
||
- offset: "0x1000"
|
||
- offset: "0x0"
|
||
arduino-platform: "wippersnapper_feather_esp32c6_debug"
|
||
steps:
|
||
- name: "skip if unwanted"
|
||
continue-on-error: true
|
||
if: |
|
||
github.event_name == 'workflow_dispatch' &&
|
||
github.event.inputs.board != '' &&
|
||
matrix.arduino-platform != github.event.inputs.board
|
||
run: |
|
||
echo "don't build this one!"; exit 1
|
||
- uses: actions/setup-python@v5
|
||
with:
|
||
python-version: "3.x"
|
||
- uses: actions/checkout@v4
|
||
- name: Get WipperSnapper version
|
||
run: |
|
||
git fetch --prune --unshallow --tags
|
||
git describe --dirty --tags
|
||
echo >>$GITHUB_ENV WS_VERSION=$(git describe --dirty --tags)
|
||
- uses: actions/checkout@v4
|
||
with:
|
||
repository: adafruit/ci-arduino
|
||
ref: ci-wippersnapper
|
||
path: ci
|
||
- name: Checkout Board Definitions
|
||
uses: actions/checkout@v4
|
||
with:
|
||
repository: adafruit/Wippersnapper_Boards
|
||
path: ws-boards
|
||
- name: Install CI-Arduino
|
||
run: bash ci/actions_install.sh
|
||
- name: Install extra Arduino libraries
|
||
run: |
|
||
git clone --quiet --branch v4.0.3 https://github.com/milesburton/Arduino-Temperature-Control-Library.git /home/runner/Arduino/libraries/Arduino-Temperature-Control-Library
|
||
git clone --quiet https://github.com/pstolarz/OneWireNg.git /home/runner/Arduino/libraries/OneWireNg
|
||
- name: Download stable Nanopb
|
||
id: download-nanopb
|
||
continue-on-error: true
|
||
run: |
|
||
wget https://jpa.kapsi.fi/nanopb/download/nanopb-0.4.8.tar.gz
|
||
- if: ${{ failure() || steps.download-nanopb.outcome != 'success' }}
|
||
name: Restore cached nanopb
|
||
id: cache-nanopb-restore
|
||
uses: actions/cache/restore@v4
|
||
env:
|
||
cache-name: cache-node-modules
|
||
with:
|
||
path: ./nanopb-0.4.8.tar.gz
|
||
key: nanopb-0.4.8.tar.gz
|
||
- if: ${{ steps.download-nanopb.outcome == 'success' }}
|
||
name: Save nanopb to cache
|
||
id: cache-nanopb-save
|
||
uses: actions/cache/save@v4
|
||
env:
|
||
cache-name: cache-node-modules
|
||
with:
|
||
path: ./nanopb-0.4.8.tar.gz
|
||
key: nanopb-0.4.8.tar.gz
|
||
- name: Install stable Nanopb
|
||
run: |
|
||
tar -xf nanopb-0.4.8.tar.gz
|
||
# Copy files to WipperSnapper's src/nanopb directory
|
||
cp nanopb/pb_common.* nanopb/pb_encode.* nanopb/pb_decode.* src/nanopb
|
||
mv nanopb/pb.h src/nanopb/nanopb.pb.h
|
||
- name: Install Dependencies
|
||
run: |
|
||
pip3 install esptool
|
||
- name: build ESP32 platforms
|
||
run: python3 ci/build_platform.py ${{ matrix.arduino-platform }} --build_timeout 48000
|
||
- name: Check artifacts
|
||
run: |
|
||
ls examples/wippersnapper_debug/build/*
|
||
- name: Rename build artifacts to reflect the platform name
|
||
run: |
|
||
mv examples/wippersnapper_debug/build/*/wippersnapper_debug.ino.bin wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.bin
|
||
mv examples/wippersnapper_debug/build/*/wippersnapper_debug.ino.elf wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.elf
|
||
mv examples/wippersnapper_debug/build/*/wippersnapper_debug.ino.map wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.map
|
||
mv examples/wippersnapper_debug/build/*/wippersnapper_debug.ino.bootloader.bin wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.bootloader.bin
|
||
mv examples/wippersnapper_debug/build/*/wippersnapper_debug.ino.partitions.bin wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.partitions.bin
|
||
- name: Check boot_app0 file existence (esp32 built from core, not-source)
|
||
id: check_files
|
||
uses: andstor/file-existence-action@v3
|
||
with:
|
||
files: "/home/runner/.arduino15/packages/esp32/hardware/esp32/*/tools/partitions/boot_app0.bin"
|
||
- name: boot_app0 file from arduino-cli core
|
||
if: steps.check_files.outputs.files_exists == 'true'
|
||
run: mv /home/runner/.arduino15/packages/esp32/hardware/esp32/*/tools/partitions/boot_app0.bin wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.boot_app0.bin
|
||
- name: boot_app0 file from esp32 source bsp
|
||
if: steps.check_files.outputs.files_exists == 'false'
|
||
run: mv /home/runner/Arduino/hardware/espressif/esp32/tools/partitions/boot_app0.bin wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.boot_app0.bin
|
||
- name: Get Board Flash Parameters
|
||
id: get_board_json
|
||
run: |
|
||
board_name=${{ matrix.arduino-platform }}
|
||
# Remove '_noota' suffix if present
|
||
board_name=${board_name%_noota}
|
||
# Remove '_debug' suffix if present
|
||
board_name=${board_name%_debug}
|
||
# Remove 'wippersnapper_' prefix if present
|
||
board_name=${board_name#wippersnapper_}
|
||
content=$(cat ws-boards/boards/${board_name//_/-}/definition.json)
|
||
{
|
||
echo 'boardJson<<EOF'
|
||
echo $content
|
||
echo EOF
|
||
} >> "$GITHUB_OUTPUT"
|
||
- name: Create combined binary using Esptool merge-bin
|
||
run: |
|
||
echo ${{ steps.get_board_json.outputs.boardJson }}
|
||
echo ${{ fromJson(steps.get_board_json.outputs.boardJson) }}
|
||
python3 -m esptool --chip ${{fromJson(steps.get_board_json.outputs.boardJson).esptool.chip}} merge-bin \
|
||
--flash-mode ${{fromJson(steps.get_board_json.outputs.boardJson).esptool.flashMode}} \
|
||
--flash-freq ${{fromJson(steps.get_board_json.outputs.boardJson).esptool.flashFreq}} \
|
||
--flash-size ${{fromJson(steps.get_board_json.outputs.boardJson).esptool.flashSize}} \
|
||
-o wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.combined.bin \
|
||
${{ matrix.offset }} wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.bootloader.bin \
|
||
0x8000 wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.partitions.bin \
|
||
0xe000 wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.boot_app0.bin \
|
||
0x10000 wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.bin
|
||
- name: Zip build artifacts
|
||
run: |
|
||
zip -r wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.zip wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.*
|
||
- name: upload build artifacts zip
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: build-files-dev-${{ matrix.arduino-platform }}.${{ env.WS_VERSION }}
|
||
path: |
|
||
wippersnapper.${{ matrix.arduino-platform }}.littlefs.${{ env.WS_VERSION }}.zip
|
||
|
||
merge-job-build-files:
|
||
name: Merge Artifacts for build-files
|
||
runs-on: ubuntu-latest
|
||
needs: [build-esp32sx-esptool, build-esp32sx, build-esp32, build-esp8266, build-samd, build-rp2040]
|
||
|
||
steps:
|
||
- name: Merge Artifacts from Builds
|
||
uses: actions/upload-artifact/merge@v4
|
||
with:
|
||
name: build-files
|
||
pattern: build-files-!(dev)-*
|
||
delete-merged: true
|
||
|
||
merge-job2:
|
||
name: Merge Artifacts for build-files-dev
|
||
runs-on: ubuntu-latest
|
||
needs: [build-esp32sx-dev, build-esp32-dev]
|
||
|
||
steps:
|
||
- name: Merge Artifacts from Dev Builds
|
||
uses: actions/upload-artifact/merge@v4
|
||
with:
|
||
name: build-files-dev
|
||
pattern: build-files-dev-*
|
||
delete-merged: true
|
||
|
||
clang_and_doxy:
|
||
name: 🔎Clang & Doxygen
|
||
runs-on: ubuntu-latest
|
||
needs:
|
||
[
|
||
build-samd,
|
||
build-esp32,
|
||
build-esp32sx,
|
||
build-esp8266,
|
||
build-rp2040,
|
||
]
|
||
steps:
|
||
- uses: actions/setup-python@v5
|
||
with:
|
||
python-version: "3.x"
|
||
- uses: actions/checkout@v4
|
||
|
||
- uses: actions/checkout@v4
|
||
with:
|
||
repository: adafruit/ci-arduino
|
||
ref: ci-wippersnapper
|
||
path: ci
|
||
- name: pre-install
|
||
run: bash ci/actions_install.sh
|
||
|
||
- name: clang
|
||
run: python3 ci/run-clang-format.py -r -e "ci/*" -e "bin/*" -e src/nanopb -e src/wippersnapper -e src/pb.h -e src/provisioning/tinyusb src/
|
||
|
||
- name: doxygen
|
||
env:
|
||
GH_REPO_TOKEN: ${{ secrets.GH_REPO_TOKEN }}
|
||
PRETTYNAME: "Adafruit.io WipperSnapper Library"
|
||
run: bash ci/doxy_gen_and_deploy.sh
|