Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions PROMOTIONS_README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Documentación de Scripts de Promociones

Este documento explica cómo usar los scripts que automatizan la publicación de promociones para `tryonyou.pro`.

## Scripts disponibles

Los scripts se encuentran en el directorio raíz del repositorio.

### 1. `scripts/auto_deploy_v2.sh`

Este es un wrapper en Bash que toma el archivo promocional, y llama a `scripts/auto_deploy_v2.py` para procesarlo, controlando el código de salida.

**Uso:**

```bash
./scripts/auto_deploy_v2.sh <ruta_al_archivo_json>
```

**Ejemplo de uso:**
```bash
./scripts/auto_deploy_v2.sh promotion_example.json
```

### 2. `scripts/auto_deploy_v2.py`

Es el script principal desarrollado en Python que lee el JSON de la promoción, valida los campos requeridos (`title`, `description`, `discount_code`, `valid_until`) y realiza el POST de despliegue a la API de producción.

**Uso directo:**
```bash
python3 scripts/auto_deploy_v2.py <ruta_al_archivo_json>
```

**Variables de entorno:**
- `TRYONYOU_API_KEY`: Clave API para autenticar la petición. Si no está definida, se enviará un valor por defecto.

## Formato del archivo JSON de promoción

Todos los archivos de promoción deben seguir la siguiente estructura:

```json
{
"title": "Summer Sale 2024",
"description": "Get 50% off on all items this summer!",
"discount_code": "SUMMER50",
"valid_until": "2024-08-31T23:59:59Z"
}
```
86 changes: 86 additions & 0 deletions scripts/auto_deploy_v2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
#!/usr/bin/env python3
"""
auto_deploy.py - Automatiza la publicación de promociones para tryonyou.pro.
Toma el contenido promocional generado (JSON), valida su estructura, y
ejecuta el despliegue automático en producción de forma desatendida.

Uso:
./auto_deploy.py <archivo_promocion.json>
"""

import os
import sys
import json
import urllib.error
import urllib.request

# Configuración de Producción
API_URL = "https://api.tryonyou.pro/v1/promotions"
REQUIRED_FIELDS = ["title", "description", "discount_code", "valid_until"]

def main():
if len(sys.argv) < 2:
print("Uso: ./auto_deploy.py <archivo_promocion.json>")
sys.exit(1)

file_path = sys.argv[1]

# 1. Leer el archivo
if not os.path.exists(file_path):
print(f"Error: El archivo '{file_path}' no existe.")
sys.exit(1)

try:
with open(file_path, 'r', encoding='utf-8') as f:
data = json.load(f)
except Exception as e:
print(f"Error leyendo el archivo JSON: {e}")
sys.exit(1)

# 2. Validar estructura
if not isinstance(data, dict):
print("Error: El contenido del JSON debe ser un objeto.")
sys.exit(1)

for field in REQUIRED_FIELDS:
if field not in data:
print(f"Error de validación: Falta el campo requerido '{field}'.")
sys.exit(1)

print("Validación de estructura completada exitosamente.")

# 3. Ejecutar el despliegue en producción de forma desatendida
# Usamos una variable de entorno para la clave API, o simulamos si no está en un entorno CI
api_key = os.environ.get("TRYONYOU_API_KEY", "default-unattended-key-if-none")

headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}

req = urllib.request.Request(
API_URL,
data=json.dumps(data).encode('utf-8'),
headers=headers,
method='POST'
)

print(f"Iniciando despliegue desatendido en producción ({API_URL})...")

try:
response = urllib.request.urlopen(req, timeout=10)
print(f"Despliegue exitoso. Código de respuesta: {response.status}")
except urllib.error.HTTPError as e:
print(f"Error HTTP en el despliegue: {e.code} - {e.reason}")
sys.exit(1)
except urllib.error.URLError as e:
print(f"Fallo de red en el despliegue: {e}")
sys.exit(1)
except Exception as e:
print(f"Error en el despliegue: {e}")
sys.exit(1)

print("Rutina de despliegue completada.")

if __name__ == "__main__":
main()
21 changes: 21 additions & 0 deletions scripts/auto_deploy_v2.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/usr/bin/env bash
# auto_deploy.sh - Wrapper para ejecutar la rutina de despliegue automático
# de promociones en tryonyou.pro

if [ -z "$1" ]; then
echo "Uso: ./auto_deploy.sh <archivo_promocion.json>"
exit 1
fi

PROMO_FILE="$1"

# Ejecutar el script Python que contiene la lógica de validación y despliegue
python3 scripts/auto_deploy_v2.py "$PROMO_FILE"
EXIT_CODE=$?

if [ $EXIT_CODE -eq 0 ]; then
echo "Despliegue automático completado con éxito."
else
echo "Fallo en el despliegue automático."
exit $EXIT_CODE
fi
Loading