goober/modules/version.py

113 lines
3.7 KiB
Python
Raw Normal View History

2025-06-20 23:48:10 +02:00
import requests
2025-06-21 00:01:33 +02:00
import subprocess
2025-06-21 00:14:01 +02:00
import sys
2025-07-09 15:05:06 +02:00
import logging
2025-07-15 23:56:44 +02:00
import json
2025-07-16 00:32:59 +02:00
import time
import random
import modules.keys as k
from modules.globalvars import *
from modules.settings import Settings as SettingsManager
settings_manager = SettingsManager()
settings = settings_manager.settings
2025-07-09 15:05:06 +02:00
logger = logging.getLogger("goober")
2025-07-07 01:18:51 +02:00
launched = False
# Run a shell command and return its output
2025-06-21 00:01:33 +02:00
def run_cmd(cmd):
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
return result.stdout.strip()
# Check if the remote branch is ahead of the local branch
2025-06-21 00:01:33 +02:00
def is_remote_ahead(branch='main', remote='origin'):
run_cmd(f'git fetch {remote}')
count = run_cmd(f'git rev-list --count HEAD..{remote}/{branch}')
return int(count) > 0
# Automatically update the local repository if the remote is ahead
2025-06-21 00:01:33 +02:00
def auto_update(branch='main', remote='origin'):
if launched == True:
print(k.already_started())
return
if settings["auto_update"] != "True":
pass # Auto-update is disabled
2025-06-21 00:01:33 +02:00
if is_remote_ahead(branch, remote):
logger.info(k.remote_ahead(remote, branch))
2025-06-21 00:01:33 +02:00
pull_result = run_cmd(f'git pull {remote} {branch}')
2025-07-09 15:05:06 +02:00
logger.info(pull_result)
logger.info(k.please_restart())
2025-06-21 00:14:01 +02:00
sys.exit(0)
2025-06-21 00:01:33 +02:00
else:
logger.info(k.local_ahead(remote, branch))
2025-06-20 23:48:10 +02:00
def get_latest_version_info():
try:
2025-07-16 00:32:59 +02:00
unique_suffix = f"{int(time.time())}_{random.randint(0, 9999)}"
url = f"{UPDATE_URL}?_={unique_suffix}"
curl_cmd = [
"curl",
"-s",
"-H", "Cache-Control: no-cache",
"-H", "Pragma: no-cache",
url
]
result = subprocess.run(curl_cmd, capture_output=True, text=True, timeout=5)
content = result.stdout
if result.returncode != 0:
logger.error(f"curl failed with return code {result.returncode}")
return None
try:
data = json.loads(content)
return data
except json.JSONDecodeError:
logger.error("JSON decode failed")
2025-07-16 00:33:14 +02:00
logger.error(content[:500])
2025-06-20 23:48:10 +02:00
return None
2025-07-16 00:32:59 +02:00
except Exception as e:
logger.error(f"Exception in get_latest_version_info: {e}")
2025-06-20 23:48:10 +02:00
return None
# Check if an update is available and perform update if needed
2025-07-16 14:39:18 +02:00
def check_for_update():
2025-07-07 01:18:51 +02:00
global latest_version, local_version, launched
2025-06-20 23:48:10 +02:00
latest_version_info = get_latest_version_info()
if not latest_version_info:
logger.error(f"{k.fetch_update_fail()}")
return None
2025-06-20 23:48:10 +02:00
latest_version = latest_version_info.get("version")
os.environ['gooberlatest_version'] = latest_version
download_url = latest_version_info.get("download_url")
if not latest_version or not download_url:
logger.error(k.invalid_server())
return None
# Check if local_version is valid
2025-06-20 23:48:10 +02:00
if local_version == "0.0.0" or None:
logger.error(k.cant_find_local_version())
2025-06-20 23:48:10 +02:00
return
# Compare local and latest versions
2025-06-20 23:48:10 +02:00
if local_version < latest_version:
logger.warning(k.new_version(latest_version=latest_version, local_version=local_version))
logger.warning(k.changelog(VERSION_URL=VERSION_URL))
2025-06-21 00:01:33 +02:00
auto_update()
elif beta == True:
2025-07-16 00:32:59 +02:00
logger.warning(f"You are running an \"unstable\" version of Goober, do not expect it to work properly.\nVersion {local_version}\nServer: {latest_version}{RESET}")
elif local_version > latest_version:
logger.warning(f"{k.modification_warning()}")
2025-06-20 23:48:10 +02:00
elif local_version == latest_version:
logger.info(f"{k.latest_version()} {local_version}")
logger.info(f"{k.latest_version2(VERSION_URL=VERSION_URL)}\n\n")
2025-07-07 01:18:51 +02:00
launched = True
2025-06-23 13:56:23 +02:00
return latest_version