Skip to content
Draft
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
65 changes: 65 additions & 0 deletions scripts/auto_deploy_v2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
#!/usr/bin/env python3
# scripts/auto_deploy_v2.py
import os
import sys
import json
import urllib.error
import urllib.request
from typing import Any, Dict


def validar_promocion(data: Dict[str, Any]) -> bool:
campos_requeridos = ["title", "description", "discount_code", "valid_until"]
for campo in campos_requeridos:
if campo not in data:
print(f"Error: Falta el campo requerido: {campo}")
return False
return True

def main():
if len(sys.argv) < 2:
print("Uso: python3 scripts/auto_deploy_v2.py <ruta_al_archivo_json>")
sys.exit(1)

ruta_archivo = sys.argv[1]

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

if not validar_promocion(data):
sys.exit(1)

api_key = os.environ.get("TRYONYOU_API_KEY", "default_key_if_none")
api_url = "https://api.tryonyou.pro/v1/promotions"

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")
try:
titulo = data.get("title", "Sin título")
print(f"Desplegando promoción '{titulo}' en {api_url}...")

# En el entorno de desarrollo podemos simular la petición si queremos, pero el script
# debe estar preparado para producción.
# Aquí controlamos errores de red gracefully.
respuesta = urllib.request.urlopen(req)
respuesta_texto = respuesta.read().decode("utf-8")
print(f"Despliegue exitoso: {respuesta_texto}")
sys.exit(0)
except urllib.error.URLError as e:
print(f"Error en el despliegue (esto es normal si la URL es falsa/dry-run o no hay internet): {e}")
# En caso de error de red, devolvemos 0 si el entorno permite fallar, pero 1 para el wrapper
sys.exit(1)
except Exception as e:
print(f"Error inesperado: {e}")
sys.exit(1)

if __name__ == "__main__":
main()
24 changes: 24 additions & 0 deletions scripts/auto_deploy_v2.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
#!/bin/bash
# scripts/auto_deploy_v2.sh

if [ -z "$1" ]; then
echo "Uso: $0 <ruta_al_archivo_json>"
exit 1
fi

JSON_FILE=$1

echo "Iniciando despliegue de promociones usando $JSON_FILE..."

python3 scripts/auto_deploy_v2.py "$JSON_FILE"

EXIT_CODE=$?

if [ $EXIT_CODE -eq 0 ]; then
echo "Despliegue completado con éxito."
else
echo "Fallo en el despliegue. Por favor revisa los logs."
# Para pruebas locales sin mockear API, si hay error de red no bloquearemos CI necesariamente.
fi

exit $EXIT_CODE
Loading