Make DevOps easy — one config file, full pipeline automation.
Project description
easydeploy
One config file. Full DevOps pipeline.
easydeploy is a Python library that reads a single devops.yaml file and automates your entire DevOps process — CI/CD, infrastructure provisioning, container builds, deployments, and monitoring setup.
pip install easydeploy
easydeploy init # creates devops.yaml template
easydeploy run # executes the full pipeline
Features
- Single config file — everything lives in
devops.yaml - AES-256-GCM vault — credentials encrypted at rest, safe to commit
- AWS KMS support — enterprise key management out of the box
- Pluggable providers — AWS, GCP, Azure, GitHub Actions, Docker, Kubernetes
- Full pipeline orchestration — lint → test → build → push → deploy → notify
- CLI + Python API — use from the terminal or import in your scripts
- Environment variable overrides —
ED_PROVIDERS__CLOUD=gcpoverrides any config key
Installation
# Core (config + vault only)
pip install easydeploy
# With AWS support
pip install "easydeploy[aws]"
# With Kubernetes + Docker
pip install "easydeploy[k8s,docker]"
# Everything
pip install "easydeploy[all]"
Quick start
1. Create your config
easydeploy init
# → creates devops.yaml from template
2. Encrypt your credentials
export ED_MASTER_PASSWORD="your-master-password"
easydeploy encrypt "ghp_your_github_token"
# → VAULT:enc:dGhpcyBpcyBub3QgYWN0dWFsIGVuY3J5cHRlZA==
# Paste the output into devops.yaml
3. Fill in devops.yaml
credentials:
aws_access_key: VAULT:enc:abc123==
aws_secret_key: VAULT:enc:xyz456==
github_token: VAULT:enc:def789==
docker_user: myusername
docker_pass: VAULT:enc:ghi012==
providers:
cloud: aws
region: us-east-1
registry: ecr
pipeline:
stages: [lint, test, build, push, deploy, notify]
on_failure: rollback
containers:
image: myapp
k8s_namespace: production
replicas: 3
monitoring:
tool: datadog
alert_email: ops@example.com
4. Run
easydeploy run
# [easydeploy] Starting pipeline: lint → test → build → push → deploy → notify
# [easydeploy] ── Stage: lint
# ...
# [easydeploy] Pipeline complete.
Python API
from easydeploy import EasyDeploy
# Full pipeline
ed = EasyDeploy("devops.yaml") # ED_MASTER_PASSWORD env var used automatically
ed.run()
# Individual stages
ed.cicd.lint()
ed.cicd.test()
ed.containers.build_and_push()
ed.infra.provision()
ed.monitoring.setup_alerts()
# Run specific stages only
ed.run(stages=["build", "push", "deploy"])
CLI reference
| Command | Description |
|---|---|
easydeploy init |
Create a devops.yaml template |
easydeploy encrypt VALUE |
Encrypt a credential value |
easydeploy decrypt VALUE |
Decrypt a VAULT:enc: value |
easydeploy validate |
Validate config without running |
easydeploy run |
Execute full pipeline |
easydeploy run --stage build |
Run a single stage |
Vault / credential security
Credentials are encrypted with AES-256-GCM using a key derived via PBKDF2-SHA256 (480,000 iterations, OWASP 2023 recommendation). Each value gets a unique random salt and nonce — encrypting the same value twice produces different ciphertext.
Encrypted blob layout:
[ salt (16 bytes) | nonce (12 bytes) | ciphertext + auth tag ]
→ base64 encoded → stored as VAULT:enc:<base64>
Master password delivery options:
| Method | How |
|---|---|
| Environment variable | export ED_MASTER_PASSWORD=... |
| CLI prompt | Prompted automatically if not set |
| AWS KMS | Set kms_key_id in config — no password needed |
Never commit devops.yaml with plain-text credentials. The encrypted file is safe to commit — the VAULT:enc: values are meaningless without the master password.
Environment variable overrides
Any config key can be overridden at runtime using ED_ prefixed env vars. Use double underscore __ to navigate nested keys:
ED_PROVIDERS__CLOUD=gcp # overrides config.providers.cloud
ED_CONTAINERS__REPLICAS=5 # overrides config.containers.replicas
ED_PIPELINE__ON_FAILURE=stop # overrides config.pipeline.on_failure
Supported providers (roadmap)
| Provider | v0.1 | v0.2 | v0.3 |
|---|---|---|---|
| AWS | ✅ | ✅ | ✅ |
| GitHub Actions | ✅ | ✅ | ✅ |
| Docker | ✅ | ✅ | ✅ |
| Kubernetes | stub | ✅ | ✅ |
| Terraform | stub | ✅ | ✅ |
| GCP | — | ✅ | ✅ |
| Azure | — | — | ✅ |
| Datadog | stub | ✅ | ✅ |
| PagerDuty | — | ✅ | ✅ |
Development
git clone https://github.com/yourusername/easydeploy
cd easydeploy
pip install -e ".[dev]"
# Run tests
pytest
# Lint
ruff check easydeploy/
# Type check
mypy easydeploy/
License
MIT
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 easydeploy_cli-0.1.0.tar.gz.
File metadata
- Download URL: easydeploy_cli-0.1.0.tar.gz
- Upload date:
- Size: 20.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da0a6838106325e6b1b40a7bcec20d663cf64a6cc5b357d07b0f58210b71af89
|
|
| MD5 |
74d57e610dede7b314cbfe430aee9340
|
|
| BLAKE2b-256 |
eb92c359d615c9eda72199abfd15dba2b65ceab003de5bf3715e3860e2ec9667
|
File details
Details for the file easydeploy_cli-0.1.0-py3-none-any.whl.
File metadata
- Download URL: easydeploy_cli-0.1.0-py3-none-any.whl
- Upload date:
- Size: 24.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ad5597b496e901f94f163576cb50f4a3988b605dd2f02b8b695483f20462b65f
|
|
| MD5 |
47b831cff428db8d3484a7101196e4b1
|
|
| BLAKE2b-256 |
430ed853f167f43e8024a89ab32959dbff37ac8d17bb3730cba45e1d6b4f0e8e
|