Skip to content

Simplyfy yaml handling test #432

Simplyfy yaml handling test

Simplyfy yaml handling test #432

Workflow file for this run

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")"
echo "repo=$REPO" >> $GITHUB_OUTPUT
# ./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[@]}")
mser=`./py_checkusb.py --repo ${REPO} --list serial --json`
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]
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
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/
echo "Serials: ${{ matrix.serials }}"
# 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