Skip to content

Commit 1ea1c18

Browse files
committed
feat: ci script associated with auto_utest.
1 parent ab1f438 commit 1ea1c18

File tree

11 files changed

+213
-1
lines changed

11 files changed

+213
-1
lines changed

.github/utest/default.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
CONFIG_RT_USING_CI_ACTION=y

.github/utest/kernel/atomic.cfg

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
CONFIG_UTEST_ATOMIC_TC=y
2+
# dependencies
3+
CONFIG_RT_USING_CI_ACTION=y
4+
CONFIG_RT_USING_TIMER_SOFT=y
5+
CONFIG_RT_USING_THREAD=y
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
CONFIG_UTEST_ATOMIC_TC=y
2+
# dependencies
3+
CONFIG_RT_USING_CI_ACTION=y
4+
CONFIG_RT_USING_TIMER_SOFT=y
5+
CONFIG_RT_USING_THREAD=y
6+
CONFIG_RT_USING_STDC_ATOMIC=y

.github/utest/kernel/device.cfg

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
CONFIG_UTEST_DEVICE_TC=y
2+
# dependencies
3+
CONFIG_RT_USING_CI_ACTION=y
4+
CONFIG_RT_USING_TIMER_SOFT=y
5+
CONFIG_RT_USING_THREAD=y

.github/utest/kernel/ipc.cfg

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
CONFIG_UTEST_SEMAPHORE_TC=y
2+
CONFIG_UTEST_EVENT_TC=y
3+
CONFIG_UTEST_MESSAGEQUEUE_TC=y
4+
CONFIG_UTEST_SIGNAL_TC=y
5+
CONFIG_UTEST_MUTEX_TC=y
6+
CONFIG_UTEST_MAILBOX_TC=y
7+
CONFIG_UTEST_WORKQUEUE_TC=y
8+
# dependencies
9+
CONFIG_RT_USING_CI_ACTION=y
10+
CONFIG_RT_USING_SEMAPHORE=y
11+
CONFIG_RT_USING_EVENT=y
12+
CONFIG_RT_USING_MESSAGEQUEUE=y
13+
CONFIG_RT_USING_SIGNALS=y
14+
CONFIG_RT_USING_MUTEX=y
15+
CONFIG_RT_USING_MAILBOX=y

.github/utest/kernel/irq.cfg

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
CONFIG_UTEST_IRQ_TC=y
2+
CONFIG_RT_HOOK_USING_FUNC_PTR=y
3+
# dependencies
4+
CONFIG_RT_USING_CI_ACTION=y

.github/utest/kernel/mem.cfg

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
CONFIG_UTEST_MEMHEAP_TC=y
2+
3+
# dependencies
4+
CONFIG_RT_USING_CI_ACTION=y
5+
CONFIG_RT_USING_MEMHEAP=y

.github/utest/kernel/thread.cfg

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
CONFIG_UTEST_THREAD_TC=y
2+
# dependencies
3+
CONFIG_RT_USING_CI_ACTION=y
4+
CONFIG_RT_USING_TIMER_SOFT=y
5+
CONFIG_RT_USING_THREAD=y

.github/utest/kernel/timer.cfg

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

0 commit comments

Comments
 (0)