# Änderungen sichern und veröffentlichen

Mit Commit und Push landen deine Änderungen in GitLab, die Pipeline bringt sie auf den Dev-Server, und Produktion gibst du per Klick frei.

> Source: https://www.application-platform.com/de/docs/save-and-publish/

## Commit und Push

Bitte den Agenten: „Committe meine Änderungen mit einer passenden Nachricht und pushe sie.“ Nachrichten beginnen mit `feat:` für Neues oder `fix:` für Fehlerbehebungen; daraus berechnet die Plattform die Versionsnummer.

Im Editor nutzt du die Quellcodeverwaltung: Nachricht eintippen, **Commit** klicken, dann synchronisieren oder pushen.

Im Terminal sind es drei Befehle im Repository-Ordner:

```bash
git add .
git commit -m "feat: Kontaktformular auf der Startseite"
git push
```

`ap git auto-commit` fasst die drei Schritte zusammen; jedes Repository wird für sich committet und gepusht. Ein Git-Hook der Setup-App blockiert Commits an generierten Dateien wie `.gitlab-ci.yml`; mache solche Änderungen rückgängig.

## Was nach dem Push passiert

Ein Push auf `main` startet die Pipeline, die testet, die Version berechnet, baut und auf Dev ausrollt; den Fortschritt siehst du in GitLab unter **CI/CD → Pipelines** mit Status und Log pro Job.

Auf Dev ist die Anwendung unter `<komponente>.dev.<projekt>.<organisations-domain>` erreichbar; dafür brauchst du keine Domain, aber einen dem Projekt zugewiesenen Server.

Merge Requests sind möglich, aber nicht nötig; den Ablauf damit beschreibt [Git-Workflow und Deployment]({{< relref "git-workflow" >}}).

## Produktion freigeben

Produktion aktualisiert sich nicht von selbst: Starte in GitLab unter **CI/CD → Pipelines** in der Pipeline des geprüften Stands den Produktions-Job über den Play-Button; er veröffentlicht genau den Build von Dev. Geht etwas schief, startest du den Produktions-Job der letzten funktionierenden Pipeline erneut.

Für Mobile-Apps verteilt die Pipeline Builds automatisch an TestFlight und den internen Test-Track; der manuelle Job reicht die App bei den Stores ein, siehe [Apps (iOS und Android)]({{< relref "publish-apps" >}}).

## Was vorher eingerichtet sein muss

Backends, Web-Apps und Homepages brauchen einen Server, den ein Administrator unter **Server** mit **Server hinzufügen** anlegt und dem Projekt zuweist; eine Homepage aus Hugo oder Astro kommt mit einem Webspace mit FTP- oder SFTP-Zugang aus, siehe [Server]({{< relref "servers" >}}).

Für Produktion brauchst du eine eigene Domain; unter **Domains** zeigt die Plattform die nötigen DNS-Einträge, und ein Haken in der Spalte **Status** bestätigt sie. Ist Cloudflare unter **Anbindungen** verbunden, setzt die Plattform die Einträge dort selbst, siehe [Domain]({{< relref "domain" >}}).

Wird eine Pipeline rot oder erscheint die Seite nicht, hilft [Wenn etwas nicht klappt]({{< relref "get-help" >}}).

