From 87856c9f86fe8750dbc796120627ddb10ed2aac1 Mon Sep 17 00:00:00 2001 From: fabolous005 Date: Mon, 29 Dec 2025 03:49:45 +0100 Subject: [PATCH] Initial --- conf/engler-labs/release | 18 +++++++++++++ conf/teatrade/push | 20 ++++++++++++++ conf/teatrade/release | 23 ++++++++++++++++ main.py | 57 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 118 insertions(+) create mode 100755 conf/engler-labs/release create mode 100755 conf/teatrade/push create mode 100755 conf/teatrade/release create mode 100644 main.py diff --git a/conf/engler-labs/release b/conf/engler-labs/release new file mode 100755 index 0000000..a7f8e6f --- /dev/null +++ b/conf/engler-labs/release @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +VER="$1" + +cd /var/db/repos/febuild || exit 1 + +mv ./www-servers/engler-labs/engler-labs-*.ebuild \ + ./www-servers/engler-labs/engler-labs-$VER.ebuild || exit 1 + +pkgdev manifest + +git add . +git commit -m "post-release engler-labs $VER" +git push + +emerge --oneshot --nodeps engler-labs + +rc-service engler-labs restart diff --git a/conf/teatrade/push b/conf/teatrade/push new file mode 100755 index 0000000..b184a9f --- /dev/null +++ b/conf/teatrade/push @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +[ ! -d /var/src/teatrader ] && \ + cd /var/src && \ + git clone git@git.engler-labs.root64.de:fabous005/teatrader.git && \ + return 1; +cd /var/src/teatrader + +git pull + +cargo build --release + +rsync -av ./static ./templates ./.env /var/lib/teatrader-edge/ +cp ./target/release/teatrade /var/lib/teatrader-edge/teatrade-edge + +killall teatrade-edge + +cd /var/lib/teatrader-edge/ + +exec teatrade-edge diff --git a/conf/teatrade/release b/conf/teatrade/release new file mode 100755 index 0000000..846758d --- /dev/null +++ b/conf/teatrade/release @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +[ ! -d /var/src/teatrader ] && \ + cd /var/src && \ + git clone git@git.engler-labs.root64.de:fabous005/teatrader.git && \ + return 1; +cd /var/src/teatrader + +tag=$(curl -s $GITEA/api/v1/repos/$OWNER/$REPO/releases/latest \ + | jq -r .tag_name) + +git checkout "$tag" + +cargo build --release + +rsync -av ./static ./templates ./.env /var/lib/teatrader-stable/ +cp ./target/release/teatrade /var/lib/teatrader-stable/teatrade-stable + +killall teatrade-stable + +cd /var/lib/teatrader-stable/ + +exec teatrade-stable diff --git a/main.py b/main.py new file mode 100644 index 0000000..bf61a8b --- /dev/null +++ b/main.py @@ -0,0 +1,57 @@ +import os +import subprocess +from flask import Flask, request, jsonify + +app = Flask(__name__) + +WEBBUMP_DIR = "/etc/webbump" + +@app.route('/status', methods=['GET']) +def status(): + """Minimal endpoint for health check.""" + return "OK", 200 + +@app.route("/webhook", methods=["POST"]) +def gitea_webhook(): + data = request.json + if not data: + print("Received webhook without JSON") + return jsonify({"error": "Invalid JSON"}), 400 + + # Repository name + repo_name = data.get("repository", {}).get("name") + if not repo_name: + print("Could not get Repository name from JSON") + return jsonify({"error": "Repository name not found"}), 400 + + # Determine event type from header + event_type = request.headers.get("X-Gitea-Event", "").lower() + if event_type not in ("release", "push"): + return jsonify({"message": f"Ignored event type: {event_type}"}), 200 + + if event_type == "push": + args = [] + + elif event_type == "release": + version = data.get("release", {}).get("tag_name") + if not version: + return jsonify({"error": "Release version not found"}), 400 + args = [version] + + script_path = os.path.join(WEBBUMP_DIR, repo_name, event_type) + if not os.path.isfile(script_path) or not os.access(script_path, os.X_OK): + return jsonify({"message": f"No scripts executed for event: {event_type}"}), 200 + + # Run the script + try: + subprocess.run([script_path, *args], check=True) + except subprocess.CalledProcessError as e: + print(repo_name + " " + script_name + " script failed with exit code: " + e) + return jsonify({"error": f"Script failed: {e}"}), 500 + + return jsonify({"message": f"Executed {script_path}"}), 200 + + + +if __name__ == '__main__': + app.run(host='0.0.0.0', port=5000, debug=True)