Trigger a GitHub Action using Custom Webhook
The following example shows how a GitHub Action can be triggered using a custom webhook.
Step 1: Define the GitHub Workflow
Define a GitHub workflow as shown in the following example.
In the workflow YAML, the on clause must include the workflow_dispatch event so that Artifactory can trigger the workflow through GitHub REST API.
name: artifact_deployed
on:
# workflow_dispatch is mandatory, so that Artifactory can trigger
# the workflow through GitHub REST API.
workflow_dispatch:
# inputs are optional, they may be used to convey contextual data
# from the JFrog event to the workflow.
inputs:
artifact_path:
required: true
type: string
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Print artifact_path
run: echo The path is ${{ inputs.artifact_path }}
Step 2: Generate a Token
The generated token can be a Personal Access token. This token must allow the triggering of actions on the target GitHub repository.
The token must have theactions:writepermission on the repo that holds the workflow.
Step 3: Define the Webhook
Define the webhook using API, as shown below, or using the UI.
Note
- In the URL, provide the GitHub owner and repository
- In the secrets, provide the token
POST /event/api/v1/subscriptions
{
"key": "trigger_action",
"enabled": true,
"event_filter": {
"domain": "artifact",
"event_types": [
"deployed"
],
"criteria": {
"anyLocal": true
}
},
"handlers": [
{
"handler_type": "custom-webhook",
"url": "https://api.github.com/repos/your/repo/actions/workflows/artifact_deployed.yml/dispatches",
"payload": "{ \"ref\": \"main\" , \"inputs\": { \"artifact_path\": \"{{.data.repo_key}}/{{.data.path}}\" } }",
"secrets": [
{
"name": "token",
"value": "***"
}
],
"http_headers": [
{
"name": "Authorization",
"value": "Bearer {{.secrets.token}}"
},
{
"name": "Accept",
"value": "application/vnd.github+json"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
]
}
Step 4: Deploy to Trigger
Deploy an artifact in any local Artifactory repository, and the action will be triggered on the GitHub repository.
Updated 3 months ago
