# WordPress SVN Tag Creator v2 — Post Status Notifier (Lite)

Ein Node.js-Skript zum Veröffentlichen neuer PSN-Lite-Versionen im
WordPress-Plugin-SVN-Repository.

## Voraussetzungen

- Node.js 18+ (empfohlen: 22)
- SVN-Arbeitsverzeichnis mit `trunk/` und `tags/`
- Keine zusätzlichen npm-Dependencies nötig

## Verwendung

```bash
# Ins SVN-Hauptverzeichnis wechseln
cd /Volumes/sources/post-status-notifier-lite

# Test-Durchlauf (empfohlen vor jedem Release)
node resources/svn/create-tag-v2.mjs <version> --dry-run

# Echter Release
node resources/svn/create-tag-v2.mjs <version>

# Hilfe anzeigen
node resources/svn/create-tag-v2.mjs --help
```

## Beispiele

```bash
# Version 1.13.0 testen
node resources/svn/create-tag-v2.mjs 1.13.0 --dry-run

# Version 1.13.0 veröffentlichen
node resources/svn/create-tag-v2.mjs 1.13.0

# Version 1.13.1 veröffentlichen
node resources/svn/create-tag-v2.mjs 1.13.1
```

## Optionen

| Option      | Kurz | Beschreibung                                                  |
|-------------|------|---------------------------------------------------------------|
| `--dry-run` | `-d` | Test-Modus: Führt alle Prüfungen durch, committed aber nichts |
| `--help`    | `-h` | Zeigt die Hilfe an                                            |

## Was das Skript macht

1. **Validierung**
   - Prüft, ob die Version ein gültiges Format hat (X.Y.Z)
   - Prüft, ob der Tag bereits existiert
   - Prüft, ob `trunk/` und `trunk/readme.txt` vorhanden sind
   - Zeigt uncommitted Changes an

2. **Step 1: Stable Tag aktualisieren**
   - Liest den aktuellen `Stable tag` aus `trunk/readme.txt`
   - Aktualisiert ihn auf die neue Version (falls nötig)

3. **Step 2: SVN-Tag erstellen**
   - Kopiert `trunk/` nach `tags/<version>/`
   - Entfernt ignorierte Dateien aus dem Tag

4. **Step 3: Tag committen**
   - Committed den neuen Tag ins SVN-Repository

5. **Step 4: Trunk committen**
   - Committed `trunk/` (inkl. aktualisierter `readme.txt`)
   - WordPress erkennt dadurch die neue Version

## Ignorierte Dateien

Folgende Dateien/Verzeichnisse werden automatisch aus dem Tag entfernt:

- `.idea/`
- `.claude/`
- `.security-reports/`
- `.wp-env.json`
- `.DS_Store`
- `tmp/`
- `GEMINI.md`
- `CLAUDE.md`
- `node_modules/`

## Dry-Run-Modus

Der `--dry-run`-Modus ist ideal, um vor dem Release zu prüfen:

- Ob alle Voraussetzungen erfüllt sind
- Welche Dateien committed würden
- Welche ignorierten Dateien entfernt würden
- Wie die Commit-Nachrichten aussehen würden

**Es werden keine Änderungen am Repository vorgenommen.**

## Troubleshooting

### "Verzeichnis trunk nicht gefunden"
Das Skript muss vom Verzeichnis ausgeführt werden, das `trunk/` enthält:
```bash
cd /Volumes/sources/post-status-notifier-lite
node resources/svn/create-tag-v2.mjs 1.13.0
```

### "Tag existiert bereits"
Der Tag wurde bereits erstellt. Prüfe mit:
```bash
ls tags/
```

### SVN-Authentifizierung
Falls SVN nach Credentials fragt, stelle sicher, dass deine SVN-Credentials
gespeichert sind:
```bash
svn auth
```

## Altes Skript

Das alte Bash-Skript `create-tag.sh` ist weiterhin vorhanden, wird aber
nicht mehr empfohlen.

## Änderungshistorie

- **v2** (Mai 2026): Portierung von ASA-Skript v2 auf PSN Lite
  - Interaktive Bestätigungen vor kritischen Schritten
  - Dry-Run-Modus für sichere Tests
  - Farbige Ausgaben und Spinner-Animationen
  - Robuste Fehlerbehandlung
  - Automatische Aktualisierung des Stable tags
