Webhooks
A Webhook is a Hook type that sends an HTTP POST request to the configured URL.
Any non 2XX response by the responding endpoint will fail the Hook, cancel the execution of the following Hooks
under the same Action. For pre-*
hooks, the triggering operation will also be aborted.
Warning: You should not use pre-*
webhooks for long-running tasks, since they block the performed operation.
Moreover, the branch is locked during the execution of pre-*
hooks, so the webhook server cannot perform any write operations on the branch (like uploading or commits).
Action File Webhook properties
See the Action configuration for overall configuration schema and details.
Property | Description | Data Type | Required | Default Value | Env Vars Support |
---|---|---|---|---|---|
url | The URL address of the request | String | true | no | |
timeout | Time to wait for response before failing the hook | String (golang’s Duration representation) | false | 1 minute | no |
query_params | List of query params that will be added to the request | Dictionary(String:String or String:List(String) | false | yes | |
headers | Headers to add to the request | Dictionary(String:String) | false | yes |
Secrets & Environment Variables
lakeFS Actions supports secrets by using environment variables.
The format {{ ENV.SOME_ENV_VAR }}
will be replaced with the value of $SOME_ENV_VAR
during the execution of the action. If that environment variable doesn’t exist in the lakeFS server environment, the action run will fail.
All environment variables need to begin with “LAKEFSACTIONS_”. Otherwise, they will be blocked.
Additionally, the actions.env.enabled
configuration parameter can be set to false
to block access to all environment variables.
Example:
...
hooks:
- id: prevent_user_columns
type: webhook
description: Ensure no user_* columns under public/
properties:
url: "http://<host:port>/webhooks/schema"
timeout: 1m30s
query_params:
disallow: ["user_", "private_"]
prefix: public/
headers:
secret_header: "{{ ENV.MY_SECRET }}"
...
Request body schema
Upon execution, a webhook will send a request containing a JSON object with the following fields:
Field | Description | Type |
---|---|---|
event_type | Type of the event that triggered the Action | string |
event_time | Time of the event that triggered the Action (RFC3339 formatted) | string |
action_name | Containing Hook Action’s Name | string |
hook_id | ID of the Hook | string |
repository_id | ID of the Repository | string |
branch_id1 | ID of the Branch | string |
source_ref | Reference to the source on which the event was triggered | string |
commit_message2 | The message for the commit (or merge) that is taking place | string |
committer2 | Name of the committer | string |
commit_metadata2 | The metadata for the commit that is taking place | string |
commit_id[^2,^4] | The ID of the commit that is being created | string |
tag_id3 | The ID of the created/deleted tag | string |
Example:
{
"event_type": "pre-merge",
"event_time": "2021-02-28T14:03:31Z",
"action_name": "test action",
"hook_id": "prevent_user_columns",
"repository_id": "repo1",
"branch_id": "feature-1",
"source_ref": "feature-1",
"commit_message": "merge commit message",
"commit_id": "5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03",
"committer": "committer",
"commit_metadata": {
"key": "value"
}
}