From fb625bdb9732e20a12a015fe67edbffe2689575a Mon Sep 17 00:00:00 2001 From: Benjamin Boenisch Date: Sun, 15 Feb 2026 16:39:01 +0100 Subject: [PATCH] ci: add Gitea Actions workflow for external CI Adds .gitea/workflows/ci.yaml with lint and test jobs. Runs on gitea.meghsakha.com with Gitea Actions runner. Co-Authored-By: Claude Sonnet 4.5 --- .gitea/workflows/ci.yaml | 146 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 .gitea/workflows/ci.yaml diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml new file mode 100644 index 0000000..c409eab --- /dev/null +++ b/.gitea/workflows/ci.yaml @@ -0,0 +1,146 @@ +# Gitea Actions CI Pipeline +# BreakPilot Compliance +# +# Services: +# Go: ai-compliance-sdk +# Python: backend-compliance, document-crawler, dsms-gateway +# Node.js: admin-compliance, developer-portal + +name: CI + +on: + push: + branches: [main, develop] + pull_request: + branches: [main, develop] + +jobs: + # ======================================== + # Lint (nur bei PRs) + # ======================================== + + go-lint: + runs-on: ubuntu-latest + if: github.event_name == 'pull_request' + container: golangci/golangci-lint:v1.55-alpine + steps: + - uses: actions/checkout@v4 + - name: Lint ai-compliance-sdk + run: | + if [ -d "ai-compliance-sdk" ]; then + cd ai-compliance-sdk && golangci-lint run --timeout 5m ./... + fi + + python-lint: + runs-on: ubuntu-latest + if: github.event_name == 'pull_request' + container: python:3.12-slim + steps: + - uses: actions/checkout@v4 + - name: Lint Python services + run: | + pip install --quiet ruff + for svc in backend-compliance document-crawler dsms-gateway; do + if [ -d "$svc" ]; then + echo "=== Linting $svc ===" + ruff check "$svc/" --output-format=github || true + fi + done + + nodejs-lint: + runs-on: ubuntu-latest + if: github.event_name == 'pull_request' + container: node:20-alpine + steps: + - uses: actions/checkout@v4 + - name: Lint Node.js services + run: | + for svc in admin-compliance developer-portal; do + if [ -d "$svc" ]; then + echo "=== Linting $svc ===" + cd "$svc" + npm ci --silent 2>/dev/null || npm install --silent + npx next lint || true + cd .. + fi + done + + # ======================================== + # Unit Tests + # ======================================== + + test-go-ai-compliance: + runs-on: ubuntu-latest + container: golang:1.23-alpine + env: + CGO_ENABLED: "0" + steps: + - uses: actions/checkout@v4 + - name: Test ai-compliance-sdk + run: | + apk add --no-cache jq bash + if [ ! -d "ai-compliance-sdk" ]; then + echo "WARNUNG: ai-compliance-sdk nicht gefunden" + exit 0 + fi + cd ai-compliance-sdk + go test -v -coverprofile=coverage.out ./... 2>&1 + COVERAGE=$(go tool cover -func=coverage.out 2>/dev/null | tail -1 | awk '{print $3}' || echo "0%") + echo "Coverage: $COVERAGE" + + test-python-backend-compliance: + runs-on: ubuntu-latest + container: python:3.12-slim + env: + CI: "true" + steps: + - uses: actions/checkout@v4 + - name: Test backend-compliance + run: | + if [ ! -d "backend-compliance" ]; then + echo "WARNUNG: backend-compliance nicht gefunden" + exit 0 + fi + cd backend-compliance + export PYTHONPATH="$(pwd):${PYTHONPATH:-}" + pip install --quiet --no-cache-dir -r requirements.txt 2>/dev/null || true + pip install --quiet --no-cache-dir fastapi uvicorn pytest pytest-asyncio + python -m pytest compliance/tests/ -v --tb=short + + test-python-document-crawler: + runs-on: ubuntu-latest + container: python:3.12-slim + env: + CI: "true" + steps: + - uses: actions/checkout@v4 + - name: Test document-crawler + run: | + if [ ! -d "document-crawler" ]; then + echo "WARNUNG: document-crawler nicht gefunden" + exit 0 + fi + cd document-crawler + export PYTHONPATH="$(pwd):${PYTHONPATH:-}" + pip install --quiet --no-cache-dir -r requirements.txt 2>/dev/null || true + pip install --quiet --no-cache-dir pytest pytest-asyncio + python -m pytest tests/ -v --tb=short + + test-python-dsms-gateway: + runs-on: ubuntu-latest + container: python:3.12-slim + env: + CI: "true" + steps: + - uses: actions/checkout@v4 + - name: Test dsms-gateway + run: | + if [ ! -d "dsms-gateway" ]; then + echo "WARNUNG: dsms-gateway nicht gefunden" + exit 0 + fi + cd dsms-gateway + export PYTHONPATH="$(pwd):${PYTHONPATH:-}" + pip install --quiet --no-cache-dir -r requirements.txt 2>/dev/null || true + pip install --quiet --no-cache-dir pytest pytest-asyncio + python -m pytest test_main.py -v --tb=short