diff --git a/.github/workflows/arduino_ci.yml b/.github/workflows/arduino_ci.yml index 78c483b..4c6b2ec 100644 --- a/.github/workflows/arduino_ci.yml +++ b/.github/workflows/arduino_ci.yml @@ -54,42 +54,45 @@ jobs: done; export mvar=$(jq --compact-output --null-input '$ARGS.positional' --args -- "${data[@]}") echo "matrix_example=$mvar" - echo matrix_example="$mvar" >> $GITHUB_OUTPUT + + # 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" >> $GITHUB_OUTPUT + 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 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 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 + # 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 + # 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 + # 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 + # echo "repo=$REPO" >> $GITHUB_OUTPUT + # echo "project=$PROJECTNAME" >> $GITHUB_OUTPUT # # Cache python pip downloads if we have one for faster access # - name: Cache pip @@ -122,247 +125,247 @@ jobs: - ############################################################################# - # 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 \ No newline at end of file + # ############################################################################# + # # 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 \ No newline at end of file