Dateien nach "/" hochladen
This commit is contained in:
105
upload_apks_to_gitea.py
Normal file
105
upload_apks_to_gitea.py
Normal file
@@ -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()
|
||||
Reference in New Issue
Block a user