Skip to main content

CI/CD Hub

GitHub Actions Python Java codecov mutmut ruff bandit pip-audit zizmor License: Elastic 2.0

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.yml for 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

  1. Create a PAT with repo + workflow scopes.
  2. Set HUB_DISPATCH_TOKEN via CLI:
python -m cihub setup-secrets --all
  1. In each target repo:
python -m cihub init --repo . --apply
  1. Set dispatch_enabled: true in config/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)

Source distribution for cihub 1.0.16
File Size Uploaded
cihub-1.0.16.tar.gz 483.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for cihub 1.0.16
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

1.0.16 This release

2 release files

1.0.15

2 release files

1.0.14

2 release files

1.0.13

2 release files

1.0.12

2 release files

1.0.11

2 release files

1.0.10

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.2

2 release files

1.0.1

2 release files

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