Skip to content

CI

CI #15

Workflow file for this run

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."