diff --git a/.github/workflows/matrix_build.yml b/.github/workflows/matrix_build.yml index a71b5ed8..bda05724 100644 --- a/.github/workflows/matrix_build.yml +++ b/.github/workflows/matrix_build.yml @@ -6,29 +6,34 @@ on: - synchronize - reopened - opened + paths-ignore: + - '**.md' push: branches: - 'master' tags: - 'v*' + paths-ignore: + - '**.md' workflow_dispatch: concurrency: - group: ${{github.head_ref || github.run_id}} + group: ${{ github.head_ref || github.run_id }} cancel-in-progress: true env: MAX_KERNEL_SIZE: 0x200000 MAX_ROOTFS_SIZE: 0x500000 MAX_KERNEL_SIZE_ULTIMATE: 0x300000 - MAX_ROOTFS_SIZE_ULTIMATE: 0xA00000 + MAX_ROOTFS_SIZE_ULTIMATE: 0xa00000 TG_OPTIONS: -s --connect-timeout 30 --retry 10 --http1.1 --verbose - TAG_NAME: latest jobs: toolchain: name: Toolchain runs-on: ubuntu-latest + env: + NEED: true strategy: fail-fast: false @@ -61,41 +66,101 @@ jobs: - xm530 steps: + - name: Checkout uses: actions/checkout@v3 with: - fetch-depth: 0 + fetch-depth: 0 # OR "2" -> To retrieve the preceding commit. - - name: Determine toolchain + - name: Determine toolchain name and can we skip build run: | - BOARD=${{matrix.platform}}_lite - make BOARD=${BOARD} prepare - GCC=$(make BOARD=${BOARD} toolname) - echo GCC=${GCC} >> ${GITHUB_ENV} - URL=https://github.com/${GITHUB_REPOSITORY}/releases/download/${TAG_NAME}/${GCC}.tgz - echo ${URL} - if ! wget --spider ${URL} 2> /dev/null; then - echo BUILD=true >> ${GITHUB_ENV} + GIT_HASH=$(git rev-parse --short $GITHUB_SHA) + RELEASE_NAME="Development Build" + TAG_NAME="latest" + PRERELEASE=true + echo "GIT_HASH=$GIT_HASH" >> $GITHUB_ENV + echo "TAG_NAME=$TAG_NAME" >> $GITHUB_ENV + echo "RELEASE_NAME=$RELEASE_NAME" >> $GITHUB_ENV + echo "PRERELEASE=$PRERELEASE" >> $GITHUB_ENV + + BOARD=${{ matrix.platform }}_lite + make BOARD=$BOARD prepare + TOOLNAME=$(make BOARD=$BOARD toolname) + echo "TOOLNAME=$TOOLNAME" >> $GITHUB_ENV + URL=https://github.com/${GITHUB_REPOSITORY}/releases/download/${TAG_NAME}/${TOOLNAME}.tgz + echo Checking $URL + + HTTP_CODE=$(curl -o /dev/null --silent -Iw '%{http_code}' $URL) + echo GitHub returned HTTP code: ${HTTP_CODE} + if [ "$HTTP_CODE" == "302" ]; then + echo "NEED=false" >> $GITHUB_ENV fi - - name: Build toolchain - if: env.BUILD == 'true' + - name: Install build dependencies + if: env.NEED == 'true' run: | - make BOARD=${{matrix.platform}}_lite br-sdk - SDK_FILE=$(find output/images -name *_sdk-buildroot.tar.gz) - mv ${SDK_FILE} ${GCC}.tgz + sudo make install-deps + if [ ! -z "$ACT" ]; then + echo "FORCE_UNSAFE_CONFIGURE=1" >> $GITHUB_ENV + else + # https://github.com/actions/runner-images/issues/2577 + echo "8.8.8.8 invisible-mirror.net" | sudo tee -a /etc/hosts + fi - - name: Upload toolchain - if: ${{github.event_name != 'pull_request' && env.BUILD == 'true'}} - uses: softprops/action-gh-release@v1 + - name: Free disk space + if: ${{ !env.ACT && env.NEED == 'true' }} + run: | + sudo apt clean + docker rmi $(docker image ls -aq) + + - name: Build Buildroot SDK + if: env.NEED == 'true' + run: | + make BOARD=${{ matrix.platform }}_lite br-sdk + SDK_PATH=$(find output/images -name "*_sdk-buildroot.tar.gz") + # Why do we need this crap (only for weird artifact names)? + NEW="$(dirname $SDK_PATH)/${TOOLNAME}.tgz" + mv $SDK_PATH $NEW + SDK_PATH=$NEW + echo "SDK_PATH=$SDK_PATH" >> $GITHUB_ENV + + - uses: actions/upload-artifact@v3 + # uncomment one of the options: + # 1. Build only there is no such toolchain + if: env.NEED == 'true' with: - tag_name: temporary_tag - files: ${{env.GCC}}.tgz + name: '${{ env.TOOLNAME }}.tgz' + path: ${{ env.SDK_PATH }} + retention-days: 1 + + - name: Create release + if: ${{ !env.ACT && github.event_name != 'pull_request' && env.NEED == 'true' }} + uses: actions/create-release@v1 + continue-on-error: true + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ env.TAG_NAME }} + release_name: ${{ env.RELEASE_NAME }} + draft: false + prerelease: ${{ env.PRERELEASE }} + + - name: Upload SDK to release + if: ${{ !env.ACT && github.event_name != 'pull_request' && env.NEED == 'true' }} + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ env.SDK_PATH }} + asset_name: '${{ env.TOOLNAME }}.tgz' + tag: ${{ env.TAG_NAME }} + overwrite: true buildroot: name: Firmware needs: toolchain runs-on: ubuntu-latest + env: + FURRY: ${{ secrets.FURRY }} strategy: fail-fast: false @@ -265,101 +330,154 @@ jobs: - name: Checkout uses: actions/checkout@v3 with: - fetch-depth: 0 + fetch-depth: 0 # OR "2" -> To retrieve the preceding commit. - - name: Determine toolchain + - name: Install build dependencies run: | - BOARD=${{matrix.platform}}_lite - make BOARD=${BOARD} prepare - GCC=$(make BOARD=${BOARD} toolname) - echo GCC=${GCC} >> ${GITHUB_ENV} - URL=https://github.com/${GITHUB_REPOSITORY}/releases/download/${TAG_NAME}/${GCC}.tgz - echo ${URL} - wget -q -c --retry-on-http-error=503 --timeout=15 ${URL} + sudo make install-deps + if [ ! -z "$ACT" ]; then + echo "FORCE_UNSAFE_CONFIGURE=1" >> $GITHUB_ENV + else + # https://github.com/actions/runner-images/issues/2577 + echo "8.8.8.8 invisible-mirror.net" | sudo tee -a /etc/hosts + fi + + - name: Free disk space + if: ${{ !env.ACT }} + run: | + sudo apt clean + docker rmi $(docker image ls -aq) + + - name: Prepare buildroot + run: | + GIT_HASH=$(git rev-parse --short $GITHUB_SHA) + BRANCH=$(echo $GITHUB_REF | cut -d'/' -f 3) + RELEASE_NAME="Development Build" + TAG_NAME="latest" + PRERELEASE=true + echo "GIT_HASH=$GIT_HASH" >> $GITHUB_ENV + echo "TAG_NAME=$TAG_NAME" >> $GITHUB_ENV + echo "RELEASE_NAME=$RELEASE_NAME" >> $GITHUB_ENV + echo "PRERELEASE=$PRERELEASE" >> $GITHUB_ENV + echo "BRANCH=$BRANCH" >> $GITHUB_ENV + + - name: Determine toolchain name + run: | + BOARD=${{ matrix.platform }}_lite + make BOARD=$BOARD prepare + TOOLNAME=$(make BOARD=$BOARD toolname) + echo "TOOLNAME=$TOOLNAME" >> $GITHUB_ENV - name: Setup ccache if: github.event_name != 'pull_request' uses: actions/cache@v3 with: path: /tmp/ccache - key: ${{env.GCC}} + key: ${{ env.TOOLNAME }} - name: Restore ccache if: github.event_name == 'pull_request' uses: actions/cache/restore@v3 with: path: /tmp/ccache - key: ${{env.GCC}} + key: ${{ env.TOOLNAME }} + + - uses: actions/download-artifact@v3 + continue-on-error: true + with: + name: '${{ env.TOOLNAME }}.tgz' - name: Build firmware run: | - BOARD=${{matrix.platform}}_${{matrix.release}} - CONFIG=$(find br-ext-chip-* -name ${BOARD}_defconfig) - SDK=/tmp/extsdk - mkdir -p ${SDK} - tar xf ${GCC}.tgz --strip-components=1 -C ${SDK} + BOARD=${{ matrix.platform }}_${{ matrix.release }} + CONF_PATH=$(find . -name "${BOARD}_defconfig") - EXT=BR2_TOOLCHAIN_EXTERNAL - echo ${EXT}=y >> ${CONFIG} - echo ${EXT}_CUSTOM=y >> ${CONFIG} - echo ${EXT}_PREINSTALLED=y >> ${CONFIG} - echo ${EXT}_CXX=y >> ${CONFIG} - echo ${EXT}_PATH=\"${SDK}\" >> ${CONFIG} - - PREFIX=$(ls -d ${SDK}/*openipc* | xargs basename) - LIBC=$(echo ${GCC} | cut -d "-" -f 3) - KVER=$(echo ${GCC} | cut -d "-" -f 4) - echo ${EXT}_CUSTOM_PREFIX=\"${PREFIX}\" >> ${CONFIG} - echo ${EXT}_CUSTOM_${LIBC^^}=y >> ${CONFIG} - echo ${EXT}_HEADERS_${KVER}=y >> ${CONFIG} - GCCV=$(echo ${GCC} | cut -d '-' -f 2) - echo ${EXT}_GCC_${GCCV:3:1}=y >> ${CONFIG} - - if [ ${LIBC} = "glibc" ]; then - RPC=${SDK}/${PREFIX}/sysroot/usr/include/rpc/rpc.h - check() { test -f $RPC && echo y || echo n; } - echo ${EXT}_INET_RPC=$(check) >> ${CONFIG} - elif [ ${LIBC} = "uclibc" ]; then - CFG=${SDK}/${PREFIX}/sysroot/usr/include/bits/uClibc_config.h - check() { grep -q "${1} 1" ${CFG} && echo y || echo n; } - echo ${EXT}_LOCALE=$(check __UCLIBC_HAS_LOCALE__) >> ${CONFIG} - echo ${EXT}_HAS_THREADS_DEBUG=$(check __PTHREADS_DEBUG_SUPPORT__) >> ${CONFIG} - echo ${EXT}_HAS_SSP=y >> ${CONFIG} + echo Using $TOOLNAME + if [ ! -f "$TOOLNAME.tgz" ]; then + wget -nv --retry-on-http-error=503 --continue --timeout=15 \ + https://github.com/${GITHUB_REPOSITORY}/releases/download/${TAG_NAME}/${TOOLNAME}.tgz fi + mkdir /tmp/extsdk + tar xvf ${TOOLNAME}.tgz --strip-components=1 -C /tmp/extsdk >/dev/null + set -x - echo BR2_CCACHE=y >> ${CONFIG} - echo BR2_CCACHE_DIR=\"/tmp/ccache\" >> ${CONFIG} - cat ${CONFIG} + TLEXT=BR2_TOOLCHAIN_EXTERNAL + echo "${TLEXT}=y" >> $CONF_PATH + echo "${TLEXT}_CUSTOM=y" >> $CONF_PATH + echo "${TLEXT}_PREINSTALLED=y" >> $CONF_PATH + echo "${TLEXT}_CXX=y" >> $CONF_PATH + echo "${TLEXT}_PATH=\"/tmp/extsdk\"" >> $CONF_PATH - GIT_HASH=$(git rev-parse --short ${GITHUB_SHA}) - export GIT_HASH=${GIT_HASH} - export BRANCH=${GITHUB_REF_NAME} - echo GIT_HASH=${GIT_HASH} >> $GITHUB_ENV + SOC=$(echo $TOOLNAME | cut -d '-' -f 1) + ABI="" + case "$SOC" in + arm*|cortex*) + PREFIX=arm + ABI="eabi" + [[ $SOC =~ _hf$ ]] && ABI="${ABI}hf" + ;; + mips_xburst) + PREFIX=mipsel + ;; + esac + PREFIX="${PREFIX}-openipc-linux-" + + LIBC=$(echo $TOOLNAME | cut -d '-' -f 3) + case "$LIBC" in + uclibc) + PREFIX="${PREFIX}${LIBC}gnu${ABI}" + UCCFG=/tmp/extsdk/${PREFIX}/sysroot/usr/include/bits/uClibc_config.h + check_uclibc_feature() { grep -q "\#define ${1} 1" ${UCCFG} && echo y || echo n; } + echo "${TLEXT}_LOCALE=$(check_uclibc_feature __UCLIBC_HAS_LOCALE__)" >> $CONF_PATH + echo "${TLEXT}_HAS_THREADS_DEBUG=$(check_uclibc_feature __PTHREADS_DEBUG_SUPPORT__)" >> $CONF_PATH + echo "${TLEXT}_HAS_SSP=y" >> $CONF_PATH + ;; + musl) + PREFIX="${PREFIX}${LIBC}${ABI}" + ;; + glibc) + PREFIX="${PREFIX}gnu${ABI}" + RPCH=/tmp/extsdk/${PREFIX}/sysroot/usr/include/rpc/rpc.h + check_glibc_rpc_feature() { test -f $RPCH && echo y || echo n ; } + echo "${TLEXT}_INET_RPC=$(check_glibc_rpc_feature)" >> $CONF_PATH + ;; + esac + echo "${TLEXT}_CUSTOM_PREFIX=\"${PREFIX}\"" >> $CONF_PATH + CAP_LIBC=$(echo $LIBC | tr a-z A-Z) + echo "${TLEXT}_CUSTOM_${CAP_LIBC}=y" >> $CONF_PATH + LXHDRS=$(echo $TOOLNAME | cut -d '-' -f 4) + echo "${TLEXT}_HEADERS_${LXHDRS}=y" >> $CONF_PATH + GCC_VER=$(echo $TOOLNAME | cut -d '-' -f 2) + echo "${TLEXT}_GCC_${GCC_VER:3:1}=y" >> $CONF_PATH + + echo BR2_CCACHE=y >> $CONF_PATH + echo BR2_CCACHE_DIR=\"/tmp/ccache\" >> $CONF_PATH + cat $CONF_PATH + + make BOARD=$BOARD all - make BOARD=${BOARD} all IMAGES_DIR=${GITHUB_WORKSPACE}/output/images pushd output/images - check_exceeded() { ACTUAL=$(stat --printf="%s" ${1}) echo Debug ${1}: ${ACTUAL} vs ${2}... - if [ ${ACTUAL} -gt ${2} ]; then + if [[ ${ACTUAL} -gt ${2} ]]; then OVERRUN=$((${ACTUAL}-${2})) - echo TG_NOTIFY=Warning, ${1} size exceeded by ${OVERRUN}... ${{matrix.platform}}_${{matrix.release}} >> $GITHUB_ENV + echo "TG_NOTIFY=Warning, ${1} size exceeded by ${OVERRUN}... ${{ matrix.platform }} (${{ matrix.release }})" >> $GITHUB_ENV exit 1 fi } if [ -f uImage ]; then # TODO: doesn't fit to lite - case ${{matrix.platform}} in + case ${{ matrix.platform }} in hi3516cv500|hi3516dv300|hi3516av300|ssc338q) MAX_KERNEL_SIZE=${MAX_KERNEL_SIZE_ULTIMATE} MAX_ROOTFS_SIZE=${MAX_ROOTFS_SIZE_ULTIMATE} ;; esac - case ${{matrix.release}} in + case ${{ matrix.release }} in lite|fpv|lte) check_exceeded uImage ${MAX_KERNEL_SIZE} check_exceeded rootfs.squashfs ${MAX_ROOTFS_SIZE} @@ -370,76 +488,103 @@ jobs: ;; esac - NORFW_FILE=${IMAGES_DIR}/openipc.${{matrix.platform}}-nor-${{matrix.release}}.tgz - echo NORFW_FILE=${NORFW_FILE} >> ${GITHUB_ENV} + NORFW_PATH="${IMAGES_DIR}/openipc.${{ matrix.platform }}-nor-${{ matrix.release }}.tgz" + echo "NORFW_PATH=$NORFW_PATH" >> $GITHUB_ENV + NORFW_FILE=$(basename $NORFW_PATH) + echo "NORFW_FILE=$NORFW_FILE" >> $GITHUB_ENV - mv uImage uImage.${{matrix.platform}} - mv rootfs.squashfs rootfs.squashfs.${{matrix.platform}} - md5sum rootfs.squashfs.${{matrix.platform}} > rootfs.squashfs.${{matrix.platform}}.md5sum - md5sum uImage.${{matrix.platform}} > uImage.${{matrix.platform}}.md5sum - tar czf ${NORFW_FILE} uImage* *rootfs.squashfs.${{matrix.platform}}* + mv uImage uImage.${{ matrix.platform }} + mv rootfs.squashfs rootfs.squashfs.${{ matrix.platform }} + md5sum rootfs.squashfs.${{ matrix.platform }} > rootfs.squashfs.${{ matrix.platform }}.md5sum + md5sum uImage.${{ matrix.platform }} > uImage.${{ matrix.platform }}.md5sum + tar -cvzf $NORFW_PATH uImage* *rootfs.squashfs.${{ matrix.platform }}* fi - if [ -f rootfs.ubifs ]; then - NANDFW_FILE=${IMAGES_DIR}/openipc.${{matrix.platform}}-nand-${{matrix.release}}.tgz - echo NANDFW_FILE=${NANDFW_FILE} >> ${GITHUB_ENV} + if [ -f rootfs.ubifs ] ; then + NANDFW_PATH="${IMAGES_DIR}/openipc.${{ matrix.platform }}-nand-${{ matrix.release }}.tgz" + echo "NANDFW_PATH=$NANDFW_PATH" >> $GITHUB_ENV + NANDFW_FILE=$(basename $NANDFW_PATH) + echo "NANDFW_FILE=$NANDFW_FILE" >> $GITHUB_ENV - mv rootfs.ubi rootfs.ubi.${{matrix.platform}} - mv rootfs.ubifs rootfs.ubifs.${{matrix.platform}} - md5sum rootfs.ubifs.${{matrix.platform}} > rootfs.ubifs.${{matrix.platform}}.md5sum - case ${{matrix.platform}} in + mv rootfs.ubi rootfs.ubi.${{ matrix.platform }} + mv rootfs.ubifs rootfs.ubifs.${{ matrix.platform }} + md5sum rootfs.ubifs.${{ matrix.platform }} > rootfs.ubifs.${{ matrix.platform }}.md5sum + case ${{ matrix.platform }} in rv*) - mv zboot.img boot.img.${{matrix.platform}} - md5sum boot.img.${{matrix.platform}} > boot.img.${{matrix.platform}}.md5sum - tar czf ${NANDFW_FILE} boot.img* *rootfs.ubi*.${{matrix.platform}}* + mv zboot.img boot.img.${{ matrix.platform }} + md5sum boot.img.${{ matrix.platform }} > boot.img.${{ matrix.platform }}.md5sum + tar -cvzf $NANDFW_PATH boot.img* *rootfs.ubi*.${{ matrix.platform }}* ;; *) - tar czf ${NANDFW_FILE} uImage* *rootfs.ubi*.${{matrix.platform}}* + tar -cvzf $NANDFW_PATH uImage* *rootfs.ubi*.${{ matrix.platform }}* ;; esac fi popd - - name: Upload firmware - if: ${{github.event_name != 'pull_request' && matrix.custom != 'onlyci'}} - uses: softprops/action-gh-release@v1 - with: - tag_name: temporary_tag - files: | - ${{env.NORFW_FILE}} - ${{env.NANDFW_FILE}} - - name: Send error message to telegram channel env: - TG_TOKEN: ${{secrets.TELEGRAM_TOKEN_BOT_OPENIPC}} - TG_CHANNEL: ${{secrets.TELEGRAM_CHANNEL_OPENIPC_DEV}} - if: ${{failure() && github.event_name != 'pull_request'}} + TG_TOKEN: ${{ secrets.TELEGRAM_TOKEN_BOT_OPENIPC }} + TG_CHANNEL: ${{ secrets.TELEGRAM_CHANNEL_OPENIPC_DEV }} + if: ${{ !env.ACT && failure() && github.event_name != 'pull_request' }} run: | - TG_NOTIFY="${TG_NOTIFY:=Warning, Buildroot compiling error... ${{matrix.platform}}_${{matrix.release}}}" - TG_HEADER=$(echo -e "\r\n$TG_NOTIFY \r\n\r\nCommit: $GIT_HASH \r\nBranch: $GITHUB_REF_NAME \r\nTag: $TAG_NAME \r\n\r\n\xE2\x9A\xA0 GitHub Actions") + TG_NOTIFY="${TG_NOTIFY:=Warning, Buildroot compiling error... ${{ matrix.platform }} (${{ matrix.release }})}" + TG_HEADER=$(echo -e "\r\n$TG_NOTIFY \r\n\r\nCommit: $GIT_HASH \r\nBranch: $BRANCH \r\nTag: $TAG_NAME \r\n\r\n\xE2\x9A\xA0 GitHub Actions") curl $TG_OPTIONS -H "Content-Type: multipart/form-data" -X POST https://api.telegram.org/bot$TG_TOKEN/sendMessage \ -F chat_id=$TG_CHANNEL -F text="$TG_HEADER" exit 2 - - name: Send binary file to telegram channel - if: ${{github.event_name != 'pull_request' && matrix.custom != 'onlyci' && env.NORFW_FILE != ''}} + - name: Create release + if: ${{ !env.ACT && github.event_name != 'pull_request' && matrix.custom != 'onlyci' }} + uses: actions/create-release@v1 + continue-on-error: true env: - TG_TOKEN: ${{secrets.TELEGRAM_TOKEN_BOT_OPENIPC}} - TG_CHANNEL: ${{secrets.TELEGRAM_CHANNEL_OPENIPC_DEV}} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ env.TAG_NAME }} + release_name: ${{ env.RELEASE_NAME }} + draft: false + prerelease: ${{ env.PRERELEASE }} + + - name: Upload NOR FW to release + if: ${{ !env.ACT && github.event_name != 'pull_request' && matrix.custom != 'onlyci' && env.NORFW_FILE != '' }} + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ env.NORFW_PATH }} + asset_name: ${{ env.NORFW_FILE }} + tag: ${{ env.TAG_NAME }} + overwrite: true + + - name: Upload NAND FW to release + if: ${{ !env.ACT && github.event_name != 'pull_request' && matrix.custom != 'onlyci' && env.NANDFW_FILE != '' }} + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ env.NANDFW_PATH }} + asset_name: ${{ env.NANDFW_FILE }} + tag: ${{ env.TAG_NAME }} + overwrite: true + + - name: Send binary file to telegram channel + if: ${{ !env.ACT && github.event_name != 'pull_request' && matrix.custom != 'onlyci' && env.NORFW_FILE != '' }} + env: + TG_TOKEN: ${{ secrets.TELEGRAM_TOKEN_BOT_OPENIPC }} + TG_CHANNEL: ${{ secrets.TELEGRAM_CHANNEL_OPENIPC_DEV }} run: | - TG_HEADER=$(echo -e "\r\nCommit: $GIT_HASH \r\nBranch: $GITHUB_REF_NAME \r\nTag: $TAG_NAME \r\n\r\n\xE2\x9C\x85 GitHub Actions") + TG_HEADER=$(echo -e "\r\nCommit: $GIT_HASH \r\nBranch: $BRANCH \r\nTag: $TAG_NAME \r\n\r\n\xE2\x9C\x85 GitHub Actions") curl $TG_OPTIONS -H "Content-Type: multipart/form-data" -X POST https://api.telegram.org/bot$TG_TOKEN/sendDocument \ - -F chat_id=$TG_CHANNEL -F document="@$NORFW_FILE" -F caption="$TG_HEADER" + -F chat_id=$TG_CHANNEL -F document="@$NORFW_PATH" -F caption="$TG_HEADER" ci-build-check: - if: always() + if: always() && github.event.pull_request runs-on: ubuntu-latest - name: CI buildcheck - needs: buildroot + name: CI Build Check + needs: [buildroot] steps: - run: | - result=${{needs.buildroot.result}} - if [[ ${result} = "success" || ${result} = "skipped" ]]; then + result="${{ needs.buildroot.result }}" + if [[ $result == "success" || $result == "skipped" ]]; then exit 0 else exit 1