'use client' import type { PipelineRun } from '../types' interface PipelinesTabProps { pipelineHistory: PipelineRun[] triggeringPipeline: boolean triggerPipeline: () => Promise } export function PipelinesTab({ pipelineHistory, triggeringPipeline, triggerPipeline, }: PipelinesTabProps) { return (
{/* Pipeline Controls */}

Gitea Actions Pipelines

Workflows werden bei Push auf main/develop automatisch ausgefuehrt

{/* Available Pipelines */}
SBOM Pipeline

Generiert Software Bill of Materials

5 Jobs: generate, scan, license, upload, summary

Test Pipeline

Unit & Integration Tests

Geplant

Security Pipeline

SAST, SCA, Secrets Scan

Geplant

{/* Pipeline History */}

Pipeline Historie

{pipelineHistory.length === 0 ? (
Keine Pipeline-Runs vorhanden. Starten Sie die erste Pipeline!
) : (
{pipelineHistory.map((run) => ( ))}
Status Workflow Branch Commit Gestartet Dauer
{run.status} {run.workflow || 'SBOM Pipeline'} {run.branch} {run.commit_sha.substring(0, 8)} {new Date(run.started_at).toLocaleString('de-DE')} {run.duration_seconds ? `${run.duration_seconds}s` : '-'}
)}
{/* Pipeline Architecture */}

SBOM Pipeline Architektur

{`Gitea Actions Pipeline (.gitea/workflows/sbom.yaml)
     |
     +-- 1. generate-sbom     -> Syft generiert CycloneDX SBOM
     |
     +-- 2. vulnerability-scan -> Grype scannt auf CVEs
     |
     +-- 3. license-check     -> Prueft GPL/AGPL Lizenzen
     |
     +-- 4. upload-dashboard  -> POST /api/v1/security/sbom/upload
     |
     +-- 5. summary           -> Job Summary generieren`}
        
) }