Token-free, offline, multi-platform deployer for GitHub, GitLab, and Bitbucket.
No cloud costs. No vendor lock-in. One codebase, three platforms.
A production-grade CLI that unifies deployment across the holy trinity of git platforms using a single YAML-driven configuration.
pip install .
deploynator release --type feat --project my-app
| Feature | Description |
|---|---|
| Multi-platform | GitHub (gh), GitLab (glab), Bitbucket (bb) |
| Project discovery | YAML-based project configs in projects/ dir |
| Conventional commits | feat, fix, hotfix, docs, refactor, style, chore, test, release, patch |
| Semver management | Automatic version bumping per commit type |
| Changelog generation | Auto-generated from git log, organized by type |
| Release automation | Tag, push, and create releases on all platforms |
| Documentation | ReadMenator integration for knowledge base generation |
| CI/CD workflows | Auto-generate .github/workflows/deploynator-*.yml |
| Interactive mode | Terminal menu for guided operations |
| Headless mode | Full flag-based CLI for scripting and automation |
| Dry-run mode | Simulate without making changes |
| GPG support | Automatic GPG signing detection and usage |
| lazygit integration | Optional native lazygit hooks |
| Backward compatible | Wraps original DEPLOY.sh workflow |
| Contract | File | Responsibility |
|---|---|---|
| Config | _config.py |
Immutable centralized configuration |
| Models | _models.py |
Types: Platform, CommitType, VersionInfo, ProjectConfig |
| Platform | _platforms.py |
GitHubCLI, GitLabCLI, BitbucketCLI (Strategy pattern) |
| Git | _git.py |
Git operations (commit, tag, push, branch) |
| Changelog | _changelog.py |
Changelog generation and formatting |
| Semver | _semver.py |
Semantic version management |
| Deploy | _deploy.py |
Deploy orchestration + project discovery |
| App | _app.py |
Application orchestrator + interactive menu |
| CLI | __main__.py |
Entry point and argument dispatch |
# From source
git clone https://github.com/grisuno/deploynator.git
cd deploynator
pip install .
# Install with dev dependencies (tests + ReadMenator)
pip install -e ".[dev]"
deploynator init
# Creates deploynator.yaml in current directory
deploynator auth login --platforms github gitlab
deploynator auth status
deploynator start --type feat --desc add-login
deploynator start --type fix --desc timeout-issue --remote
deploynator commit --type feat --subject "add OAuth login" --scope auth
deploynator commit --type fix --subject "fix timeout" --body "Increased timeout to 30s" --dry-run
# Auto-bump based on commit type
deploynator release --type feat --project my-app --all
# Specify version bump explicitly
deploynator release --type release --bump major --project my-app
# Skip tests (like DEPLOY.sh --no-test) or docs
deploynator release --type feat --project my-app --no-test --no-docs
# Dry run to preview
deploynator release --type feat --project my-app --dry-run
# Deploy to specific platforms
deploynator release --type fix --project my-app --platforms github gitlab
# Deploy all discovered projects
deploynator release --type feat --all
deploynator docs
# Runs ReadMenator to generate KNOWLEDGE_BASE.md with Mermaid graph
deploynator workflow --all
# Creates .github/workflows/deploynator-ci.yml and deploynator-release.yml
deploynator status
deploynator interactive
deployer/
├── deploynator/ # Tool package (9 contracts)
├── deploynator_repos/ # Local clones of managed repos
│ ├── LazyOwn/ # github.com/grisuno/LazyOwn
│ └── deploynator/ # github.com/grisuno/deploynator (self)
├── projects/ # YAML project definitions
│ ├── deploynator.yaml # Self-deployment config
│ ├── lazyown.yaml # LazyOwn deployment config
│ └── template.yaml # Template for new projects
├── SKILL.md # AI agent integration guide
├── CLAUDE.md # Contract documentation
└── README.md # This file
Place YAML files in projects/ directory. Each file defines a deployable project:
# projects/my-app.yaml
version: 1.0
name: my-app
description: "My awesome application"
repo_url: "https://github.com/username/my-app"
path: "deploynator_repos/my-app" # Local clone path (relative to deployer root)
platforms:
github:
repo: "username/my-app"
enabled: true
gitlab:
repo: "group/my-app"
enabled: true
bitbucket:
repo: "workspace/my-app"
enabled: false
version:
file: version.json
file_type: json
| Tool | Purpose | Required |
|---|---|---|
| git | Version control | Yes |
| gh | GitHub CLI | For GitHub releases |
| glab | GitLab CLI | For GitLab releases |
| bb | Bitbucket CLI | For Bitbucket releases |
| jq | JSON processing | Optional |
| pandoc | HTML generation | Optional |
| readmenator | Knowledge base | Optional (pip) |
| lazygit | Interactive TUI | Optional |
See CHANGELOG.md for release history.
AGPL-3.0
Deployed with deploynator
This project has been analyzed by ReadMenator,
a zero-token polyglot static analysis tool. Regenerate with
pip install readmenator && readmenator . --rebuild. Analysis outputs:
INDEX.md – Quick reference: what each file doesSYMBOLS.md – Every symbol with file:lineARCHITECTURE.md – Internal dependency pairs + external importsAPI.md – Public function contractsGOTCHAS.md – Change warnings (blast radius, cycles, hotspots)SECURITY.md – Findings by severity with fix hintsMEMORY.md – Rules, workflow, style, deliverables, session logMANIFEST.json – Freshness (git_commit + source_fingerprint) + read orderKB_<subsystem>.md – Per-subsystem contextrecipes/*.md – Grounded task guides (add-function, fix-cycle, …)index.md – Entry point: overview, reading order, god nodes, connectionscommunity_*.md – One synthesis page per code communityconnections.json – Typed bridges between communitiesqueries.md – Suggested questions + answer logREPORT.md – Honest audit: coverage, confidence, limitsindex.json + REPORTS.md – Query with readmenator . ask "<question>"index.md + modules/*.md – Signatures, parameters, returns, raises, examples, call graphsarchitecture.md – Tiered architecture + execution flows (control flow, call tree, sequence)classes.md, genindex.md, COVERAGE.md – Hierarchy, A-Z index, doc coverage + warningsindex.html + api/ – Offline searchable browser and machine-readable model (api/index.json, api/modules/*.jsonl one entity per line)index.html).
graph-force.html – Force-graph explorer (2D/3D, reach, paths, lenses)graph-bundle.html – Edge bundle explorer (circle + sphere)components.html – Component diagramsllms.txt (agent entry point) + md/ docs + videoanalysis.json + graph LR markdown + per-component pages + index.html*.yml),
yara_rules.yar (YARA-lite) + exclusions.yaml (false-positive blocklist)Cache (.readmenator_cache/), packaged agent skills (.claude/skills/), and the
GitHub wiki mirror are also produced on run/--rebuild.
AI agents: Read readmenator-wiki/index.md first for the big picture, then readmenator-agent/INDEX.md for grep-friendly lookup.
Developers: Read KNOWLEDGE_BASE.md for full architecture reference, open readmenator-maps/index.html for the visual gallery.