Forgejo Pipelines · Workshop Lektion 5 / Trigger & if

Trigger-Events & Bedingungen

Wann läuft ein Workflow – und welcher Job darin? on: und if: im Griff.

Warum das zählt
Nicht alles soll bei jedem Push laufen. Tests bei jedem Commit, Deploy nur auf main, ein nächtlicher Security-Scan, ein manueller Knopf für Releases. Genau das steuerst du mit on: (was startet den Workflow) und if: (welcher Job/Step läuft wirklich).

Die wichtigsten Events unter on:

.forgejo/workflows/ci.yaml
on:
  push:
    branches: [main]          # nur Pushes auf main
    paths: ['app/**', 'tests/**']  # nur bei Code-Änderung
  pull_request:                # bei PRs (gegen jeden Branch)
  schedule:
    - cron: '0 3 * * *'         # täglich 03:00 (POSIX-cron)
  workflow_dispatch:            # manueller Start per UI/API
    inputs:
      grund:
        type: string
        required: true
EventLöst aus bei
pushCommits/Tags – filterbar mit branches, tags, paths
pull_requestPR geöffnet/aktualisiert (Default: opened, synchronize, reopened)
scheduleZeitplan per cron
workflow_dispatchManuellem Klick/API – mit inputs
releaseRelease published/edited/deleted

Jobs gezielt schalten mit if:

  deploy:
    runs-on: docker
    needs: [test]
    if: ${{ forgejo.ref == 'refs/heads/main' }}   # nur auf main
    steps:
      - run: echo "deploy …"

In if: ist ${{ }} implizit – beide Schreibweisen gehen. Nützliche Status-Funktionen: success() (Default), failure(), always(), cancelled(). Beispiel: ein Melde-Step mit if: ${{ failure() }} läuft nur, wenn vorher etwas schiefging.

Zwei Forgejo-Eigenheiten beim Triggern (1) Sommerzeit: Springt die Uhr vor, fällt ein schedule-Lauf aus; springt sie zurück, läuft er doppelt (anders als GitHub). (2) Fork-PRs: Ein pull_request aus einem Fork läuft mit eingeschränkten Rechten und ohne Secrets – Sicherheitsthema in Lektion 12.

Parallelen: GitLab CI ↔ Forgejo Actions

GitLab CI

workflow:rules + Job-rules:

only/except (alt)

Scheduled Pipelines in der UI

Manuell: when: manual

Forgejo Actions

on: (Workflow) + Job-if:

Filter via branches/paths

schedule: cron im Workflow

Manuell: workflow_dispatch

Übungen für Teilnehmende

Übung 1 · Vorhersagen

Frage: on: push: branches: [main]. Du pushst auf feature/x. Läuft der Workflow?

Lösung anzeigen

Nein – der Branch-Filter lässt nur main durch. Für PR-Prüfungen von Feature-Branches ergänzt du pull_request:.

Übung 2 · Selbst schreiben

Aufgabe: Mach den deploy-Job zusätzlich nur dann lauffähig, wenn er manuell gestartet wurde – nicht bei jedem Push auf main.

Tipp: on: um workflow_dispatch erweitern und if: aufs Event prüfen.

Lösung anzeigen
on:
  push: { branches: [main] }
  workflow_dispatch:

  # … im Job:
    if: ${{ forgejo.event_name == 'workflow_dispatch' }}

Kurz prüfen (aus dem Kopf)

Womit baust du einen manuellen Startknopf?

Wann läuft ein Step mit if: ${{ failure() }}?

Primärquelle zum Lesen Forgejo Docs – Reference, Abschnitt on (Events, Filter, schedule, workflow_dispatch).
Ich bin dein Teacher. Cron-Syntax oder ein kniffliges if:? Schick mir die Bedingung – wir prüfen sie gemeinsam.
← Lektion 4 · env, vars & DRY Lektion 6 · Actions verwenden →