Thank you for your interest in contributing! This project follows a focused, quality-first development process.
- Fork the repository
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/github-issue-analytics.git cd github-issue-analytics - Install in development mode:
python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate pip install -e ".[dev]"
- Run tests to verify:
pytest tests/ -v
feat/description— new featuresfix/description— bug fixesdocs/description— documentationrefactor/description— code improvements
This project uses ruff for linting and formatting:
# Check
ruff check src/ tests/
ruff format --check src/ tests/
# Auto-fix
ruff check --fix src/ tests/
ruff format src/ tests/All changes must include tests. Run:
pytest tests/ -v --tb=shortFollow conventional commits:
feat: add time-to-close metricfix: handle empty label lists in classify_areadocs: add config reference for tracking patternstest: add edge case for zero-issue backlogrefactor: extract age calculation to utility
src/github_issue_analytics/
├── config.py # YAML config → dataclasses
├── etl.py # GitHub REST API → ClassifiedIssue
├── metrics.py # 13-metric calculation engine
├── analyzer.py # High-level facade (orchestrates everything)
├── reporter.py # Markdown report generator
├── dashboard.py # HTML dashboard generator
├── trends.py # WoW trend storage & analysis
└── cli.py # Click CLI (`gia` command)
-
Config-driven — All label mappings, thresholds, and rules live in YAML. No hardcoded repository-specific logic in any module.
-
Dataclass-first — Intermediate data uses frozen/typed dataclasses, not raw dicts. This catches errors early and documents structure.
-
No external dashboard deps — The HTML dashboard is self-contained (no Chart.js, no CDN). Works offline, renders in any browser.
-
Pure
requests— No dependency onghCLI or other GitHub tools. Only the GitHub REST API viarequests.
- Create a branch from
main - Make your changes with tests
- Run
ruff checkandpytest - Submit a PR with a clear description
- Wait for CI to pass and a maintainer review
- Use GitHub Issues
- Include: Python version, OS, config snippet, error message
- Label appropriately:
bug,feature-request,docs
By contributing, you agree that your contributions will be licensed under the MIT License.