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