Contributing
Thank you for your interest in contributing to HySDS! This guide will help you get started with contributing to the project.
Community Overview
HySDS is a community-driven project with:
- 50+ active developers and integrators
- 78+ repositories in the organization
- 83+ releases
- 30+ contributors to the core platform
Ways to Contribute
1. Code Contributions
- Bug fixes
- New features
- Performance improvements
- Documentation updates
2. Non-Code Contributions
- Documentation improvements
- Bug reports
- Feature requests
- Use case examples
- Community support
Getting Started
Setting Up Development Environment
# Fork and clone the repository
git clone https://github.com/your-username/hysds.git
cd hysds
# Create virtual environment
python3 -m venv venv
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
pip install -r requirements-dev.txt
# Set up pre-commit hooks
pre-commit install
Development Workflow
- Create a Branch
# Create a branch for your work
git checkout -b feature/your-feature-name
- Make Changes
- Write code following our style guide
- Add tests for new functionality
- Update documentation as needed
- Commit Changes
# Stage and commit your changes
git add .
git commit -m "feat: describe your changes"
- Push Changes
git push origin feature/your-feature-name
Coding Standards
Python Style Guide
- Follow PEP 8 guidelines
- Use meaningful variable names
- Add type hints for Python 3.8+
- Include docstrings for classes and functions
Example:
from typing import List, Optional
def process_data(input_file: str, options: Optional[dict] = None) -> List[str]:
"""
Process input data according to specified options.
Args:
input_file: Path to input file
options: Optional processing parameters
Returns:
List of processed data strings
"""
# Implementation
pass
Testing
Running Tests
# Run all tests
pytest
# Run specific test file
pytest tests/test_specific.py
# Run with coverage
pytest --cov=hysds tests/
Writing Tests
# test_example.py
import pytest
from hysds.your_module import YourClass
def test_your_feature():
instance = YourClass()
result = instance.your_method()
assert result == expected_value
Documentation
Writing Documentation
- Use clear, concise language
- Include code examples
- Add diagrams where helpful
- Update relevant README files
Building Documentation
# Install documentation dependencies
pip install -r docs/requirements.txt
# Build documentation
cd docs
make html
Pull Request Process
-
Before Submitting
- Ensure all tests pass
- Update documentation
- Add changelog entry
- Follow commit message conventions
-
Submitting PR
- Create detailed PR description
- Link related issues
- Request appropriate reviewers
-
Review Process
- Address reviewer comments
- Make requested changes
- Keep PR updated with main branch
Community Channels
Getting Help
- GitHub Issues
- Slack Channels
- #hysds-community
- #hysds-developers
- #hysds-general
- Community Wiki
Regular Meetings
- Bi-weekly multi-mission coordination meetings
- Community development discussions
- Feature planning sessions
Issue Reporting
Bug Reports
- Use the bug report template
- Include system information
- Provide reproducible examples
- Attach relevant logs
Feature Requests
- Use the feature request template
- Describe the problem solved
- Provide use cases
- Suggest implementation details
Recognition
We recognize contributions through:
- Attribution in release notes
- Documentation credits
- Community acknowledgments
- Project statistics
Code of Conduct
We maintain a welcoming, inclusive community:
- Be respectful and professional
- Value diverse perspectives
- Follow project guidelines
- Help others learn and grow
Additional Resources
Questions? Reach out to us:
- GitHub: HySDS Issues
- Slack: HySDS Community
- Email: support@hysds.org