Skip to content
You're viewing an older version of this GitHub Action. Do you want to see the latest version instead?
upload-cloud

GitHub Action

Deploy a Prefect flow

v1.0.0

Deploy a Prefect flow

upload-cloud

Deploy a Prefect flow

Deploy a flow from a project by creating a Prefect deployment

Installation

Copy and paste the following snippet into your .yml file.

              

- name: Deploy a Prefect flow

uses: PrefectHQ/[email protected]

Learn more about this action in PrefectHQ/actions-prefect-deploy

Choose a version

actions-prefect-deploy

Details

A Github Action to deploy a Prefect flow via Prefect Projects. Note - all configuration defined in your deployment.yaml will be infered at run time; this means you do not need to duplicate cli arguments that are already defined. For example, if your deployment.yaml looks like:

description: null
entrypoint: examples/simple/flow.py:call_api
flow_name: null
name: Simple
parameters: {}
schedule: null
tags: []
version: null
work_pool:
  job_variables:
    image: prefecthq/prefect:2-latest
  name: simple-pool
  work_queue_name: null

You will not need to pass your work-pool name or the deployment name to this action.

Requirements

Inputs

Input Desription Required Default
additional-args Any additional arguments to pass to the Prefect Deploy command. Available additional arguments are listed below. false
entrypoint The path to a flow entrypoint within a project, in format: ./path/to/file.py:flow_func_name. true
prefect-api-key API Key to authenticate with Prefect. true
prefect-workspace Full handle of workspace, in format <account_handle>/<workspace_handle>. true
requirements-file-path Path to requirements files to correctly install dependencies for your Prefect flow. false ./requirements.txt

Examples

Simple Prefect Deploy

Deploy a Prefect flow that doesn't have a push step defined in the prefect.yaml

name: Deploy a Prefect flow
on:
  push:
    branches:
      - main
jobs:
  deploy_flow:
    runs-on: ubuntu-latest
    steps:
      - uses: checkout@v3

      - uses: actions/setup-python@v4
        with:
          python-version: '3.10'

      - name: Run Prefect Deploy
        uses: PrefectHQ/actions-prefect-deploy@v1
        with:
          prefect-api-key: ${{ secrets.PREFECT_API_KEY }}
          prefect-workspace: ${{ secrets.PREFECT_WORKSPACE }}
          requirements-file-path: ./examples/simple/requirements.txt
          entrypoint: ./examples/simple/flow.py:call_api
          additional-args: --cron '30 19 * * 0'

Basic Docker Auth w/ Prefect Deploy

Deploy a Prefect flow and also build a Docker artifact that pushes to a defined repository in the prefect.yaml file.

name: Build an Image and Deploy a Prefect flow
on:
  push:
    branches:
      - main
jobs:
  deploy_flow:
    runs-on: ubuntu-latest
    steps:
      - uses: checkout@v3

      - uses: actions/setup-python@v4
        with:
          python-version: '3.10'

      - uses: docker/login-action@v2
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Run Prefect Deploy
        uses: PrefectHQ/actions-prefect-deploy@v1
        with:
          prefect-api-key: ${{ secrets.PREFECT_API_KEY }}
          prefect-workspace: ${{ secrets.PREFECT_WORKSPACE }}
          requirements-file-path: ./examples/docker/requirements.txt
          entrypoint: ./examples/docker/flow.py:call_api
          additional-args: --cron '30 19 * * 0' --pool docker-pool

GCP Workload Identity w/ Prefect Deploy

Deploy a Prefect flow and also build a Docker artifact that pushes to a defined repository in the prefect.yaml file.

name: Build an Image and Deploy a Prefect flow
on:
  push:
    branches:
      - main
jobs:
  deploy_flow:
    permissions:
      # required to obtain Google Cloud service account credentials
      id-token: write
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - uses: google-github-actions/auth@v1
        with:
          workload_identity_provider: projects/<project_id>/locations/global/workloadIdentityPools/<pool-name>/providers/<provider-name>
          service_account: <gcp_service_account>@<project_id>.iam.gserviceaccount.com

      - name: Configure Google Cloud credential helper
        run: gcloud auth configure-docker --quiet us-east1-docker.pkg.dev

      - uses: actions/setup-python@v4
        with:
          python-version: '3.10'

      - name: Run Prefect Deploy
        uses: PrefectHQ/actions-prefect-deploy@v1
        with:
          prefect-api-key: ${{ secrets.PREFECT_API_KEY }}
          prefect-workspace: ${{ secrets.PREFECT_WORKSPACE }}
          requirements-file-path: ./examples/docker/requirements.txt
          entrypoint: ./examples/docker/flow.py:call_api
          additional-args: --cron '30 19 * * 0' --pool docker-pool

Additional Arguments

Arg Name Description Example
--anchor-date The anchor date for an interval schedule.
--cron A cron string that will be used to set a CronSchedule on the deployment. --cron '30 19 * * 0'
--description The description to give the deployment. If not provided, the description will be populated from the flow's description.
--interval An integer specifying an interval (in seconds) that will be used to set an IntervalSchedule on the deployment. --interval 60
--name The name to give the deployment. --name 'Test Flow'
--param An optional parameter override, values are parsed as JSON strings --param question=ultimate --param answer=42
--params An optional parameter override in a JSON string format. --params='{"question": "ultimate", "answer": 42}'
--pool The work pool that will handle this deployment's runs. --pool docker-pool
--rrule An RRule that will be used to set an RRuleSchedule on the deployment.
--tag One or more optional tags to apply to the deployment - Note: tags are used only for organizational purposes.
--timezone Deployment schedule timezone string. --timezone 'America/New_York'
--variable One or more job variable overrides for the work pool. --variable foo=bar
--version A version to give the deployment.
--work-queue The work queue that will handle this deployment's runs. It will be created if it doesn't already exist. --work-queue test

Terms & Conditions

See here for the Prefect's Terms and Conditions.