Skip to main content

Sync CI/CD variables and secrets between platforms

Project description

envcmp

Python License Tests Coverage CI

A lightweight CLI tool to sync CI/CD variables and secrets between platforms.

The problem

Your variables live in multiple places:

  • Terraform Cloud workspace
  • GitLab CI variables
  • GitHub Actions secrets
  • .env files

They should always be in sync — but no tool does this automatically.

Solution

# see what's different
envcmp diff --from gitlab:my-project --to terraform:my-workspace

# output
KEY          SOURCE      TARGET      STATUS
──────────────────────────────────────────────
DB_HOST      localhost   localhost   in sync
DB_PORT      5432        5432        in sync
API_KEY      ••••••••    (not set)   source only
STRIPE_KEY   (not set)   ••••••••    target only
DB_PASS      ••••••••    ••••••••    differs

Supported platforms

Platform Category Read Write Status
.env files Local available
GitLab CI Variables CI/CD available
Terraform Cloud IaC available
GitHub Actions CI/CD ⚠️ available
HashiCorp Vault Secret Store available
AWS Secrets Manager Secret Store 🔜 🔜 coming soon
Azure Key Vault Secret Store 🔜 🔜 coming soon
GCP Secret Manager Secret Store 🔜 🔜 coming soon
Pulumi ESC IaC 🔜 🔜 coming soon
Jenkins CI/CD 🔜 🔜 coming soon
CircleCI CI/CD 🔜 🔜 coming soon
Azure DevOps CI/CD 🔜 🔜 coming soon
Kubernetes Secrets Container 🔜 🔜 coming soon
Vercel Deploy 🔜 🔜 coming soon
Railway Deploy 🔜 🔜 coming soon
Fly.io Deploy 🔜 🔜 coming soon

Installation

pip install envcmp

Configuration

Copy .env.example to .env and fill in your credentials:

cp .env.example .env
GITLAB_URL=https://gitlab.com
GITLAB_TOKEN=glpat-...
GITLAB_PROJECT_ID=12345678

GITHUB_TOKEN=ghp_...
GITHUB_ORGANIZATION=my-org
GITHUB_REPOSITORY=my-repo

TERRAFORM_TOKEN=...
TERRAFORM_ORGANIZATION=my-org
TERRAFORM_WORKSPACE=my-workspace

Usage

# diff between two providers
envcmp diff --from gitlab:my-project --to terraform:my-workspace

# diff between two .env files
envcmp diff --from env:.env.production --to env:.env.staging

# push changes
envcmp push --from gitlab:my-project --to terraform:my-workspace

# dry run
envcmp push --from env:.env --to env:.env.staging --dry-run

# pull changes from target to source
envcmp pull --from env:.env.local --to gitlab:my-project

# dry run
envcmp pull --from env:.env.local --to gitlab:my-project --dry-run

Development

git clone https://github.com/saeedya/envcmp.git
cd envcmp
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytest

Integration Tests

Requires Docker:

# start services
docker-compose -f docker-compose.test.yml up -d

# run integration tests
pytest tests/integration/ -v -m integration

# stop services
docker-compose -f docker-compose.test.yml down

Security

  • Secret values are never printed in plain text
  • All output uses masked values (••••••••)
  • Dependencies scanned with pip-audit and bandit

Contributing

Contributions are welcome! Here's how to get started:

  1. Fork the repository
  2. Create a branch: git checkout -b feat/your-feature
  3. Make your changes
  4. Run tests: pytest tests/unit/ tests/security/
  5. Run pre-commit: pre-commit run --all-files
  6. Commit: git commit -m "feat: your feature"
  7. Push and open a Pull Request

See docs/contributing.md for more details.

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

envcmp-0.2.0.tar.gz (21.2 kB view details)

Uploaded Source

Built Distribution

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

envcmp-0.2.0-py3-none-any.whl (13.6 kB view details)

Uploaded Python 3

File details

Details for the file envcmp-0.2.0.tar.gz.

File metadata

  • Download URL: envcmp-0.2.0.tar.gz
  • Upload date:
  • Size: 21.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for envcmp-0.2.0.tar.gz
Algorithm Hash digest
SHA256 46317ac2a65ef00a3233a409f12295751ac957a789d8f3f568dfc0c0c1eec20f
MD5 bfe0627782f78954ad12f457cbda0365
BLAKE2b-256 1d1454ee02b8901e9023a269f29043b505e76a9647b6e0e56f0e716bfeba1e1d

See more details on using hashes here.

File details

Details for the file envcmp-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: envcmp-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 13.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.13

File hashes

Hashes for envcmp-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 023d710aaebe75ad55e6b5c49371c3161f5d0c5c5ef03e08512f293c2b086937
MD5 2f3b87bb8e99576a5da17e3a54ee655a
BLAKE2b-256 54970733a1b400a6f73449e21859411d71fd0e6892f17fb09cf64ffd59667c5d

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