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()