373 lines
15 KiB
YAML
373 lines
15 KiB
YAML
name: Arduino CI Build (3 of 4) Latest wolfSSL for Local Examples
|
|
|
|
#
|
|
# Test local Arduino examples with clone of LATEST github master branch wolfssl
|
|
#
|
|
# These 4 workflows across 3 repos are interdependent for the current $REPO_OWNER:
|
|
#
|
|
# Arduino CI Build 1: https://github.com/$REPO_OWNER/wolfssl # /.github/workflows/arduino.yml
|
|
# - Builds Arduino library from local clone of wolfssl master branch
|
|
# - Fetches examples from https://github.com/$REPO_OWNER/wolfssl-examples
|
|
#
|
|
# Arduino CI Build 2: https://github.com/$REPO_OWNER/wolfssl-examples # /.github/workflows/arduino-release.yml
|
|
# - Tests examples based on latest published release of Arduino library, NOT latest on wolfssl github.
|
|
# - Should be identical to Arduino CI Build 3 in every way but wolfssl install.
|
|
# - Copies only compile script from wolfssl-examples
|
|
# - Builds local examples
|
|
# - No other repos used
|
|
#
|
|
# THIS Arduino CI Build 3: https://github.com/$REPO_OWNER/wolfssl-examples # /.github/workflows/arduino.yml
|
|
# - Fetches current wolfSSL from https://github.com/$REPO_OWNER/wolfssl
|
|
# - Creates an updated Arduino library
|
|
# - Compiles local examples
|
|
# - Contains the source of `compile-all-examples.sh` and respective board-list.txt
|
|
#
|
|
# Arduino CI Build 4: https://github.com/$REPO_OWNER/Arduino-wolfssl # /.github/workflows/arduino.yml
|
|
# - Assembles and installs an updated Arduino wolfssl library from LOCAL wolfssl master source
|
|
# - Copies only compile script copied from wolfssl-examples
|
|
# - Builds local examples
|
|
# - No other repos used
|
|
#
|
|
#
|
|
# ** NOTE TO MAINTAINERS **
|
|
#
|
|
# Consider using winmerge or similar tool to keep the 4 arduino[-release].yml files in relative sync.
|
|
# Although there are some specific differences, most of the contents are otherwise identical.
|
|
#
|
|
# See https://github.com/wolfSSL/Arduino-wolfSSL
|
|
#
|
|
# To test locally:
|
|
# cd [your WOLFSSL_ROOT], e.g. cd /mnt/c/workspace/wolfssl-$USER
|
|
# [optional checkout] e.g. git checkout tags/v5.8.4-stable
|
|
# pushd ./IDE/ARDUINO
|
|
# export ARDUINO_ROOT="$HOME/Arduino/libraries"
|
|
# ./wolfssl-arduino.sh INSTALL
|
|
# cd [your WOLFSSL_EXAMPLES_ROOT] e.g. /mnt/c/workspace/wolfssl-examples-$USER
|
|
#
|
|
|
|
# START OF COMMON SECTION
|
|
on:
|
|
push:
|
|
branches: [ '**', 'master', 'main', 'release/**' ]
|
|
paths:
|
|
# Specific to this Arduino CI Build (3 of 4)
|
|
- 'Arduino/**'
|
|
- '.github/workflows/arduino.yml'
|
|
pull_request:
|
|
branches: [ '**' ]
|
|
paths:
|
|
# Specific to this Arduino CI Build (3 of 4)
|
|
- 'Arduino/**'
|
|
- '.github/workflows/arduino.yml'
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
# Same branch push cancels other jobs. Other PR branches untouched
|
|
|
|
group: ${{ github.workflow }}-${{ github.ref_name }}
|
|
cancel-in-progress: true
|
|
|
|
# END OF COMMON SECTION
|
|
|
|
jobs:
|
|
build:
|
|
name: on FQBN (${{ matrix.fqbn }})
|
|
if: github.repository_owner == 'wolfssl'
|
|
runs-on: ubuntu-latest
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
fqbn:
|
|
# When editing this list, be sure to also edit file: board_list.txt
|
|
# The compile-all-examples.sh optionally takes a FQBN parameter to
|
|
# optionally compile all examples ONLY for the respective fully qualified board name.
|
|
# See https://github.com/wolfSSL/wolfssl-examples/blob/master/Arduino/sketches/board_list.txt
|
|
|
|
- arduino:avr:ethernet
|
|
- arduino:avr:leonardoeth
|
|
- arduino:avr:mega
|
|
- arduino:avr:nano
|
|
- arduino:avr:uno
|
|
- arduino:avr:yun
|
|
- arduino:samd:mkrwifi1010
|
|
- arduino:samd:mkr1000
|
|
- arduino:samd:mkrfox1200
|
|
- arduino:mbed_edge:edge_control
|
|
- arduino:mbed_nano:nanorp2040connect
|
|
- arduino:mbed_portenta:envie_m7
|
|
- arduino:mbed_portenta:portenta_x8
|
|
- arduino:renesas_uno:unor4wifi
|
|
- arduino:sam:arduino_due_x
|
|
- arduino:samd:arduino_zero_native
|
|
- arduino:samd:tian
|
|
- esp32:esp32:esp32
|
|
- esp32:esp32:esp32s2
|
|
- esp32:esp32:esp32s3
|
|
- esp32:esp32:esp32c3
|
|
- esp32:esp32:esp32c6
|
|
- esp32:esp32:esp32h2
|
|
- esp8266:esp8266:generic
|
|
- teensy:avr:teensy40
|
|
|
|
# Not yet supported, not in standard library
|
|
# - esp32:esp32:nano_nora
|
|
|
|
# End strategy matrix
|
|
env:
|
|
REPO_OWNER: ${{ github.repository_owner }}
|
|
|
|
steps:
|
|
- name: Checkout Repository
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Install Arduino CLI
|
|
run: |
|
|
# Script to fetch and run install.sh from arduino/arduino-cli
|
|
|
|
# The install script will test to see if the recently installed apps in the path
|
|
# So set it up in advance:
|
|
mkdir -p "${PWD}/bin"
|
|
echo "${PWD}/bin" >> $GITHUB_PATH
|
|
|
|
# Sets the install directory to a consistent path at the repo root.
|
|
ROOT_BIN="$GITHUB_WORKSPACE/bin"
|
|
|
|
# Ensures that BINDIR exists before the installer runs
|
|
mkdir -p "$ROOT_BIN"
|
|
|
|
# Save as a global environment variable
|
|
echo "$ROOT_BIN" >> "$GITHUB_PATH"
|
|
|
|
# Download and run install script from Arduino:
|
|
# -S show errors; -L follow redirects; -v Verbose
|
|
set +e # don't abort on error
|
|
set -o pipefail
|
|
|
|
curl -vSL --retry 5 --retry-delay 10 \
|
|
https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh \
|
|
| sh -x
|
|
rc=$?
|
|
c_rc=${PIPESTATUS[0]} # curl's exit code
|
|
s_rc=${PIPESTATUS[1]} # sh's exit code
|
|
|
|
set -e # restore default abort-on-error
|
|
|
|
# If there was a curl error, we have our own local copy that is more reliable and can add our own debugging
|
|
if [ "$rc" -ne 0 ]; then
|
|
echo "Primary install failed: curl=$c_rc, sh=$s_rc. Falling back..." >&2
|
|
echo "Using local copy of arduino_install.sh"
|
|
pushd ./Arduino/sketches
|
|
chmod +x ./arduino_install.sh
|
|
|
|
# Mimic curl install, does not use current directory:
|
|
BINDIR="$ROOT_BIN" sh -x ./arduino_install.sh
|
|
popd
|
|
else
|
|
echo "Alternative install script not needed."
|
|
fi
|
|
|
|
- name: Confirm Arduino CLI Install
|
|
run: arduino-cli version
|
|
|
|
- name: Derive CORE_ID (vendor:arch from FQBN)
|
|
run: |
|
|
CORE_ID="$(echo '${{ matrix.fqbn }}' | cut -d: -f1-2)"
|
|
echo "CORE_ID=$CORE_ID" >> "$GITHUB_ENV"
|
|
|
|
- name: Setup Arduino CLI
|
|
run: |
|
|
arduino-cli config init
|
|
|
|
# wait 10 minutes for big downloads (or use 0 for no limit)
|
|
arduino-cli config set network.connection_timeout 600s
|
|
|
|
arduino-cli config add board_manager.additional_urls https://www.pjrc.com/teensy/package_teensy_index.json
|
|
arduino-cli config add board_manager.additional_urls https://arduino.esp8266.com/stable/package_esp8266com_index.json
|
|
arduino-cli core update-index
|
|
|
|
echo "CORE_ID: $CORE_ID"
|
|
arduino-cli core install "$CORE_ID"
|
|
|
|
# The above is instead of:
|
|
# arduino-cli core install esp32:esp32 # ESP32
|
|
# arduino-cli core install arduino:avr # Arduino Uno, Mega, Nano
|
|
# arduino-cli core install arduino:sam # Arduino Due
|
|
# arduino-cli core install arduino:samd # Arduino Zero
|
|
# arduino-cli core install teensy:avr # PJRC Teensy
|
|
# arduino-cli core install esp8266:esp8266 # ESP8266
|
|
# arduino-cli core install arduino:mbed_nano # nanorp2040connect
|
|
# arduino-cli core install arduino:mbed_portenta # portenta_h7_m7
|
|
# arduino-cli core install arduino:mbed_edge
|
|
# arduino-cli core install arduino:renesas_uno
|
|
|
|
# For reference:
|
|
|
|
# mbed nano not yet tested
|
|
# sudo "/home/$USER/.arduino15/packages/arduino/hardware/mbed_nano/4.2.4/post_install.sh"
|
|
|
|
# Always install networking (not part of FQBN matrix)
|
|
# The first one also creates directory: /home/runner/Arduino/libraries
|
|
arduino-cli lib install "ArduinoJson" # Example dependency
|
|
arduino-cli lib install "WiFiNINA" # ARDUINO_SAMD_NANO_33_IOT
|
|
arduino-cli lib install "Ethernet" # Install Ethernet library
|
|
arduino-cli lib install "Bridge" # Pseudo-network for things like arduino:samd:tian
|
|
|
|
- name: Set Job Environment Variables
|
|
run: |
|
|
# Script to assign some common environment variables after everything is installed
|
|
|
|
ICON_OK=$(printf "\xE2\x9C\x85")
|
|
ICON_FAIL=$(printf "\xE2\x9D\x8C")
|
|
|
|
echo "GITHUB_WORK=$(realpath "$GITHUB_WORKSPACE/../..")" >> "$GITHUB_ENV"
|
|
echo "ARDUINO_ROOT=$(realpath "$HOME/Arduino/libraries")" >> "$GITHUB_ENV"
|
|
|
|
# Show repo-specific location of examples:
|
|
echo "WOLFSSL_EXAMPLES_ROOT=$(realpath "./Arduino/sketches")" >> "$GITHUB_ENV"
|
|
|
|
# Show predefined summary:
|
|
echo "GITHUB_WORKSPACE = $GITHUB_WORKSPACE"
|
|
|
|
# Show assigned build:env values (e.g. "wolfssl", "gojimmpi" or other owners):
|
|
echo "REPO_OWNER = $REPO_OWNER"
|
|
|
|
# Show our custom values:
|
|
echo "GITHUB_WORK = $GITHUB_WORK"
|
|
echo "ARDUINO_ROOT = $ARDUINO_ROOT"
|
|
|
|
# WOLFSSL_EXAMPLES_ROOT is the report root, not example location
|
|
echo "WOLFSSL_EXAMPLES_ROOT = $WOLFSSL_EXAMPLES_ROOT"
|
|
|
|
- name: Cache Arduino Packages
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
~/.arduino15
|
|
~/.cache/arduino
|
|
~/.arduino15/staging
|
|
|
|
# Arduino libraries
|
|
# Specific to Arduino CI Build (2 of 4) Arduinbo Release wolfSSL for Local Examples
|
|
# Include all libraries, as the latest Arduino-wolfSSL will only change upon release.
|
|
~/Arduino/libraries
|
|
# Ensure wolfssl is not cached, we're always using the latest. See separate cache.
|
|
!~/Arduino/libraries/wolfssl
|
|
key: arduino-${{ runner.os }}-${{ env.CORE_ID }}-${{ hashFiles('Arduino/sketches/board_list.txt') }}
|
|
|
|
restore-keys: |
|
|
arduino-${{ runner.os }}-${{ env.CORE_ID }}-
|
|
arduino-${{ runner.os }}-
|
|
|
|
- name: Show wolfssl-examples
|
|
run: |
|
|
# The examples are local in this wolfssl-example repo, but should have been copied to library, above
|
|
ls ./Arduino/sketches
|
|
|
|
# end Show wolfssl-examples
|
|
|
|
- name: Shallow Clone wolfssl
|
|
run: |
|
|
# Clone the latest wolfssl to use for building examples
|
|
|
|
git clone --depth 1 https://github.com/$REPO_OWNER/wolfssl.git
|
|
|
|
# Assign your PR branch for testing here:
|
|
THIS_PR_BRANCH=""
|
|
|
|
echo "REPO_OWNER=$REPO_OWNER"
|
|
|
|
# If a branch is assigned for current repo user, checkout
|
|
if [ -z "$THIS_PR_BRANCH" ]; then
|
|
echo "Assign your PR branch name for testing"
|
|
else
|
|
# fetch open PR changes
|
|
pushd wolfssl
|
|
git remote add $REPO_OWNER https://github.com/$REPO_OWNER/wolfssl.git
|
|
git fetch --depth 1 "$REPO_OWNER" "$THIS_PR_BRANCH"
|
|
git checkout "$THIS_PR_BRANCH"
|
|
popd
|
|
fi
|
|
# end wolfssl source
|
|
|
|
- name: Get wolfSSL Commit
|
|
id: wolfsha
|
|
run: echo "sha=$(git -C wolfssl rev-parse --short HEAD)" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Cache wolfSSL Arduino library
|
|
id: cache-wolfssl
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ${{ env.ARDUINO_ROOT }}/wolfssl
|
|
key: wolfssl-lib-${{ runner.os }}-${{ steps.wolfsha.outputs.sha }}-${{ hashFiles('wolfssl/IDE/ARDUINO/wolfssl-arduino.sh') }}-${{ hashFiles('Arduino/sketches/**') }}
|
|
|
|
- name: Install wolfSSL Arduino library
|
|
if: steps.cache-wolfssl.outputs.cache-hit != 'true'
|
|
run: |
|
|
# Install wolfssl via wolfssl-arduino.sh install script
|
|
|
|
echo "Installing wolfSSL Arduino library (no cache hit)."
|
|
rm -rf "$ARDUINO_ROOT/wolfssl"
|
|
|
|
# Even though the examples are in this library, we'll test as installed for library publishing.
|
|
# When WOLFSSL_EXAMPLES_ROOT is set, the examples will be copied from that path to the published library.
|
|
# WOLFSSL_EXAMPLES_ROOT is the repo root, not example directory location (./Arduino/sketches) within.
|
|
export WOLFSSL_EXAMPLES_ROOT=$(realpath "./")
|
|
|
|
# Confirm ARDUINO_ROOT to install the wolfSSL library, see above "Set job environment variables"
|
|
echo "PWD = $PWD"
|
|
echo "ARDUINO_ROOT = $ARDUINO_ROOT"
|
|
echo "WOLFSSL_EXAMPLES_ROOT = $WOLFSSL_EXAMPLES_ROOT"
|
|
ls ./Arduino/sketches
|
|
|
|
if [ -z "$WOLFSSL_EXAMPLES_ROOT" ]; then
|
|
echo "$ICON_FAIL ERROR: Tests should be performed on in-place examples. WOLFSSL_EXAMPLES_ROOT is blank"
|
|
fi
|
|
|
|
# The install script is in the wolfssl repo, in /IDE/ARDUINO directory.
|
|
# Only explicit source code is copied to the Arduino library.
|
|
# Edit wolfssl-arduino.sh as needed for new examples.
|
|
pushd ./wolfssl/IDE/ARDUINO
|
|
chmod +x ./wolfssl-arduino.sh
|
|
bash ./wolfssl-arduino.sh INSTALL # Install wolfSSL as Arduino library in ARDUINO_ROOT
|
|
popd
|
|
|
|
echo "Examples installed in $ARDUINO_ROOT/wolfssl/examples"
|
|
ls "$ARDUINO_ROOT/wolfssl/examples" -al
|
|
|
|
# End Install wolfSSL Arduino library
|
|
|
|
- name: List installed Arduino libraries
|
|
run: arduino-cli lib list
|
|
|
|
# This will fail with Arduino published wolfSSL v5.7.6 and older
|
|
# as the examples moved. See https://github.com/wolfSSL/wolfssl/pull/8514
|
|
#
|
|
- name: Compile Arduino Sketches for Various Boards
|
|
run: |
|
|
# Call the compile-all-examples.sh script to compile all the examples for each of the fqbn names in the local copy of board_list.txt
|
|
|
|
echo "Current directory = $PWD"
|
|
echo "ARDUINO_ROOT = $ARDUINO_ROOT"
|
|
echo "WOLFSSL_EXAMPLES_ROOT = $WOLFSSL_EXAMPLES_ROOT"
|
|
echo "FQBN = ${{ matrix.fqbn }}"
|
|
|
|
echo "Change directory to Arduino examples..."
|
|
pushd ./Arduino/sketches
|
|
chmod +x ./compile-all-examples.sh
|
|
|
|
# The script expects all the examples to be in the current directory.
|
|
# So copy from local directory to newly installed wolfssl arduino library to compile there.
|
|
cp ./compile-all-examples.sh "$ARDUINO_ROOT/wolfssl/examples/compile-all-examples.sh"
|
|
cp ./board_list.txt "$ARDUINO_ROOT/wolfssl/examples/board_list.txt"
|
|
|
|
# Compile the Arduino library examples in-place. All examples compiled for FQBN
|
|
# The respective FQBN board, examples, and optional exclusions must be in board_list.txt
|
|
pushd "$ARDUINO_ROOT/wolfssl/examples/"
|
|
echo "PWD=$PWD"
|
|
./compile-all-examples.sh ./board_list.txt "${{ matrix.fqbn }}"
|
|
popd
|
|
popd
|
|
|
|
# End Compile Arduino Sketches for Various Boards
|