🏭 Automate repository maintenance, releases, and CI/CD workflows
Project description
repomatic
A Python CLI and pyproject.toml configuration that let you release Python packages multiple times a day with only 2-clicks. Designed for uv-based Python projects, but usable for other projects too. The CLI operates through reusable GitHub Actions workflows as its CI delivery mechanism.
Maintainer-in-the-loop: nothing is done behind your back. A PR or issue is created every time a change is proposed or action is needed.
What it automates
- Version bumping, git tagging, and GitHub release creation
- Changelog management
- Python package building and PyPI publishing with supply chain attestations
- Cross-platform binary compilation (Linux / macOS / Windows, x86_64 / arm64)
- Formatting autofix for Python, Markdown, JSON, Shell, and typos
- Linting: Python types with mypy, YAML, GitHub Actions, workflow security, URLs, secrets, and Awesome lists
- Synchronization of
uv.lock,.gitignore,.mailmap, and Mermaid dependency graph - Label management with file-based and content-based rules
- Inactive issue locking
- Static image optimization
- Sphinx documentation building, deployment, and autodoc updates
- Awesome list template synchronization
Why repomatic
- 18 third-party GitHub Actions replaced by internal CLI commands and SHA-256-verified binary downloads, keeping the supply chain attack surface minimal
- 8 Python linters and formatters (pylint, black, isort, pyupgrade, pydocstyle, pycln, docformatter, blacken-docs) consolidated into ruff
- 5 packaging and install tools (poetry, build, twine, check-wheel-contents, pip-audit) consolidated into uv
- All
uses:references pinned to full commit SHAs via Renovate, with stabilization windows before adopting new versions - SLSA provenance attestations on every release artifact (wheels and compiled binaries)
- VirusTotal scanning of compiled binaries to seed AV vendor databases and reduce false positives
- Trusted Publishing for PyPI uploads: no long-lived tokens stored as secrets
- Immutable releases enforced via GitHub's tag protection and release locking
- Workflow security linting with
zizmoron every push to catch dangerous triggers and excessive permissions - Credential scanning with
gitleaksto prevent secret leakage - Single
pyproject.tomlconfiguration: no extra dotfiles, no JSON configs, no YAML presets to maintain - 15+ code quality tools (ruff, mypy, biome, typos, mdformat, shfmt, yamllint, actionlint, lychee, oxipng, jpegoptim, pyproject-fmt, labelmaker, gitleaks, zizmor) managed through one
repomatic run <tool>interface with automatic installation and platform-specific binary caching
Quick start
$ cd my-project
$ uvx -- repomatic init
$ git add .
$ git commit -m "Add repomatic"
$ git push
Works for new and existing repositories. Managed files are always regenerated to the latest version; changelog.md is never overwritten. Push, and the workflows guide you through remaining setup via issues and PRs.
See repomatic init --help for available components and options.
Documentation
See the full documentation for:
- Installation methods and executables
[tool.repomatic]configuration reference- CLI parameters
- Reusable workflow reference (all 13 workflows with job descriptions)
- Security practices and token setup
- Claude Code skills
- API reference
Used in
Check these projects to get real-life examples of usage and inspiration:
Awesome Falsehood - Falsehoods Programmers Believe in.
Awesome Engineering Team Management - How to transition from software development to engineering management.
Awesome IAM - Identity and Access Management knowledge for cloud platforms.
Awesome Billing - Billing & Payments knowledge for cloud platforms.
Meta Package Manager - A unifying CLI for multiple package managers.
Mail Deduplicate - A CLI to deduplicate similar emails.
dotfiles - macOS dotfiles for Python developers.
Click Extra - Extra colorization and configuration loading for Click.
repomatic - Itself. Eat your own dog-food.
Extra Platforms - Detect platforms and group them by family.
Send a PR to add your project if you use repomatic.
Development
See claude.md for development commands, code style, testing guidelines, and design principles.
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 repomatic-6.14.0.tar.gz.
File metadata
- Download URL: repomatic-6.14.0.tar.gz
- Upload date:
- Size: 347.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","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 |
8fe45471543a546ae0961338650242f9a048c2f6e35ee9bcffcfedfbb9593a1a
|
|
| MD5 |
0e6067d609598ca4450e2671553f56e8
|
|
| BLAKE2b-256 |
4a1c8fa9b599371dc20912a1d3b352b130b7072d3d17559412f84b8e66bb17ac
|
File details
Details for the file repomatic-6.14.0-py3-none-any.whl.
File metadata
- Download URL: repomatic-6.14.0-py3-none-any.whl
- Upload date:
- Size: 417.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","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 |
efbaadf09c03d3a1d4cfd7958489e51a5531973a71c157d56b00917a6d006bb8
|
|
| MD5 |
ce7e7e566ad607d6bda3cc58ee37afb0
|
|
| BLAKE2b-256 |
191ab0a9f0bb1c19ad8f1b67e1e57b9e8d08d0a204c184ec64e70a24126655a2
|