# 🔄 Flujo de Assets: cd-system → Servidor (Terashe)

## 🎯 Pregunta

¿Los assets que subo a cd-system van al servidor cuando hago pull desde terashe? ¿Cuándo ejecutar `project:update-assets`?

---

## 📋 Respuesta Rápida

### ¿Los assets van al servidor?

**Depende de dónde los coloques:**

1. **Si los pones en `public/cd-project/assets/` en cd-system:**
   - ✅ SÍ, van al servidor con el pull
   - ⚠️ PERO están protegidos por `.gitattributes` (no se sobrescriben si ya existen)

2. **Si los pones directamente en `img/logos/` o `img/favicon/`:**
   - ❌ NO deberías hacerlo (esos están protegidos)
   - ✅ Esos son específicos del proyecto

### ¿Cuándo ejecutar el comando?

**DESPUÉS del pull:**
```bash
# 1. Hacer pull (trae assets de cd-system si los hay)
git pull origin cd-system

# 2. Ejecutar comando para procesar assets
php artisan project:update-assets public/cd-project/assets --backup
```

---

## 🔍 Análisis Detallado

### Estructura de Assets

```
public/cd-project/
├── assets/                    # TEMPORAL (puede venir de cd-system)
│   ├── logo.png              # ← Puede venir de cd-system
│   ├── favicon.ico           # ← Puede venir de cd-system
│   └── ...
├── img/
│   ├── logos/                # FINAL (protegido, específico del proyecto)
│   │   ├── logo.png          # ← Protegido con merge=ours
│   │   └── ...
│   └── favicon/              # FINAL (protegido, específico del proyecto)
│       ├── favicon.ico       # ← Protegido con merge=ours
│       └── ...
```

### ¿Qué está Protegido?

Según `.gitattributes`:

```gitattributes
# Assets temporales/backup del proyecto
public/cd-project/assets/** merge=ours
public/cd-project/assets/* merge=ours

# Logos del proyecto (FINALES)
public/cd-project/img/logos/** merge=ours

# Favicons del proyecto (FINALES)
public/cd-project/img/favicon/** merge=ours
```

**Problema:** `public/cd-project/assets/**` está protegido, entonces:
- Si en cd-system hay assets nuevos en `public/cd-project/assets/`
- Y en terashe ya hay assets en `public/cd-project/assets/`
- El pull NO los actualizará (porque está protegido)

---

## ✅ Solución: Ajustar .gitattributes

### Opción 1: NO Proteger `public/cd-project/assets/` (Recomendado)

Los assets en `public/cd-project/assets/` son temporales y pueden venir de cd-system. Solo los finales (`img/logos/` y `img/favicon/`) deben estar protegidos.

**`.gitattributes` ajustado:**

```gitattributes
# Auto detect text files and perform LF normalization
* text=auto

# ============================================
# Archivos protegidos del proyecto
# Estos archivos mantienen la identidad del proyecto y NO deben ser sobrescritos
# durante merges o pulls desde cd-system. Se usa estrategia "ours" para mantener
# siempre la versión del proyecto.
# ============================================

# Configuración del proyecto
config/cd-system.php merge=ours
config/site.php merge=ours

# Logos del proyecto (FINALES - protegidos)
public/cd-project/img/logos/** merge=ours
public/cd-project/img/logos/* merge=ours

# Favicons del proyecto (FINALES - protegidos)
public/cd-project/img/favicon/** merge=ours
public/cd-project/img/favicon/* merge=ours

# NOTA: public/cd-project/assets/ NO está protegido
# Esto permite que assets temporales de cd-system se actualicen durante pull
# Los assets finales (img/logos/ y img/favicon/) SÍ están protegidos

# Skins CSS personalizados del proyecto (si existen)
# NOTA: Los skins del demo (skin-architecture-2.css, skin-law-firm-2.css, etc.)
# NO deben protegerse, solo los personalizados del proyecto
# Si tu proyecto tiene un skin personalizado, descomenta y ajusta la línea:
# public/template/css/skins/skin-mi-proyecto.css merge=ours
```

### Opción 2: Mantener Protección pero Usar Flujo Diferente

Si quieres mantener `public/cd-project/assets/` protegido:

1. **En cd-system:** NO commitear assets en `public/cd-project/assets/`
2. **En servidor:** Colocar assets manualmente y ejecutar comando

---

## 🚀 Flujo Recomendado

### Escenario 1: Assets Vienen de cd-system

```bash
# En cd-system:
# 1. Colocar assets en public/cd-project/assets/
cp /ruta/a/assets/* public/cd-project/assets/

# 2. Commitear (si quieres que vayan al servidor)
git add public/cd-project/assets/
git commit -m "chore: Actualizar assets temporales"
git push origin cd-system

# En servidor (terashe):
# 1. Hacer pull (trae assets de cd-system)
git pull origin cd-system

# 2. Ejecutar comando para procesar assets
php artisan project:update-assets public/cd-project/assets --backup

# 3. Los assets finales (img/logos/, img/favicon/) NO se sobrescriben
# porque están protegidos, pero el comando los actualiza desde assets/
```

### Escenario 2: Assets Específicos del Proyecto

```bash
# En servidor (terashe):
# 1. Colocar assets específicos del proyecto
cp /ruta/a/assets-proyecto/* public/cd-project/assets/

# 2. Ejecutar comando
php artisan project:update-assets public/cd-project/assets --backup

# 3. Los assets finales se actualizan
# 4. En futuros pulls, NO se sobrescribirán (protegidos)
```

---

## 📋 Orden Correcto en el Servidor

### Siempre DESPUÉS del Pull:

```bash
# 1. Hacer pull primero
git pull origin cd-system

# 2. Luego ejecutar comando (si hay assets nuevos o quieres actualizar)
php artisan project:update-assets public/cd-project/assets --backup

# 3. Verificar
ls -la public/cd-project/img/logos/
ls -la public/cd-project/img/favicon/
```

**¿Por qué después del pull?**
- El pull puede traer assets nuevos en `public/cd-project/assets/`
- El comando los procesa y copia a ubicaciones finales
- Los finales están protegidos, pero el comando los actualiza desde `assets/`

---

## ⚠️ Ajuste Necesario en .gitattributes

**Recomendación:** Remover la protección de `public/cd-project/assets/` para permitir que assets de cd-system se actualicen:

```gitattributes
# REMOVER estas líneas:
# public/cd-project/assets/** merge=ours
# public/cd-project/assets/* merge=ours

# MANTENER estas (protegen los finales):
public/cd-project/img/logos/** merge=ours
public/cd-project/img/favicon/** merge=ours
```

**Razón:**
- `public/cd-project/assets/` es temporal
- Puede contener assets de cd-system que deben actualizarse
- Los finales (`img/logos/`, `img/favicon/`) SÍ deben estar protegidos

---

## ✅ Resumen

1. **Assets en `public/cd-project/assets/`:** Pueden venir de cd-system (NO proteger)
2. **Assets en `img/logos/` y `img/favicon/`:** Específicos del proyecto (SÍ proteger)
3. **Orden en servidor:** Pull primero, luego `project:update-assets`
4. **El comando siempre funciona:** `.gitattributes` NO lo bloquea

---

**Última actualización:** Diciembre 2024

