Trigger a GitHub Action using Custom Webhook

JFrog Platform Administration Documentation

Content Type
Administration / Platform
ft:sourceType
Paligo

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.