summaryrefslogtreecommitdiff
path: root/.github/workflows
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows')
-rw-r--r--.github/workflows/build.yml87
-rw-r--r--.github/workflows/build_util.yml24
-rwxr-xr-x[-rw-r--r--].github/workflows/ci_set_matrix.py24
-rw-r--r--.github/workflows/hil_test.yml135
-rw-r--r--.github/workflows/pre-commit.yml4
5 files changed, 149 insertions, 125 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index fde9400a7..547763bd8 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -51,7 +51,6 @@ jobs:
# Build CMake
# ---------------------------------------
cmake:
- # if: false
needs: set-matrix
uses: ./.github/workflows/build_util.yml
strategy:
@@ -60,55 +59,44 @@ jobs:
toolchain:
# - 'arm-clang' is built by circle-ci in PR
- 'aarch64-gcc'
+ - 'arm-gcc'
- 'msp430-gcc'
- 'riscv-gcc'
with:
build-system: 'cmake'
toolchain: ${{ matrix.toolchain }}
- build-args: ${{ toJSON(fromJSON(needs.set-matrix.outputs.json)[matrix.toolchain].family) }}
- one-per-family: ${{ github.event_name != 'pull_request' }}
-
- # ---------------------------------------
- # Build CMake arm-gcc
- # only build with push, for PR: all board is built by circle-ci
- # ---------------------------------------
- cmake-arm-gcc:
- if: github.event_name == 'push'
- needs: set-matrix
- uses: ./.github/workflows/build_util.yml
- with:
- build-system: 'cmake'
- toolchain: 'arm-gcc'
- build-args: ${{ toJSON(fromJSON(needs.set-matrix.outputs.json)['arm-gcc'].family) }}
- one-per-family: true
+ build-args: ${{ toJSON(fromJSON(needs.set-matrix.outputs.json)[matrix.toolchain]) }}
+ one-per-family: ${{ github.event_name == 'push' }}
# ---------------------------------------
- # Build Make
+ # Build Make (built by circle-ci in PR, only build on push here)
# ---------------------------------------
make:
- # if: false
+ if: github.event_name == 'push'
needs: set-matrix
uses: ./.github/workflows/build_util.yml
strategy:
fail-fast: false
matrix:
toolchain:
- # 'arm-clang' would be built by circle-ci
- - 'aarch64-gcc'
+ # 'arm-clang'
- 'arm-gcc'
+ - 'aarch64-gcc'
- 'msp430-gcc'
- 'riscv-gcc'
- 'rx-gcc'
+ - 'esp-idf' # build-system is ignored
with:
build-system: 'make'
toolchain: ${{ matrix.toolchain }}
- build-args: ${{ toJSON(fromJSON(needs.set-matrix.outputs.json)[matrix.toolchain].family) }}
- one-per-family: ${{ github.event_name != 'pull_request' }}
+ build-args: ${{ toJSON(fromJSON(needs.set-matrix.outputs.json)[matrix.toolchain]) }}
+ one-per-family: true
# ---------------------------------------
# Build Make on Windows/MacOS
# ---------------------------------------
make-os:
+ if: github.event_name == 'pull_request'
uses: ./.github/workflows/build_util.yml
strategy:
fail-fast: false
@@ -122,33 +110,17 @@ jobs:
one-per-family: true
# ---------------------------------------
- # Build Espressif
- # ---------------------------------------
- espressif:
- # if: false
- uses: ./.github/workflows/build_util.yml
- strategy:
- fail-fast: false
- matrix:
- board:
- - 'espressif_kaluga_1'
- - 'espressif_s3_devkitm'
- with:
- build-system: 'cmake'
- toolchain: 'esp-idf'
- toolchain_version: 'v5.1.1'
- build-args: '["-b${{ matrix.board }}"]'
-
- # ---------------------------------------
# Build IAR on HFP self-hosted
+ # Since IAR Token secret is not passed to forked PR, only build on PR from the same repo
# ---------------------------------------
arm-iar:
- # if: false
- if: github.repository_owner == 'hathach'
+ if: github.repository_owner == 'hathach' && github.event_name == 'push'
needs: set-matrix
runs-on: [self-hosted, Linux, X64, hifiphile]
env:
- BUILD_ARGS: ${{ join(fromJSON(needs.set-matrix.outputs.json)['arm-iar'].family, ' ') }}
+ BUILD_ARGS: ${{ join(fromJSON(needs.set-matrix.outputs.json)['arm-iar'], ' ') }}
+ IAR_LMS_CLOUD_URL: ${{ vars.IAR_LMS_CLOUD_URL }}
+ IAR_LMS_BEARER_TOKEN: ${{ secrets.IAR_LMS_BEARER_TOKEN }}
steps:
- name: Clean workspace
run: |
@@ -156,6 +128,11 @@ jobs:
rm -rf "${{ github.workspace }}"
mkdir -p "${{ github.workspace }}"
+ - name: Toolchain version
+ run: |
+ echo IAR_LMS_CLOUD_URL=$IAR_LMS_CLOUD_URL
+ iccarm --version
+
- name: Checkout TinyUSB
uses: actions/checkout@v4
@@ -165,7 +142,23 @@ jobs:
- name: Build
run: python3 tools/build.py --one-per-family --toolchain iar $BUILD_ARGS
- - name: Test on actual hardware (hardware in the loop)
- if: github.event_name == 'pull_request'
+ # ---------------------------------------
+ # 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: |
- python3 test/hil/hil_test.py hfp.json
+ west build -b pca10056 -d examples/device/cdc_msc/build examples/device/cdc_msc -- -DRTOS=zephyr
+ west build -b pca10056 -d examples/device/msc_dual_lun/build examples/device/msc_dual_lun -- -DRTOS=zephyr
diff --git a/.github/workflows/build_util.yml b/.github/workflows/build_util.yml
index e983f06d1..2de68c6f3 100644
--- a/.github/workflows/build_util.yml
+++ b/.github/workflows/build_util.yml
@@ -9,9 +9,6 @@ on:
toolchain:
required: true
type: string
- toolchain_version:
- required: false
- type: string
build-args:
required: true
type: string
@@ -19,6 +16,10 @@ on:
required: false
default: false
type: boolean
+ upload-artifacts:
+ required: false
+ default: false
+ type: boolean
os:
required: false
type: string
@@ -40,7 +41,6 @@ jobs:
uses: ./.github/actions/setup_toolchain
with:
toolchain: ${{ inputs.toolchain }}
- toolchain_version: ${{ inputs.toolchain_version }}
- name: Get Dependencies
uses: ./.github/actions/get_deps
@@ -60,8 +60,22 @@ jobs:
- name: Build
run: |
if [ "${{ inputs.toolchain }}" == "esp-idf" ]; then
- docker run --rm -v $PWD:/project -w /project espressif/idf:${{ inputs.toolchain_version }} python3 tools/build.py ${{ matrix.arg }}
+ docker run --rm -v $PWD:/project -w /project espressif/idf:tinyusb python tools/build.py ${{ matrix.arg }}
else
python tools/build.py -s ${{ inputs.build-system }} ${{ steps.setup-toolchain.outputs.build_option }} ${{ steps.set-one-per-family.outputs.build_option }} ${{ matrix.arg }}
fi
shell: bash
+
+ - name: Upload Artifacts for Hardware Testing
+ if: ${{ inputs.upload-artifacts }}
+ uses: actions/upload-artifact@v4
+ with:
+ name: ${{ 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
diff --git a/.github/workflows/ci_set_matrix.py b/.github/workflows/ci_set_matrix.py
index a56bd4214..410508246 100644..100755
--- a/.github/workflows/ci_set_matrix.py
+++ b/.github/workflows/ci_set_matrix.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python3
import json
# toolchain, url
@@ -6,6 +7,7 @@ toolchain_list = [
"arm-clang",
"arm-iar",
"arm-gcc",
+ "esp-idf",
"msp430-gcc",
"riscv-gcc",
"rx-gcc"
@@ -22,6 +24,7 @@ family_list = {
"lpc11 lpc13 lpc15": ["arm-gcc", "arm-clang"],
"lpc17 lpc18 lpc40 lpc43": ["arm-gcc", "arm-clang"],
"lpc51 lpc54 lpc55": ["arm-gcc", "arm-clang"],
+ "max32650 max32666 max32690 max78002": ["arm-gcc"],
"mcx": ["arm-gcc"],
"mm32": ["arm-gcc"],
"msp430": ["msp430-gcc"],
@@ -30,15 +33,20 @@ family_list = {
"ra": ["arm-gcc"],
"rp2040": ["arm-gcc"],
"rx": ["rx-gcc"],
- "samd11 samd21 saml2x": ["arm-gcc", "arm-clang"],
+ "samd11 saml2x": ["arm-gcc", "arm-clang"],
+ "samd21": ["arm-gcc", "arm-clang"],
"samd5x_e5x samg": ["arm-gcc", "arm-clang"],
- "stm32f0 stm32f1 stm32f2 stm32f3": ["arm-gcc", "arm-clang", "arm-iar"],
+ "stm32c0 stm32f0 stm32f1 stm32f2 stm32f3": ["arm-gcc", "arm-clang", "arm-iar"],
"stm32f4": ["arm-gcc", "arm-clang", "arm-iar"],
"stm32f7": ["arm-gcc", "arm-clang", "arm-iar"],
"stm32g0 stm32g4 stm32h5": ["arm-gcc", "arm-clang", "arm-iar"],
"stm32h7": ["arm-gcc", "arm-clang", "arm-iar"],
- "stm32l0 stm32l4 stm32u5 stm32wb": ["arm-gcc", "arm-clang", "arm-iar"],
+ "stm32l0 stm32l4": ["arm-gcc", "arm-clang", "arm-iar"],
+ "stm32u5 stm32wb": ["arm-gcc", "arm-clang", "arm-iar"],
"xmc4000": ["arm-gcc"],
+ "-bespressif_kaluga_1": ["esp-idf"],
+ "-bespressif_s3_devkitm": ["esp-idf"],
+ "-bespressif_p4_function_ev": ["esp-idf"],
}
@@ -47,15 +55,7 @@ def set_matrix_json():
for toolchain in toolchain_list:
filtered_families = [family for family, supported_toolchain in family_list.items() if
toolchain in supported_toolchain]
-
- # always add board in hfp.json for arm-iar
- if toolchain == 'arm-iar':
- with open('test/hil/hfp.json') as f:
- hfp_data = json.load(f)
- hfp_boards = [f"-b{board['name']}" for board in hfp_data['boards']]
- filtered_families = filtered_families + hfp_boards
-
- matrix[toolchain] = {"family": filtered_families}
+ matrix[toolchain] = filtered_families
print(json.dumps(matrix))
diff --git a/.github/workflows/hil_test.yml b/.github/workflows/hil_test.yml
index d02f13e05..c890933ec 100644
--- a/.github/workflows/hil_test.yml
+++ b/.github/workflows/hil_test.yml
@@ -18,69 +18,52 @@ concurrency:
cancel-in-progress: true
env:
- HIL_JSON: test/hil/rpi.json
+ HIL_JSON: test/hil/tinyusb.json
jobs:
- # ---------------------------------------
- # Build Non Espressif
- # ---------------------------------------
- build:
- if: github.repository_owner == 'hathach'
+ set-matrix:
runs-on: ubuntu-latest
outputs:
- BOARDS_LIST: ${{ steps.parse_hil_json.outputs.BOARDS_LIST }}
+ json: ${{ steps.set-matrix-json.outputs.matrix }}
steps:
- name: Checkout TinyUSB
uses: actions/checkout@v4
- - name: Parse HIL json
- id: parse_hil_json
+ - name: Generate matrix json
+ id: set-matrix-json
run: |
- sudo apt install -y jq
-
- # Non-Espresif boards
- BOARDS_LIST=$(jq -r '.boards[] | select(.flasher != "esptool") | "-b " + .name' ${{ env.HIL_JSON }} | tr '\n' ' ')
- echo "BOARDS_LIST=$BOARDS_LIST"
- echo "BOARDS_LIST=$BOARDS_LIST" >> $GITHUB_ENV
- echo "BOARDS_LIST=$BOARDS_LIST" >> $GITHUB_OUTPUT
-
- - name: Setup arm-gcc toolchain
- uses: ./.github/actions/setup_toolchain
- with:
- toolchain: 'arm-gcc'
-
- - name: Setup risv-gcc toolchain
- uses: ./.github/actions/setup_toolchain
- with:
- toolchain: 'riscv-gcc'
-
- - name: Get Dependencies
- uses: ./.github/actions/get_deps
- with:
- arg: ${{ env.BOARDS_LIST }}
-
- - name: Build
- run: python tools/build.py $BOARDS_LIST
+ MATRIX_JSON=$(python test/hil/hil_ci_set_matrix.py ${{ env.HIL_JSON }})
+ echo "matrix=$MATRIX_JSON"
+ echo "matrix=$MATRIX_JSON" >> $GITHUB_OUTPUT
- - name: Upload Artifacts for Hardware Testing
- uses: actions/upload-artifact@v4
- with:
- name: hil_rpi
- path: |
- cmake-build/cmake-build-*/*/*/*.elf
- cmake-build/cmake-build-*/*/*/*.bin
+ # ---------------------------------------
+ # Build arm-gcc
+ # ---------------------------------------
+ build:
+ if: github.repository_owner == 'hathach'
+ 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.json)[matrix.toolchain]) }}
+ one-per-family: true
+ upload-artifacts: true
# ---------------------------------------
# Hardware in the loop (HIL)
- # self-hosted running on an RPI. For attached hardware checkout test/hil/rpi.json
+ # self-hosted on local VM, for attached hardware checkout HIL_JSON
# ---------------------------------------
- hil-rpi:
+ hil-tinyusb:
if: github.repository_owner == 'hathach'
- needs:
- - build
- runs-on: [self-hosted, ARM64, rpi, hardware-in-the-loop]
- env:
- BOARDS_LIST: "${{ needs.build-esp.outputs.BOARDS_LIST }} ${{ needs.build.outputs.BOARDS_LIST }}"
+ needs: build
+ runs-on: [self-hosted, X64, hathach, hardware-in-the-loop]
steps:
- name: Clean workspace
run: |
@@ -88,13 +71,6 @@ jobs:
rm -rf "${{ github.workspace }}"
mkdir -p "${{ github.workspace }}"
- # USB bus on rpi is not stable, reset it before testing
-# - name: Reset USB bus
-# run: |
-# echo "1-2" | sudo tee /sys/bus/usb/drivers/usb/unbind
-# sleep 5
-# echo "1-2" | sudo tee /sys/bus/usb/drivers/usb/bind
-
- name: Checkout TinyUSB
uses: actions/checkout@v4
with:
@@ -108,8 +84,47 @@ jobs:
- name: Test on actual hardware
run: |
- echo "BOARDS_LIST=$BOARDS_LIST"
- echo "::group::{cmake-build contents}"
- tree cmake-build
- echo "::endgroup::"
- python3 test/hil/hil_test.py $BOARDS_LIST ${{ env.HIL_JSON }}
+ ls cmake-build/
+ python3 test/hil/hil_test.py ${{ env.HIL_JSON }}
+
+ # ---------------------------------------
+ # 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 on PR from the same repo
+ # ---------------------------------------
+ hil-hfp:
+ if: github.repository_owner == 'hathach' && github.event.pull_request.head.repo.fork == false
+ runs-on: [self-hosted, Linux, X64, hifiphile]
+ env:
+ IAR_LMS_CLOUD_URL: ${{ vars.IAR_LMS_CLOUD_URL }}
+ IAR_LMS_BEARER_TOKEN: ${{ secrets.IAR_LMS_BEARER_TOKEN }}
+ steps:
+ - name: Clean workspace
+ run: |
+ echo "Cleaning up previous run"
+ rm -rf "${{ github.workspace }}"
+ mkdir -p "${{ github.workspace }}"
+
+ - name: Toolchain version
+ run: |
+ echo IAR_LMS_CLOUD_URL=$IAR_LMS_CLOUD_URL
+ 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 --toolchain iar $BUILD_ARGS
+
+ - name: Test on actual hardware (hardware in the loop)
+ run: python3 test/hil/hil_test.py hfp.json
diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml
index 379a22ee2..ed0efd66e 100644
--- a/.github/workflows/pre-commit.yml
+++ b/.github/workflows/pre-commit.yml
@@ -29,10 +29,12 @@ jobs:
#ceedling test:all
- name: Run pre-commit
- uses: pre-commit/[email protected]
+ uses: pre-commit/[email protected]
- name: Build Fuzzer
run: |
+ sudo apt install libc++-dev libc++abi-dev
+ clang --version
export CC=clang
export CXX=clang++
fuzz_harness=$(ls -d test/fuzz/device/*/)