latapp 11 ay önce
ebeveyn
işleme
9f05b51d05
2 değiştirilmiş dosya ile 81 ekleme ve 1 silme
  1. 1 1
      main.py
  2. 80 0
      xd.py

+ 1 - 1
main.py

@@ -16,7 +16,7 @@ from impresora.order import *
 
 # Load environment variables from .env file
 load_dotenv()
-#pruebita3
+#pruebita4
 
 # Configuration
 OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")

+ 80 - 0
xd.py

@@ -0,0 +1,80 @@
+# encoding: utf-8
+
+import json
+import os
+import subprocess
+import hmac
+import hashlib
+from flask import Flask, request, abort
+
+app = Flask(__name__)
+#prueba 2
+GITHUB_SECRET = os.environ.get("GITHUB_WEBHOOK_SECRET") 
+
+REPO_PATH = "/home/superti/page" 
+
+SERVICE_NAME = "latapp-server.service"
+
+def verify_signature(data, github_signature):
+    if not GITHUB_SECRET:
+        print("GITHUB_SECRET no configurado. PELIGRO Los webhooks no serán validados.")
+        return False
+
+    hasher = hmac.new(GITHUB_SECRET.encode("utf-8"), data, hashlib.sha256)
+    expected_signature = "sha256="+ hasher.hexdigest()
+    return hmac.compare_digest(expected_signature, github_signature)
+
+@app.route("/webhook", methods=["POST"])
+def webhook():
+    print(request.headers)
+    if request.method == "POST":
+        signature = request.headers.get("X-Hub-Signature-256", type=str)
+        if not verify_signature(request.get_data(), signature):
+            abort(403)
+
+        event = request.headers.get("X-GitHub-Event")
+        if event == "push":
+            payload = request.json
+            
+            ref = payload["ref"]
+
+            if ref == "refs/heads/main": 
+                print("Webhook de PR recibido para la rama {}. Iniciando despliegue...".format(ref.split("/")[2]))
+                try:
+                    os.chdir(REPO_PATH)
+
+                    print("Ejecutando git pull...")
+                    subprocess.run(["git", "pull"], check=True)
+
+                    print("Creando/activando entorno virtual...")
+                    if not os.path.exists(".venv"):
+                        subprocess.run(["python3", "-m", "venv", ".venv"], check=True)
+                    
+                    print("Ejecutando pip install...")
+                    subprocess.run(["{}/.venv/bin/pip".format(REPO_PATH), "install", "-r", "requirements.txt"], check=True)
+
+                    print("Reiniciando servicio {}...".format(SERVICE_NAME))
+                    subprocess.run(["sudo", "systemctl", "restart", SERVICE_NAME], check=True)
+                    
+                    print("Despliegue completado con éxito.")
+                    return "Despliegue iniciado", 200
+
+                except subprocess.CalledProcessError as e:
+                    print("Error durante el despliegue: {}".format(e))
+                    print(e.stderr)
+                    return "Error en el despliegue: {}".format(e), 500
+                except Exception as e:
+                    print("Error inesperado: {}".format(e))
+                    return "Error inesperado: {}".format(e), 500
+            else:
+                print("Evento '{}' en rama '{}' no procesada.".format(event,ref.split("/")[2]))
+                return "Evento no procesado", 200
+        else:
+            print("Evento '{}' no es de pull_request. Ignorando.".format(event))
+            return "Evento no de PR. Ignorando.", 200
+    else:
+        abort(400) 
+
+if __name__ == "__main__":
+    print("Servidor Flask iniciado. Esperando webhooks en /webhook")
+    app.run(host="0.0.0.0", port=9001)