Skip to content

Test 5, fetch test names #48

Test 5, fetch test names

Test 5, fetch test names #48

name: Hil library test
# on which event should we start push, pull request or schedule dispatches
on:
- push
- pull_request
env:
TEST_VERSION: 1.0.0
# 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
# arduino-cli core install "infineon:xmc"
- name: Install/Update Arduino Platform
run: |
arduino-cli core update-index
arduino-cli core install "arduino:avr"
# Fetch variables and move them to the GITHUB_OUTPUT and fetch HIL information
- id: startup
run: |
# find libraries with makefile
declare -a data
cd $GITHUB_WORKSPACE
for x in libraries/*;
do
if [ -f $x/Makefile ]; then
data+=($x);
fi;
done;
export libraries=$(jq --compact-output --null-input '$ARGS.positional' --args -- "${data[@]}")
echo libraries="$libraries" >> $GITHUB_OUTPUT
# switch on the HIL
cd /opt/runner_support/
REPO="$(basename "$GITHUB_REPOSITORY")"
./py_checkusb.py --switch repo --namelist $REPO --onoff on
# set the xfp
hil=$(./py_checkusb.py --readyaml $GITHUB_WORKSPACE/.github/hil-tests.yaml --json)
echo "hil=${hil}" >> $GITHUB_OUTPUT
# Connect the GITHUB_OUTPUT to the variables and the workflow output mechanism
outputs:
libraries: ${{ steps.startup.outputs.libraries }}
hil: ${{ steps.startup.outputs.hil }}
#############################################################################
# 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]
# 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
# do not stop if a single job fails
continue-on-error: true
strategy:
# the code to flash
matrix:
# the serials of the hardware boards
libraries: ${{ fromJson(needs.setup.outputs.libraries) }}
# These are the steps which should run for each combination of fqbn and example code
steps:
- name: Environment
run: |
cd $HOME
rm -rf ~/.arduino15/packages/Infineon/hardware/xmc/*
ln -s $GITHUB_WORKSPACE ~/.arduino15/packages/Infineon/hardware/xmc/$TEST_VERSION
REPO="$(basename "$GITHUB_REPOSITORY")"
LIBRARY="$(basename ${{ matrix.libraries }} )"
echo "repo=$REPO" >> $GITHUB_ENV
echo "library=$LIBRARY" >> $GITHUB_ENV
echo "version=$TEST_VERSION" >> $GITHUB_ENV
echo "Repo " $REPO
echo "Libraries " $LIBRARY
echo "Version " ${TEST_VERSION}
# Build the test code with make and flash it to the board
- name: Build
run: |
cd /opt/runner_support/
hil=${{ toJson(needs.setup.outputs.hil) }}
lib=$(./py_checkusb.py --type ${{ env.library }} --json)
readarray -t fqbns < <(echo $lib | jq ".\"${{ env.library }}\" | keys[]" -r --compact-output)
echo "LIB: $lib"
echo "FQBN: ${fqbns[@]}"
echo "HIL: $hil"
# loop over all fqbn in the library
cd ~/.arduino15/packages/Infineon/hardware/xmc/$TEST_VERSION/libraries/${{ env.library }} # change this
for fqbn in "${fqbns[@]}"; do
readarray -t serials < <(echo $lib | jq ".\"${{ env.library }}\".\"${fqbn}\" | keys[]" -r --compact-output)
portsS=()
# loop over all serials and fetch the ports
for serial in "${serials[@]}"; do
ports+=/opt/runner_support/find_usb.sh $serial
done
# readarray -t tests < <(echo $hil | jq ".\"${{ env.library }}\".\"${fqbn}\" -r --compact-output)
echo "fqbn: $fqbn"
# echo "Tests: ${tests[@]}"
echo "Serials: ${serials[@]}"
echo "Ports: ${ports[@]}"
#make UNITY_PATH=/opt/runner_support/Unity FQBN=${fqbn} PORT=${{ env.port }} ????
#make FQBN=Infineon:xmc:XMC1400_XMC2GO PORT=COM42 UNITY_PATH=/home/zhanglinjing/repo/Unity CAN_connected_node2 monitor
#make FQBN=Infineon:xmc:XMC1400_XMC2GO PORT=COM41 UNITY_PATH=/home/zhanglinjing/repo/Unity CAN_connected_node1 monitor
done
#############################################################################
# Switch off the HIL after all tests are done
post:
# we run this no matter if before fails
if: always()
# wait on first setup run before starting main function
needs: [setup, flash]
# 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:
- name: Switch off HIL
run: |
cd /opt/runner_support/
REPO="$(basename "$GITHUB_REPOSITORY")"
./py_checkusb.py --switch repo --namelist $REPO --onoff off