-
Notifications
You must be signed in to change notification settings - Fork 0
175 lines (153 loc) · 4.73 KB
/
ci.yml
File metadata and controls
175 lines (153 loc) · 4.73 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
name: CI
on:
push:
branches: [main, master]
paths:
- '**.cpp'
- '**.cu'
- '**.cuh'
- '**.hpp'
- 'CMakeLists.txt'
- 'cmake/**'
- 'scripts/**'
- '.github/workflows/**'
- '.clang-format'
pull_request:
branches: [main, master]
paths:
- '**.cpp'
- '**.cu'
- '**.cuh'
- '**.hpp'
- 'CMakeLists.txt'
- 'cmake/**'
- 'scripts/**'
- '.github/workflows/**'
- '.clang-format'
workflow_dispatch:
permissions:
contents: read
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
headless-core-build:
name: Headless Core Build
runs-on: ubuntu-latest
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Configure headless core build
run: |
cmake -S . -B build/headless \
-DNBODY_ENABLE_RENDERING=OFF \
-DNBODY_ENABLE_CUDA=OFF \
-DNBODY_BUILD_TESTS=OFF \
-DNBODY_BUILD_EXAMPLES=OFF \
-G "Unix Makefiles"
- name: Build headless core library
run: cmake --build build/headless -j"$(nproc)"
format-check:
name: Format Check
runs-on: ubuntu-latest
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
steps:
- name: Checkout
uses: actions/checkout@v6
- 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
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
steps:
- name: Checkout
uses: actions/checkout@v6
- 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: 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: 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
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Lint markdown files
uses: DavidAnson/markdownlint-cli2-action@v23
with:
globs: |
*.md
docs/**/*.md
examples/**/*.md