# Gitea Secrets Setup - Vollständige Anleitung

## Problem: "Secrets" fehlt in Repository Settings

Wenn du unter **Repository → Settings** keine "Secrets" Option siehst, kann das verschiedene Gründe haben. Diese Anleitung zeigt alle Möglichkeiten, wie Secrets in Gitea konfiguriert werden können.

## 📍 Wo finde ich Secrets in Gitea?

### Option 1: Repository Secrets (Standard)

**Pfad:** `Repository → Settings → Secrets`

⚠️ **Falls diese Option fehlt:**
- Gitea Actions muss für das Repository aktiviert sein
- Benötigt Berechtigung: Repository Owner oder Admin
- Manche Gitea-Versionen haben Secrets an anderen Orten

### Option 2: Über Actions/Tabs

Manche Gitea-Versionen haben Secrets unter:
- **Repository → Settings → Actions → Secrets**
- **Repository → Actions → Secrets**

### Option 3: Organization/Admin Level

Falls Repository-Secrets nicht verfügbar sind, können Secrets auf Organisations-Level gesetzt werden:

1. **Als Admin:** `Site Administration → Actions → Secrets`
2. **Als Org-Owner:** `Organization Settings → Actions → Secrets`

### Option 4: Via Gitea API (Programmatisch)

Falls die UI-Option fehlt, können Secrets via API gesetzt werden:

```bash
# Siehe: scripts/setup-gitea-secrets.sh
```

## 🔍 Diagnose: Warum sehe ich keine Secrets-Option?

### Checkliste:

1. **Ist Gitea Actions aktiviert?**
   - Gehe zu: **Site Administration → Actions → Settings**
   - Stelle sicher, dass Actions aktiviert ist

2. **Hast du die richtigen Berechtigungen?**
   - Du musst Repository Owner oder Admin sein
   - Prüfe: **Repository → Settings → Collaborators**

3. **Welche Gitea-Version wird verwendet?**
   - Neuere Versionen haben Secrets unter Repository → Settings → Secrets
   - Ältere Versionen könnten andere Pfade haben

4. **Sind Actions für das Repository aktiviert?**
   - Prüfe ob Workflows unter **Repository → Actions** sichtbar sind
   - Falls nicht, müssen Actions für das Repository aktiviert werden

## 🛠️ Lösung: Secrets manuell setzen

### Methode 1: Via Gitea API (Empfohlen)

Wenn die UI-Option fehlt, verwende das Setup-Script:

```bash
# Script vorbereiten
cd /home/michael/dev/michaelschiemer

# Setze deine Gitea-Credentials
export GITEA_URL="https://git.michaelschiemer.de"
export GITEA_TOKEN="dein-gitea-token"  # Siehe unten wie man einen Token erstellt
export REPO_OWNER="dein-username"      # Oder Organization-Name
export REPO_NAME="michaelschiemer"

# Setze die Secrets
./scripts/setup-gitea-secrets.sh
```

**Gitea Token erstellen:**
1. Gehe zu: `https://git.michaelschiemer.de/user/settings/applications`
2. Scrolle zu "Generate New Token"
3. Name: z.B. "CI/CD Secrets Setup"
4. Scopes: `write:repository` (mindestens)
5. Klicke "Generate Token"
6. Kopiere den Token (wird nur einmal angezeigt!)

### Methode 2: Environment-Variablen im Runner (Alternative)

Falls Repository Secrets wirklich nicht verfügbar sind, können Secrets auch als Environment-Variablen im Runner konfiguriert werden:

**In `deployment/gitea-runner/docker-compose.yml`:**

```yaml
services:
  gitea-runner:
    environment:
      - REGISTRY_USER=admin
      - REGISTRY_PASSWORD=registry-secure-password-2025
      # Weitere Secrets...
```

⚠️ **Nicht empfohlen:** Weniger sicher, da Secrets im docker-compose.yml gespeichert werden.

### Methode 3: Secrets im Workflow hardcoden (NICHT EMPFOHLEN!)

**⚠️ NIEMALS PASSWÖRTER IM CODE SPEICHERN!**

Diese Methode sollte nur für Tests verwendet werden und ist für Produktion unsicher.

## 📝 Schritt-für-Schritt: Secrets via API setzen

### Schritt 1: Gitea Token erstellen

1. Gehe zu: `https://git.michaelschiemer.de/user/settings/applications`
2. Scrolle zu "Generate New Token"
3. **Name:** `CI/CD Secrets Management`
4. **Scopes:** Wähle:
   - ✅ `read:repository`
   - ✅ `write:repository`
   - ✅ `read:organization` (falls Org-Repo)
5. Klicke **"Generate Token"**
6. **Kopiere den Token sofort** (wird nur einmal angezeigt!)

### Schritt 2: Repository-Informationen finden

**Repository Owner:**
- Gehe zu deinem Repository: `https://git.michaelschiemer.de/[username]/michaelschiemer`
- Der erste Teil nach `/` ist der Owner (Username oder Org-Name)

**Repository Name:**
- Der zweite Teil ist der Repository-Name (meist `michaelschiemer`)

### Schritt 3: Setup-Script ausführen

```bash
cd /home/michael/dev/michaelschiemer

# Konfiguriere die Variablen
export GITEA_URL="https://git.michaelschiemer.de"
export GITEA_TOKEN="dein-token-hier"
export REPO_OWNER="dein-username"
export REPO_NAME="michaelschiemer"
export REGISTRY_PASSWORD="registry-secure-password-2025"

# Führe das Script aus
bash scripts/setup-gitea-secrets.sh
```

Das Script setzt automatisch:
- `REGISTRY_USER` = `admin`
- `REGISTRY_PASSWORD` = Wert von `$REGISTRY_PASSWORD`
- `SSH_PRIVATE_KEY` = aus `~/.ssh/production`

### Schritt 4: Verifizierung

Nach dem Ausführen des Scripts:

1. **Prüfe ob Secrets gesetzt wurden:**
   ```bash
   # Teste mit einem Workflow
   # Gehe zu: Repository → Actions → Test Registry Credentials → Run workflow
   ```

2. **Oder prüfe via API:**
   ```bash
   curl -H "Authorization: token ${GITEA_TOKEN}" \
        "${GITEA_URL}/api/v1/repos/${REPO_OWNER}/${REPO_NAME}/actions/secrets"
   ```

## 🔐 Alternative: Secrets in Runner Environment

Falls Repository Secrets gar nicht funktionieren, können Secrets auch als Environment-Variablen im Runner konfiguriert werden:

### Schritt 1: .env Datei erstellen

```bash
cd deployment/gitea-runner
cp .env.example .env
```

### Schritt 2: Secrets zur .env hinzufügen

```bash
nano .env
```

Füge hinzu:
```bash
REGISTRY_USER=admin
REGISTRY_PASSWORD=registry-secure-password-2025
# SSH_PRIVATE_KEY würde hier nicht gesetzt werden (zu lang)
```

### Schritt 3: docker-compose.yml anpassen

```yaml
services:
  gitea-runner:
    environment:
      - REGISTRY_USER=${REGISTRY_USER:-admin}
      - REGISTRY_PASSWORD=${REGISTRY_PASSWORD}
    # ... rest of config
```

### Schritt 4: Workflow anpassen

Im Workflow müssen Secrets dann anders geladen werden:

```yaml
- name: Login to Registry
  env:
    REGISTRY_USER: ${REGISTRY_USER}
    REGISTRY_PASSWORD: ${REGISTRY_PASSWORD}
  run: |
    # Secrets werden jetzt aus Runner Environment geladen
```

⚠️ **Nachteil:** Secrets sind dann im Runner-Environment und nicht repository-spezifisch.

## 🧪 Test ob Secrets funktionieren

### Test 1: Workflow ausführen

```bash
# Gehe zu: Repository → Actions → Test Registry Credentials → Run workflow
```

### Test 2: Debug-Output im Workflow

Füge temporär Debug-Output hinzu:

```yaml
- name: Debug Secrets
  run: |
    echo "REGISTRY_USER length: ${#REGISTRY_USER}"
    echo "REGISTRY_PASSWORD length: ${#REGISTRY_PASSWORD}"
    # Zeigt die Länge, nicht den Inhalt (für Sicherheit)
```

Wenn beide > 0 sind, funktionieren die Secrets.

### Test 3: Lokales Test-Script

```bash
export REGISTRY_USER="admin"
export REGISTRY_PASSWORD="registry-secure-password-2025"
./scripts/test-registry-credentials.sh
```

## 📚 Nützliche Links

- **Gitea Actions Docs:** https://docs.gitea.io/en-us/actions/
- **Secrets API:** https://docs.gitea.io/en-us/api-usage/#repository-secrets
- **Setup Script:** `scripts/setup-gitea-secrets.sh`

## ❓ Häufige Fragen

### Q: Warum sehe ich keine "Secrets" Option?

**A:** Mögliche Gründe:
1. Gitea Actions ist nicht aktiviert
2. Du hast nicht die nötigen Berechtigungen (Repository Owner/Admin)
3. Deine Gitea-Version hat Secrets an einem anderen Ort
4. Secrets müssen via API gesetzt werden

### Q: Kann ich Secrets für mehrere Repositories setzen?

**A:** Ja, über:
- **Organization Secrets:** Für alle Repos in der Organisation
- **API:** Script mehrmals ausführen mit verschiedenen `REPO_NAME`

### Q: Sind Secrets verschlüsselt?

**A:** Ja, Gitea verschlüsselt Secrets vor der Speicherung.

### Q: Wie ändere ich ein Secret?

**A:** 
- Via UI: Bearbeiten (falls verfügbar)
- Via API: Script erneut ausführen (überschreibt das Secret)
- Via Script: `setup-gitea-secrets.sh` erneut ausführen

## 🚀 Quick Start

**Schnellste Methode (wenn API verfügbar):**

```bash
export GITEA_URL="https://git.michaelschiemer.de"
export GITEA_TOKEN="dein-token"
export REPO_OWNER="dein-username"
export REPO_NAME="michaelschiemer"
export REGISTRY_PASSWORD="registry-secure-password-2025"

bash scripts/setup-gitea-secrets.sh
```

Das war's! Secrets sollten jetzt funktionieren.
