| name: BabbleSim Tests |
| |
| on: |
| pull_request: |
| paths: |
| - ".github/workflows/bsim-tests.yaml" |
| - ".github/workflows/bsim-tests-publish.yaml" |
| - "west.yml" |
| - "subsys/bluetooth/**" |
| - "tests/bsim/**" |
| - "boards/nordic/nrf5*/*dt*" |
| - "dts/*/nordic/**" |
| - "tests/bluetooth/common/testlib/**" |
| - "samples/bluetooth/**" |
| - "boards/posix/**" |
| - "soc/posix/**" |
| - "arch/posix/**" |
| - "include/zephyr/arch/posix/**" |
| - "scripts/native_simulator/**" |
| - "samples/net/sockets/echo_*/**" |
| - "modules/mbedtls/**" |
| - "modules/openthread/**" |
| - "subsys/net/l2/openthread/**" |
| - "include/zephyr/net/openthread.h" |
| - "drivers/ieee802154/**" |
| - "include/zephyr/net/ieee802154*" |
| - "drivers/serial/*nrfx*" |
| - "tests/drivers/uart/**" |
| |
| concurrency: |
| group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.head_ref || github.ref }} |
| cancel-in-progress: true |
| |
| jobs: |
| bsim-test: |
| if: github.repository_owner == 'zephyrproject-rtos' |
| runs-on: |
| group: zephyr-runner-v2-linux-x64-4xlarge |
| container: |
| image: ghcr.io/zephyrproject-rtos/ci-repo-cache:v0.27.4.20241026 |
| options: '--entrypoint /bin/bash' |
| env: |
| ZEPHYR_TOOLCHAIN_VARIANT: zephyr |
| BSIM_OUT_PATH: /opt/bsim/ |
| BSIM_COMPONENTS_PATH: /opt/bsim/components |
| EDTT_PATH: ../tools/edtt |
| steps: |
| - name: Apply container owner mismatch workaround |
| run: | |
| # FIXME: The owner UID of the GITHUB_WORKSPACE directory may not |
| # match the container user UID because of the way GitHub |
| # Actions runner is implemented. Remove this workaround when |
| # GitHub comes up with a fundamental fix for this problem. |
| git config --global --add safe.directory ${GITHUB_WORKSPACE} |
| |
| - name: Print cloud service information |
| run: | |
| echo "ZEPHYR_RUNNER_CLOUD_PROVIDER = ${ZEPHYR_RUNNER_CLOUD_PROVIDER}" |
| echo "ZEPHYR_RUNNER_CLOUD_NODE = ${ZEPHYR_RUNNER_CLOUD_NODE}" |
| echo "ZEPHYR_RUNNER_CLOUD_POD = ${ZEPHYR_RUNNER_CLOUD_POD}" |
| |
| - name: Clone cached Zephyr repository |
| continue-on-error: true |
| run: | |
| git clone --shared /repo-cache/zephyrproject/zephyr . |
| git remote set-url origin ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY} |
| |
| - name: Checkout |
| uses: actions/checkout@v4 |
| with: |
| fetch-depth: 0 |
| |
| - name: Environment Setup |
| env: |
| BASE_REF: ${{ github.base_ref }} |
| run: | |
| git config --global user.email "bot@zephyrproject.org" |
| git config --global user.name "Zephyr Bot" |
| rm -fr ".git/rebase-apply" |
| git rebase origin/${BASE_REF} |
| git clean -f -d |
| git log --pretty=oneline | head -n 10 |
| west init -l . || true |
| west config manifest.group-filter -- +ci |
| west config --global update.narrow true |
| west update --path-cache /repo-cache/zephyrproject 2>&1 1> west.update.log || west update --path-cache /repo-cache/zephyrproject 2>&1 1> west.update.log || ( rm -rf ../modules ../bootloader ../tools && west update --path-cache /repo-cache/zephyrproject) |
| west forall -c 'git reset --hard HEAD' |
| |
| echo "ZEPHYR_SDK_INSTALL_DIR=/opt/toolchains/zephyr-sdk-$( cat SDK_VERSION )" >> $GITHUB_ENV |
| |
| - name: Check common triggering files |
| uses: tj-actions/changed-files@v45 |
| id: check-common-files |
| with: |
| files: | |
| .github/workflows/bsim-tests.yaml |
| .github/workflows/bsim-tests-publish.yaml |
| west.yml |
| boards/posix/ |
| soc/posix/ |
| arch/posix/ |
| include/zephyr/arch/posix/ |
| scripts/native_simulator/ |
| tests/bsim/* |
| boards/nordic/nrf5*/*dt* |
| dts/*/nordic/ |
| modules/mbedtls/** |
| |
| - name: Check if Bluethooth files changed |
| uses: tj-actions/changed-files@v45 |
| id: check-bluetooth-files |
| with: |
| files: | |
| tests/bsim/bluetooth/ |
| samples/bluetooth/ |
| subsys/bluetooth/ |
| |
| - name: Check if Networking files changed |
| uses: tj-actions/changed-files@v45 |
| id: check-networking-files |
| with: |
| files: | |
| tests/bsim/net/ |
| samples/net/sockets/echo_*/ |
| modules/openthread/ |
| subsys/net/l2/openthread/ |
| include/zephyr/net/openthread.h |
| drivers/ieee802154/ |
| include/zephyr/net/ieee802154* |
| |
| - name: Check if UART files changed |
| uses: tj-actions/changed-files@v45 |
| id: check-uart-files |
| with: |
| files: | |
| tests/bsim/drivers/uart/ |
| drivers/serial/*nrfx* |
| tests/drivers/uart/ |
| |
| - name: Update BabbleSim to manifest revision |
| if: > |
| steps.check-bluetooth-files.outputs.any_modified == 'true' |
| || steps.check-networking-files.outputs.any_modified == 'true' |
| || steps.check-uart-files.outputs.any_modified == 'true' |
| || steps.check-common-files.outputs.any_modified == 'true' |
| run: | |
| export BSIM_VERSION=$( west list bsim -f {revision} ) |
| echo "Manifest points to bsim sha $BSIM_VERSION" |
| cd /opt/bsim_west/bsim |
| git fetch -n origin ${BSIM_VERSION} |
| git -c advice.detachedHead=false checkout ${BSIM_VERSION} |
| west update |
| make everything -s -j 8 |
| |
| - name: Run Bluetooth Tests with BSIM |
| if: steps.check-bluetooth-files.outputs.any_modified == 'true' || steps.check-common-files.outputs.any_modified == 'true' |
| run: | |
| tests/bsim/ci.bt.sh |
| |
| - name: Run Networking Tests with BSIM |
| if: steps.check-networking-files.outputs.any_modified == 'true' || steps.check-common-files.outputs.any_modified == 'true' |
| run: | |
| tests/bsim/ci.net.sh |
| |
| - name: Run UART Tests with BSIM |
| if: steps.check-uart-files.outputs.any_modified == 'true' || steps.check-common-files.outputs.any_modified == 'true' |
| run: | |
| tests/bsim/ci.uart.sh |
| |
| - name: Merge Test Results |
| run: | |
| pip3 install junitparser junit2html |
| junitparser merge --glob "./bsim_*/*bsim_results.*.xml" "./twister-out/twister.xml" junit.xml |
| junit2html junit.xml junit.html |
| |
| - name: Upload Unit Test Results in HTML |
| if: always() |
| uses: actions/upload-artifact@v4 |
| with: |
| name: HTML Unit Test Results |
| if-no-files-found: ignore |
| path: | |
| junit.html |
| |
| - name: Publish Unit Test Results |
| uses: EnricoMi/publish-unit-test-result-action@v2 |
| with: |
| check_name: Bsim Test Results |
| files: "junit.xml" |
| comment_mode: off |
| |
| - name: Upload Event Details |
| if: always() |
| uses: actions/upload-artifact@v4 |
| with: |
| name: event |
| path: | |
| ${{ github.event_path }} |