diff --git a/.gitea/workflows/reusable-ai-review.yml b/.gitea/workflows/reusable-ai-review.yml index c037a99..0012434 100644 --- a/.gitea/workflows/reusable-ai-review.yml +++ b/.gitea/workflows/reusable-ai-review.yml @@ -7,14 +7,11 @@ # secrets: inherit # # Voraussetzungen: globaler Runner `eulernest`, anon-Clone für public Repos. -# Ohne ANTHROPIC_API_KEY überspringt das Skript den KI-Schritt sauber (Job grün). +# KI-Backend = Jetson-Ollama (self-hosted, LAN-direkt). Kein Secret nötig. name: ci-ai · review (reusable) on: - workflow_call: - secrets: - ANTHROPIC_API_KEY: - required: false + workflow_call: {} jobs: review: @@ -31,9 +28,9 @@ jobs: - name: KI-Review (überspringt sauber ohne Key) env: - AI_PROVIDER: anthropic - AI_MODEL: claude-3-5-haiku-latest - ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} + AI_PROVIDER: ollama + AI_MODEL: coder + AI_BASE_URL: http://192.168.178.103:11434/v1 GITEA_TOKEN: ${{ github.token }} GITEA_API: https://git.eulernest.eu/api/v1 run: python /opt/ci-ai/scripts/ai_review.py diff --git a/.gitea/workflows/reusable-commands.yml b/.gitea/workflows/reusable-commands.yml index 5be4a50..f70c537 100644 --- a/.gitea/workflows/reusable-commands.yml +++ b/.gitea/workflows/reusable-commands.yml @@ -11,10 +11,7 @@ name: ci-ai · commands (reusable) on: - workflow_call: - secrets: - ANTHROPIC_API_KEY: - required: false + workflow_call: {} jobs: command: @@ -23,9 +20,9 @@ jobs: image: python:3.12-slim options: "--memory=512m --memory-swap=768m" env: - AI_PROVIDER: anthropic - AI_MODEL: claude-3-5-haiku-latest - ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} + AI_PROVIDER: ollama + AI_MODEL: coder + AI_BASE_URL: http://192.168.178.103:11434/v1 GITEA_TOKEN: ${{ github.token }} GITEA_API: https://git.eulernest.eu/api/v1 steps: diff --git a/.gitea/workflows/reusable-security.yml b/.gitea/workflows/reusable-security.yml index 2b82b66..5311edd 100644 --- a/.gitea/workflows/reusable-security.yml +++ b/.gitea/workflows/reusable-security.yml @@ -8,17 +8,14 @@ # Voraussetzungen (einmalig zentral): # - Runner instanzweit registriert (Label `eulernest`) # - anonymer Clone für public Repos erlaubt (für den ci-ai-Clone) -# - optional ANTHROPIC_API_KEY als Org-/Instanz-Secret (für die KI-Erklärung) +# - KI-Backend = Jetson-Ollama (self-hosted, LAN); kein Secret nötig # # python:3.12-slim (Debian: bash) + Memory-Cap (Pi). ⚠ ARM64-Binaries. # Gitleaks (Secrets) + Trivy config (IaC) — hart blockierend über den Gate-Schritt. name: ci-ai · security (reusable) on: - workflow_call: - secrets: - ANTHROPIC_API_KEY: - required: false + workflow_call: {} env: GITLEAKS_VERSION: "8.18.4" @@ -74,9 +71,9 @@ jobs: if: failure() continue-on-error: true env: - AI_PROVIDER: anthropic - AI_MODEL: claude-3-5-haiku-latest - ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} + AI_PROVIDER: ollama + AI_MODEL: coder + AI_BASE_URL: http://192.168.178.103:11434/v1 GITEA_TOKEN: ${{ github.token }} GITEA_API: https://git.eulernest.eu/api/v1 run: | diff --git a/workflows/ai-review.example.yml b/workflows/ai-review.example.yml index 15f485a..2956056 100644 --- a/workflows/ai-review.example.yml +++ b/workflows/ai-review.example.yml @@ -3,7 +3,7 @@ # Läuft auf dem Pi-Runner (capacity 1, ~3-4 GB RAM) -> Memory-Cap + schlankes # python-Image. KEINE JS-Actions (kein node nötig): ci-ai wird manuell geklont, # git.eulernest.eu löst per Runner-add-host auf die LAN-IP auf. Ohne -# ANTHROPIC_API_KEY überspringt das Skript den KI-Schritt sauber (Job bleibt grün). +# Das KI-Backend ist die Jetson-Ollama (self-hosted, LAN-direkt, kein Key). name: AI PR Review on: @@ -26,15 +26,10 @@ jobs: - name: KI-Review (überspringt sauber ohne Key) env: - AI_PROVIDER: anthropic - AI_MODEL: claude-3-5-haiku-latest - ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} + AI_PROVIDER: ollama + AI_MODEL: coder + AI_BASE_URL: http://192.168.178.103:11434/v1 GITEA_TOKEN: ${{ github.token }} GITEA_API: https://git.eulernest.eu/api/v1 run: python /opt/ci-ai/scripts/ai_review.py -# Jetson-Umstieg später (kein Code-Change, nur diese env): -# AI_PROVIDER: ollama -# AI_MODEL: qwen-light -# AI_BASE_URL: http://192.168.178.20:11434/v1 -# JETSON_API_KEY: ${{ secrets.JETSON_API_KEY }} diff --git a/workflows/caller.example.yml b/workflows/caller.example.yml index 0ec4280..6daddfe 100644 --- a/workflows/caller.example.yml +++ b/workflows/caller.example.yml @@ -12,8 +12,8 @@ # Voraussetzungen (einmalig zentral eingerichtet): # 1. Runner instanzweit registriert (Label `eulernest`) # 2. anonymer Clone für public Repos erlaubt -# 3. ANTHROPIC_API_KEY als Org-/Instanz-Actions-Secret (für die KI-Schritte; -# ohne ihn laufen die Scans, die KI-Teile überspringen sich sauber) +# 3. KI-Backend = Jetson-Ollama (LAN, self-hosted). Kein Secret nötig; die +# Jetson-UFW lässt den Pi-Runner (.48) an Port 11434. Modell: coder. # 4. für „hart blockieren": den `security`-Check in der Branch-Protection # als required markieren name: CI-AI diff --git a/workflows/ci-failure.example.yml b/workflows/ci-failure.example.yml index 5fed8f0..dbaa6b4 100644 --- a/workflows/ci-failure.example.yml +++ b/workflows/ci-failure.example.yml @@ -26,9 +26,9 @@ # run: apt-get update -qq && apt-get install -y -qq --no-install-recommends git ca-certificates # - name: KI-Analyse # env: -# AI_PROVIDER: anthropic -# AI_MODEL: claude-3-5-haiku-latest -# ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} +# AI_PROVIDER: ollama +# AI_MODEL: coder +# AI_BASE_URL: http://192.168.178.103:11434/v1 # GITEA_TOKEN: ${{ github.token }} # GITEA_API: https://git.eulernest.eu/api/v1 # run: | diff --git a/workflows/security.example.yml b/workflows/security.example.yml index cf45aa1..3bb9f0f 100644 --- a/workflows/security.example.yml +++ b/workflows/security.example.yml @@ -53,9 +53,9 @@ jobs: - name: KI erklärt die Funde (nur bei Fehler, überspringt ohne Key) if: failure() env: - AI_PROVIDER: anthropic - AI_MODEL: claude-3-5-haiku-latest - ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} + AI_PROVIDER: ollama + AI_MODEL: coder + AI_BASE_URL: http://192.168.178.103:11434/v1 GITEA_TOKEN: ${{ github.token }} GITEA_API: https://git.eulernest.eu/api/v1 run: |