pull:-prefect.deployments.steps.git_clone:repository:https://github.com/org/repo.gitaccess_token:"{{prefect.blocks.secret.github-access-token}}"# Requires creation of a Secret block
Note that you will need to create a Secret block to store the
value of your git credentials. You can also store a username/password combo or token prefix (e.g. x-token-auth)
in your secret block. Refer to your git providers documentation for the correct authentication schema.
@sync_compatibleasyncdefgit_clone(repository:str,branch:Optional[str]=None,include_submodules:bool=False,access_token:Optional[str]=None,credentials:Optional[Block]=None,)->dict:""" Clones a git repository into the current working directory. Args: repository: the URL of the repository to clone branch: the branch to clone; if not provided, the default branch will be used include_submodules (bool): whether to include git submodules when cloning the repository access_token: an access token to use for cloning the repository; if not provided the repository will be cloned using the default git credentials credentials: a GitHubCredentials, GitLabCredentials, or BitBucketCredentials block can be used to specify the credentials to use for cloning the repository. Returns: dict: a dictionary containing a `directory` key of the new directory that was created Raises: subprocess.CalledProcessError: if the git clone command fails for any reason Examples: Clone a public repository: ```yaml pull: - prefect.deployments.steps.git_clone: repository: https://github.com/PrefectHQ/prefect.git ``` Clone a branch of a public repository: ```yaml pull: - prefect.deployments.steps.git_clone: repository: https://github.com/PrefectHQ/prefect.git branch: my-branch ``` Clone a private repository using a GitHubCredentials block: ```yaml pull: - prefect.deployments.steps.git_clone: repository: https://github.com/org/repo.git credentials: "{{ prefect.blocks.github-credentials.my-github-credentials-block }}" ``` Clone a private repository using an access token: ```yaml pull: - prefect.deployments.steps.git_clone: repository: https://github.com/org/repo.git access_token: "{{ prefect.blocks.secret.github-access-token }}" # Requires creation of a Secret block ``` Note that you will need to [create a Secret block](/concepts/blocks/#using-existing-block-types) to store the value of your git credentials. You can also store a username/password combo or token prefix (e.g. `x-token-auth`) in your secret block. Refer to your git providers documentation for the correct authentication schema. Clone a repository with submodules: ```yaml pull: - prefect.deployments.steps.git_clone: repository: https://github.com/org/repo.git include_submodules: true ``` Clone a repository with an SSH key (note that the SSH key must be added to the worker before executing flows): ```yaml pull: - prefect.deployments.steps.git_clone: repository: git@github.com:org/repo.git ``` """ifaccess_tokenandcredentials:raiseValueError("Please provide either an access token or credentials but not both.")credentials={"access_token":access_token}ifaccess_tokenelsecredentialsstorage=GitRepository(url=repository,credentials=credentials,branch=branch,include_submodules=include_submodules,)awaitstorage.pull_code()directory=str(storage.destination.relative_to(Path.cwd()))deployment_logger.info(f"Cloned repository {repository!r} into {directory!r}")return{"directory":directory}
Pulls code from a remote storage location into the current working directory.
Works with protocols supported by fsspec.
Parameters:
Name
Type
Description
Default
url
str
the URL of the remote storage location. Should be a valid fsspec URL.
Some protocols may require an additional fsspec dependency to be installed.
Refer to the fsspec docs
for more details.
required
**settings
Any
any additional settings to pass the fsspec filesystem class.
{}
Returns:
Name
Type
Description
dict
a dictionary containing a directory key of the new directory that was created
asyncdefpull_from_remote_storage(url:str,**settings:Any):""" Pulls code from a remote storage location into the current working directory. Works with protocols supported by `fsspec`. Args: url (str): the URL of the remote storage location. Should be a valid `fsspec` URL. Some protocols may require an additional `fsspec` dependency to be installed. Refer to the [`fsspec` docs](https://filesystem-spec.readthedocs.io/en/latest/api.html#other-known-implementations) for more details. **settings (Any): any additional settings to pass the `fsspec` filesystem class. Returns: dict: a dictionary containing a `directory` key of the new directory that was created Examples: Pull code from a remote storage location: ```yaml pull: - prefect.deployments.steps.pull_from_remote_storage: url: s3://my-bucket/my-folder ``` Pull code from a remote storage location with additional settings: ```yaml pull: - prefect.deployments.steps.pull_from_remote_storage: url: s3://my-bucket/my-folder key: {{ prefect.blocks.secret.my-aws-access-key }}} secret: {{ prefect.blocks.secret.my-aws-secret-key }}} ``` """storage=RemoteStorage(url,**settings)awaitstorage.pull_code()directory=str(storage.destination.relative_to(Path.cwd()))deployment_logger.info(f"Pulled code from {url!r} into {directory!r}")return{"directory":directory}
asyncdefpull_with_block(block_document_name:str,block_type_slug:str):""" Pulls code using a block. Args: block_document_name: The name of the block document to use block_type_slug: The slug of the type of block to use """full_slug=f"{block_type_slug}/{block_document_name}"try:block=awaitBlock.load(full_slug)exceptException:deployment_logger.exception("Unable to load block '%s'",full_slug)raisetry:storage=BlockStorageAdapter(block)exceptException:deployment_logger.exception("Unable to create storage adapter for block '%s'",full_slug)raiseawaitstorage.pull_code()directory=str(storage.destination.relative_to(Path.cwd()))deployment_logger.info("Pulled code using block '%s' into '%s'",full_slug,directory)return{"directory":directory}
Sets the working directory; works with both absolute and relative paths.
Parameters:
Name
Type
Description
Default
directory
str
the directory to set as the working directory
required
Returns:
Name
Type
Description
dict
dict
a dictionary containing a directory key of the
directory that was set
Source code in src/prefect/deployments/steps/pull.py
17181920212223242526272829
defset_working_directory(directory:str)->dict:""" Sets the working directory; works with both absolute and relative paths. Args: directory (str): the directory to set as the working directory Returns: dict: a dictionary containing a `directory` key of the directory that was set """os.chdir(directory)returndict(directory=directory)