# Instrukcja tworzenia aktualizacji shopPRO

## Nowy sposób (od v0.301) — automatyczny build script

### Wymagania
- Git z tagami wersji (np. `v0.299`, `v0.300`)
- PowerShell

### Workflow

```
1. Pracuj normalnie: commit, push, commit, push...
2. Gdy wersja gotowa:
   → git tag v0.XXX
   → ./build-update.ps1 -ToTag v0.XXX -ChangelogEntry "NEW - opis"
3. Upload plików z updates/0.XX/ na serwer aktualizacji
```

### Użycie build-update.ps1

```powershell
# Podgląd zmian (bez tworzenia plików)
./build-update.ps1 -ToTag v0.301 -DryRun

# Budowanie paczki (auto-detect poprzedniego tagu)
./build-update.ps1 -ToTag v0.301 -ChangelogEntry "NEW - opis zmiany"

# Z jawnym tagiem źródłowym
./build-update.ps1 -FromTag v0.300 -ToTag v0.301 -ChangelogEntry "NEW - opis"
```

### Co robi skrypt automatycznie
1. `git diff --name-status` między tagami → listy dodanych/zmodyfikowanych/usuniętych plików
2. Filtrowanie przez `.updateignore` (pliki deweloperskie, konfiguracyjne itp.)
3. Kopiowanie plików do temp, tworzenie ZIP
4. SHA256 checksum ZIP-a
5. Generowanie `ver_X.XXX_manifest.json`
6. Generowanie legacy `_sql.txt` i `_files.txt` (okres przejściowy)
7. Aktualizacja `versions.php` i `changelog.php`
8. Cleanup

### Pliki wynikowe
- `updates/0.XX/ver_X.XXX.zip` — paczka z plikami
- `updates/0.XX/ver_X.XXX_manifest.json` — manifest z checksumem, listą zmian, SQL
- `updates/0.XX/ver_X.XXX_sql.txt` — legacy SQL (okres przejściowy)
- `updates/0.XX/ver_X.XXX_files.txt` — legacy lista plików do usunięcia (okres przejściowy)

### Migracje SQL
Pliki SQL umieszczaj w `migrations/{version}.sql` (np. `migrations/0.301.sql`).
Build script automatycznie je wczyta i umieści w manifeście + legacy `_sql.txt`.

### Format manifestu
```json
{
    "version": "0.301",
    "date": "2026-02-22",
    "checksum_zip": "sha256:abc123...",
    "files": {
        "modified": ["autoload/Domain/Order/OrderRepository.php"],
        "added": ["autoload/Domain/Order/NewHelper.php"],
        "deleted": ["autoload/shop/OldClass.php"]
    },
    "directories_deleted": [],
    "sql": ["ALTER TABLE pp_x ADD COLUMN y INT DEFAULT 0"],
    "changelog": "NEW - opis zmiany"
}
```

### .updateignore
Plik w katalogu głównym projektu, wzorce plików wykluczonych z paczek (jak `.gitignore`).

### INFO
pamiętaj że push czasem zwraca błąd autoryzacji, wtedy spróbuj ponownie