Dustin
04/18/2024, 7:16 PMMarvin
04/18/2024, 7:16 PMpython
from prefect import flow
@flow(log_prints=True) # send `print` statements as INFO logs
def my_workflow():
print("I can call any python code here, including prefect tasks or flows")
if __name__ == "__main__":
my_workflow() # call it like a normal python function
# or serve it as a long-lived process
# my_workflow.serve("my-deployment-name")
This example defines a flow my_workflow
and runs it as a normal Python function. To run this from a GitHub repository, you would typically clone the repository locally or set up a CI/CD pipeline that triggers the execution whenever code is pushed to the repository.
For more comprehensive examples and to explore different use cases, you may want to look at Prefect's documentation or search for specific flow configuration examples on GitHub repositories.
You can view the full example in the GitHub repository it was sourced from.
Keep in mind that in a production environment, it's common to use Prefect's infrastructure to run flows. This often involves registering flows with the Prefect server or cloud, and using Prefect deployments to trigger flow runs.Nate
04/18/2024, 7:20 PMhow to run flows from a github repo?@Marvin generally in prefect there 2 ways to do this •
from_source
: when using workers and .deploy()
• `git_clone`: as a pull
step when using workers and prefect.yaml
think step by step, do some research and provide a link-dense, concise exampleMarvin
04/18/2024, 7:20 PMfrom_source
method during deployment or the git_clone
step within the prefect.yaml
file. Here's a brief overview of each method:
### Using from_source
with .deploy()
You can retrieve a flow from remote storage using the flow.from_source
method. It accepts a Git repository URL and an entrypoint pointing to the flow to load from the repository.
python
from prefect import flow
my_flow = flow.from_source(
source="<https://github.com/PrefectHQ/prefect.git>",
entrypoint="flows/hello_world.py:hello"
)
if __name__ == "__main__":
my_flow()
You can then deploy this flow using Prefect's deployment functionality. An example of deploying a single flow might resemble the following:
python
from prefect import flow, serve
@flow
def my_flow_function():
# Flow definition here ...
my_deploy = my_flow_function.to_deployment(name="my-deployment-name")
serve(my_deploy)
More detailed instructions can be found in the Prefect documentation on flows.
### Using git_clone
in prefect.yaml
The prefect.yaml
file's pull
section contains instructions for preparing your flows for a deployment run, which will be executed each time a deployment created within this folder is run via a worker. One of the main types of steps you can include in this section is git_clone
, which clones the provided repository on the provided branch:
yaml
pull:
- set_working_directory: .
- git_clone:
repo: <https://github.com/my-org/my-repo.git>
branch: main
Refer to the Prefect Deployment guide for more details on configuring your deployments with prefect.yaml
.
Remember, if you're pulling from a private repository, you'll need to handle authentication appropriately, typically through SSH keys or personal access tokens.
Here's a basic flow example as a reference point for creating flows. However, this example doesn't include Github repository details.
Both methods involve setting up a Prefect environment and require a working knowledge of Prefect's flow deployment process for full integration with GitHub repositories. Please consult the provided links for a deeper understanding and a step-by-step guide to implementing these methods.