29 Appendix: Workflow Events Referenz

Die folgende Referenz dokumentiert alle verfügbaren Events, die GitHub Actions Workflows auslösen können. Die Tabellen sind nach Kategorien gegliedert und enthalten neben den Activity Types auch die wichtigsten Filter-Optionen sowie das Verhalten von GITHUB_SHA und GITHUB_REF.

29.1 Repository Events (Code & Branches)

Diese Events reagieren auf Änderungen am Repository-Inhalt, an Branches und Tags.

Event Activity Types Filter GITHUB_SHA GITHUB_REF
push branches, branches-ignore, tags, tags-ignore, paths, paths-ignore Tip-Commit des Push Aktualisierte Ref
create Letzter Commit auf erstelltem Branch/Tag Erstellter Branch/Tag
delete Letzter Commit auf Default-Branch Default-Branch
fork Letzter Commit auf Default-Branch Default-Branch
gollum Letzter Commit auf Default-Branch Default-Branch
public Letzter Commit auf Default-Branch Default-Branch
branch_protection_rule created, edited, deleted Letzter Commit auf Default-Branch Default-Branch

Das gollum-Event verdankt seinen Namen der gleichnamigen Ruby-Bibliothek, auf der GitHub Wikis basieren. Es feuert bei jeder Änderung an Wiki-Seiten – ein nützlicher Hook für Dokumentations-Workflows, der in der Praxis aber selten genutzt wird.

Das public-Event tritt ein, wenn ein privates Repository öffentlich geschaltet wird. Der umgekehrte Fall (public → private) löst kein Event aus.

29.2 Pull Request Events

Pull Requests bilden einen eigenen Event-Komplex mit mehreren spezialisierten Events für verschiedene Aspekte des PR-Lifecycles.

Event Activity Types Filter GITHUB_SHA GITHUB_REF
pull_request opened, edited, closed, reopened, synchronize, converted_to_draft, ready_for_review, locked, unlocked, enqueued, dequeued, assigned, unassigned, labeled, unlabeled, milestoned, demilestoned, review_requested, review_request_removed, auto_merge_enabled, auto_merge_disabled branches, branches-ignore, paths, paths-ignore Merge-Commit auf GITHUB_REF refs/pull/PR_NUMBER/merge
pull_request_target wie pull_request branches, branches-ignore, paths, paths-ignore Letzter Commit auf Default-Branch Default-Branch
pull_request_review submitted, edited, dismissed Merge-Commit auf GITHUB_REF refs/pull/PR_NUMBER/merge
pull_request_review_comment created, edited, deleted Merge-Commit auf GITHUB_REF refs/pull/PR_NUMBER/merge
merge_group checks_requested SHA der Merge Group Ref der Merge Group

Der Unterschied zwischen pull_request und pull_request_target ist sicherheitskritisch:

Default Activity Types:

Sowohl pull_request als auch pull_request_target triggern standardmäßig nur bei opened, synchronize und reopened. Für andere Activity Types ist explizite Angabe via types erforderlich.

29.3 Issue & Discussion Events

Events für Issues und Discussions folgen einem ähnlichen Muster mit Activity Types für den gesamten Lifecycle.

Event Activity Types Filter GITHUB_SHA GITHUB_REF
issues opened, edited, deleted, transferred, pinned, unpinned, closed, reopened, assigned, unassigned, labeled, unlabeled, locked, unlocked, milestoned, demilestoned, typed, untyped Letzter Commit auf Default-Branch Default-Branch
issue_comment created, edited, deleted Letzter Commit auf Default-Branch Default-Branch
discussion created, edited, deleted, transferred, pinned, unpinned, labeled, unlabeled, locked, unlocked, category_changed, answered, unanswered Letzter Commit auf Default-Branch Default-Branch
discussion_comment created, edited, deleted Letzter Commit auf Default-Branch Default-Branch

Das issue_comment-Event feuert sowohl für Issue- als auch für PR-Kommentare. Die Unterscheidung erfolgt zur Laufzeit:

on:
  issue_comment:
    types: [created]

jobs:
  pr-comment:
    if: github.event.issue.pull_request
    runs-on: ubuntu-latest
    steps:
      - run: echo "Kommentar auf PR"
  
  issue-comment:
    if: ${{ !github.event.issue.pull_request }}
    runs-on: ubuntu-latest
    steps:
      - run: echo "Kommentar auf Issue"

29.4 Project & Label Events

Diese Events betreffen die Projekt-Management-Funktionen von GitHub.

Event Activity Types Filter GITHUB_SHA GITHUB_REF
label created, edited, deleted Letzter Commit auf Default-Branch Default-Branch
milestone created, closed, opened, edited, deleted Letzter Commit auf Default-Branch Default-Branch
project created, closed, reopened, edited, deleted Letzter Commit auf Default-Branch Default-Branch
project_card created, moved, converted, edited, deleted Letzter Commit auf Default-Branch Default-Branch
project_column created, moved, edited, deleted Letzter Commit auf Default-Branch Default-Branch

Diese Events beziehen sich auf die Classic Projects. Die neueren GitHub Projects (Projects v2) haben einen anderen Event-Mechanismus, der über GraphQL-Webhooks funktioniert und nicht direkt in Actions Workflows als Trigger verfügbar ist.

29.5 Release & Package Events

Event Activity Types Filter GITHUB_SHA GITHUB_REF
release published, unpublished, created, edited, deleted, prereleased, released Letzter Commit im getaggten Release refs/tags/<tag_name>
registry_package published, updated Commit des publizierten Packages Branch/Tag des Packages

Bei Releases ist die Unterscheidung der Activity Types wichtig:

Activity Type Trigger-Zeitpunkt
created Release-Objekt erstellt (auch Drafts)
published Release veröffentlicht (inkl. Pre-Releases)
released Nur stable Releases (keine Pre-Releases)
prereleased Nur Pre-Releases aus veröffentlichten Releases

Draft-Releases triggern created, edited und deleted nicht. Für Draft-basierte Workflows empfiehlt sich die Kombination aus published und Logik im Workflow.

29.6 CI/CD Status Events

Diese Events ermöglichen die Reaktion auf CI/CD-Statusinformationen.

Event Activity Types Filter GITHUB_SHA GITHUB_REF
check_run created, rerequested, completed, requested_action Letzter Commit auf Default-Branch Default-Branch
check_suite completed Letzter Commit auf Default-Branch Default-Branch
status Letzter Commit auf Default-Branch Default-Branch
deployment Zu deployender Commit Branch/Tag des Deployments
deployment_status Zu deployender Commit Branch/Tag des Deployments
page_build Letzter Commit auf Default-Branch Default-Branch

Check Runs und Check Suites haben eine Rekursions-Sperre: Events werden nicht ausgelöst, wenn die Check Suite von GitHub Actions selbst erstellt wurde oder wenn der HEAD SHA mit GitHub Actions assoziiert ist.

Das status-Event reagiert auf Commit-Status-Änderungen (die älteren Status-Checks, nicht die neueren Check Runs):

on:
  status

jobs:
  on-failure:
    if: github.event.state == 'failure'
    runs-on: ubuntu-latest
    steps:
      - run: echo "Commit-Status ist failure"

29.7 Scheduled Events

Event Untertypen Filter GITHUB_SHA GITHUB_REF
schedule Letzter Commit auf Default-Branch Default-Branch

Die Cron-Syntax folgt dem POSIX-Standard mit fünf Feldern:

┌───────────── Minute (0-59)
│ ┌───────────── Stunde (0-23)
│ │ ┌───────────── Tag des Monats (1-31)
│ │ │ ┌───────────── Monat (1-12 oder JAN-DEC)
│ │ │ │ ┌───────────── Wochentag (0-6 oder SUN-SAT)
│ │ │ │ │
* * * * *
Operator Bedeutung Beispiel
* Beliebiger Wert 15 * * * * = jede Stunde um :15
, Aufzählung 0 9,17 * * * = 09:00 und 17:00
- Bereich 0 9-17 * * * = jede Stunde 09:00–17:00
/ Schrittweite */15 * * * * = alle 15 Minuten

Wichtige Einschränkungen:

29.8 Manual & External Trigger Events

Event Untertypen Filter GITHUB_SHA GITHUB_REF
workflow_dispatch inputs Letzter Commit auf GITHUB_REF Branch/Tag des Dispatch
repository_dispatch Custom (event_type) Letzter Commit auf Default-Branch Default-Branch

workflow_dispatch Input-Typen:

Typ Beschreibung UI-Element
string Freitext Textfeld
boolean true/false Checkbox
choice Auswahl aus Liste Dropdown
environment Deployment-Environment Environment-Dropdown
on:
  workflow_dispatch:
    inputs:
      target:
        description: 'Deployment-Ziel'
        required: true
        type: choice
        options:
          - staging
          - production
      dry_run:
        description: 'Nur simulieren'
        type: boolean
        default: true

repository_dispatch ermöglicht externe Trigger via API:

curl -X POST \
  -H "Authorization: token $GITHUB_TOKEN" \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/OWNER/REPO/dispatches \
  -d '{"event_type":"deploy","client_payload":{"env":"prod"}}'

29.9 Workflow Orchestration Events

Event Activity Types Filter GITHUB_SHA GITHUB_REF
workflow_run requested, completed, in_progress workflows, branches, branches-ignore Letzter Commit auf Default-Branch Default-Branch
workflow_call inputs, secrets Wie Caller-Workflow Wie Caller-Workflow

workflow_run ermöglicht die Verkettung von Workflows, allerdings mit Limit:

Maximal 3 Ebenen Verkettung sind möglich. Ab der 4. Ebene werden Workflows nicht mehr getriggert.

workflow_run mit Conditional:

on:
  workflow_run:
    workflows: [CI]
    types: [completed]

jobs:
  deploy:
    if: github.event.workflow_run.conclusion == 'success'
    runs-on: ubuntu-latest
    steps:
      - run: echo "CI war erfolgreich, starte Deploy"

29.10 Sonstige Events

Event Activity Types Filter GITHUB_SHA GITHUB_REF
watch started Letzter Commit auf Default-Branch Default-Branch
image_version names, versions Letzter Commit auf Default-Branch Default-Branch

Das watch-Event reagiert auf Stars (nicht zu verwechseln mit dem GitHub-Feature “Watch” für Notifications). Der einzig unterstützte Activity Type started entspricht dem Setzen eines Stars.

Das image_version-Event ist spezialisiert auf Container-Images und unterstützt Glob-Patterns:

on:
  image_version:
    names:
      - "my-app"
      - "my-service"
    versions:
      - "1.*"
      - "2.*"

29.11 Activity Types Übersicht

Die folgende Tabelle zeigt alle Activity Types gruppiert nach semantischer Bedeutung:

Kategorie Activity Types Events
Lifecycle opened, closed, reopened, deleted pull_request, issues, discussion, milestone
Content created, edited Fast alle Events
Status completed, submitted, dismissed check_run, check_suite, pull_request_review
Assignment assigned, unassigned pull_request, issues
Labels labeled, unlabeled pull_request, issues, discussion
Review review_requested, review_request_removed pull_request
Draft converted_to_draft, ready_for_review pull_request
Lock locked, unlocked pull_request, issues, discussion
Queue enqueued, dequeued pull_request
Merge auto_merge_enabled, auto_merge_disabled pull_request
Publish published, unpublished, prereleased, released release, registry_package

29.12 Event-Kontext-Verhalten

Nicht alle Events stellen die gleichen Informationen im github.event-Kontext bereit:

Event-Gruppe github.event.action Payload-Größe Besonderheiten
push Groß (Commits, Files) Kein action-Feld
pull_request* Activity Type Mittel pull_request-Objekt enthalten
issues, discussion Activity Type Klein Objekt-spezifisch
workflow_* Activity Type Variabel workflow_run: Vorheriger Workflow-Kontext
schedule Minimal Nur Basis-Kontext
*_dispatch Custom Variabel client_payload bei repository_dispatch

29.13 Wichtige Einschränkungen

Einschränkung Betroffene Events Wert
Workflow-File muss auf Default-Branch existieren schedule, branch_protection_rule, check_run, check_suite, discussion*, fork, gollum, label, milestone, page_build, public, registry_package, status, watch, workflow_run
Maximale Verkettungstiefe workflow_run 3 Ebenen
Minimales Cron-Intervall schedule 5 Minuten
Inaktivitäts-Timeout (Public Repos) schedule 60 Tage
Batch-Limit Tags create, delete 3 Tags gleichzeitig
workflow_dispatch Inputs workflow_dispatch Max. 25 Properties, 65.535 Zeichen
repository_dispatch Payload repository_dispatch Max. 10 Top-Level Properties, 65.535 Zeichen

29.14 Fork-Verhalten

PRs von Forks haben ein eingeschränktes Sicherheitsmodell:

Aspekt pull_request pull_request_target
Secrets verfügbar Nein (nur GITHUB_TOKEN read-only) Ja
GITHUB_TOKEN Permissions Read-only Read/Write
Checkout-Kontext PR HEAD Base Branch
First-Time Contributor Approval erforderlich Approval erforderlich
Workflow-Ausführung Auf Fork Auf Base Repo