-
Notifications
You must be signed in to change notification settings - Fork 0
242 lines (216 loc) · 7.33 KB
/
ci.yml
File metadata and controls
242 lines (216 loc) · 7.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
name: CI
on:
push:
branches: [main, master]
paths:
- '**.cpp'
- '**.cu'
- '**.cuh'
- '**.hpp'
- 'CMakeLists.txt'
- 'cmake/**'
- '.clang-format'
pull_request:
branches: [main, master]
workflow_dispatch:
permissions:
contents: read
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
format-check:
name: Format Check
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Check C/C++/CUDA formatting
run: |
set -e
echo "Installing clang-format..."
sudo apt-get update -qq
sudo apt-get install -qq -y clang-format > /dev/null 2>&1
echo "Using clang-format version: $(clang-format --version)"
echo "Checking formatting on all C/C++/CUDA files..."
FIND_CMD="find . -type f \( -name '*.cpp' -o -name '*.hpp' -o -name '*.cu' -o -name '*.cuh' \) \
! -path './build/*' \
! -path './third_party/*' \
! -path './external/*' \
! -path './vendor/*' \
! -path './.git/*' \
! -path './docs/*' \
! -path './examples/*'"
FAIL=0
while IFS= read -r file; do
if ! clang-format --dry-run --Werror "$file" 2>&1; then
echo "✗ $file"
FAIL=1
fi
done < <(eval $FIND_CMD)
if [ $FAIL -eq 1 ]; then
echo ""
echo "✗ Format check failed. Please run clang-format on the above files."
exit 1
fi
echo "✓ All files pass formatting check"
docs-consistency:
name: Documentation Consistency
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Verify executable name consistency
run: |
echo "Checking executable name consistency..."
# Check nbody_sim appears in key files
if grep -rq 'nbody_sim' README.md README.zh-CN.md index.md docs/; then
echo "✓ Executable name 'nbody_sim' found in documentation"
else
echo "⚠ Executable name 'nbody_sim' not found in some docs"
fi
# Check CMakeLists.txt has correct target
if grep -q 'add_executable(nbody_sim' CMakeLists.txt; then
echo "✓ CMakeLists.txt defines 'nbody_sim' target"
else
echo "✗ CMakeLists.txt missing 'nbody_sim' target"
exit 1
fi
- name: Verify keyboard controls documentation
run: |
echo "Checking keyboard controls documentation..."
# Check controls are documented
controls_found=0
if grep -q 'Space' README.md; then
echo "✓ Space key documented"
controls_found=$((controls_found + 1))
fi
if grep -q 'Pause\|pause' README.md; then
echo "✓ Pause action documented"
controls_found=$((controls_found + 1))
fi
if grep -q 'Reset\|reset' README.md; then
echo "✓ Reset action documented"
controls_found=$((controls_found + 1))
fi
if [ $controls_found -ge 2 ]; then
echo "✓ Controls documentation check passed"
else
echo "⚠ Some controls may be missing"
fi
- name: Verify test framework configuration
run: |
echo "Checking test framework configuration..."
if grep -q 'googletest' CMakeLists.txt || grep -q 'GoogleTest' CMakeLists.txt; then
echo "✓ Google Test configured in CMakeLists.txt"
else
echo "⚠ Google Test may not be configured"
fi
if grep -q 'rapidcheck' CMakeLists.txt || grep -q 'RapidCheck' CMakeLists.txt; then
echo "✓ RapidCheck configured in CMakeLists.txt"
else
echo "⚠ RapidCheck may not be configured"
fi
- name: Verify project structure
run: |
echo "Checking project structure..."
# Check essential directories
for dir in src include/nbody tests docs; do
if [ -d "$dir" ]; then
echo "✓ Directory '$dir' exists"
else
echo "✗ Directory '$dir' missing"
exit 1
fi
done
# Check essential files
for file in CMakeLists.txt README.md LICENSE; do
if [ -f "$file" ]; then
echo "✓ File '$file' exists"
else
echo "✗ File '$file' missing"
exit 1
fi
done
- name: Summary
run: |
echo ""
echo "=========================================="
echo "Documentation Consistency Check Complete"
echo "=========================================="
echo ""
echo "All checks passed. Ready for deployment."
markdown-lint:
name: Markdown Lint
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Lint markdown files
uses: DavidAnson/markdownlint-cli2-action@v19
with:
globs: |
*.md
docs/**/*.md
changelog/**/*.md
examples/**/*.md
build-info:
name: Build Information
runs-on: ubuntu-latest
needs: [format-check, docs-consistency]
steps:
- name: Display build requirements
run: |
echo "# N-Body Simulation Build Requirements"
echo ""
echo "This project requires a CUDA-enabled environment for building."
echo ""
echo "## Hardware Requirements"
echo ""
echo "| Component | Minimum | Recommended |"
echo "|-----------|---------|-------------|"
echo "| GPU | NVIDIA CC 7.0+ | NVIDIA CC 8.0+ |"
echo "| VRAM | 4GB | 8GB+ |"
echo "| RAM | 8GB | 16GB+ |"
echo ""
echo "## Software Requirements"
echo ""
echo "| Component | Version |"
echo "|-----------|---------|"
echo "| CUDA Toolkit | 11.0+ |"
echo "| CMake | 3.18+ |"
echo "| OpenGL | 3.3+ |"
echo "| GLFW | 3.3+ |"
echo "| GLEW | 2.1+ |"
echo "| GLM | 0.9.9+ |"
echo ""
echo "## Build Commands"
echo ""
echo '```bash'
echo "# Clone repository"
echo "git clone https://github.com/LessUp/n-body.git"
echo "cd n-body"
echo ""
echo "# Build"
echo "mkdir build && cd build"
echo "cmake .. -DCMAKE_BUILD_TYPE=Release"
echo "cmake --build . -j\$(nproc)"
echo '```'
echo ""
echo "## Run Tests"
echo ""
echo '```bash'
echo "ctest --output-on-failure"
echo "./nbody_tests"
echo '```'
echo ""
echo "## Run Simulation"
echo ""
echo '```bash'
echo "./nbody_sim 10000 # 10K particles"
echo "./nbody_sim 100000 # 100K particles"
echo '```'
echo ""
echo "---"
echo "CI validates formatting and documentation consistency."
echo "For full build verification, use a local CUDA environment."