From a4bce3507502a7eb9e29bafe0eb174ed5c4316e9 Mon Sep 17 00:00:00 2001 From: Bill Mills Date: Sat, 17 Aug 2024 17:26:14 -0400 Subject: [PATCH] CI: Do Zephyr build tests on known good and latest versions Allow Zephyr testing to either use locked known good values or the very latest versions. The known good versions are best for PR checking as if the build fails it is almost always the PR itself that broke it. The latest version is good for periodically checking compatibility with the very latest Zephyr changes. For now we run both on pushes and PRs. We also run main against the latest zephyr check weekly as a look ahead. Signed-off-by: Bill Mills --- .github/actions/build_ci/entrypoint.sh | 16 +++++++-- .github/workflows/continuous-integration.yml | 15 +++++++-- .github/workflows/heathcheck.yml | 35 ++++++++++++++++++++ 3 files changed, 60 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/heathcheck.yml diff --git a/.github/actions/build_ci/entrypoint.sh b/.github/actions/build_ci/entrypoint.sh index 82bf3d76..4375083f 100755 --- a/.github/actions/build_ci/entrypoint.sh +++ b/.github/actions/build_ci/entrypoint.sh @@ -2,8 +2,13 @@ readonly TARGET="$1" +# Known good version for PR testing +ZEPHYR_SDK_VERSION=v0.16.8 +ZEPHYR_VERSION=v3.7.0 + ZEPHYR_TOOLCHAIN_VARIANT=zephyr -ZEPHYR_SDK_API_FOLDER=https://api.github.com/repos/zephyrproject-rtos/sdk-ng/releases/latest +ZEPHYR_SDK_API_FOLDER=https://api.github.com/repos/zephyrproject-rtos/sdk-ng/releases +ZEPHYR_SDK_VER_SELECT="tags/$ZEPHYR_SDK_VERSION" ZEPHYR_SDK_SETUP_TAR=zephyr-sdk-.*linux-x86_64.tar.xz FREERTOS_ZIP_URL=https://sourceforge.net/projects/freertos/files/FreeRTOS/V10.0.1/FreeRTOSv10.0.1.zip @@ -61,7 +66,7 @@ build_freertos(){ } build_zephyr(){ - ZEPHYR_SDK_DOWNLOAD_URL=`curl -s ${ZEPHYR_SDK_API_FOLDER} | \ + ZEPHYR_SDK_DOWNLOAD_URL=`curl -s ${ZEPHYR_SDK_API_FOLDER}/${ZEPHYR_SDK_VER_SELECT} | \ grep -e "browser_download_url.*${ZEPHYR_SDK_SETUP_TAR}"| cut -d : -f 2,3 | tr -d \"` ZEPHYR_SDK_TAR=`basename $ZEPHYR_SDK_DOWNLOAD_URL` ZEPHYR_SDK_SETUP_DIR=`echo $ZEPHYR_SDK_TAR | cut -d_ -f1` @@ -82,7 +87,7 @@ build_zephyr(){ pv $ZEPHYR_SDK_TAR -i 3 -ptebr -f | tar xJ || exit 1 rm -rf $ZEPHYR_SDK_TAR || exit 1 yes | ./$ZEPHYR_SDK_SETUP_DIR/setup.sh || exit 1 - west init ./zephyrproject || exit 1 + west init --mr $ZEPHYR_VERSION ./zephyrproject || exit 1 cd ./zephyrproject || exit 1 west update --narrow || exit 1 west zephyr-export || exit 1 @@ -144,6 +149,11 @@ main(){ if [[ "$TARGET" == "zephyr" ]]; then build_zephyr fi + if [[ "$TARGET" == "zephyr-latest" ]]; then + ZEPHYR_SDK_VER_SELECT=latest + ZEPHYR_VERSION=main + build_zephyr + fi } main diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 2efd4809..e052e0bf 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -22,7 +22,7 @@ jobs: name: check builds on different platforms runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: build for Linux id: build_linux uses: ./.github/actions/build_ci @@ -38,7 +38,16 @@ jobs: uses: ./.github/actions/build_ci with: target: freertos - - name: build for Zephyr + + # Break the zephyr builds into their own job as the common runner was + # running out of space when runs were together + # Also, as the longest running jobs, this allows them to run in || + zephyr_build_known_good_version: + name: Zephyr build with a version that is known to work + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: build for Zephyr (Known Good) id: build_Zephyr uses: ./.github/actions/build_ci with: @@ -48,7 +57,7 @@ jobs: name: nonreg tests runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: configure run: | sudo apt-get update && sudo apt-get install libsysfs-dev diff --git a/.github/workflows/heathcheck.yml b/.github/workflows/heathcheck.yml new file mode 100644 index 00000000..cec95c47 --- /dev/null +++ b/.github/workflows/heathcheck.yml @@ -0,0 +1,35 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright (c) 2024 Linaro Limited. + +# The focus of this flow is to check for external changes that will effect +# the project. Even if no code changes are happening, changes in external +# distros or projects can invalidate our work and this flow lets us know + +name: libmetal Heath Check + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + paths-ignore: + - docs/** + + # Allows you to run this workflow manually from the Actions tab or gh API + workflow_dispatch: + + # run weekly on Sunday at 5:10 AM UTC (9:10 PM US western) + schedule: + - cron: '10 5 * * 0' + +jobs: + zephyr_build_main: + name: 'Zephyr build from latest on main' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Zephyr Latest + id: build_Zephyr_latest + uses: ./.github/actions/build_ci + with: + target: zephyr-latest