From 7066787a1a6ef66bbab66e98c481764329c49880 Mon Sep 17 00:00:00 2001 From: Felix Date: Fri, 8 Aug 2025 18:51:29 +0200 Subject: [PATCH] Dateien nach "/" hochladen --- upload_apks_to_gitea.py | 105 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 upload_apks_to_gitea.py diff --git a/upload_apks_to_gitea.py b/upload_apks_to_gitea.py new file mode 100644 index 0000000..acc1aa0 --- /dev/null +++ b/upload_apks_to_gitea.py @@ -0,0 +1,105 @@ +import os +import glob +import time +import requests +from datetime import datetime + +# Konfiguration +GITEA_URL = "https://git.felo.gg" +OWNER = "FeloStore" +REPO = "Data" +TAG = "latest" +TOKEN = "YOUR_GIT_AUTH_TOKEN_HERE" +DOWNLOAD_FOLDER = os.path.join(os.environ["USERPROFILE"], "Downloads") # Windows-kompatibel +HEADERS = { + "Authorization": f"token {TOKEN}" +} + +def get_release_id_by_tag(): + url = f"{GITEA_URL}/api/v1/repos/{OWNER}/{REPO}/releases/tags/{TAG}" + response = requests.get(url, headers=HEADERS) + if response.status_code == 200: + release = response.json() + return release["id"] + else: + print(f"❌ Release with Tag '{TAG}' not found. Status: {response.status_code}") + return None + +def get_existing_assets(release_id): + url = f"{GITEA_URL}/api/v1/repos/{OWNER}/{REPO}/releases/{release_id}" + response = requests.get(url, headers=HEADERS) + if response.status_code == 200: + release = response.json() + return release.get("assets", []) + else: + print(f"❌ Error. Status: {response.status_code}") + return [] + +def delete_asset(release_id, asset_id): + """Deletes an Asset with its ID""" + url = f"{GITEA_URL}/api/v1/repos/{OWNER}/{REPO}/releases/{release_id}/assets/{asset_id}" + response = requests.delete(url, headers=HEADERS) + if response.status_code in [200, 204]: + print(f"✅ Asset deleted.") + return True + else: + print(f"❌ Error: {response.status_code} {response.text}") + return False + +def upload_apk(release_id, file_path): + filename = os.path.basename(file_path) + + assets = get_existing_assets(release_id) + for asset in assets: + if asset["name"] == filename: + print(f"🔄 Old Version of {filename} found. Deleting...") + if delete_asset(release_id, asset["id"]): + time.sleep(1) + else: + print(f"⚠️ Couldnt delete old version of {filename}, overwriting...") + + print(f"Hochladen: {filename}") + url = f"{GITEA_URL}/api/v1/repos/{OWNER}/{REPO}/releases/{release_id}/assets" + with open(file_path, "rb") as f: + files = {"attachment": (filename, f)} + response = requests.post(url, headers=HEADERS, files=files) + if response.status_code == 201: + print(f"✅ Successfully uploaded: {filename}") + return True + else: + print(f"❌ Error: {response.status_code} {response.text}") + return False + +def delete_apk_files(apk_files): + print(f"Wait 10 seconds before deleting the files...") + time.sleep(10) + + for apk in apk_files: + filename = os.path.basename(apk) + try: + os.remove(apk) + print(f"🗑️ APK-File deleted: {filename}") + except Exception as e: + print(f"⚠️ Error: {str(e)}") + +def main(): + print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] Starte Scan...") + release_id = get_release_id_by_tag() + if release_id is None: + return + + apk_files = glob.glob(os.path.join(DOWNLOAD_FOLDER, "*.apk")) + if not apk_files: + print("No .apk Files found.") + return + + successfully_uploaded = [] + for apk in apk_files: + if upload_apk(release_id, apk): + successfully_uploaded.append(apk) + + if successfully_uploaded: + delete_apk_files(successfully_uploaded) + +if __name__ == "__main__": + main() \ No newline at end of file