Webhook Events
GitHub Actions’ı “dış dünyadan” bir HTTP isteği ile tetiklemek istiyorsan, repository_dispatch event’ini kullanırsın. Yani GitHub harici bir sistemden, senin GitHub repo’na özel bir endpoint’e istek atarak, bir iş akışını başlatabilir.
Örnek Workflow:
name: Workflow on Repository Dispatch
on:
repository_dispatch:
types: [webhook]
jobs:
respond-to-dispatch:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Run a script
run: echo "Event of type ${GITHUB_EVENT_NAME}"on.repository_dispatch.types: [webhook]diyerek,event_typedeğeriwebhookolan dış istekleri yakalıyoruz.GITHUB_EVENT_NAMEgibi değişkenlerle, gelen isteğin türünü veya payload verisini Workflow içinde kullanabiliriz.
HTTP isteği (curl) örneği:
curl -X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: token PERSONAL_ACCESS_TOKEN" \
-d '{"event_type": "webhook", "client_payload": {"key": "value"}}' \
https://api.github.com/repos/OWNER/REPO/dispatcheshttps://api.github.com/repos/{owner}/{repo}/dispatchesGitHub’ın “repository dispatch” endpoint’i.-H "Authorization: token ..."kısmına, repo’ya yazma izni olan bir Personal Access Token eklememiz gerekiyor.-d '{"event_type": "webhook", ...}'ile,event_typedeğeriniwebhook(veya istediğin başka bir isim) verip, ek payload gönderebiliyoruz.Bu istek başarıyla yapılırsa, GitHub Actions senin tanımladığın
repository_dispatchWorkflow’unu tetikler.
-d parametresinde yer alan "client_payload": {"key": "value"} kısmı, GitHub Actions’a dış dünyadan ek veri (parametre) yollamak içindir. Yani bu sayede repository_dispatch event’ine istediğin kadar “anahtar-değer” çifti ekleyebilirsin ve GitHub Actions içinde bu verilere ulaşabilirsin.
Workflow Dosyası Örneği,
name: Handle External Dispatch (Webhook Example)
on:
repository_dispatch:
types: [webhook] # Dışarıdan tetiklemede 'event_type' olarak "webhook" beklendiğini ifade eder
jobs:
handle_webhook:
runs-on: ubuntu-latest
steps:
- name: Show Payload
run: |
echo "Verilen versiyon: ${{ github.event.client_payload.version }}"
echo "Çalışma ortamı: ${{ github.event.client_payload.environment }}"
echo "Herhangi başka bir değer: ${{ github.event.client_payload.anyOtherKey }}"
on.repository_dispatch.types: [webhook]:event_typedeğeri “webhook” olan bir dış çağrı geldiğinde bu Workflow tetiklenecek.github.event.client_payload.*:repository_dispatchile gelen ek parametreleri okuyabileceğimiz yerdir. Örneğin yukarıdaversion,environment,anyOtherKeygibi alanlara değer girersek, Workflow bunları terminale yazacak.
Aşağıdaki komutu kendi terminalinde çalıştırarak (öncesinde PERSONAL_ACCESS_TOKEN, OWNER, REPO değerlerini kendine göre düzenleyerek) bu Workflow’u tetikleyebiliriz:
curl -X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: token PERSONAL_ACCESS_TOKEN" \
-d '{
"event_type": "webhook",
"client_payload": {
"version": "1.2.3",
"environment": "staging",
"anyOtherKey": "örnek bir değer"
}
}' \
https://api.github.com/repos/OWNER/REPO/dispatches"event_type": "webhook": Buradaki değer, Workflow’datypes: [webhook]satırıyla eşleştiği için tetikleme gerçekleşir."client_payload": {...}: Bu alana eklediğin anahtar-değer çiftleri, GitHub Actions içindegithub.event.client_payloadüzerinden okunabilir. Örnekte"version": "1.2.3","environment": "staging","anyOtherKey": "örnek bir değer"gönderiyoruz.Token Gereksinimi:
PERSONAL_ACCESS_TOKEN’ın repo’ya yazma (write) erişimi olması gerekir. Aksi takdirderepository_dispatchevent’ini tetikleyemeyiz.
Özetle, "client_payload" altındaki {"key": "value"} kısımları tamamen workflow’muza göndermek istediğimiz ek veriyi temsil eder. Bu verileri Actions içinde okuyup istediğin gibi kullanabiliriz.
Last updated
Was this helpful?