Deploy a versioned codebase to S3/MinIO, SSH, or a local directory
Project description
depush
Deploy a versioned codebase directory to S3/MinIO, SSH, or a local directory.
depush reads a version file from your codebase directory and deploys all files to {prefix}/{version}/ at the destination. Stale files at the destination that no longer exist in the source are automatically deleted, keeping deployments in sync. You can also override the version string at deploy time without touching the version file.
Configuration is flexible: use CLI flags, environment variables, or a YAML config file. Precedence (highest to lowest): CLI flag > environment variable > YAML config > default.
Installation
pip install depush
Or with uv:
uv add depush
Quick start
Your codebase directory must contain a version file:
my-project/
├── version # contains e.g. "1.2.3"
├── main.py
└── ...
If you supply --version-override (or DEPUSH_DEPLOY_VERSION_OVERRIDE), the version file is optional and its value is ignored.
Deploy to S3 / MinIO
depush --target s3 --prefix mylib \
--s3-bucket deployments \
--s3-endpoint http://localhost:9000 \
--s3-access-key admin \
--s3-secret-key secret
Files are uploaded to s3://deployments/mylib/1.2.3/.
Deploy over SSH
depush --target ssh --prefix mylib \
--ssh-host myserver.example.com \
--ssh-user deploy \
--ssh-key-file ~/.ssh/id_rsa
Files are copied to /deployments/mylib/1.2.3/ on the remote host.
Deploy to a local directory
depush --target local --prefix mylib --local-dest /srv/releases
Files are copied to /srv/releases/mylib/1.2.3/.
Dry run
Add --dry-run to any command to preview what would be deployed without making any changes:
depush --target s3 --prefix mylib --s3-bucket deployments --dry-run
Override the version
Pass --version-override to use a custom version string instead of reading the version file. The file does not need to exist when this flag is set:
depush --target local --prefix mylib --local-dest /srv/releases \
--version-override "$(git rev-parse --short HEAD)"
Files are deployed to /srv/releases/mylib/<git-sha>/.
Configuration file
Place a depush.yaml in the current directory (or pass --config path/to/file.yaml) to avoid repeating flags:
target: s3
prefix: mylib
codebase_dir: ./codebase
# dry_run: false
# version_override: "v1-hello" # optional; overrides the version file when set
# empty string (or omitting the key) falls back to reading the version file
s3:
bucket: deployments
endpoint: http://localhost:9000 # omit for AWS
region: us-east-1
access_key: admin
secret_key: secret
# local:
# dest: ./dist
# ssh:
# host: myserver.example.com
# port: 22
# user: deploy
# key_file: ~/.ssh/id_rsa
# deploy_root: /deployments
Environment variables
All options can also be set via environment variables:
| Variable | Description | Default |
|---|---|---|
DEPUSH_DEPLOY_TARGET |
Deployment target: s3, ssh, or local |
(required) |
DEPUSH_DEPLOY_PREFIX |
Path prefix, e.g. mylib → mylib/{version}/ |
(required) |
DEPUSH_DEPLOY_CODEBASE_DIR |
Path to codebase directory | . |
DEPUSH_DEPLOY_VERSION_OVERRIDE |
Override the deployment version; version file not required when set. An empty string is treated as unset and falls back to the version file. |
|
DEPUSH_DEPLOY_DRY_RUN |
Set to 1, true, or yes to preview |
false |
DEPUSH_DEPLOY_CONFIG |
Path to a YAML config file | depush.yaml if present |
DEPUSH_DEPLOY_LOCAL_DEST |
Root destination for local deployments | ./dist |
DEPUSH_S3_BUCKET |
S3/MinIO bucket name | (required for s3) |
DEPUSH_S3_ENDPOINT |
Custom endpoint URL for MinIO | (AWS default) |
DEPUSH_S3_REGION |
AWS region; falls back to AWS_DEFAULT_REGION |
us-east-1 |
DEPUSH_S3_PROFILE |
AWS credentials profile name (from ~/.aws/credentials); falls back to AWS_PROFILE |
|
DEPUSH_S3_ACCESS_KEY |
Access key / MinIO username; falls back to AWS_ACCESS_KEY_ID |
|
DEPUSH_S3_SECRET_KEY |
Secret key / MinIO password; falls back to AWS_SECRET_ACCESS_KEY |
|
DEPUSH_SSH_HOST |
SSH server hostname or IP | (required for ssh) |
DEPUSH_SSH_PORT |
SSH port | 22 |
DEPUSH_SSH_USER |
SSH username | admin |
DEPUSH_SSH_PASSWORD |
SSH password (omit to use key auth) | |
DEPUSH_SSH_KEY_FILE |
Path to private key file | |
DEPUSH_SSH_DEPLOY_ROOT |
Absolute path on the remote server | /deployments |
Ignoring files
Create a .depushignore file in your codebase directory using the same syntax as .gitignore to exclude files from deployment:
*.log
__pycache__/
.env
Programmatic use
from depush import depush
# Parse args and deploy
depush.main()
# Or use individual functions
files = depush.collect_files(Path("./my-codebase"))
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
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 depush-0.3.2.tar.gz.
File metadata
- Download URL: depush-0.3.2.tar.gz
- Upload date:
- Size: 52.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
111a375405f7cb390f9a5c71bda7e1ffd3fb2a6a62eb0a9f23542a708f05304e
|
|
| MD5 |
37b65454498708229b91eb2fe445cf4f
|
|
| BLAKE2b-256 |
83def999173f9927f357269895533afc8db33f83db06cf60aac650cac3eaafda
|
File details
Details for the file depush-0.3.2-py3-none-any.whl.
File metadata
- Download URL: depush-0.3.2-py3-none-any.whl
- Upload date:
- Size: 16.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2fb09066dc6381ffcadccd62b9dfbf6826292a7de08695047c41f59cd4151519
|
|
| MD5 |
09c94192187a6c10c9f7c14baa45dfc0
|
|
| BLAKE2b-256 |
df6266306153fbc93641920ca66a470537b13608639360d12fc2afe2a1fdca16
|