diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 0d99821..0000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,111 +0,0 @@ -name: Build Boards - -on: - push: - branches: - - main - - ci/* # for ci test - pull_request: - branches: - - main - -permissions: - contents: read - -jobs: - prepare: - name: Determine variants to build - runs-on: ubuntu-latest - outputs: - variants: ${{ steps.select.outputs.variants }} - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Install jq - run: sudo apt-get update && sudo apt-get install -y jq - - - id: list - name: Get all variant list - run: | - echo "all_variants=$(python scripts/release.py --list-boards --json)" >> $GITHUB_OUTPUT - - - id: select - name: Select variants based on changes - env: - ALL_VARIANTS: ${{ steps.list.outputs.all_variants }} - run: | - EVENT_NAME="${{ github.event_name }}" - - # push 到 main 分支,编译全部变体 - if [[ "$EVENT_NAME" == "push" ]]; then - echo "variants=$ALL_VARIANTS" >> $GITHUB_OUTPUT - exit 0 - fi - - # pull_request 场景 - BASE_SHA="${{ github.event.pull_request.base.sha }}" - HEAD_SHA="${{ github.event.pull_request.head.sha }}" - echo "Base: $BASE_SHA, Head: $HEAD_SHA" - - CHANGED=$(git diff --name-only $BASE_SHA $HEAD_SHA || true) - echo -e "Changed files:\n$CHANGED" - - NEED_ALL=0 - declare -A AFFECTED - while IFS= read -r file; do - if [[ "$file" == main/* && "$file" != main/boards/* ]]; then - NEED_ALL=1 - fi - - if [[ "$file" == main/boards/common/* ]]; then - NEED_ALL=1 - fi - - if [[ "$file" == main/boards/* ]]; then - board=$(echo "$file" | cut -d '/' -f3) - AFFECTED[$board]=1 - fi - done <<< "$CHANGED" - - if [[ "$NEED_ALL" -eq 1 ]]; then - echo "variants=$ALL_VARIANTS" >> $GITHUB_OUTPUT - else - if [[ ${#AFFECTED[@]} -eq 0 ]]; then - echo "variants=[]" >> $GITHUB_OUTPUT - else - BOARDS_JSON=$(printf '%s\n' "${!AFFECTED[@]}" | sort -u | jq -R -s -c 'split("\n")[:-1]') - FILTERED=$(echo "$ALL_VARIANTS" | jq -c --argjson boards "$BOARDS_JSON" 'map(select(.board as $b | $boards | index($b)))') - echo "variants=$FILTERED" >> $GITHUB_OUTPUT - fi - fi - - build: - name: Build ${{ matrix.name }} - needs: prepare - if: ${{ needs.prepare.outputs.variants != '[]' }} - strategy: - fail-fast: false # 单个变体失败不影响其它变体 - matrix: - include: ${{ fromJson(needs.prepare.outputs.variants) }} - runs-on: ubuntu-latest - container: - image: espressif/idf:release-v5.5 - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Build current variant - shell: bash - run: | - source $IDF_PATH/export.sh - python scripts/release.py ${{ matrix.board }} --name ${{ matrix.name }} - - - name: Upload artifacts - uses: actions/upload-artifact@v4 - with: - name: xiaozhi_${{ matrix.name }}_${{ github.sha }}.bin - path: build/merged-binary.bin - if-no-files-found: error