| name: Reusable build util |
| |
| on: |
| workflow_call: |
| inputs: |
| os: |
| required: false |
| type: string |
| default: 'ubuntu-latest' |
| build-system: |
| required: true |
| type: string |
| toolchain: |
| required: true |
| type: string |
| build-args: |
| required: true |
| type: string |
| build-options: |
| required: false |
| default: '' |
| type: string |
| upload-artifacts: |
| required: false |
| default: false |
| type: boolean |
| upload-metrics: |
| required: false |
| default: false |
| type: boolean |
| upload-membrowse: |
| required: false |
| default: false |
| type: boolean |
| code-changed: |
| required: false |
| default: true |
| type: boolean |
| |
| jobs: |
| family: |
| runs-on: ${{ inputs.os }} |
| strategy: |
| fail-fast: false |
| matrix: |
| arg: ${{ fromJSON(inputs.build-args) }} |
| steps: |
| - name: Checkout TinyUSB |
| uses: actions/checkout@v6 |
| with: |
| fetch-depth: ${{ !inputs.upload-membrowse && 1 || 0 }} |
| |
| - name: Setup Toolchain |
| id: setup-toolchain |
| uses: ./.github/actions/setup_toolchain |
| with: |
| toolchain: ${{ inputs.toolchain }} |
| |
| - name: Get Dependencies |
| uses: ./.github/actions/get_deps |
| with: |
| arg: ${{ matrix.arg }} |
| |
| - name: Build |
| if: ${{ inputs.code-changed }} |
| env: |
| IAR_LMS_BEARER_TOKEN: ${{ secrets.IAR_LMS_BEARER_TOKEN }} |
| run: | |
| if [ "${{ inputs.toolchain }}" == "esp-idf" ]; then |
| docker run --rm -e MEMBROWSE_API_KEY="$MEMBROWSE_API_KEY" -v $PWD:/project -w /project espressif/idf:tinyusb python tools/build.py --target all ${{ matrix.arg }} |
| else |
| BUILD_PY_ARGS="-s ${{ inputs.build-system }} ${{ steps.setup-toolchain.outputs.build_option }} ${{ inputs.build-options }} --target all" |
| if [ "${{ inputs.upload-metrics }}" = "true" ]; then |
| BUILD_PY_ARGS="$BUILD_PY_ARGS --target tinyusb_metrics" |
| fi |
| python tools/build.py $BUILD_PY_ARGS ${{ matrix.arg }} |
| fi |
| shell: bash |
| |
| - name: Membrowse Upload |
| if: inputs.toolchain != 'esp-idf' && inputs.upload-membrowse == true |
| env: |
| MEMBROWSE_API_KEY: ${{ secrets.MEMBROWSE_API_KEY }} |
| run: | |
| # if code-changed is false --> there is no elf -> membrowse target upload with --identical flag |
| BUILD_PY_ARGS="-s ${{ inputs.build-system }} ${{ steps.setup-toolchain.outputs.build_option }} ${{ inputs.build-options }}" |
| python tools/build.py $BUILD_PY_ARGS --target examples-membrowse-upload -j 1 ${{ matrix.arg }} |
| shell: bash |
| |
| - name: Upload Artifacts for Metrics |
| if: inputs.upload-metrics == true && inputs.code-changed == true |
| uses: actions/upload-artifact@v5 |
| with: |
| name: metrics-${{ matrix.arg }} |
| path: cmake-build/cmake-build-*/metrics.json |
| |
| - name: Upload Artifacts for Hardware Testing |
| if: inputs.upload-artifacts == true && inputs.code-changed == true |
| uses: actions/upload-artifact@v5 |
| with: |
| name: binaries-${{ matrix.arg }} |
| path: | |
| cmake-build/cmake-build-*/*/*/*.elf |
| cmake-build/cmake-build-*/*/*/*.bin |
| cmake-build/cmake-build-*/*/*/*.bin |
| cmake-build/cmake-build-*/*/*/bootloader/bootloader.bin |
| cmake-build/cmake-build-*/*/*/partition_table/partition-table.bin |
| cmake-build/cmake-build-*/*/*/config.env |
| cmake-build/cmake-build-*/*/*/flash_args |
| cmake-build/hw/mcu/**/*.ld |