mirror of
https://github.com/StikDebug/StikDebug.git
synced 2026-10-15 20:10:30 +00:00
Update update_json.py
This commit is contained in:
parent
702a10795b
commit
f7998d3e51
1 changed files with 172 additions and 0 deletions
172
update_json.py
172
update_json.py
|
|
@ -14,5 +14,177 @@ def prepare_description(text):
|
|||
text = re.sub(r'\r\n\r\n', '\r \n', text) # Replace \r\n\r\n with \r \n (avoid incorrect display of the description regarding paragraphs)
|
||||
return text
|
||||
|
||||
def fetch_latest_release(repo_url):
|
||||
api_url = f"https://api.github.com/repos/{repo_url}/releases"
|
||||
headers = {
|
||||
"Accept": "application/vnd.github+json",
|
||||
}
|
||||
try:
|
||||
print(f"Fetching releases from: {api_url}")
|
||||
response = requests.get(api_url, headers=headers)
|
||||
response.raise_for_status()
|
||||
releases = response.json()
|
||||
if not releases:
|
||||
print("No releases found in the repository")
|
||||
return None
|
||||
print(f"Found {len(releases)} releases")
|
||||
print(f"Latest release: {releases[0]['tag_name']}")
|
||||
return releases
|
||||
except requests.RequestException as e:
|
||||
print(f"Error fetching releases: {e}")
|
||||
return None
|
||||
|
||||
def get_file_size(url):
|
||||
try:
|
||||
response = requests.head(url)
|
||||
response.raise_for_status()
|
||||
return int(response.headers.get('Content-Length', 0))
|
||||
except requests.RequestException as e:
|
||||
print(f"Error getting file size: {e}")
|
||||
return 0
|
||||
|
||||
def update_json_file(json_file, latest_release):
|
||||
if isinstance(latest_release, list) and latest_release:
|
||||
latest_release = latest_release[0]
|
||||
else:
|
||||
print("Error getting latest release")
|
||||
return False
|
||||
|
||||
try:
|
||||
print(f"Reading JSON file: {json_file}")
|
||||
with open(json_file, "r") as file:
|
||||
data = json.load(file)
|
||||
except json.JSONDecodeError as e:
|
||||
print(f"Error reading JSON file: {e}")
|
||||
return False
|
||||
except FileNotFoundError:
|
||||
print(f"File {json_file} not found")
|
||||
return False
|
||||
|
||||
app = data["apps"][0]
|
||||
current_version = app.get("version", "unknown")
|
||||
print(f"Current version in repo.json: {current_version}")
|
||||
|
||||
full_version = latest_release["tag_name"]
|
||||
tag = latest_release["tag_name"]
|
||||
version_match = re.search(r"(\d+\.\d+\.\d+)", full_version)
|
||||
if not version_match:
|
||||
print(f"Could not extract version from tag: {full_version}")
|
||||
return False
|
||||
|
||||
version = version_match.group(1)
|
||||
print(f"Latest release version: {version}")
|
||||
|
||||
# Check if the version is already in the versions list
|
||||
existing_versions = [v["version"] for v in app["versions"]]
|
||||
print(f"Existing versions: {existing_versions}")
|
||||
|
||||
if version in existing_versions and version == current_version:
|
||||
print(f"Version {version} already exists and is current, no update needed")
|
||||
return False
|
||||
|
||||
version_date = latest_release["published_at"]
|
||||
date_obj = datetime.strptime(version_date, "%Y-%m-%dT%H:%M:%SZ")
|
||||
version_date = date_obj.strftime("%Y-%m-%d")
|
||||
|
||||
description = latest_release["body"] or "No description provided"
|
||||
description = prepare_description(description)
|
||||
|
||||
assets = latest_release.get("assets", [])
|
||||
print(f"Found {len(assets)} assets in the release")
|
||||
for asset in assets:
|
||||
print(f"Asset: {asset['name']}")
|
||||
|
||||
download_url = None
|
||||
size = None
|
||||
for asset in assets:
|
||||
if asset["name"].endswith(".ipa"):
|
||||
download_url = asset["browser_download_url"]
|
||||
size = asset["size"]
|
||||
print(f"Found IPA file: {asset['name']}, size: {size}")
|
||||
break
|
||||
|
||||
if download_url is None or size is None:
|
||||
print("Error: IPA file not found in release assets.")
|
||||
return False
|
||||
|
||||
version_entry = {
|
||||
"version": version,
|
||||
"date": version_date,
|
||||
"localizedDescription": description,
|
||||
"downloadURL": download_url,
|
||||
"size": size,
|
||||
"minOSVersion": "17.4" # Adding minOSVersion for StikJIT
|
||||
}
|
||||
|
||||
# Always update with the latest version
|
||||
print(f"Adding new version entry: {version}")
|
||||
app["versions"].insert(0, version_entry)
|
||||
|
||||
print(f"Updating app with version {version}")
|
||||
app.update({
|
||||
"version": version,
|
||||
"versionDate": version_date,
|
||||
"versionDescription": description,
|
||||
"downloadURL": download_url,
|
||||
"size": size
|
||||
})
|
||||
|
||||
if "news" not in data:
|
||||
data["news"] = []
|
||||
|
||||
news_identifier = f"release-{full_version}"
|
||||
date_string = date_obj.strftime("%d/%m/%y")
|
||||
news_entry = {
|
||||
"appID": "com.stik.sj",
|
||||
"caption": f"Update of StikJIT just got released!",
|
||||
"date": latest_release["published_at"],
|
||||
"identifier": news_identifier,
|
||||
"imageURL": "https://github.com/0-Blu/StikJIT/blob/main/assets/StikJIT.png?raw=true",
|
||||
"notify": True,
|
||||
"tintColor": "#293B45",
|
||||
"title": f"{full_version} - StikJIT {date_string}",
|
||||
"url": f"https://github.com/0-Blu/StikJIT/releases/tag/{tag}"
|
||||
}
|
||||
|
||||
news_entry_exists = any(item["identifier"] == news_identifier for item in data["news"])
|
||||
if not news_entry_exists:
|
||||
print(f"Adding news entry for version {full_version}")
|
||||
data["news"].append(news_entry)
|
||||
else:
|
||||
print(f"News entry for version {full_version} already exists")
|
||||
|
||||
try:
|
||||
print(f"Writing updated JSON to {json_file}")
|
||||
with open(json_file, "w") as file:
|
||||
json.dump(data, file, indent=2)
|
||||
print("JSON file updated successfully.")
|
||||
return True
|
||||
except IOError as e:
|
||||
print(f"Error writing to JSON file: {e}")
|
||||
return False
|
||||
|
||||
def main():
|
||||
# Use the original repository instead of fork
|
||||
repo_url = "0-Blu/StikJIT"
|
||||
json_file = "repo.json"
|
||||
|
||||
print(f"Using repository: {repo_url}")
|
||||
print(f"Updating file: {json_file}")
|
||||
|
||||
try:
|
||||
fetched_data_latest = fetch_latest_release(repo_url)
|
||||
if fetched_data_latest:
|
||||
success = update_json_file(json_file, fetched_data_latest)
|
||||
if not success:
|
||||
print("Failed to update JSON file or no changes were needed")
|
||||
sys.exit(0) # Exit with success code since no changes needed is not an error
|
||||
else:
|
||||
print("No releases found to update")
|
||||
sys.exit(1)
|
||||
except Exception as e:
|
||||
print(f"An error occurred: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue