Skip to main content

Release Notes Downloads Python Versions GitHub CI Status License: MIT

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 permissions
  • GITHUB_OVERLORD_AI_KEY - API key for the AI provider (or provider-specific GOOGLE_API_KEY, OPENAI_API_KEY, etc.)
  • GITHUB_OVERLORD_MODEL - (Optional) AI model override (e.g. gemini-3.8-flash, openai:gpt-4o). Defaults to gemini-3.8-flash.
  • --topic flag or RELEASE_CHECKER_TOPIC - Topic to filter repositories (required unless using --repo)
  • --repo flag or RELEASE_CHECKER_REPO - Single repository to process (useful for testing)
  • RELEASE_CHECKER_MIN_GAP - Minimum time between releases for the same repo (defaults to 2w, e.g. 14d, 48h)

How it works:

  1. Finds repositories matching the specified topic

  2. For each repo, gets commits since the last release (or since repo creation if no releases)

  3. 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

  4. 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 (or GOOGLE_API_KEY for 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_TOKEN has repo scope 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.9.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for github-overlord 0.9.2
File Size Uploaded
github_overlord-0.9.2.tar.gz 21.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for github-overlord 0.9.2
File Interpreter ABI Platform
github_overlord-0.9.2-py3-none-any.whl Python 3 none any Details

Total release size: 47.6 kB

Release files / github_overlord-0.9.2.tar.gz

Download URL github_overlord-0.9.2.tar.gz
Size 21.4 kB
Tags Source
SHA-256 checksum
How to use checksums
22c2afa293e359f2ff6a540cee792d18595142105952304c88d9232ce6a24cb0
BLAKE2b-256 checksum
How to use checksums
cca5d0430ff677d8e79e29c0321e54f05aecfaa3286b95539c7298f4e07e8be1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","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.9.2-py3-none-any.whl

Download URL github_overlord-0.9.2-py3-none-any.whl
Size 26.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b2e557e342cbf10398e6c3b858a7e8178cd7c851d903256e06e72167e68a6ad0
BLAKE2b-256 checksum
How to use checksums
a8c49046cfd68985486e116973392a4f50723f487d924ab739e6b3fce40553d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","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 history Release notifications | RSS feed

0.10.1

2 release files

0.10.0

2 release files

This release

0.9.2 This release

2 release files

0.9.1

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.9

2 release files

0.6.8

2 release files

0.6.7

2 release files

0.6.6

2 release files

0.6.5

2 release files

0.6.4

2 release files

0.6.3

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.4

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page