Skip to main content

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_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. mylibmylib/{version}/ (required)
DEPUSH_DEPLOY_CODEBASE_DIR Path to codebase directory .
DEPUSH_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

depush-0.3.1.tar.gz (52.0 kB view details)

Uploaded Source

Built Distribution

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

depush-0.3.1-py3-none-any.whl (16.6 kB view details)

Uploaded Python 3

File details

Details for the file depush-0.3.1.tar.gz.

File metadata

  • Download URL: depush-0.3.1.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

Hashes for depush-0.3.1.tar.gz
Algorithm Hash digest
SHA256 fb36371d5c43c4d39d46ea8a81bd4ee3aeeb51fefd8f9f2a693861db2daa0278
MD5 6a934801879cfd2424b84893c3564403
BLAKE2b-256 a58182946f3231ea230de0f13cd6f239210ced2f63068fa3a9e8d014533672e5

See more details on using hashes here.

File details

Details for the file depush-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: depush-0.3.1-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

Hashes for depush-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2058c42ff2e8fc5e2903fdc9c5beaf961765657717e50816ec858232df7c92da
MD5 285c4f5251a4ff7f482a7caeb4842c3f
BLAKE2b-256 d072fa41b5c3a3d21e17d3fc516cbb3c4be13b8fb8b7ac67927965959a08e03c

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