YAML-config-driven GitHub repository manager
Project description
Repo Management
Declarative, YAML-driven management of GitHub repository configuration. Describe how a
repo should be configured in a YAML file; repo-management reads the live state, shows
you the diff, and reconciles it through the GitHub API (via PyGithub).
It is declarative and idempotent: re-running when nothing has changed does nothing. A section you don't mention is left unmanaged; a section you do declare is authoritative — it's the complete desired set, so anything on the repo not listed in it is removed.
Full documentation lives at nivintw.github.io/repo-management; the source code, issue tracker, and annotated example configs live in the nivintw/repo-management repository on GitHub.
Install
uv tool install repo-management # or: pip install repo-management
Requires Python 3.14+. Authentication uses a GitHub token, read from $GITHUB_TOKEN (or
--token). The token needs the scopes for whatever you manage (repo administration,
Actions secrets, etc.).
Usage
export GITHUB_TOKEN=ghp_...
repo-management validate -c repos.yaml # check the YAML (no network)
repo-management plan -c repos.yaml # show the diff (read-only)
repo-management apply -c repos.yaml # reconcile (prompts before writing)
See the CLI reference for every command and flag, the
config reference for the full config-file schema and every section it
manages, the rulesets reference for branch/tag ruleset details, and the
Projects board reference for declaratively managing a GitHub Projects v2
roadmap board and its automations. The repository's examples/ has a fully-worked
base.yaml + repos.yaml pair (plus
projects.yaml for a board).
Fleet automation
Beyond the CLI, the nivintw/repo-management repository — the tool's home — is
itself a working deployment: a control plane that manages its author's repositories with
scheduled GitHub Actions, reconciling them to config/*.yml on every push and running a
central Renovate instance scoped to exactly that fleet via
repo-management list-repos --format names. See
Fleet automation in the docs for how the pieces fit together, and
.github/workflows/docs.yml's own header comment for the reusable docs-build workflow
other fleet repos call.
Development
Clone the repository, then:
uv sync # create the venv + install everything
uv run pytest # tests + coverage (gate: 90%; currently 100%)
uvx prek@0.4.8 run --all-files # the full quality gate (ruff, format, REUSE, typos, …)
Quality checks run identically locally and in CI via prek hooks: git hygiene, gitleaks,
typos, rumdl, SPDX/REUSE headers, and ruff. Conventional Commits (gitmoji) are enforced at
commit-msg time. A few hooks shell out to system tools prek can't bootstrap — install
them locally too (most are in Homebrew): hawkeye, taplo, osv-scanner.
Publishing to PyPI
Published to PyPI on each GitHub Release via
OIDC Trusted Publishing, dress-rehearsed through TestPyPI first. See
.github/workflows/publish.yml's header comment for the flow and the one-time
environment/Trusted-Publisher setup.
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file repo_management-1.12.0.tar.gz.
File metadata
- Download URL: repo_management-1.12.0.tar.gz
- Upload date:
- Size: 261.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7c8f72e3bbf29ef3f696706dd0c244103f3ccbf6704e0011fc87ecaba149ac12
|
|
| MD5 |
2fc4199b06145a1a2f101dffb30ad111
|
|
| BLAKE2b-256 |
a9626e3493ac1d9126a6ba3193d80acfeb9ebc6bb8aa9b45bb0c4286fb19c193
|
File details
Details for the file repo_management-1.12.0-py3-none-any.whl.
File metadata
- Download URL: repo_management-1.12.0-py3-none-any.whl
- Upload date:
- Size: 82.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5cfcb1d6cb8f914041ffb1a576f92f5d2db8a44a306c3b84d01ca7ec5c15a979
|
|
| MD5 |
dc219f2e5bc3b88827296bc53996e6fb
|
|
| BLAKE2b-256 |
89bca50902e95651897b46fc88a85090c6b00802fbd448227e79a9a79d15aa6d
|