1
+ #! /bin/bash
2
+
3
+ # Get inputs from command
4
+ owner_repository=$1
5
+ pr_number=$2
6
+
7
+ url=" https://api.github.com/repos/$owner_repository /pulls/$pr_number /files"
8
+ echo $url
9
+
10
+ # Get changes in boards.txt file from PR
11
+ Patch=$( curl $url | jq -r ' .[] | select(.filename == "boards.txt") | .patch ' )
12
+
13
+ # Extract only changed lines number and count
14
+ substring_patch=$( echo " $Patch " | grep -o ' @@[^@]*@@' )
15
+
16
+ params_array=()
17
+
18
+ IFS=$' \n ' read -d ' ' -ra params <<< $( echo " $substring_patch " | grep -oE ' [-+][0-9]+,[0-9]+' )
19
+
20
+ for param in " ${params[@]} "
21
+ do
22
+ echo " The parameter is $param "
23
+ params_array+=(" $param " )
24
+ done
25
+
26
+ boards_array=()
27
+ previous_board=" "
28
+ file=" boards.txt"
29
+
30
+ # Loop through boards.txt file and extract all boards that were added
31
+ for (( c= 0 ; c< ${# params_array[@]} ; c+= 2 ))
32
+ do
33
+ deletion_count=$( echo " ${params_array[c]} " | cut -d' ,' -f2 | cut -d' ' -f1 )
34
+ addition_line=$( echo " ${params_array[c+1]} " | cut -d' +' -f2 | cut -d' ,' -f1 )
35
+ addition_count=$( echo " ${params_array[c+1]} " | cut -d' +' -f2 | cut -d' ,' -f2 | cut -d' ' -f1 )
36
+ addition_end=$(( $addition_line + $addition_count ))
37
+
38
+ addition_line=$(( $addition_line + 3 ))
39
+ addition_end=$(( $addition_end - $deletion_count ))
40
+
41
+ echo $addition_line
42
+ echo $addition_end
43
+
44
+ i=0
45
+
46
+ while read -r line
47
+ do
48
+ i=$(( i+ 1 ))
49
+ if [ $i -lt $addition_line ]
50
+ then
51
+ continue
52
+ elif [ $i -gt $addition_end ]
53
+ then
54
+ break
55
+ fi
56
+ board_name=$( echo " $line " | cut -d ' .' -f1 | cut -d ' #' -f1)
57
+ if [ " $board_name " != " " ]
58
+ then
59
+ if [ " $board_name " != " $previous_board " ]
60
+ then
61
+ boards_array+=(" espressif:esp32:$board_name " )
62
+ previous_board=" $board_name "
63
+ echo " Added 'espressif:esp32:$board_name ' to array"
64
+ fi
65
+ fi
66
+ done < " $file "
67
+ done
68
+
69
+ # Create JSON like string with all boards found and pass it to env variable
70
+ board_count=${# boards_array[@]}
71
+
72
+ if [ $board_count -gt 0 ]
73
+ then
74
+ json_matrix=' {"fqbn": ['
75
+ for board in ${boards_array[@]}
76
+ do
77
+ json_matrix+=' "' $board ' "'
78
+ if [ $board_count -gt 1 ]
79
+ then
80
+ json_matrix+=" ,"
81
+ fi
82
+ board_count=$(( $board_count - 1 ))
83
+ done
84
+ json_matrix+=' ]}'
85
+
86
+ echo $json_matrix
87
+ echo " FQBNS=${json_matrix} " >> $GITHUB_ENV
88
+ else
89
+ echo " FQBNS=''" >> $GITHUB_ENV
90
+ fi
0 commit comments