GitHub Overlord
GitHub Overlord is a Python script that does a couple things to help manage open source projects on GitHub:
- Automatically merges Dependabot PRs in public repositories that have passed CI checks.
- Comment on PRs that are going to automatically be marked as stale
- Removes notifications from bot-authored PRs, Release Please PRs, self-authored PR creations without external activity, PRs merged by you, PRs closed by you, PRs approved by you that are now merged, notifications older than two months, and releases on repos you control
- Automatically creates releases for repositories based on LLM analysis of recent commits
This simple project has also given me the chance to iterate on my nixpacks github actions project.
Installation
pip install github-overlord
Usage
Usage: github-overlord [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
generate-releases Check repositories for release readiness using LLM analysis
dependabot Automatically merge dependabot PRs in public repos that...
keep-alive-prs Detect when a bot is about to close a PR for no good reason
notifications Look at notifications and mark them as read
Automatic Release Creation
The generate-releases command uses LLM analysis (via Pydantic AI) to determine when repositories are ready for a new release. Both generate-releases and keep-alive-prs share the same unified AI model configuration (defaulting to Google Gemini gemini-3.8-flash).
This is particularly useful for template repositories, starter projects, etc that don't have automated release workflows and aren't versioned for whatever reason.
I have a bunch of these and I wanted an easy way to let the world know when I build something interesting in them.
Usage:
# Check all repos with a specific topic
github-overlord generate-releases --topic auto-release
# Check a single repository
github-overlord generate-releases --repo owner/repo-name
# Dry run (see what would happen without creating releases)
github-overlord generate-releases --topic auto-release --dry-run
Requirements & Configuration:
GITHUB_TOKEN- GitHub token with repo write permissionsGITHUB_OVERLORD_AI_KEY- API key for the AI provider (or provider-specificGOOGLE_API_KEY,OPENAI_API_KEY, etc.)GITHUB_OVERLORD_MODEL- (Optional) AI model override (e.g.gemini-3.8-flash,openai:gpt-4o). Defaults togemini-3.8-flash.--topicflag orRELEASE_CHECKER_TOPIC- Topic to filter repositories (required unless using--repo)--repoflag orRELEASE_CHECKER_REPO- Single repository to process (useful for testing)RELEASE_CHECKER_MIN_GAP- Minimum time between releases for the same repo (defaults to2w, e.g.14d,48h)RELEASE_CHECKER_GLOBAL_MIN_GAP- Minimum time between releases created by this tool across the repositories in that run (defaults to1w; set to0to disable). The clock is the newest GitHub release, among those repos, whose notes include this tool'sGenerated-byline, using that release's publish time. Manual releases do not reset it. While this gap is active, a run creates at most one release even if--max-releasesis higher.
How it works:
-
Finds repositories matching the specified topic
-
Finds the newest release published by this tool across those repositories. If that publish time is newer than
RELEASE_CHECKER_GLOBAL_MIN_GAP, the run stops -
For each remaining repo, skips it when its latest release is newer than
RELEASE_CHECKER_MIN_GAP, then reads commits since that release (or since the repo was created) -
Analyzes up to the last 50 commits using the configured AI model (defaulting to
gemini-3.8-flash) to determine if a release is warranted -
If the LLM recommends a release, automatically creates one with:
- Auto-incremented semantic version (patch/minor/major based on changes)
- AI-generated release notes highlighting key changes
- Link to full changelog
Scheduling:
To run this weekly, set the SCHEDULE environment variable:
# Run every Monday at 9 AM
export SCHEDULE="0 9 * * 1"
export RELEASE_CHECKER_TOPIC="template"
# Or, to test a single repo on the schedule:
# export RELEASE_CHECKER_REPO="owner/repo-name"
export GITHUB_TOKEN="your-token"
export GITHUB_OVERLORD_AI_KEY="your-api-key"
# All CLI commands will run on this schedule
python main.py
Troubleshooting:
- "No repositories found with topic": Make sure your repos have the correct topic tag in GitHub settings
- "API key environment variable is required": Set
GITHUB_OVERLORD_AI_KEY(orGOOGLE_API_KEYfor the default Gemini model). Get a free Gemini API key from ai.google.dev - Rate limiting: The free tier has limits (15-60 requests/minute). Consider adding delays between repos if needed
- "Failed to create release": Ensure
GITHUB_TOKENhasreposcope permissions
Docker Cron
There's a docker container you can use to run this on a cron. Fits nicely into a orange pi.
Check out docker-compose.yml for an example, or git pull ghcr.io/iloveitaly/github-overlord:latest.
This project was created from iloveitaly/python-package-template
Metadata
Release files for github-overlord 0.10.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| github_overlord-0.10.0.tar.gz | 23.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| github_overlord-0.10.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 51.3 kB
Release files / github_overlord-0.10.0.tar.gz
| Download URL | github_overlord-0.10.0.tar.gz |
|---|---|
| Size | 23.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
98a6bf7b87a148aad1905d1527fe4b93550a0ee351c3ba7a2718d2d2dbc559e7
|
|
BLAKE2b-256 checksum How to use checksums |
7036af3fa3cde412944e3c8469e1f7c28dae934b47e68269bb0f84f2ca094c13
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / github_overlord-0.10.0-py3-none-any.whl
| Download URL | github_overlord-0.10.0-py3-none-any.whl |
|---|---|
| Size | 28.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
239ccd617bec1ca692361cee1d4cc23f26e478167cc2834c0e3c5b2df34c2254
|
|
BLAKE2b-256 checksum How to use checksums |
a546c2afcf9e42f80b4580f52cb6b7a4bbdb97662827c069263fa6de37097208
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.19 {"installer":{"name":"uv","version":"0.12.19","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|