Skip to main content

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 overridesED_PROVIDERS__CLOUD=gcp overrides 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

easydeploy_cli-0.1.0.tar.gz (20.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

easydeploy_cli-0.1.0-py3-none-any.whl (24.1 kB view details)

Uploaded Python 3

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

Hashes for easydeploy_cli-0.1.0.tar.gz
Algorithm Hash digest
SHA256 da0a6838106325e6b1b40a7bcec20d663cf64a6cc5b357d07b0f58210b71af89
MD5 74d57e610dede7b314cbfe430aee9340
BLAKE2b-256 eb92c359d615c9eda72199abfd15dba2b65ceab003de5bf3715e3860e2ec9667

See more details on using hashes here.

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

Hashes for easydeploy_cli-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ad5597b496e901f94f163576cb50f4a3988b605dd2f02b8b695483f20462b65f
MD5 47b831cff428db8d3484a7101196e4b1
BLAKE2b-256 430ed853f167f43e8024a89ab32959dbff37ac8d17bb3730cba45e1d6b4f0e8e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page