1+ name : action_auto_utest
2+
3+ # Controls when the action will run. Triggers the workflow on push or pull request
4+ # events but only for the master branch
5+ on :
6+ # Runs at 16:00 UTC (BeiJing 00:00) on the 1st of every month
7+ schedule :
8+ - cron : ' 0 16 1 * *'
9+ push :
10+ branches :
11+ - master
12+ paths-ignore :
13+ - documentation/**
14+ - ' **/README.md'
15+ - ' **/README_zh.md'
16+ pull_request :
17+ branches :
18+ - master
19+ paths-ignore :
20+ - documentation/**
21+ - ' **/README.md'
22+ - ' **/README_zh.md'
23+
24+ permissions :
25+ contents : read # to fetch code (actions/checkout)
26+
27+ jobs :
28+ test :
29+ runs-on : ubuntu-22.04
30+ name : ${{ matrix.legs.UTEST }}
31+ if : github.repository_owner == 'RT-Thread'
32+ strategy :
33+ fail-fast : false
34+ matrix :
35+ legs :
36+ - {UTEST: "qemu-vexpress-a9", RTT_BSP: "bsp/qemu-vexpress-a9", QEMU_ARCH: "arm", QEMU_MACHINE: "vexpress-a9", CONFIG_FILE: "utest_self/self.conf", SD_FILE: "sd.bin", RUN: "yes"}
37+ - {UTEST: "qemu-virt64-aarch64", RTT_BSP: "bsp/qemu-virt64-aarch64", QEMU_ARCH: "aarch64", QEMU_MACHINE: "virt", CONFIG_FILE: "utest_self/self.conf", SD_FILE: "sd.bin", RUN: "no"}
38+ - {UTEST: "qemu-virt64-riscv", RTT_BSP: "bsp/qemu-virt64-riscv", QEMU_ARCH: "riscv64", QEMU_MACHINE: "virt", CONFIG_FILE: "utest_self/self.conf", SD_FILE: "None", RUN: "yes"}
39+ env :
40+ TEST_QEMU_ARCH : ${{ matrix.legs.QEMU_ARCH }}
41+ TEST_QEMU_MACHINE : ${{ matrix.legs.QEMU_MACHINE }}
42+ TEST_BSP_ROOT : ${{ matrix.legs.RTT_BSP }}
43+ TEST_CONFIG_FILE : ${{ matrix.legs.CONFIG_FILE }}
44+ TEST_SD_FILE : ${{ matrix.legs.SD_FILE }}
45+ steps :
46+ - uses : actions/checkout@v4
47+
48+ - name : Install Tools
49+ shell : bash
50+ run : |
51+ sudo apt-get update
52+ sudo apt-get -yqq install scons qemu-system git
53+ pip3 install kconfiglib
54+
55+ - name : Install Arm ToolChains
56+ if : ${{ matrix.legs.QEMU_ARCH == 'arm' && matrix.legs.UTEST != 'rtsmart/arm' && success() }}
57+ shell : bash
58+ run : |
59+ 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
60+ sudo tar xjf gcc-arm-none-eabi-10-2020-q4-major-x86_64-linux.tar.bz2 -C /opt
61+ /opt/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-gcc --version
62+ echo "RTT_EXEC_PATH=/opt/gcc-arm-none-eabi-10-2020-q4-major/bin" >> $GITHUB_ENV
63+
64+ - name : Install Arm Musl ToolChains
65+ if : ${{ matrix.legs.QEMU_ARCH == 'arm' && matrix.legs.UTEST == 'rtsmart/arm' && success() }}
66+ shell : bash
67+ run : |
68+ 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
69+ sudo tar xjf arm-linux-musleabi_for_x86_64-pc-linux-gnu_stable.tar.bz2 -C /opt
70+ /opt/arm-linux-musleabi_for_x86_64-pc-linux-gnu/bin/arm-linux-musleabi-gcc --version
71+ echo "RTT_EXEC_PATH=/opt/arm-linux-musleabi_for_x86_64-pc-linux-gnu/bin" >> $GITHUB_ENV
72+ echo "RTT_CC_PREFIX=arm-linux-musleabi-" >> $GITHUB_ENV
73+
74+ - name : Install RISC-V ToolChains
75+ if : ${{ matrix.legs.QEMU_ARCH == 'riscv64' && matrix.legs.UTEST != 'rtsmart/riscv64' && success() }}
76+ run : |
77+ 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
78+ sudo tar zxvf riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14.tar.gz -C /opt
79+ /opt/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14/bin/riscv64-unknown-elf-gcc --version
80+ echo "RTT_EXEC_PATH=/opt/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14/bin" >> $GITHUB_ENV
81+
82+ - name : Install RISC-V Musl ToolChains
83+ if : ${{ matrix.legs.QEMU_ARCH == 'riscv64' && matrix.legs.UTEST == 'rtsmart/riscv64' && success() }}
84+ shell : bash
85+ run : |
86+ 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
87+ sudo tar xjf riscv64-linux-musleabi_for_x86_64-pc-linux-gnu_latest.tar.bz2 -C /opt
88+ /opt/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin/riscv64-unknown-linux-musl-gcc --version
89+ echo "RTT_EXEC_PATH=/opt/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin" >> $GITHUB_ENV
90+ echo "RTT_CC_PREFIX=riscv64-unknown-linux-musl-" >> $GITHUB_ENV
91+
92+ - name : Install AARCH64 Musl ToolChains
93+ if : ${{ matrix.legs.QEMU_ARCH == 'aarch64' && matrix.legs.UTEST == 'rtsmart/aarch64' && success() }}
94+ shell : bash
95+ run : |
96+ 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
97+ sudo tar xjf aarch64-linux-musleabi_for_x86_64-pc-linux-gnu_stable.tar.bz2 -C /opt
98+ /opt/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu/bin/aarch64-linux-musleabi-gcc --version
99+ echo "RTT_EXEC_PATH=/opt/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu/bin" >> $GITHUB_ENV
100+ echo "RTT_CC_PREFIX=aarch64-linux-musleabi-" >> $GITHUB_ENV
101+
102+ - name : CPP11 Preprocessing Toolchain
103+ if : ${{ matrix.legs.QEMU_ARCH == 'arm' && matrix.legs.UTEST == 'components/cpp11' && success() }}
104+ shell : bash
105+ run : |
106+ # Delete the following files
107+ sudo rm -f /opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include/c++/10.2.1/thread
108+ sudo rm -f /opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include/c++/10.2.1/mutex
109+ sudo rm -f /opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include/c++/10.2.1/condition_variable
110+ sudo rm -f /opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include/c++/10.2.1/future
111+ sudo rm -f /opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include/pthread.h
112+ # Clear the contents of the following files
113+ sudo cat /dev/null > /opt/gcc-arm-none-eabi-10-2020-q4-major/arm-none-eabi/include/sys/_pthreadtypes.h
114+ # Clear -fno-exceptions in rtconfig.py
115+ sed -i 's/-fno-exceptions/ /g' $TEST_BSP_ROOT/rtconfig.py
116+
117+ - name : Build BSP
118+ run : |
119+ echo CONFIG_RT_USING_UTESTCASES=y >> $TEST_BSP_ROOT/.config
120+ cat examples/utest/configs/$TEST_CONFIG_FILE >> $TEST_BSP_ROOT/.config
121+ scons --pyconfig-silent -C $TEST_BSP_ROOT
122+ scons -j$(nproc) --strict -C $TEST_BSP_ROOT
123+
124+ - name : Start run Test
125+ if : ${{matrix.legs.RUN == 'yes' && success() }}
126+ run : |
127+ if [ $TEST_SD_FILE != "None" ]; then
128+ dd if=/dev/zero of=$TEST_BSP_ROOT/sd.bin bs=1024 count=65536
129+ qemu-system-$TEST_QEMU_ARCH -nographic -M $TEST_QEMU_MACHINE -kernel $TEST_BSP_ROOT/rtthread.bin -nographic -sd $TEST_BSP_ROOT/sd.bin > qemu_output_${TEST_QEMU_ARCH}.log 2>&1 &
130+ else
131+ qemu-system-$TEST_QEMU_ARCH -nographic -M $TEST_QEMU_MACHINE -kernel $TEST_BSP_ROOT/rtthread.bin -nographic > qemu_output_${TEST_QEMU_ARCH}.log 2>&1 &
132+ fi
133+
134+ - name : Monitor qemu log
135+ if : ${{matrix.legs.RUN == 'yes' && success() }}
136+ run : |
137+ FAILURE_DETECTED=false
138+ ERROR_LOGS=""
139+
140+ tail -n 0 -f qemu_output_${TEST_QEMU_ARCH}.log | while read line; do
141+ echo $line
142+ if [[ "$line" == *"[ FAILED ] [ result ]"* ]]; then
143+ ERROR_LOGS="$ERROR_LOGS$line"$'\n'
144+ FAILURE_DETECTED=true
145+ fi
146+
147+ if [[ "$line" == *"[==========] [ utest ] end"* ]]; then
148+ echo "Utest run completed. Exiting log monitoring..."
149+ if $FAILURE_DETECTED; then
150+ echo "Error: Failures detected in logs. Below are the failure details..."
151+ echo "$ERROR_LOGS"
152+ exit 1
153+ fi
154+ break
155+ fi
156+ done
0 commit comments