Skip to main content

CLI toolkit for detecting and applying Prefect deployment changes in CI/CD pipelines

Project description

Prefect Deployments Toolkit

PyPI PyPI Downloads

A lightweight CLI toolkit for managing Prefect deployment lifecycles in CI/CD pipelines. It detects deployments that were added, modified, or removed between two git references, and applies (creates, updates, or deletes) those deployments against Prefect Cloud or a self-hosted Prefect server — via either the Prefect CLI or direct REST API calls.

Built for teams running many Prefect flows out of a monorepo, where each deployment is defined in its own YAML file alongside a shared prefect_base.yaml, and CI needs to figure out which deployments actually changed before re-registering them.

Features

  • Change detection — diff deployments between two git refs (a merge request source vs. target branch, or HEAD~1 vs. HEAD after a merge) and get back exactly which deployments were added, modified, or removed.
  • Unified push / pull-request logic — one code path handles both pull_request (compare local files against a fetched base branch) and push/pull_request_target (compare HEAD~1 against HEAD) event styles.
  • Dual deploy backends — apply deployments using the prefect CLI as a subprocess, or bypass it entirely with direct Prefect Cloud REST API calls for faster, more controllable deploys.
  • Dev/prod environment overrides — automatic name prefixing, work pool substitution, and schedule pausing for dev environments.
  • Concurrent deployment application — apply multiple deployments in parallel with clean, non-interleaved log output per deployment.
  • Duplicate deployment name detection — warns (or optionally cleans up) when the same deployment name resolves to more than one flow.

Installation

pip install prefect-deployments-toolkit

Requires Python >= 3.10.

Usage

1. Detect modified deployments

python -m prefect_deployments_toolkit.get_modified_deployments \
  --modified-by push \
  --base-ref main \
  --deployments-dir deployments

Prints a comma-separated list of changed deployment names to stdout, and (if running inside GitHub Actions) writes DEPLOYMENT_NAMES, NEW_OR_MODIFIED_DEPLOYMENT_NAMES, and REMOVED_DEPLOYMENT_NAMES to GITHUB_ENV.

--modified-by accepts:

  • pull_request — compares your local working tree against the fetched base branch (use during an open MR/PR).
  • push or pull_request_target — compares HEAD~1 against HEAD (use after a merge to a protected branch).

2. Apply deployments

python -m prefect_deployments_toolkit \
  --deployment-names "flow_a,flow_b" \
  --enable-schedule false \
  --tag dev \
  --reference feature-branch-1 \
  --repo-name my-flows-repo \
  --custom-image "" \
  --deployments-dir deployments \
  --dev-work-pool my-dev-work-pool \
  --backend rest \
  --enforce-unique-deployment-names false

Expected Repository Layout

deployments/
├── prefect_base.yaml # shared config merged into every deployment
├── flow_a.yaml
├── flow_b.yaml
└── ...

Each deployment YAML file must declare a deployments: list with at least a name and entrypoint key, following the standard Prefect deployment YAML schema.

Backends

Backend How it works When to use
cli Shells out to prefect deploy Simplest, matches local prefect deploy behavior exactly
rest Talks directly to the Prefect Cloud REST API Faster for many concurrent deployments, avoids CLI subprocess overhead

Environment Variables

Variable Required Purpose
PREFECT_API_URL Yes Full Prefect Cloud/server API base URL
PREFECT_API_KEY Yes API key for authentication

License

Licensed under PolyForm Noncommercial 1.0.0. You may view, use, and modify this software for noncommercial purposes. Commercial use — including building products, services, or automation on top of it — requires a separate license. Contact kwolski@dyvenia.com for commercial licensing inquiries.

Contributing

Issues and pull requests are welcome for noncommercial use cases. Please open an issue before submitting a large PR to discuss scope.

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

prefect_deployments_toolkit-0.1.1.tar.gz (213.2 kB view details)

Uploaded Source

Built Distribution

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

prefect_deployments_toolkit-0.1.1-py3-none-any.whl (25.0 kB view details)

Uploaded Python 3

File details

Details for the file prefect_deployments_toolkit-0.1.1.tar.gz.

File metadata

File hashes

Hashes for prefect_deployments_toolkit-0.1.1.tar.gz
Algorithm Hash digest
SHA256 66fce118303279ddd268edc4faaa14995bea868565042aed9aa3f3c5b5ca7e6f
MD5 49f4f456b5c3a90b8edd5204baf8c53f
BLAKE2b-256 f3429f98559cbf38cf993789a2d84934222767885bfb8ef803232ff1e8b57364

See more details on using hashes here.

Provenance

The following attestation bundles were made for prefect_deployments_toolkit-0.1.1.tar.gz:

Publisher: cd.yml on dyvenia/prefect-deployments-toolkit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file prefect_deployments_toolkit-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for prefect_deployments_toolkit-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 af1237b2f29f1d6f85c18a85793cf5c2b54798b88b6600678424b07aaa5772ac
MD5 5d845f8af1eefd8a6017914e917808df
BLAKE2b-256 5df4840d9b0286aa7a1a68c702b69aac558e94771e211c42e98c3eed9eb8a185

See more details on using hashes here.

Provenance

The following attestation bundles were made for prefect_deployments_toolkit-0.1.1-py3-none-any.whl:

Publisher: cd.yml on dyvenia/prefect-deployments-toolkit

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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