Contributing¶
Thank you for your interest in contributing to BirthdayRS!
How to Contribute¶
Reporting Bugs¶
Check existing issues on GitHub
Create a new issue with:
Clear title and description
Steps to reproduce
Expected behavior
Actual behavior
Environment information (Python version, OS, etc.)
Suggesting Features¶
Check existing feature requests
Create a new issue with:
Clear description of the feature
Use cases and benefits
Possible implementation approach
Pull Requests¶
Fork the repository
Create a feature branch (
git checkout -b feature/amazing-feature)Make your changes
Run tests and linting
Commit your changes (
git commit -m 'Add amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
Development Setup¶
# Clone the repository
git clone https://github.com/wllzhang/BirthdayRS.git
cd BirthdayRS
# Install dependencies
uv sync
# Or using pip
pip install -r requirements.txt
Running Tests¶
# Run all tests
pytest
# Run with coverage
pytest --cov=src
# Run with HTML coverage report
pytest --cov=src --cov-report=html
Code Style¶
This project uses flake8 for code style checking.
# Run flake8
flake8 .
# Configuration is in .flake8
# - Max line length: 100
# - Ignores: E501, W503
Documentation¶
Documentation is built with Sphinx and automatically deployed to GitHub Pages.
# Build documentation locally
cd docs
sphinx-build -b html . _build
# Or using make (if available)
make html
Project Structure¶
BirthdayRS/
├── src/
│ ├── core/ # Core business logic
│ ├── notification/ # Notification senders
│ └── main.py # Application entry point
├── tests/ # Test suite
├── templates/ # Jinja2 email templates
├── docs/ # Documentation
├── .github/workflows/ # GitHub Actions workflows
└── config.example.yml # Configuration example
Coding Guidelines¶
Follow PEP 8 style guide
Write tests for new features
Update documentation for API changes
Use meaningful commit messages
Keep pull requests focused and concise
License¶
By contributing to BirthdayRS, you agree that your contributions will be licensed under the MIT License.