Build #5043
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build | |
| on: | |
| workflow_dispatch: | |
| push: | |
| paths: | |
| - 'src/**' | |
| - 'examples/**' | |
| - 'lib/**' | |
| - 'hw/**' | |
| - 'tools/build.py' | |
| - 'tools/get_deps.py' | |
| - '.github/actions/**' | |
| - '.github/workflows/build.yml' | |
| - '.github/workflows/build_util.yml' | |
| - '.github/workflows/ci_set_matrix.py' | |
| pull_request: | |
| paths: | |
| - 'src/**' | |
| - 'examples/**' | |
| - 'lib/**' | |
| - 'hw/**' | |
| - 'test/hil/**' | |
| - 'tools/build.py' | |
| - 'tools/get_deps.py' | |
| - '.github/actions/**' | |
| - '.github/workflows/build.yml' | |
| - '.github/workflows/build_util.yml' | |
| - '.github/workflows/ci_set_matrix.py' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| HIL_JSON: test/hil/tinyusb.json | |
| jobs: | |
| set-matrix: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| json: ${{ steps.set-matrix-json.outputs.matrix }} | |
| hil_json: ${{ steps.set-matrix-json.outputs.hil_matrix }} | |
| steps: | |
| - name: Checkout TinyUSB | |
| uses: actions/checkout@v4 | |
| - name: Generate matrix json | |
| id: set-matrix-json | |
| run: | | |
| # build matrix | |
| MATRIX_JSON=$(python .github/workflows/ci_set_matrix.py)/ | |
| echo "matrix=$MATRIX_JSON" | |
| echo "matrix=$MATRIX_JSON" >> $GITHUB_OUTPUT | |
| # hil matrix | |
| HIL_MATRIX_JSON=$(python test/hil/hil_ci_set_matrix.py ${{ env.HIL_JSON }}) | |
| echo "hil_matrix=$HIL_MATRIX_JSON" | |
| echo "hil_matrix=$HIL_MATRIX_JSON" >> $GITHUB_OUTPUT | |
| # ------------------------------------------------------------------------------ | |
| # CMake build: only one board per family (first alphabetically). Full build is done by CircleCI in PR | |
| # Note: | |
| # For Make and IAR build: will be done on CircleCI only (one random per family as well) | |
| # ------------------------------------------------------------------------------ | |
| cmake: | |
| needs: set-matrix | |
| uses: ./.github/workflows/build_util.yml | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| toolchain: | |
| - 'aarch64-gcc' | |
| #- 'arm-clang' | |
| - 'arm-gcc' | |
| #- 'esp-idf' | |
| - 'msp430-gcc' | |
| - 'riscv-gcc' | |
| with: | |
| build-system: 'cmake' | |
| toolchain: ${{ matrix.toolchain }} | |
| build-args: ${{ toJSON(fromJSON(needs.set-matrix.outputs.json)[matrix.toolchain]) }} | |
| build-options: '--one-first' | |
| upload-metrics: true | |
| code-metrics: | |
| needs: cmake | |
| runs-on: ubuntu-latest | |
| permissions: | |
| pull-requests: write | |
| steps: | |
| - name: Checkout TinyUSB | |
| uses: actions/checkout@v4 | |
| - name: Download Artifacts | |
| uses: actions/download-artifact@v5 | |
| with: | |
| pattern: metrics-* | |
| path: cmake-build | |
| merge-multiple: true | |
| - name: Aggregate Code Metrics | |
| run: | | |
| python tools/get_deps.py | |
| pip install tools/linkermap/ | |
| python tools/metrics.py combine -j -m -f tinyusb/src cmake-build/*/metrics.json | |
| - name: Upload Metrics Artifact | |
| if: github.event_name == 'push' | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: metrics-tinyusb | |
| path: metrics.json | |
| - name: Download Base Branch Metrics | |
| if: github.event_name != 'push' | |
| uses: dawidd6/action-download-artifact@v11 | |
| with: | |
| workflow: build.yml | |
| branch: ${{ github.base_ref }} | |
| name: metrics-tinyusb | |
| path: base-metrics | |
| continue-on-error: true | |
| - name: Compare with Base Branch | |
| if: github.event_name != 'push' | |
| run: | | |
| if [ -f base-metrics/metrics.json ]; then | |
| python tools/metrics.py compare -f tinyusb/src base-metrics/metrics.json metrics.json | |
| cat metrics_compare.md | |
| else | |
| echo "No base metrics found, skipping comparison" | |
| cp metrics.md metrics_compare.md | |
| fi | |
| - name: Post Code Metrics as PR Comment | |
| if: github.event_name != 'push' | |
| uses: marocchino/sticky-pull-request-comment@v2 | |
| with: | |
| header: code-metrics | |
| path: metrics_compare.md | |
| # --------------------------------------- | |
| # Build Make/CMake on Windows/MacOS | |
| # --------------------------------------- | |
| build-os: | |
| if: github.event_name == 'pull_request' | |
| uses: ./.github/workflows/build_util.yml | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ windows-latest, macos-latest ] | |
| with: | |
| os: ${{ matrix.os }} | |
| build-system: 'cmake-make' | |
| toolchain: 'arm-gcc-${{ matrix.os }}' | |
| build-args: '["stm32h7"]' | |
| build-options: '--one-random' | |
| # --------------------------------------- | |
| # Zephyr | |
| # --------------------------------------- | |
| zephyr: | |
| if: github.event_name == 'push' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout TinyUSB | |
| uses: actions/checkout@v4 | |
| - name: Setup Zephyr project | |
| uses: zephyrproject-rtos/action-zephyr-setup@v1 | |
| with: | |
| app-path: examples | |
| toolchains: arm-zephyr-eabi | |
| - name: Build | |
| run: | | |
| west build -b nrf52840dk -d examples/device/cdc_msc/build examples/device/cdc_msc -- -DRTOS=zephyr | |
| west build -b nrf52840dk -d examples/device/msc_dual_lun/build examples/device/msc_dual_lun -- -DRTOS=zephyr | |
| # --------------------------------------- | |
| # Hardware in the loop (HIL) | |
| # Run on PR only (hil-tinyusb), hil-hfp only run on non-forked PR | |
| # --------------------------------------- | |
| hil-build: | |
| if: | | |
| github.repository_owner == 'hathach' && | |
| (github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch') | |
| needs: set-matrix | |
| uses: ./.github/workflows/build_util.yml | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| toolchain: | |
| - 'arm-gcc' | |
| - 'esp-idf' | |
| with: | |
| build-system: 'cmake' | |
| toolchain: ${{ matrix.toolchain }} | |
| build-args: ${{ toJSON(fromJSON(needs.set-matrix.outputs.hil_json)[matrix.toolchain]) }} | |
| upload-artifacts: true | |
| # --------------------------------------- | |
| # Hardware in the loop (HIL) | |
| # self-hosted on local VM, for attached hardware checkout HIL_JSON | |
| # --------------------------------------- | |
| hil-tinyusb: | |
| if: github.repository_owner == 'hathach' && github.event_name != 'push' | |
| needs: hil-build | |
| runs-on: [ self-hosted, X64, hathach, hardware-in-the-loop ] | |
| steps: | |
| - name: Get Skip Boards from previous run | |
| if: github.run_attempt != '1' | |
| run: | | |
| if [ -f "${{ env.HIL_JSON }}.skip" ]; then | |
| SKIP_BOARDS=$(cat "${{ env.HIL_JSON }}.skip") | |
| else | |
| SKIP_BOARDS="" | |
| fi | |
| echo "SKIP_BOARDS=$SKIP_BOARDS" | |
| echo "SKIP_BOARDS=$SKIP_BOARDS" >> $GITHUB_ENV | |
| - name: Clean workspace | |
| run: | | |
| echo "Cleaning up for the first run" | |
| rm -rf "${{ github.workspace }}" | |
| mkdir -p "${{ github.workspace }}" | |
| - name: Checkout TinyUSB | |
| uses: actions/checkout@v4 | |
| - name: Download Artifacts | |
| uses: actions/download-artifact@v5 | |
| with: | |
| pattern: binaries-* | |
| path: cmake-build | |
| merge-multiple: true | |
| - name: Test on actual hardware | |
| run: | | |
| python3 test/hil/hil_test.py ${{ env.HIL_JSON }} $SKIP_BOARDS | |
| # --------------------------------------- | |
| # Hardware in the loop (HIL) | |
| # self-hosted by HFP, build with IAR toolchain, for attached hardware checkout test/hil/hfp.json | |
| # Since IAR Token secret is not passed to forked PR, only build non-forked PR | |
| # --------------------------------------- | |
| hil-hfp: | |
| if: | | |
| github.repository_owner == 'hathach' && | |
| github.event.pull_request.head.repo.fork == false && | |
| github.event_name != 'push' | |
| runs-on: [ self-hosted, Linux, X64, hifiphile ] | |
| env: | |
| IAR_LMS_BEARER_TOKEN: ${{ secrets.IAR_LMS_BEARER_TOKEN }} | |
| steps: | |
| - name: Clean workspace | |
| run: | | |
| echo "Cleaning up previous run" | |
| rm -rf "${{ github.workspace }}"3 | |
| mkdir -p "${{ github.workspace }}" | |
| - name: Toolchain version | |
| run: | | |
| iccarm --version | |
| - name: Checkout TinyUSB | |
| uses: actions/checkout@v4 | |
| - name: Get build boards | |
| run: | | |
| MATRIX_JSON=$(python test/hil/hil_ci_set_matrix.py test/hil/hfp.json) | |
| BUILD_ARGS=$(echo $MATRIX_JSON | jq -r '.["arm-gcc"] | join(" ")') | |
| echo "BUILD_ARGS=$BUILD_ARGS" | |
| echo "BUILD_ARGS=$BUILD_ARGS" >> $GITHUB_ENV | |
| - name: Get Dependencies | |
| run: python3 tools/get_deps.py $BUILD_ARGS | |
| - name: Build | |
| run: python3 tools/build.py -j 4 --toolchain iar $BUILD_ARGS | |
| - name: Test on actual hardware (hardware in the loop) | |
| run: python3 test/hil/hil_test.py hfp.json |