Check json output #426
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Arduino CI | |
# on which event should we start push, pull request or schedule dispatches | |
on: | |
- push | |
- pull_request | |
# This template runes multiple workflows | |
jobs: | |
############################################################################# | |
# This action sets common variables for the flow and | |
# identifies the examples to compile | |
setup: | |
# we run this on self hosted runner, use labels to be more specific | |
# add specific names if there are some, otherwise self-hosted, X64, Linux are the default ones | |
runs-on: | |
- self-hosted | |
- X64 | |
- Linux | |
steps: | |
# checkout the latest github action code | |
- name: Checkout actions | |
uses: actions/checkout@v4 | |
# checkout the latest arduino-cli compiler | |
- name: Setup Arduino CLI | |
uses: arduino/setup-arduino-cli@master | |
# Update the arduino code. Attention this does not setup XMC packages as this are set inside the self hosted runner | |
# the arduino board support packages can be updated automatically | |
# the XMC board support package is only linked inside the self hosted runner, which allows | |
# to use none official and beta versions | |
- name: Install/Update Arduino Platform | |
run: | | |
arduino-cli core update-index | |
arduino-cli core install "arduino:avr" | |
arduino-cli core install "infineon:xmc" | |
# Fetch variables and move them to the GITHUB_OUTPUT and fetch HIL information | |
- id: set-matrix | |
run: | | |
export $(xfp-dev arduino workspace-setup project-name) | |
cd $GITHUB_WORKSPACE/src/framework/arduino | |
declare -a data | |
for x in examples/*; | |
do | |
data+=($x); | |
done; | |
export mvar=$(jq --compact-output --null-input '$ARGS.positional' --args -- "${data[@]}") | |
echo "matrix_example=$mvar" | |
# echo matrix_example="$mvar" >> $GITHUB_OUTPUT | |
cd $GITHUB_WORKSPACE/.github | |
mfqbn=$(cat ./fqbn.yml | shyaml get-values fqbn | awk '{printf " --fqbn=%s", $0}') | |
echo "fqbn_example=$mfqbn" | |
# echo "fqbn_example=$mfqbn" >> $GITHUB_OUTPUT | |
# export bad=`cat ./fqbn.yml | shyaml get-value hil.baud` | |
# echo "baud_hil=$bad" >> $GITHUB_OUTPUT | |
# export exp=$(jq --compact-output --null-input '$ARGS.positional' --args -- "`cat ./fqbn.yml | shyaml get-value hil.example`") | |
# echo "matrix_hil=$exp" >> $GITHUB_OUTPUT | |
# export fqb=$(jq --compact-output --null-input '$ARGS.positional' --args -- "`cat ./fqbn.yml | shyaml get-value hil.fqbn`") | |
# echo "fqbn_hil=$fqb" >> $GITHUB_OUTPUT | |
# cd /opt/runner_support/ | |
# REPO="$(basename "$GITHUB_REPOSITORY")" | |
# ./py_checkusb.py --switch repo --namelist $REPO --onoff on | |
# declare -a typelist | |
# declare -a seriallist | |
# mapfile -t typelist < <(./py_checkusb.py --repo ${REPO} --full --batch) | |
# for TYPE in "${typelist[@]}"; | |
# do | |
# declare -a serials | |
# readarray -td, serials <<<"$TYPE" | |
# seriallist+=(${serials[2]}) | |
# done; | |
# export mser=$(jq --compact-output --null-input '$ARGS.positional' --args -- "${seriallist[@]}") | |
# echo "serials_hil=$mser" | |
# echo serials_hil="$mser" >> $GITHUB_OUTPUT | |
# echo "repo=$REPO" >> $GITHUB_OUTPUT | |
# echo "project=$PROJECTNAME" >> $GITHUB_OUTPUT | |
# # Cache python pip downloads if we have one for faster access | |
# - name: Cache pip | |
# uses: actions/cache@v4 | |
# with: | |
# path: ~/.cache/pip | |
# key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} | |
# restore-keys: ${{ runner.os }}-pip- | |
# # Ditto, cache PlatformIO downloads for faster acces during compilation | |
# - name: Cache PlatformIO | |
# uses: actions/cache@v4 | |
# with: | |
# path: ~/.platformio | |
# key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} | |
# Connect the GITHUB_OUTPUT to the variables and the workflow output mechanism | |
outputs: | |
repo: ${{ steps.set-matrix.outputs.repo }} | |
project: ${{ steps.set-matrix.outputs.project }} | |
matrix_example: ${{ steps.set-matrix.outputs.matrix_example }} | |
fqbn_example: ${{ steps.set-matrix.outputs.fqbn_example }} | |
matrix_hil: ${{ steps.set-matrix.outputs.matrix_hil }} | |
baud_hil: ${{ steps.set-matrix.outputs.baud_hil }} | |
fqbn_hil: ${{ steps.set-matrix.outputs.fqbn_hil }} | |
serials_hil: ${{ steps.set-matrix.outputs.serials_hil }} | |
# ############################################################################# | |
# # The build job compiles the sample code for different boards | |
# build-ard: | |
# # wait on first setup run before starting main function | |
# needs: setup | |
# # we run this on self hosted runner, use labels to be more specific | |
# # add specific names if there are some, otherwise self-hosted, X64, Linux are the default ones | |
# runs-on: | |
# - self-hosted | |
# - X64 | |
# - Linux | |
# # which combination of sample code and boards should run | |
# # for this example of 2 sample codes and 3 boards a total of 2x3=6 runners have to work. | |
# # if we have only 4 runner then these 4 are started and the last 2 are waiting until they can start | |
# strategy: | |
# matrix: | |
# # List of all examples in the lib to compile | |
# example: ${{ fromJson(needs.setup.outputs.matrix_example) }} | |
# # These are the steps which should run for each combination of fqbn and example code | |
# steps: | |
# # checkout the latest github action code | |
# - name: Checkout actions | |
# uses: actions/checkout@v4 | |
# # checkout the latest arduino-cli compiler | |
# - name: Setup Arduino CLI | |
# uses: arduino/setup-arduino-cli@master | |
# # prepare the runner for the repo data | |
# # setup links inside the self hosted runner for correct directory setup | |
# # REPO is the base name of the library which is linked to the right directory structure | |
# # check wether the .arduino15 packages dir is available | |
# # ln -sf $GITHUB_WORKSPACE/$REPO/build/ $HOME/Arduino/libraries/$REPO | |
# - name: Set and check environment, install repos | |
# run: | | |
# export REPO=${{ needs.setup.outputs.repo }} | |
# ln -sfn /opt/XMC-for-Arduino ~/.arduino15/packages/Infineon | |
# mkdir -p "$HOME/Arduino/libraries" | |
# cd $GITHUB_WORKSPACE/ | |
# xfp-dev arduino workspace-setup --path $HOME/Arduino/libraries | |
# # Compile the sample code for the selected board and board support package with the arduino compiler | |
# # ln -sf $GITHUB_WORKSPACE/ $HOME/Arduino/libraries/$REPO | |
# - name: Compile Sketch | |
# run: | | |
# export TMPDIR=$HOME/tmp | |
# mkdir -p $TMPDIR | |
# cd $HOME/Arduino/libraries/${{ needs.setup.outputs.project }} | |
# arduino-cli compile ${{ needs.setup.outputs.fqbn_example }} --libraries="." --libraries="$HOME/Arduino/libraries/." ${{ matrix.example }} --verbose | |
# ############################################################################# | |
# # The build job compiles the sample code for different boards | |
# build-plt: | |
# # wait on first setup run before starting main function | |
# needs: setup | |
# # we run this on self hosted runner, use labels to be more specific | |
# # add specific names if there are some, otherwise self-hosted, X64, Linux are the default ones | |
# runs-on: | |
# - self-hosted | |
# - X64 | |
# - Linux | |
# # which combination of sample code and boards should run | |
# # for this example of 2 sample codes and 3 boards a total of 2x3=6 runners have to work. | |
# # if we have only 4 runner then these 4 are started and the last 2 are waiting until they can start | |
# strategy: | |
# matrix: | |
# # List of all examples in the lib to compile | |
# example: ${{ fromJson(needs.setup.outputs.matrix_example) }} | |
# steps: | |
# # checkout the latest github action code | |
# - name: Checkout actions | |
# uses: actions/checkout@v4 | |
# # checkout the latest arduino-cli compiler | |
# - name: Setup Arduino CLI | |
# uses: arduino/setup-arduino-cli@master | |
# # prepare the runner for the repo data | |
# # setup links inside the self hosted runner for correct directory setup | |
# # REPO is the base name of the library which is linked to the right directory structure | |
# # check wether the .arduino15 packages dir is available | |
# # export REPO=${{ needs.setup.outputs.repo }} | |
# # ln -sf $GITHUB_WORKSPACE/$REPO/build/ $HOME/Arduino/libraries/$REPO | |
# - name: Set and check environment, install repos | |
# run: | | |
# ln -sfn /opt/XMC-for-Arduino ~/.arduino15/packages/Infineon | |
# mkdir -p "$HOME/Arduino/libraries" | |
# cd $GITHUB_WORKSPACE/ | |
# xfp-dev arduino workspace-setup --path $HOME/Arduino/libraries | |
# - name: Install PlatformIO | |
# run: | | |
# python -m pip install --upgrade pip | |
# pip install --upgrade platformio | |
# platformio platform install -f infineonxmc | |
# platformio platform install -f atmelavr | |
# # PlatformIO uses python for compiling and it does multiple board compiles | |
# # at once. PlatformIO is used here to check compatibility, but is not needed for the the flash step | |
# - name: Run PlatformIO | |
# run: | | |
# cd $HOME/Arduino/libraries/${{ needs.setup.outputs.project }} | |
# # boards="${{ needs.setup.outputs.fqbn_example }}" | |
# # export board=`echo $boards | perl -pe 's/fqbn\=\w+:\w+:/board /gx'` | |
# # export board=`echo $board | perl -ne 'print lc'` | |
# # pio ci --lib="." ${board} --project-option="lib_deps=Wire" | |
# pio ci --lib="." --board=uno --project-option="lib_deps=Wire" | |
# env: | |
# PLATFORMIO_CI_SRC: ${{ matrix.example }} | |
# ############################################################################# | |
# # This step allows HIL (Hardware in the loop), therefore | |
# # is searches for the given board/sensor combination and tries to find the actual port | |
# # on the self hosted runner. (see documentation for the board2port finder) | |
# flash: | |
# # We need a successful build before we can run the deploy | |
# needs: [setup, build-ard] | |
# # we run this on self hosted runner, use labels to be more specific | |
# # add specific names if there are some, otherwise self-hosted, X64, Linux are the default ones | |
# runs-on: | |
# - self-hosted | |
# - X64 | |
# - Linux | |
# strategy: | |
# # flashing only one by one | |
# max-parallel: 1 | |
# # the code to flash | |
# matrix: | |
# # the code to flash | |
# example: ${{ fromJson(needs.setup.outputs.matrix_hil) }} | |
# # board packages we want to run | |
# # attention the matrix spans over the fqbn not platform so that we can choose different boards | |
# # this example compiles each sample code for Arduino Uno, XMC2Go and XMC4700 boards | |
# fqbn: ${{ fromJson(needs.setup.outputs.fqbn_hil) }} | |
# # the serials of the hardware boards | |
# serials: ${{ fromJson(needs.setup.outputs.serials_hil) }} | |
# # These are the steps which should run for each combination of fqbn and example code | |
# steps: | |
# # Compile the code which we want to flash | |
# # REPO: the name of the repository which is also the link name | |
# # check/set the arduino15 package library | |
# # link the repo to the correct place for compiling under arduino-cli | |
# # compile the code with the arduino-cli and export the binary files for flashing | |
# # ln -sf $GITHUB_WORKSPACE/ $HOME/Arduino/libraries/$REPO | |
# - name: Compile Sketch | |
# run: | | |
# export TMPDIR=$HOME/tmp | |
# mkdir -p $TMPDIR | |
# ln -sfn /opt/XMC-for-Arduino ~/.arduino15/packages/Infineon | |
# mkdir -p "$HOME/Arduino/libraries" | |
# cd $HOME/Arduino/libraries/${{ needs.setup.outputs.project }} | |
# arduino-cli compile --clean --log --warnings all \ | |
# --fqbn ${{ matrix.fqbn }} \ | |
# --libraries="." \ | |
# --libraries="$HOME/Arduino/libraries/." ${{ matrix.example }} \ | |
# --export-binaries | |
# # Flashes the compiled HEX file onto the selected MCU | |
# # REPO: the name of the repository which is also the link name | |
# # HEXNAME: the board depended name of the HEX files | |
# # SERIAL_NUM: the unique serial number of the hardware board according the board2port.yaml | |
# # DEVICE: the flashing device according the board2port.yaml | |
# # PORT: real PORT name of the attached hardware based on the SERIAL_NUM | |
# # use the python based XMC flasher | |
# - name: Flash | |
# run: | | |
# cd /opt/runner_support/ | |
# export PROJECT=${{ needs.setup.outputs.project }} | |
# export HEXNAME=`tr ':' '.' <<<"${{ matrix.fqbn }}"` | |
# declare -a devicelist | |
# devicelist+=($(./py_checkusb.py --serial ${{ matrix.serials }} --batch)) | |
# export DEVICELIST=${devicelist[@]} | |
# for line in "${devicelist[@]}"; do | |
# if [[ $line =~ $device[1] ]]; then | |
# readarray -td, device <<<"$line" | |
# export SERIAL_NUM=${device[0]} | |
# export DEVICE=${device[2]} | |
# export TYPE=${device[6]} | |
# export PORT=`./find_usb.sh $SERIAL_NUM` | |
# echo "Build HEX name: " $HEXNAME | |
# echo "Port Serial Num: " $SERIAL_NUM | |
# echo "Flash device: " $DEVICE | |
# echo "Port found: " $PORT | |
# echo "Board type name: " $TYPE | |
# cd $HOME | |
# python ~/.arduino15/packages/Infineon/hardware/xmc/3.2.0/tools/xmc-flasher.py upload -d $DEVICE -p $PORT -f ~/Arduino/libraries/${PROJECT}/${{ matrix.example }}/build/${HEXNAME}/*.hex | |
# fi | |
# done | |
# - name: Monitor | |
# run: | | |
# cd /opt/runner_support/ | |
# echo "${{ env.DEVICELIST}}" | |
# declare -a devicelist | |
# devicelist+=($(./py_checkusb.py --serial ${{ matrix.serials }} --batch)) | |
# for line in "${devicelist[@]}"; do | |
# if [[ $line =~ $device[1] ]]; then | |
# readarray -td, device <<<"$line" | |
# export SERIAL_NUM=${device[0]} | |
# export DEVICE=${device[2]} | |
# export TYPE=${device[6]} | |
# export PORT=`./find_usb.sh $SERIAL_NUM` | |
# ./py_console.py --port $PORT --baud ${{ needs.setup.outputs.baud_hil }} --timeout 10 | |
# fi | |
# done | |
# - name: HIL switch off | |
# run: | | |
# cd /opt/runner_support/ | |
# REPO="$(basename "$GITHUB_REPOSITORY")" | |
# python py_checkusb.py --switch repo --namelist ${REPO} --onoff off | |
# # - name: Upload binaries | |
# # uses: actions/upload-artifact@v4 | |
# # with: | |
# # name: ${{ env.sensor }} | |
# # path: ~/Arduino/libraries/${{ env.repo }}/build/build/${{ env.hexname }}/* | |
# # if-no-files-found: ignore |