parent
fa9e059005
commit
e360c2eef8
2 changed files with 151 additions and 0 deletions
90
.github/scripts/find_new_boards.sh
vendored
Executable file
90
.github/scripts/find_new_boards.sh
vendored
Executable file
|
|
@ -0,0 +1,90 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Get inputs from command
|
||||
owner_repository=$1
|
||||
pr_number=$2
|
||||
|
||||
url="https://api.github.com/repos/$owner_repository/pulls/$pr_number/files"
|
||||
echo $url
|
||||
|
||||
# Get changes in boards.txt file from PR
|
||||
Patch=$(curl $url | jq -r '.[] | select(.filename == "boards.txt") | .patch ')
|
||||
|
||||
# Extract only changed lines number and count
|
||||
substring_patch=$(echo "$Patch" | grep -o '@@[^@]*@@')
|
||||
|
||||
params_array=()
|
||||
|
||||
IFS=$'\n' read -d '' -ra params <<< $(echo "$substring_patch" | grep -oE '[-+][0-9]+,[0-9]+')
|
||||
|
||||
for param in "${params[@]}"
|
||||
do
|
||||
echo "The parameter is $param"
|
||||
params_array+=("$param")
|
||||
done
|
||||
|
||||
boards_array=()
|
||||
previous_board=""
|
||||
file="boards.txt"
|
||||
|
||||
# Loop through boards.txt file and extract all boards that were added
|
||||
for (( c=0; c<${#params_array[@]}; c+=2 ))
|
||||
do
|
||||
deletion_count=$( echo "${params_array[c]}" | cut -d',' -f2 | cut -d' ' -f1 )
|
||||
addition_line=$( echo "${params_array[c+1]}" | cut -d'+' -f2 | cut -d',' -f1 )
|
||||
addition_count=$( echo "${params_array[c+1]}" | cut -d'+' -f2 | cut -d',' -f2 | cut -d' ' -f1 )
|
||||
addition_end=$(($addition_line+$addition_count))
|
||||
|
||||
addition_line=$(($addition_line + 3))
|
||||
addition_end=$(($addition_end - $deletion_count))
|
||||
|
||||
echo $addition_line
|
||||
echo $addition_end
|
||||
|
||||
i=0
|
||||
|
||||
while read -r line
|
||||
do
|
||||
i=$((i+1))
|
||||
if [ $i -lt $addition_line ]
|
||||
then
|
||||
continue
|
||||
elif [ $i -gt $addition_end ]
|
||||
then
|
||||
break
|
||||
fi
|
||||
board_name=$(echo "$line" | cut -d '.' -f1 | cut -d '#' -f1)
|
||||
if [ "$board_name" != "" ]
|
||||
then
|
||||
if [ "$board_name" != "$previous_board" ]
|
||||
then
|
||||
boards_array+=("espressif:esp32:$board_name")
|
||||
previous_board="$board_name"
|
||||
echo "Added 'espressif:esp32:$board_name' to array"
|
||||
fi
|
||||
fi
|
||||
done < "$file"
|
||||
done
|
||||
|
||||
# Create JSON like string with all boards found and pass it to env variable
|
||||
board_count=${#boards_array[@]}
|
||||
|
||||
if [ $board_count -gt 0 ]
|
||||
then
|
||||
json_matrix='{"fqbn": ['
|
||||
for board in ${boards_array[@]}
|
||||
do
|
||||
json_matrix+='"'$board'"'
|
||||
if [ $board_count -gt 1 ]
|
||||
then
|
||||
json_matrix+=","
|
||||
fi
|
||||
board_count=$(($board_count - 1))
|
||||
done
|
||||
json_matrix+=']}'
|
||||
|
||||
echo $json_matrix
|
||||
echo "FQBNS=${json_matrix}" >> $GITHUB_ENV
|
||||
else
|
||||
echo "FQBNS=''" >> $GITHUB_ENV
|
||||
fi
|
||||
61
.github/workflows/boards.yml
vendored
Normal file
61
.github/workflows/boards.yml
vendored
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
name: New Board Test
|
||||
|
||||
# The workflow will run on schedule and labeled pull requests
|
||||
on:
|
||||
pull_request:
|
||||
|
||||
env:
|
||||
# It's convenient to set variables for values used multiple times in the workflow
|
||||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
||||
|
||||
jobs:
|
||||
find-boards:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
outputs:
|
||||
fqbns: ${{ env.FQBNS }}
|
||||
|
||||
steps:
|
||||
# This step makes the contents of the repository available to the workflow
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Setup jq
|
||||
uses: dcarbone/install-jq-action@v1.0.1
|
||||
|
||||
- name: Get board name
|
||||
run:
|
||||
bash .github/scripts/find_new_boards.sh ${{ github.repository }} ${{github.event.number}}
|
||||
|
||||
test-boards:
|
||||
needs: find-boards
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ needs.changes.outputs.services != '' }}
|
||||
|
||||
env:
|
||||
REPOSITORY: |
|
||||
- source-path: '.'
|
||||
name: "espressif:esp32"
|
||||
|
||||
strategy:
|
||||
matrix: ${{ fromJson(needs.find-boards.outputs.fqbns) }}
|
||||
|
||||
steps:
|
||||
# This step makes the contents of the repository available to the workflow
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Compile sketch
|
||||
uses: P-R-O-C-H-Y/compile-sketches@main
|
||||
with:
|
||||
platforms: |
|
||||
${{ env.REPOSITORY }}
|
||||
fqbn: ${{ matrix.fqbn }}
|
||||
use-json-file: false
|
||||
enable-deltas-report: false
|
||||
enable-warnings-report: false
|
||||
cli-compile-flags: |
|
||||
- --warnings="all"
|
||||
exit-on-fail: true
|
||||
sketch-paths:
|
||||
"- ./libraries/ESP32/examples/ChipID/GetChipID/GetChipID.ino"
|
||||
Loading…
Reference in a new issue