utest_auto_run.yml 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. # Automation utest run script for the QEMU platform
  2. # Generate the corresponding config configuration for CI based on the configuration file under examples/utest/configs.
  3. name: utest_auto_run
  4. on:
  5. push:
  6. branches:
  7. - master
  8. paths-ignore:
  9. - documentation/**
  10. - '**/README.md'
  11. - '**/README_zh.md'
  12. pull_request:
  13. branches:
  14. - master
  15. paths-ignore:
  16. - documentation/**
  17. - '**/README.md'
  18. - '**/README_zh.md'
  19. workflow_dispatch:
  20. inputs:
  21. trigger_type:
  22. description: '触发类型'
  23. required: false
  24. default: 'manual'
  25. type: string
  26. concurrency:
  27. group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  28. cancel-in-progress: true
  29. permissions:
  30. contents: read
  31. jobs:
  32. test:
  33. runs-on: ubuntu-22.04
  34. name: ${{ matrix.platform.UTEST }} :${{ matrix.config_file }}
  35. if: github.repository_owner == 'RT-Thread'
  36. strategy:
  37. fail-fast: false
  38. matrix:
  39. platform:
  40. - { UTEST: "A9", RTT_BSP: "bsp/qemu-vexpress-a9", QEMU_ARCH: "arm", QEMU_MACHINE: "vexpress-a9", SD_FILE: "sd.bin", KERNEL: "standard", "SMP_RUN":"" }
  41. - { UTEST: "A9-rtsmart", RTT_BSP: "bsp/qemu-vexpress-a9", QEMU_ARCH: "arm", QEMU_MACHINE: "vexpress-a9", SD_FILE: "sd.bin", KERNEL: "rtsmart", "SMP_RUN":"" }
  42. - { UTEST: "A9-smp", RTT_BSP: "bsp/qemu-vexpress-a9", QEMU_ARCH: "arm", QEMU_MACHINE: "vexpress-a9", SD_FILE: "sd.bin", KERNEL: "standard", "SMP_RUN":"smp" }
  43. - { UTEST: "RISCV", RTT_BSP: "bsp/qemu-virt64-riscv", QEMU_ARCH: "riscv64", QEMU_MACHINE: "virt", SD_FILE: "None", KERNEL: "standard", "SMP_RUN":"" }
  44. - { UTEST: "RISCV-rtsmart", RTT_BSP: "bsp/qemu-virt64-riscv", QEMU_ARCH: "riscv64", QEMU_MACHINE: "virt", SD_FILE: "None", KERNEL: "rtsmart", "SMP_RUN":"" }
  45. # - { UTEST: "RISCV-smp", RTT_BSP: "bsp/qemu-virt64-riscv", QEMU_ARCH: "riscv64", QEMU_MACHINE: "virt", SD_FILE: "None", KERNEL: "standard", "SMP_RUN":"smp" }
  46. - { UTEST: "XUANTIE-rtsmart", RTT_BSP: "bsp/xuantie/virt64/c906", QEMU_ARCH: "riscv64", QEMU_MACHINE: "virt", SD_FILE: "sd.bin", KERNEL: "rtsmart", "SMP_RUN":"" }
  47. - { UTEST: "AARCH64", RTT_BSP: "bsp/qemu-virt64-aarch64", QEMU_ARCH: "aarch64", QEMU_MACHINE: "virt", SD_FILE: "sd.bin", KERNEL: "standard", "SMP_RUN":"" }
  48. - { UTEST: "AARCH64-rtsmart", RTT_BSP: "bsp/qemu-virt64-aarch64", QEMU_ARCH: "aarch64", QEMU_MACHINE: "virt", SD_FILE: "sd.bin", KERNEL: "rtsmart", "SMP_RUN":"" }
  49. # - { UTEST: "AARCH64-smp", RTT_BSP: "bsp/qemu-virt64-aarch64", QEMU_ARCH: "aarch64", QEMU_MACHINE: "virt", SD_FILE: "sd.bin", KERNEL: "standard", "SMP_RUN":"smp" }
  50. config_file:
  51. - "default.cfg"
  52. include:
  53. # only run on qemu-vexpress-a9
  54. - platform: { UTEST: "A9", RTT_BSP: "bsp/qemu-vexpress-a9", QEMU_ARCH: "arm", QEMU_MACHINE: "vexpress-a9", SD_FILE: "sd.bin", KERNEL: "standard", "SMP_RUN":"" }
  55. config_file: "kernel/kernel_basic.cfg"
  56. - platform: { UTEST: "A9", RTT_BSP: "bsp/qemu-vexpress-a9", QEMU_ARCH: "arm", QEMU_MACHINE: "vexpress-a9", SD_FILE: "sd.bin", KERNEL: "standard", "SMP_RUN":"" }
  57. config_file: "kernel/ipc.cfg"
  58. - platform: { UTEST: "A9", RTT_BSP: "bsp/qemu-vexpress-a9", QEMU_ARCH: "arm", QEMU_MACHINE: "vexpress-a9", SD_FILE: "sd.bin", KERNEL: "standard", "SMP_RUN":"" }
  59. config_file: "kernel/mem.cfg"
  60. - platform: { UTEST: "A9", RTT_BSP: "bsp/qemu-vexpress-a9", QEMU_ARCH: "arm", QEMU_MACHINE: "vexpress-a9", SD_FILE: "sd.bin", KERNEL: "standard", "SMP_RUN":"" }
  61. config_file: "kernel/atomic_c11.cfg"
  62. - platform: { UTEST: "RISCV", RTT_BSP: "bsp/qemu-virt64-riscv", QEMU_ARCH: "riscv64", QEMU_MACHINE: "virt", SD_FILE: "None", KERNEL: "standard", "SMP_RUN":"" }
  63. config_file: "kernel/atomic_c11.cfg"
  64. - platform: { UTEST: "A9", RTT_BSP: "bsp/qemu-vexpress-a9", QEMU_ARCH: "arm", QEMU_MACHINE: "vexpress-a9", SD_FILE: "sd.bin", KERNEL: "standard", "SMP_RUN":"" }
  65. config_file: "cpp11/cpp11.cfg"
  66. - platform: { UTEST: "A9", RTT_BSP: "bsp/qemu-vexpress-a9", QEMU_ARCH: "arm", QEMU_MACHINE: "vexpress-a9", SD_FILE: "sd.bin", KERNEL: "standard", "SMP_RUN":"" }
  67. config_file: "components/lwip.cfg"
  68. - platform: { UTEST: "A9", RTT_BSP: "bsp/qemu-vexpress-a9", QEMU_ARCH: "arm", QEMU_MACHINE: "vexpress-a9", SD_FILE: "sd.bin", KERNEL: "standard", "SMP_RUN":"" }
  69. config_file: "components/netdev.cfg"
  70. - platform: { UTEST: "A9", RTT_BSP: "bsp/qemu-vexpress-a9", QEMU_ARCH: "arm", QEMU_MACHINE: "vexpress-a9", SD_FILE: "sd.bin", KERNEL: "standard", "SMP_RUN":"" }
  71. config_file: "components/sal.cfg"
  72. - platform: { UTEST: "A9", RTT_BSP: "bsp/qemu-vexpress-a9", QEMU_ARCH: "arm", QEMU_MACHINE: "vexpress-a9", SD_FILE: "sd.bin", KERNEL: "standard", "SMP_RUN":"" }
  73. config_file: "components/dfs.cfg"
  74. env:
  75. TEST_QEMU_ARCH: ${{ matrix.platform.QEMU_ARCH }}
  76. TEST_QEMU_MACHINE: ${{ matrix.platform.QEMU_MACHINE }}
  77. TEST_BSP_ROOT: ${{ matrix.platform.RTT_BSP }}
  78. TEST_CONFIG_FILE: ${{ matrix.config_file }}
  79. TEST_SD_FILE: ${{ matrix.platform.SD_FILE }}
  80. steps:
  81. - uses: actions/checkout@main
  82. - name: Install Tools
  83. shell: bash
  84. run: |
  85. sudo apt-get update
  86. sudo apt-get -yqq install scons qemu-system git
  87. pip3 install kconfiglib
  88. - name: Install ToolChains
  89. shell: bash
  90. run: |
  91. TOOLCHAIN_INSTALLED=""
  92. # Install Arm ToolChains
  93. if [[ "${{ matrix.platform.QEMU_ARCH }}" == "arm" && "${{ matrix.platform.KERNEL }}" == "standard" ]]; then
  94. echo "Starting install Arm ToolChains"
  95. wget -q https://github.com/RT-Thread/toolchains-ci/releases/download/v1.3/gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2
  96. sudo tar xjf gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2 -C /opt
  97. /opt/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-gcc --version
  98. echo "RTT_EXEC_PATH=/opt/gcc-arm-none-eabi-10-2020-q4-major/bin" >> $GITHUB_ENV
  99. echo "RTT_CC_PREFIX=arm-none-eabi-" >> $GITHUB_ENV
  100. echo "TOOLCHAIN_INSTALLED=arm" >> $GITHUB_ENV
  101. fi
  102. # Install Arm Musl ToolChains
  103. if [[ "${{ matrix.platform.QEMU_ARCH }}" == "arm" && "${{ matrix.platform.KERNEL }}" == "rtsmart" ]]; then
  104. echo "Starting install Arm Musl ToolChains"
  105. wget -q https://github.com/RT-Thread/toolchains-ci/releases/download/v1.7/arm-linux-musleabi_for_x86_64-pc-linux-gnu_stable.tar.bz2
  106. sudo tar xjf arm-linux-musleabi_for_x86_64-pc-linux-gnu_stable.tar.bz2 -C /opt
  107. /opt/arm-linux-musleabi_for_x86_64-pc-linux-gnu/bin/arm-linux-musleabi-gcc --version
  108. echo "RTT_EXEC_PATH=/opt/arm-linux-musleabi_for_x86_64-pc-linux-gnu/bin" >> $GITHUB_ENV
  109. echo "RTT_CC_PREFIX=arm-linux-musleabi-" >> $GITHUB_ENV
  110. echo "TOOLCHAIN_INSTALLED=arm-musl" >> $GITHUB_ENV
  111. fi
  112. # Install RISC-V ToolChains
  113. if [[ "${{ matrix.platform.QEMU_ARCH }}" == "riscv64" && "${{ matrix.platform.KERNEL }}" == "standard" ]]; then
  114. echo "Starting install RISC-V ToolChains"
  115. wget -q https://github.com/RT-Thread/toolchains-ci/releases/download/v1.4/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14.tar.gz
  116. sudo tar zxvf riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14.tar.gz -C /opt
  117. /opt/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14/bin/riscv64-unknown-elf-gcc --version
  118. echo "RTT_EXEC_PATH=/opt/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14/bin" >> $GITHUB_ENV
  119. echo "TOOLCHAIN_INSTALLED=riscv" >> $GITHUB_ENV
  120. fi
  121. # Install RISC-V Musl ToolChains
  122. if [[ "${{ matrix.platform.QEMU_ARCH }}" == "riscv64" && "${{ matrix.platform.KERNEL }}" == "rtsmart" ]]; then
  123. echo "Starting install RISC-V Musl ToolChains"
  124. wget -q https://github.com/RT-Thread/toolchains-ci/releases/download/v1.7/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2
  125. sudo tar xjf riscv64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2 -C /opt
  126. /opt/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin/riscv64-unknown-linux-musl-gcc --version
  127. echo "RTT_EXEC_PATH=/opt/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin" >> $GITHUB_ENV
  128. echo "RTT_CC_PREFIX=riscv64-unknown-linux-musl-" >> $GITHUB_ENV
  129. echo "TOOLCHAIN_INSTALLED=riscv-musl" >> $GITHUB_ENV
  130. fi
  131. # Install RISC-V XUANTIE Musl ToolChains
  132. if [[ "${{ matrix.platform.UTEST }}" == "XUANTIE-rtsmart" && "${{ matrix.platform.QEMU_ARCH }}" == "riscv64" && "${{ matrix.platform.KERNEL }}" == "rtsmart" ]]; then
  133. echo "Starting install RISC-V XUANTIE Musl ToolChains"
  134. wget -q https://github.com/RT-Thread/toolchains-ci/releases/download/v1.9/Xuantie-900-gcc-linux-6.6.0-musl64-x86_64-V3.0.2.tar.gz
  135. sudo tar zxvf Xuantie-900-gcc-linux-6.6.0-musl64-x86_64-V3.0.2.tar.gz -C /opt
  136. /opt/Xuantie-900-gcc-linux-6.6.0-musl64-x86_64-V3.0.2/bin/riscv64-unknown-linux-musl-gcc --version
  137. echo "RTT_EXEC_PATH=/opt/Xuantie-900-gcc-linux-6.6.0-musl64-x86_64-V3.0.2/bin" >> $GITHUB_ENV
  138. echo "RTT_CC_PREFIX=riscv64-unknown-linux-musl-" >> $GITHUB_ENV
  139. echo "TOOLCHAIN_INSTALLED=riscv-musl" >> $GITHUB_ENV
  140. fi
  141. # Install AARCH64 ToolChains
  142. if [[ "${{ matrix.platform.QEMU_ARCH }}" == "aarch64" && "${{ matrix.platform.KERNEL }}" == "standard" ]]; then
  143. echo "Starting install AARCH64 ToolChains"
  144. wget -q https://github.com/RT-Thread/toolchains-ci/releases/download/v1.6/gcc-arm-10.2-2020.11-x86_64-aarch64-none-elf.tar.xz
  145. sudo tar -xvJf gcc-arm-10.2-2020.11-x86_64-aarch64-none-elf.tar.xz -C /opt
  146. /opt/gcc-arm-10.2-2020.11-x86_64-aarch64-none-elf/bin/aarch64-none-elf-gcc --version
  147. echo "RTT_EXEC_PATH=/opt/gcc-arm-10.2-2020.11-x86_64-aarch64-none-elf/bin" >> $GITHUB_ENV
  148. echo "RTT_CC_PREFIX=aarch64-none-elf-" >> $GITHUB_ENV
  149. echo "TOOLCHAIN_INSTALLED=aarch64" >> $GITHUB_ENV
  150. fi
  151. # Install AARCH64 Musl ToolChains
  152. if [[ "${{ matrix.platform.QEMU_ARCH }}" == "aarch64" && "${{ matrix.platform.KERNEL }}" == "rtsmart" ]]; then
  153. echo "Starting install AARCH64 Musl ToolChains"
  154. wget -q https://github.com/RT-Thread/toolchains-ci/releases/download/v1.7/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu_stable.tar.bz2
  155. sudo tar xjf aarch64-linux-musleabi_for_x86_64-pc-linux-gnu_stable.tar.bz2 -C /opt
  156. /opt/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu/bin/aarch64-linux-musleabi-gcc --version
  157. echo "RTT_EXEC_PATH=/opt/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu/bin" >> $GITHUB_ENV
  158. echo "RTT_CC_PREFIX=aarch64-linux-musleabi-" >> $GITHUB_ENV
  159. echo "TOOLCHAIN_INSTALLED=aarch64-musl" >> $GITHUB_ENV
  160. fi
  161. # Install CPP11 Preprocessing Toolchain
  162. if [[ "${{ matrix.platform.QEMU_ARCH }}" == "arm" && "${{ matrix.config_file }}" == "cpp11/cpp11.cfg" && "${{ matrix.platform.KERNEL }}" == "standard" ]]; then
  163. sudo rm -f /opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include/c++/10.2.1/thread
  164. sudo rm -f /opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include/c++/10.2.1/mutex
  165. sudo rm -f /opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include/c++/10.2.1/condition_variable
  166. sudo rm -f /opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include/c++/10.2.1/future
  167. sudo rm -f /opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include/pthread.h
  168. sudo cat /dev/null > /opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include/sys/_pthreadtypes.h
  169. sed -i 's/-fno-exceptions/ /g' $TEST_BSP_ROOT/rtconfig.py
  170. fi
  171. if [ "$TOOLCHAIN_INSTALLED" == "None" ]; then
  172. echo "No valid toolchain installed, stopping the workflow."
  173. fi
  174. - name: Build BSP
  175. if: ${{ env.TOOLCHAIN_INSTALLED != '' && success() }}
  176. run: |
  177. # Whether plan to run SMP?
  178. if [[ "${{ matrix.platform.SMP_RUN }}" == "smp" ]]; then
  179. cat examples/utest/configs/smp/smp.cfg >> $TEST_BSP_ROOT/.config
  180. fi
  181. # Is the kernel rtsmart?
  182. if [[ "${{ matrix.platform.KERNEL }}" == "rtsmart" ]]; then
  183. cat examples/utest/configs/rtsmart/rtsmart.cfg >> $TEST_BSP_ROOT/.config
  184. fi
  185. echo CONFIG_RT_USING_UTESTCASES=y >> $TEST_BSP_ROOT/.config
  186. cat examples/utest/configs/$TEST_CONFIG_FILE >> $TEST_BSP_ROOT/.config
  187. scons --pyconfig-silent -C $TEST_BSP_ROOT
  188. scons -j$(nproc) --strict -C $TEST_BSP_ROOT
  189. - name: QEMU Run Test
  190. if: ${{ env.TOOLCHAIN_INSTALLED != '' && success() }}
  191. run: |
  192. if [ "$TEST_SD_FILE" != "None" ]; then
  193. dd if=/dev/zero of=$TEST_BSP_ROOT/sd.bin bs=1024 count=65536
  194. mkfs.fat $TEST_BSP_ROOT/sd.bin
  195. fi
  196. if [[ "${{ matrix.platform.QEMU_ARCH }}" == "aarch64" ]]; then
  197. qemu-system-$TEST_QEMU_ARCH -M virt,gic-version=2 -cpu cortex-a53 -smp 4 -kernel $TEST_BSP_ROOT/rtthread.bin -nographic \
  198. -drive if=none,file=$TEST_BSP_ROOT/sd.bin,format=raw,id=blk0 -device virtio-blk-device,drive=blk0,bus=virtio-mmio-bus.0 \
  199. -netdev user,id=net0 -device virtio-net-device,netdev=net0,bus=virtio-mmio-bus.1 \
  200. > qemu_output_$TEST_QEMU_ARCH.log 2>&1 &
  201. elif [[ "${{ matrix.platform.UTEST }}" == "XUANTIE-rtsmart" ]]; then
  202. sudo apt-get install -y dos2unix libcapstone-dev libbrlapi-dev
  203. wget -q https://occ-oss-prod.oss-cn-hangzhou.aliyuncs.com/resource//1736318325160/Xuantie-qemu-x86_64-Ubuntu-20.04-V5.0.5-B20250108-0335.tar.gz
  204. tar zxvf Xuantie-qemu-x86_64-Ubuntu-20.04-V5.0.5-B20250108-0335.tar.gz
  205. dos2unix ./install/qemu_post_install_small.sh
  206. sudo chmod +x ./install/qemu_post_install_small.sh
  207. sudo ./install/qemu_post_install_small.sh
  208. QEMU_BIN="./install/bin/qemu-system-$TEST_QEMU_ARCH"
  209. [ ! -f "$QEMU_BIN" ] && echo "ERROR: $QEMU_BIN not found." && exit 1
  210. tmp_output=$(mktemp)
  211. ldd "$QEMU_BIN" > "$tmp_output" 2>&1
  212. missing_libs=$(grep "not found" "$tmp_output" | awk '{print $1}')
  213. for lib in $missing_libs; do
  214. base_lib=$(echo "$lib" | sed -E 's/\.so.*/\.so/')
  215. echo "🔍 修复基础库:$base_lib ..."
  216. sudo ln -s /usr/lib/x86_64-linux-gnu/$base_lib /usr/lib/x86_64-linux-gnu/$lib
  217. done
  218. echo "✅ 所有缺失库已处理。"
  219. $QEMU_BIN -cpu c906fd -M $TEST_QEMU_MACHINE -kernel $TEST_BSP_ROOT/rtthread.bin -nographic \
  220. -drive if=none,file=$TEST_BSP_ROOT/sd.bin,format=raw,id=blk0 -device virtio-blk-device,drive=blk0,bus=virtio-mmio-bus.0 \
  221. > qemu_output_$TEST_QEMU_ARCH.log 2>&1 &
  222. elif [[ "${{ matrix.platform.QEMU_ARCH }}" == "arm" ]]; then
  223. qemu-system-$TEST_QEMU_ARCH \
  224. -nographic \
  225. -M $TEST_QEMU_MACHINE \
  226. -kernel $TEST_BSP_ROOT/rtthread.bin \
  227. -sd $TEST_BSP_ROOT/sd.bin \
  228. > qemu_output_$TEST_QEMU_ARCH.log 2>&1 &
  229. else
  230. qemu-system-$TEST_QEMU_ARCH \
  231. -nographic \
  232. -M $TEST_QEMU_MACHINE \
  233. -kernel $TEST_BSP_ROOT/rtthread.bin \
  234. > qemu_output_$TEST_QEMU_ARCH.log 2>&1 &
  235. fi
  236. QEMU_PID=$!
  237. disown $QEMU_PID
  238. - name: Monitor qemu log
  239. if: ${{ env.TOOLCHAIN_INSTALLED != '' && success() }}
  240. run: |
  241. FAILURE_DETECTED=false
  242. ERROR_LOGS=""
  243. echo "=========================================================================================="
  244. echo " || || "
  245. echo " || Start automatic running of Utest || "
  246. echo " VV VV "
  247. echo "=========================================================================================="
  248. tail -n 0 -f qemu_output_$TEST_QEMU_ARCH.log | while read line; do
  249. echo $line
  250. if [[ "$line" == *"[ FAILED ] [ result ]"* ]]; then
  251. ERROR_LOGS="$ERROR_LOGS$line"$'\n'
  252. FAILURE_DETECTED=true
  253. fi
  254. if [[ "$line" == *"[==========] [ utest ] finished"* ]]; then
  255. if $FAILURE_DETECTED; then
  256. echo "=========================================================================================="
  257. echo " || || "
  258. echo " || Error: Failures detected in logs. Below are the failure details... || "
  259. echo " VV VV "
  260. echo "=========================================================================================="
  261. echo "$ERROR_LOGS"
  262. exit 1
  263. fi
  264. echo "=========================================================================================="
  265. echo " Successed: Utest run completed. Exiting log monitoring "
  266. echo "=========================================================================================="
  267. break
  268. fi
  269. done
  270. # Post CI status to PR comment
  271. post-ci-status:
  272. needs: test
  273. if: always() && github.event_name == 'pull_request' && github.repository_owner == 'RT-Thread'
  274. uses: ./.github/workflows/post_ci_status.yml
  275. with:
  276. workflow_name: "utest_auto_run"
  277. workflow_status: ${{ needs.test.result }}
  278. pr_number: ${{ github.event.pull_request.number }}
  279. permissions:
  280. pull-requests: write
  281. issues: write