{"id":33526236,"url":"https://github.com/benovermyer/github-reports","last_synced_at":"2026-05-14T19:06:39.669Z","repository":{"id":325526695,"uuid":"1101528093","full_name":"BenOvermyer/github-reports","owner":"BenOvermyer","description":"A script to generate repository statistics for GitHub in chart form.","archived":false,"fork":false,"pushed_at":"2025-11-21T20:08:14.000Z","size":47,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-21T22:08:36.651Z","etag":null,"topics":["github","project-management"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/BenOvermyer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-21T20:02:20.000Z","updated_at":"2025-11-21T20:21:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/BenOvermyer/github-reports","commit_stats":null,"previous_names":["benovermyer/github-reports"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/BenOvermyer/github-reports","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenOvermyer%2Fgithub-reports","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenOvermyer%2Fgithub-reports/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenOvermyer%2Fgithub-reports/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenOvermyer%2Fgithub-reports/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BenOvermyer","download_url":"https://codeload.github.com/BenOvermyer/github-reports/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BenOvermyer%2Fgithub-reports/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286079811,"owners_count":27282121,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-26T02:00:06.075Z","response_time":193,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["github","project-management"],"created_at":"2025-11-26T12:04:36.399Z","updated_at":"2025-11-26T12:04:38.239Z","avatar_url":"https://github.com/BenOvermyer.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GitHub Reports CLI\n\nA Python CLI tool to generate project management charts (burndown, commit summaries, and more) from GitHub repositories using the GitHub REST API.\n\n## Requirements\n- Python 3.12+\n- [uv (Astral)](https://github.com/astral-sh/uv) for dependency management and running\n- A GitHub personal access token (PAT)\n\n### Required GitHub PAT Permissions\nYour personal access token must have the following scopes:\n\n- `repo` (Full control of private repositories)\n   - Required to read issues and commits from private repositories\n- `public_repo` (Access public repositories)\n   - Sufficient for public repositories only\n\nFor most use cases, the `repo` scope is recommended. You can generate a PAT at https://github.com/settings/tokens\n\n## Installation\n\n1. Install [uv](https://github.com/astral-sh/uv):\n   ```sh\n   curl -Ls https://astral.sh/uv/install.sh | sh\n   # or see uv docs for your OS\n   ```\n\n2. Install dependencies:\n   ```sh\n   uv sync\n   ```\n\n3. (Optional) Install as CLI:\n   ```sh\n   uv pip install -e .\n   ```\n\n## Building a Standalone Binary\n\nTo build a standalone executable that can be distributed or added to your PATH without requiring a Python environment:\n\n1. Run the publish script:\n   ```sh\n   ./publish.sh\n   ```\n\n2. The binary will be created at `dist/github-reports`.\n\n3. You can move this binary to a directory in your PATH (e.g., `~/.local/bin` or `/usr/local/bin`):\n   ```sh\n   mv dist/github-reports ~/.local/bin/\n   ```\n\n4. Now you can run the tool from anywhere:\n   ```sh\n   github-reports --help\n   ```\n\n\n## Usage\n\nAll commands accept a comma-separated list for `--repo` to aggregate data across multiple repositories.\n\n### Burndown Chart\nGenerate a burndown chart of open/closed issues over time:\n```sh\ngithub-reports burndown --repo octocat/Hello-World --token \u003cyour_token\u003e --output burndown.png\ngithub-reports burndown --repo octocat/Hello-World,psf/requests --token \u003cyour_token\u003e --output burndown.png\n```\n\n### Commit Summary\nGenerate a weekly commit count summary per user:\n```sh\ngithub-reports commit-summary --repo octocat/Hello-World --token \u003cyour_token\u003e --months 3 --output commits.png\ngithub-reports commit-summary --repo octocat/Hello-World,psf/requests --token \u003cyour_token\u003e --months 6 --output commits.png\n```\n\n### Issue Type Breakdown\nPie or bar chart of issue labels:\n```sh\ngithub-reports issue-type-breakdown --repo octocat/Hello-World --token \u003cyour_token\u003e --output labels.png --chart-type pie\ngithub-reports issue-type-breakdown --repo octocat/Hello-World,psf/requests --token \u003cyour_token\u003e --output labels.png --chart-type bar\n```\n\n### PR Activity Timeline\nLine chart of PRs opened/closed/merged per week:\n```sh\ngithub-reports pr-activity-timeline --repo octocat/Hello-World --token \u003cyour_token\u003e --output pr_timeline.png\ngithub-reports pr-activity-timeline --repo octocat/Hello-World,psf/requests --token \u003cyour_token\u003e --output pr_timeline.png\n```\n\n### Issue Resolution Time\nHistogram or boxplot of time taken to close issues:\n```sh\ngithub-reports issue-resolution-time --repo octocat/Hello-World --token \u003cyour_token\u003e --output resolution.png --chart-type hist\ngithub-reports issue-resolution-time --repo octocat/Hello-World,psf/requests --token \u003cyour_token\u003e --output resolution.png --chart-type box\n```\n\n## Popular Repository Examples\n\n- `octocat/Hello-World` (GitHub's sample repo)\n- `psf/requests` (Popular Python HTTP library)\n- `django/django` (Popular Python web framework)\n\nYou can aggregate across any combination:\n```sh\ngithub-reports burndown --repo octocat/Hello-World,django/django,psf/requests --token \u003cyour_token\u003e --output burndown.png\n```\n\n## Development\n- All dependencies are managed with `uv`.\n- CLI entry point: `github_reports/cli.py`\n- Utility functions: `github_reports/utils.py`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenovermyer%2Fgithub-reports","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbenovermyer%2Fgithub-reports","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenovermyer%2Fgithub-reports/lists"}