CI/CD Hub
Centralized CI/CD for Java and Python repos with config-driven toggles, reusable workflows, and a single hub that runs pipelines across many repositories.
Why CI/CD Hub?
| Problem | Solution |
|---|---|
| Hours writing YAML per repo | One CLI generates config + workflows in minutes |
| Copy-paste configs that drift | 3-tier merge (defaults → hub → repo) keeps everything in sync |
| Manually configuring 10+ tools | Schema-validated config with profiles that auto-configure tools |
| Debugging cryptic CI failures | Triage bundles with prioritized, actionable reports |
Who It's For
| Audience | Use Case |
|---|---|
| Hub/Org Admins | Centralized standards across many repos |
| Teams | Consistent CI gates across Python and Java |
| Maintainers | Minimal YAML, reproducible workflows |
Core Concepts
- Hub repo: hosts defaults, templates, workflows, and repo configs.
- Target repo: owns
.ci-hub.ymlfor per-repo overrides. - Merge order: defaults → hub config → repo config (repo wins).
CLI Flow (Short)
# Guided onboarding (interactive)
python -m cihub setup
# Or generate config + workflow directly
python -m cihub init --repo . --apply
# Run CI locally (uses .ci-hub.yml)
python -m cihub ci
Execution Modes
- Central mode: the hub clones repos and runs pipelines directly from a single workflow.
- Distributed mode: the hub dispatches workflows to each repo via caller templates and reusable workflows.
Pre-Push Validation
Run local checks before pushing:
cihub check # Fast: lint, format, type, test (~30s)
cihub check --audit # + links, adr, configs (~45s)
cihub check --security # + bandit, pip-audit, trivy, gitleaks (~2min)
cihub check --full # + templates, matrix, license, zizmor (~3min)
cihub check --all # Everything including mutation (~15min)
Other validation commands:
cihub validate --repo . # Validate .ci-hub.yml against schema
cihub run ruff --repo . # Run one tool, emit JSON
cihub verify --remote # Verify workflow contracts (requires gh auth)
cihub docs generate # Regenerate CLI/config reference docs
cihub docs check # Verify docs are up to date
Toolchains
Python
| Category | Tools |
|---|---|
| Testing | pytest, Hypothesis |
| Linting | Ruff, Black, isort |
| Types | mypy |
| Security | Bandit, pip-audit, Semgrep, Trivy |
| Mutation | mutmut |
| Container | Docker, SBOM |
Java
| Category | Tools |
|---|---|
| Testing | jqwik |
| Coverage | JaCoCo |
| Quality | Checkstyle, SpotBugs, PMD |
| Security | OWASP Dependency-Check, Semgrep, Trivy |
| Mutation | PITest |
| Container | Docker, SBOM |
Shared (Both Languages)
Semgrep, Trivy, CodeQL, SBOM, Docker
Quick Start
Central mode
# Run all repos
gh workflow run hub-run-all.yml -R jguida941/ci-cd-hub
# Run by group
gh workflow run hub-run-all.yml -R jguida941/ci-cd-hub -f run_group=fixtures
Distributed mode
- Create a PAT with
repo+workflowscopes. - Set
HUB_DISPATCH_TOKENvia CLI:
python -m cihub setup-secrets --all
- In each target repo:
python -m cihub init --repo . --apply
- Set
dispatch_enabled: trueinconfig/repos/<repo>.yaml.
Prerequisites
- Python 3.10+ (3.12 used in CI)
- GitHub Actions for workflow execution
- GitHub CLI (
gh) recommended for dispatching workflows
Debugging & Triage
Analyze CI failures:
cihub triage --latest # Triage most recent failed run
cihub triage --run <id> # Triage specific run by ID
Environment flags for debugging:
| Flag | Effect |
|---|---|
CIHUB_DEBUG=True |
Show tracebacks |
CIHUB_VERBOSE=True |
Show tool logs |
CIHUB_DEBUG_CONTEXT=True |
Show decision/context blocks |
CIHUB_EMIT_TRIAGE=True |
Write triage bundle to .cihub/ |
Triage outputs: .cihub/triage.json, priority.json, triage.md
Installation (local development)
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements/requirements-dev.txt
Documentation
| Doc | Description |
|---|---|
| Docs Index | Full map of guides, references, and development docs |
| Getting Started | Primary entry point for new users |
| CLI Reference | Generated from cihub docs generate |
| Config Reference | Generated from schema |
| Tools Reference | Tool registry and options |
| Troubleshooting | Common issues and fixes |
| Development Guide | Maintainer workflow |
| Current Status | Refactor progress |
Contributing
See CONTRIBUTING.md.
Security
See SECURITY.md.
License
Elastic License 2.0. See LICENSE.
Metadata
Release files for cihub 1.0.16
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cihub-1.0.16.tar.gz | 483.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cihub-1.0.16-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.1 MB
Release files / cihub-1.0.16.tar.gz
| Download URL | cihub-1.0.16.tar.gz |
|---|---|
| Size | 483.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
599cd3e9d505586b61df57f551c98283a847f4e4535bccc27f204766f994c29d
|
|
BLAKE2b-256 checksum How to use checksums |
d561f49b710e12bd35f70321ba459fa95a0957dba9f0d89a309ca5544d6f2a39
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 20, 2026.
Transparency logRelease files / cihub-1.0.16-py3-none-any.whl
| Download URL | cihub-1.0.16-py3-none-any.whl |
|---|---|
| Size | 653.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1278954ab2c651ab4c0a9f20e51465e41c16bb37944897ce163d79bfcd0d1c55
|
|
BLAKE2b-256 checksum How to use checksums |
cf45c938c8b1a7d15683dedd19201a74d6274fd23b607b843c3838a0b19b5c0d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.9
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 20, 2026.
Transparency log