@@ -14,10 +14,10 @@ permissions:
1414
1515jobs :
1616 prepare :
17- name : Determine boards to build
17+ name : Determine variants to build
1818 runs-on : ubuntu-latest
1919 outputs :
20- boards : ${{ steps.select.outputs.boards }}
20+ variants : ${{ steps.select.outputs.variants }}
2121 steps :
2222 - name : Checkout
2323 uses : actions/checkout@v4
@@ -28,30 +28,30 @@ jobs:
2828 run : sudo apt-get update && sudo apt-get install -y jq
2929
3030 - id : list
31- name : Get all board list
31+ name : Get all variant list
3232 run : |
33- echo "all_boards =$(python scripts/release.py --list-boards --json)" >> $GITHUB_OUTPUT
33+ echo "all_variants =$(python scripts/release.py --list-boards --json)" >> $GITHUB_OUTPUT
3434
3535 - id : select
36- name : Select boards based on changes
36+ name : Select variants based on changes
3737 env :
38- ALL_BOARDS : ${{ steps.list.outputs.all_boards }}
38+ ALL_VARIANTS : ${{ steps.list.outputs.all_variants }}
3939 run : |
4040 EVENT_NAME="${{ github.event_name }}"
4141
42- # For push to main branch, build all boards
42+ # push 到 main 分支,编译全部变体
4343 if [[ "$EVENT_NAME" == "push" ]]; then
44- echo "boards=$ALL_BOARDS " >> $GITHUB_OUTPUT
44+ echo "variants=$ALL_VARIANTS " >> $GITHUB_OUTPUT
4545 exit 0
4646 fi
4747
48- # For pull_request
48+ # pull_request 场景
4949 BASE_SHA="${{ github.event.pull_request.base.sha }}"
5050 HEAD_SHA="${{ github.event.pull_request.head.sha }}"
5151 echo "Base: $BASE_SHA, Head: $HEAD_SHA"
5252
5353 CHANGED=$(git diff --name-only $BASE_SHA $HEAD_SHA || true)
54- echo "Changed files:\n$CHANGED"
54+ echo -e "Changed files:\n$CHANGED"
5555
5656 NEED_ALL=0
5757 declare -A AFFECTED
@@ -60,47 +60,52 @@ jobs:
6060 NEED_ALL=1
6161 fi
6262
63+ if [[ "$file" == main/boards/common/* ]]; then
64+ NEED_ALL=1
65+ fi
66+
6367 if [[ "$file" == main/boards/* ]]; then
6468 board=$(echo "$file" | cut -d '/' -f3)
6569 AFFECTED[$board]=1
6670 fi
6771 done <<< "$CHANGED"
6872
6973 if [[ "$NEED_ALL" -eq 1 ]]; then
70- echo "boards=$ALL_BOARDS " >> $GITHUB_OUTPUT
74+ echo "variants=$ALL_VARIANTS " >> $GITHUB_OUTPUT
7175 else
7276 if [[ ${#AFFECTED[@]} -eq 0 ]]; then
73- echo "boards =[]" >> $GITHUB_OUTPUT
77+ echo "variants =[]" >> $GITHUB_OUTPUT
7478 else
75- JSON=$(printf '%s\n' "${!AFFECTED[@]}" | sort -u | jq -R -s -c 'split("\n")[:-1]')
76- echo "boards=$JSON" >> $GITHUB_OUTPUT
79+ BOARDS_JSON=$(printf '%s\n' "${!AFFECTED[@]}" | sort -u | jq -R -s -c 'split("\n")[:-1]')
80+ FILTERED=$(echo "$ALL_VARIANTS" | jq -c --argjson boards "$BOARDS_JSON" 'map(select(.board as $b | $boards | index($b)))')
81+ echo "variants=$FILTERED" >> $GITHUB_OUTPUT
7782 fi
7883 fi
7984
8085 build :
81- name : Build ${{ matrix.board }}
86+ name : Build ${{ matrix.name }}
8287 needs : prepare
83- if : ${{ needs.prepare.outputs.boards != '[]' }}
88+ if : ${{ needs.prepare.outputs.variants != '[]' }}
8489 strategy :
85- fail-fast : false # 单个 board 失败不影响其它 board
90+ fail-fast : false # 单个变体失败不影响其它变体
8691 matrix :
87- board : ${{ fromJson(needs.prepare.outputs.boards ) }}
92+ include : ${{ fromJson(needs.prepare.outputs.variants ) }}
8893 runs-on : ubuntu-latest
8994 container :
9095 image : espressif/idf:release-v5.4
9196 steps :
9297 - name : Checkout
9398 uses : actions/checkout@v4
9499
95- - name : Build current board
100+ - name : Build current variant
96101 shell : bash
97102 run : |
98103 source $IDF_PATH/export.sh
99- python scripts/release.py ${{ matrix.board }}
104+ python scripts/release.py ${{ matrix.board }} --name ${{ matrix.name }}
100105
101106 - name : Upload artifacts
102107 uses : actions/upload-artifact@v4
103108 with :
104- name : xiaozhi_${{ matrix.board }}_${{ github.sha }}.bin
109+ name : xiaozhi_${{ matrix.name }}_${{ github.sha }}.bin
105110 path : build/merged-binary.bin
106- if-no-files-found : error
111+ if-no-files-found : error
0 commit comments