% !TEX root = ../Projektdokumentation.tex \section{Continuous Integration} \label{sec:CI} Das Projekt verwendet Gitea Actions\footnote{Gitea Actions - \url{https://docs.gitea.com/usage/actions/overview}} als \ac{CI/CD}-Pipeline, welche vollständig kompatibel mit GitHub Actions ist. Entsprechend den Qualitätsanforderungen soll eine hohe Code-Qualität durch automatisierte Tests gewährleistet werden. \subsection{Aufbau der CI-Pipeline} \label{sec:ci-pipeline} Die Haupt-\ac{CI}-Pipeline wird durch die Datei \Datei{ci.yml} definiert und bei Pull Requests ausgelöst. Aufgrund der separaten Frontend- und Backend-Komponenten wurde eine \Fachbegriff{Change Detection} implementiert, welche nur relevante Tests für geänderte Bereiche ausführt. Ein initialer Job identifiziert geänderte Dateien und ermöglicht eine selektive Ausführung: \begin{itemize} \item Backend-Änderungen: \Datei{backend/**} \item Frontend-Änderungen: \Datei{frontend/**} \item Workflow-Änderungen: \Datei{.gitea/workflows/**} \end{itemize} \subsubsection{Backend-Qualitätssicherung} Für Backend-Änderungen werden folgende Prüfungen durchgeführt: \begin{itemize} \item \textbf{Unit Tests:} Ausführung mit \Eingabe{./gradlew test} in OpenJDK 23 Container \item \textbf{Checkstyle:} Code-Style-Validierung mit Caching-Mechanismus \item \textbf{Docker Build:} Überprüfung der Build-Funktionalität \end{itemize} \subsubsection{Frontend-Qualitätssicherung} Für Frontend-Änderungen wird eine umfassende Testsuite ausgeführt: \begin{itemize} \item \textbf{ESLint:} Code-Qualitätsprüfung mit \Eingabe{bun run lint} \item \textbf{Prettier:} Code-Formatierungsvalidierung \item \textbf{Build-Test:} Produktions-Build-Validierung mit \Eingabe{bun run build} \item \textbf{Playwright \ac{E2E} Tests:} End-to-End-Tests mit automatischem Backend-Start \item \textbf{Docker Build:} Validierung der Container-Erstellung \end{itemize} \subsection{Release-Management} \label{sec:release-pipeline} Das Release-Management erfolgt automatisiert durch die \Datei{release.yml} Pipeline bei Pushes auf den \texttt{main}-Branch. Die Implementierung folgt \Fachbegriff{Semantic Versioning}\footnote{Semantic Versioning - \url{https://semver.org/}} und \Fachbegriff{Conventional Commits}\footnote{Conventional Commits - \url{https://www.conventionalcommits.org/}}. Die Release-Pipeline umfasst: \begin{enumerate} \item \textbf{Semantic Release:} Automatische Versionierung basierend auf Commit-Nachrichten \item \textbf{Docker Image Build:} Parallele Erstellung von Backend- und Frontend-Images \item \textbf{Registry Push:} Upload zur privaten Gitea Docker Registry \end{enumerate} Die \ac{CI/CD}-Pipeline implementiert Performance-Optimierungen wie intelligentes Caching, Concurrency Control und selektive Job-Ausführung. Diese Automatisierung gewährleistet eine hohe Software-Qualität bei effizienten Entwicklungsprozessen.