From b12ad6fba6420c3cf08eee01da6113c771084e99 Mon Sep 17 00:00:00 2001 From: Wijnand Modderman-Lenstra Date: Mon, 30 Mar 2026 09:40:35 +0200 Subject: [PATCH] Use build matrix --- .gitea/workflows/ci.yml | 105 ++++++++++------------------------------ 1 file changed, 25 insertions(+), 80 deletions(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index bbadd7d..0339fb0 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -33,10 +33,14 @@ jobs: python -m pytest kiss_client.py -v 2>/dev/null || echo "Note: Full integration tests require simulator" continue-on-error: true - build-heltec-v3: - name: Build heltec_v3 + build: + name: Build firmware runs-on: ubuntu-latest needs: [ verify ] + strategy: + fail-fast: false + matrix: + board: [ heltec_v3, seeed_xiao_s3_wio_sx1262 ] steps: - uses: actions/checkout@v4 @@ -52,98 +56,39 @@ jobs: uses: actions/cache@v3 with: path: ~/.platformio - key: ${{ runner.os }}-platformio-heltec-v3-${{ hashFiles('**/platformio.ini') }} + key: ${{ runner.os }}-platformio-${{ matrix.board }}-${{ hashFiles('**/platformio.ini') }} - - name: Build heltec_v3 - run: pio run -e heltec_v3 + - name: Build firmware + run: pio run -e ${{ matrix.board }} - - name: Upload firmware artifact - uses: actions/upload-artifact@v4 - with: - name: firmware-heltec_v3 - path: .pio/build/heltec_v3/firmware.bin - retention-days: 5 - - build-seeed-xiao: - name: Build seeed_xiao_s3_wio_sx1262 - runs-on: ubuntu-latest - needs: [ verify ] - steps: - - uses: actions/checkout@v4 - - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: '3.11' - - - name: Install PlatformIO - run: pip install platformio - - - name: Cache PlatformIO - uses: actions/cache@v3 - with: - path: ~/.platformio - key: ${{ runner.os }}-platformio-seeed-xiao-${{ hashFiles('**/platformio.ini') }} - - - name: Build seeed_xiao_s3_wio_sx1262 - run: pio run -e seeed_xiao_s3_wio_sx1262 - - - name: Upload firmware artifact - uses: actions/upload-artifact@v4 - with: - name: firmware-seeed_xiao_s3_wio_sx1262 - path: .pio/build/seeed_xiao_s3_wio_sx1262/firmware.bin - retention-days: 5 - - publish-packages: - name: Publish Packages - runs-on: ubuntu-latest - needs: [ build-heltec-v3, build-seeed-xiao ] - if: github.event_name == 'push' && github.ref == 'refs/heads/main' - steps: - - uses: actions/download-artifact@v4 - with: - path: artifacts - - - name: Publish firmware packages to Gitea + - name: Upload firmware to Gitea (direct) + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + env: + GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} run: | TIMESTAMP=$(date +%s) + mkdir -p artifacts + cp .pio/build/${{ matrix.board }}/firmware.bin artifacts/firmware-${{ matrix.board }}.bin + filename=firmware-${{ matrix.board }}-${TIMESTAMP}.bin + echo "Uploading $filename..." + curl -s -X POST \ + -H "Authorization: token $GITEA_TOKEN" \ + -F "file=@artifacts/firmware-${{ matrix.board }}.bin" \ + "${{ gitea.server_url }}/api/packages/${{ gitea.repository_owner }}/generic/firmware/${{ github.ref_name }}/${filename}" - # Create package directory - mkdir -p packages - - # Collect and rename all firmware binaries - for dir in artifacts/firmware-*/; do - board_name=$(basename "$dir" | sed 's/^firmware-//') - cp "$dir/firmware.bin" "packages/${board_name}-${TIMESTAMP}.bin" - echo "📦 Prepared: ${board_name}-${TIMESTAMP}.bin" - done - - # Upload each firmware to Gitea generic package registry - for bin_file in packages/*.bin; do - filename=$(basename "$bin_file") - echo "⬆️ Publishing $filename..." - - curl -X POST \ - -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \ - -F "file=@${bin_file}" \ - "${{ gitea.server_url }}/api/packages/${{ gitea.repository_owner }}/generic/firmware/${{ github.ref_name }}/${filename}" - done + # Note: artifact upload via actions/upload-artifact didn't work on this Gitea instance. + # Each matrix build uploads directly to the Gitea generic package registry. summary: name: Build Summary runs-on: ubuntu-latest - needs: [ verify, build-heltec-v3, build-seeed-xiao, publish-packages ] + needs: [ verify, build ] if: always() steps: - name: Check status run: | - if [ "${{ needs.verify.result }}" = "failure" ] || [ "${{ needs.build-heltec-v3.result }}" = "failure" ] || [ "${{ needs.build-seeed-xiao.result }}" = "failure" ]; then + if [ "${{ needs.verify.result }}" = "failure" ] || [ "${{ needs.build.result }}" = "failure" ]; then echo "❌ CI failed" exit 1 fi - if [ "${{ needs.publish-packages.result }}" != "skipped" ] && [ "${{ needs.publish-packages.result }}" = "failure" ]; then - echo "⚠️ Build succeeded but package publishing failed" - exit 1 - fi echo "✅ All checks passed"