Skip to content

Commit 1ccac47

Browse files
committed
ci: support multiple variants per board
1 parent d470190 commit 1ccac47

File tree

2 files changed

+231
-119
lines changed

2 files changed

+231
-119
lines changed

.github/workflows/build.yml

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ permissions:
1414

1515
jobs:
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

Comments
 (0)