| doc_id | PAC-PROJ-007 |
|---|---|
| doc_title | Contributing to PACS System |
| doc_version | 1.0.0 |
| doc_date | 2026-04-04 |
| doc_status | Released |
| project | pacs_system |
| category | PROJ |
SSOT: This document is the single source of truth for Contributing to PACS System.
Version: 0.1.0.0 Last Updated: 2026-03-18
Thank you for your interest in contributing to PACS System! This guide will help you get started.
- Code of Conduct
- Getting Started
- Development Setup
- Making Changes
- Code Style
- Testing
- Submitting Changes
This project adheres to a code of conduct. By participating, you are expected to:
- Be respectful and inclusive
- Welcome newcomers and help them learn
- Focus on what is best for the community
- Show empathy towards other community members
Before contributing, ensure you have:
- C++20 compatible compiler
- Linux: GCC 13+ or Clang 16+
- macOS: Xcode 15+ or Apple Clang 16+
- Windows: Visual Studio 2022+
- CMake 3.20 or higher
- Git
- vcpkg (for dependency management)
- Required ecosystem dependencies:
- common_system (Result pattern, interfaces)
- container_system (DICOM serialization)
- network_system (DICOM PDU/Association)
New to open source? Start here:
-
Browse issues labeled
good first issue: -
Read the documentation:
# Fork the repository on GitHub, then clone your fork
git clone https://github.com/YOUR_USERNAME/pacs_system.git
cd pacs_systemcmake -B build -DCMAKE_BUILD_TYPE=Debug -DPACS_BUILD_TESTS=ON
cmake --build buildcd build
ctest --output-on-failureCreate a feature branch from main:
git checkout -b feature/your-feature-name
# or
git checkout -b fix/issue-description- Use conventional commit format:
type(scope): description - Types:
feat,fix,refactor,docs,test,chore,perf - Write in English
- Keep the subject line under 72 characters
- Follow existing code conventions in the repository
- Use Doxygen comments for public API (
/** @brief ... */) - English for all code, comments, and documentation
- C++20 features preferred where appropriate
- Use
pacs::namespace for all public API
The project uses clang-format. Format your code before submitting:
clang-format -i src/**/*.cpp include/**/*.h- Use Google Test framework
- Place unit tests alongside source in
tests/directories - Name test files with
test_prefix
# Build with tests enabled
cmake -B build -DPACS_BUILD_TESTS=ON
cmake --build build
# Run all tests
cd build && ctest --output-on-failure
# Run specific test
./build/bin/pacs_tests --gtest_filter=DicomElement*- Ensure all tests pass
- Run static analysis (clang-tidy) if available
- Push your branch to your fork
- Create a Pull Request against
main - Fill in the PR template with the 5W1H framework
- Wait for CI to pass and code review
- Keep PRs focused and small (< 500 lines preferred)
- Link related issues using
Closes #NorRelates to #N - Include test coverage for new functionality
- Update documentation if changing public API
Use the GitHub Issues with the 5W1H framework:
- What: Clear description of the issue
- Why: Impact and context
- Who: Affected users/components
- When: When the issue occurs
- Where: Affected files/components
- How: Steps to reproduce