Skip to main content

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

To install as a standalone CLI tool:

uv tool install 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 the directory you run depush from (the same place depush.yaml is looked up) using the same syntax as .gitignore to exclude files from deployment. Patterns are matched relative to the codebase directory:

*.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"))

Release files for depush 0.4.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for depush 0.4.3
File Size Uploaded
depush-0.4.3.tar.gz 26.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for depush 0.4.3
File Interpreter ABI Platform
depush-0.4.3-py3-none-any.whl Python 3 none any Details

Total release size: 43.0 kB

Release files / depush-0.4.3.tar.gz

Download URL depush-0.4.3.tar.gz
Size 26.2 kB
Tags Source
SHA-256 checksum
How to use checksums
621c227977e4fe7f2484dd685fb33809b9eae807143b3e1ce82c90c05da16b42
BLAKE2b-256 checksum
How to use checksums
3878bdda0ff3d33567afc74fa96832fc91b0c7e680ce1a08680340505cb9b88b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / depush-0.4.3-py3-none-any.whl

Download URL depush-0.4.3-py3-none-any.whl
Size 16.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
17f8ae4b4fabdf7018c52a66bdbc09e89c5a7881068ca2edaf905f1b40266865
BLAKE2b-256 checksum
How to use checksums
c2ad54f0ee9ee96a4fe811fbd4bb5119e737a99f974167bb116230c8bf55789a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.4.3 This release

2 release files

0.4.2

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

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