Skip to content

Commit 7a1cb93

Browse files
committed
feat(ci): add workflow dispatch for STA timing analysis CI
1 parent 1ca1c3c commit 7a1cb93

File tree

5 files changed

+1447
-0
lines changed

5 files changed

+1447
-0
lines changed

.github/workflows/sta.yml

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
name: STA Nightly Regression
2+
3+
on:
4+
schedule:
5+
# 12:00 UTC == 20:00 UTC+8
6+
- cron: '00 12 * * *'
7+
workflow_dispatch:
8+
pull_request:
9+
10+
jobs:
11+
run-sta-xiangshan:
12+
timeout-minutes: 2880
13+
runs-on: self-hosted
14+
15+
steps:
16+
- uses: actions/checkout@v4
17+
18+
- name: Prepare XiangShan
19+
run: |
20+
cd $GITHUB_WORKSPACE/..
21+
rm -rf XiangShan
22+
proxychains git clone --single-branch --branch main --depth 1 https://github.com/OpenXiangShan/XiangShan.git
23+
cd XiangShan && make init && rm -rf difftest && cp -r $GITHUB_WORKSPACE .
24+
echo "NOOP_HOME=$(pwd)" >> $GITHUB_ENV
25+
echo "DIFF_RTL_HOME=$(pwd)/difftest/build" >> $GITHUB_ENV
26+
27+
- name: Build XiangShan
28+
run: |
29+
cd $NOOP_HOME
30+
make verilog DEBUG_ARGS="--difftest-config ESBIFDU --difftest-exclude Vec" FPGA=1 WITH_CHISELDB=0 WITH_CONSTANTIN=0 CONFIG=XSNoCDiffTopConfig -j10
31+
32+
- name: Build DiffTest
33+
run: |
34+
cd $NOOP_HOME/difftest
35+
export NOOP_HOME=$(pwd)
36+
make difftest_verilog PROFILE=../build/generated-src/difftest_profile.json NUMCORES=1 CONFIG=ESBIFDU
37+
38+
- name: Run STA
39+
run: |
40+
export PATH=/nfs/home/share/tools/yosys:$PATH
41+
export YOSYS_STA_DIR=/nfs/home/share/tools/yosys-sta
42+
export ABC_THREADS=16
43+
export YOSYS_TIMEOUT=12h
44+
export ISTA_TIMEOUT=24h
45+
export TIMEOUT_KILL_AFTER=10m
46+
RUN_STA_TOTAL_TIMEOUT=40h
47+
cd $NOOP_HOME/difftest
48+
RUN_STA_LOG=./scripts/ieda/sta_results/run_sta.log
49+
RUN_STA_STATUS=./scripts/ieda/sta_results/run_sta.status
50+
# Keep STA output in file to avoid CI pipeline log-streaming side effects.
51+
set +e
52+
if ! command -v timeout >/dev/null 2>&1; then
53+
echo "ERROR: timeout command not found on runner"
54+
exit 2
55+
fi
56+
RUN_STA_LOG_TO_FILE=1 RUN_STA_LOG_CONSOLE=0 RUN_STA_LOG_FILE=$RUN_STA_LOG RUN_STA_STATUS_FILE=$RUN_STA_STATUS \
57+
timeout --foreground --signal=TERM --kill-after=15m "$RUN_STA_TOTAL_TIMEOUT" \
58+
bash ./scripts/ieda/run_sta.sh $DIFF_RTL_HOME GatewayEndpoint
59+
EXIT_CODE=$?
60+
set -e
61+
echo "run_sta exit code: $EXIT_CODE"
62+
# Print a compact summary to CI logs after completion.
63+
if [ -f "$RUN_STA_STATUS" ]; then
64+
echo "=== run_sta status markers (from $RUN_STA_STATUS) ==="
65+
tail -n 100 "$RUN_STA_STATUS" || true
66+
else
67+
echo "WARNING: run_sta status file not found: $RUN_STA_STATUS"
68+
fi
69+
if [ -f "$RUN_STA_LOG" ]; then
70+
echo "=== run_sta summary (from $RUN_STA_LOG) ==="
71+
grep -E '(^Step|^===|^---|^Error:|^ERROR:|completed|saved|Results|ABC threads|yosys-sta|RTL directory|Clock|PDK|Netlist|Timing analysis|Critical path|Summary)' \
72+
"$RUN_STA_LOG" | tail -n 200 || true
73+
else
74+
echo "WARNING: run_sta log not found: $RUN_STA_LOG"
75+
fi
76+
if [ "$EXIT_CODE" -ne 0 ] && [ -f "$RUN_STA_LOG" ]; then
77+
echo "=== run_sta log tail (last 200 lines) ==="
78+
tail -n 200 "$RUN_STA_LOG" || true
79+
fi
80+
if [ "$EXIT_CODE" -eq 124 ] || [ "$EXIT_CODE" -eq 137 ]; then
81+
echo "ERROR: run_sta timeout reached (total=$RUN_STA_TOTAL_TIMEOUT, yosys=$YOSYS_TIMEOUT, ista=$ISTA_TIMEOUT)"
82+
fi
83+
# Keep original non-zero exit code from run_sta.sh (including timeout 124).
84+
if [ "$EXIT_CODE" -ne 0 ]; then
85+
exit $EXIT_CODE
86+
fi
87+
# Check output artifacts only when run_sta.sh completed successfully.
88+
if [ ! -f "./scripts/ieda/sta_results/critical_paths.txt" ]; then
89+
echo "ERROR: run_sta succeeded but critical_paths.txt not found"
90+
exit 1
91+
fi
92+
exit $EXIT_CODE
93+
94+
- name: Print critical results
95+
run: |
96+
cd $NOOP_HOME/difftest
97+
if [ -f "./scripts/ieda/sta_results/critical_paths.txt" ]; then
98+
cat ./scripts/ieda/sta_results/critical_paths.txt
99+
else
100+
echo "ERROR: critical_paths.txt not found!"
101+
exit 1
102+
fi

0 commit comments

Comments
 (0)