mirror of
https://github.com/godotengine/godot-interactive-changelog.git
synced 2025-12-31 01:49:28 +03:00
Add a script to fetch hashes of all publicly available downloads
This commit is contained in:
100
extract-hashes.py
Normal file
100
extract-hashes.py
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
import os
|
||||||
|
import urllib.request
|
||||||
|
import urllib.error
|
||||||
|
import re
|
||||||
|
|
||||||
|
url = 'https://downloads.tuxfamily.org/godotengine/'
|
||||||
|
|
||||||
|
with urllib.request.urlopen(url) as response:
|
||||||
|
html = response.read().decode()
|
||||||
|
|
||||||
|
pattern = re.compile(r'<a href="(\d\.\d(\.\d(\.\d)?)?/)">')
|
||||||
|
matches = pattern.findall(html)
|
||||||
|
|
||||||
|
version_names = []
|
||||||
|
for match in matches:
|
||||||
|
subfolder_name = match[0]
|
||||||
|
if subfolder_name.endswith('/'):
|
||||||
|
version_names.append(subfolder_name[:-1])
|
||||||
|
|
||||||
|
# Create output directory if it doesn't exist
|
||||||
|
if not os.path.exists("./temp/configs"):
|
||||||
|
os.makedirs("./temp/configs")
|
||||||
|
|
||||||
|
for version_name in version_names:
|
||||||
|
output_path = f"./temp/configs/godotengine.godot.{version_name}.json"
|
||||||
|
with open(output_path, 'w') as f:
|
||||||
|
version_bits = version_name.split(".")
|
||||||
|
last_bit = int(version_bits.pop())
|
||||||
|
|
||||||
|
if last_bit == 0:
|
||||||
|
last_bit = int(version_bits.pop())
|
||||||
|
last_bit -= 1
|
||||||
|
version_bits.append(str(last_bit))
|
||||||
|
elif last_bit > 0:
|
||||||
|
last_bit -= 1
|
||||||
|
if last_bit > 0:
|
||||||
|
version_bits.append(str(last_bit))
|
||||||
|
|
||||||
|
if len(version_bits) == 1:
|
||||||
|
version_bits.append("0")
|
||||||
|
|
||||||
|
previous_version = ".".join(version_bits)
|
||||||
|
|
||||||
|
f.write(
|
||||||
|
f'{{\n'
|
||||||
|
f' "name": "{version_name}",\n'
|
||||||
|
f' "ref": "{version_name}-stable",\n'
|
||||||
|
f' "from_ref": "{previous_version}-stable",\n'
|
||||||
|
f' "article": "",\n'
|
||||||
|
f'\n'
|
||||||
|
f' "releases": [\n'
|
||||||
|
)
|
||||||
|
|
||||||
|
version_url = url + version_name
|
||||||
|
with urllib.request.urlopen(version_url) as response:
|
||||||
|
subfolder_html = response.read().decode()
|
||||||
|
|
||||||
|
subfolder_pattern = re.compile(r'<a href="([^"]+/)">')
|
||||||
|
subfolder_matches = subfolder_pattern.findall(subfolder_html)
|
||||||
|
|
||||||
|
folder_names = [match[:-1] for match in subfolder_matches if match not in ['mono/', '../']]
|
||||||
|
for folder_name in folder_names:
|
||||||
|
readme_url = f"{version_url}/{folder_name}/README.txt"
|
||||||
|
commit_hash = "";
|
||||||
|
try:
|
||||||
|
with urllib.request.urlopen(readme_url) as response:
|
||||||
|
readme_text = response.read().decode()
|
||||||
|
commit_pattern = re.compile(r'Built from commit ([a-f0-9]+)')
|
||||||
|
commit_match = commit_pattern.search(readme_text)
|
||||||
|
|
||||||
|
if commit_match:
|
||||||
|
commit_hash = commit_match.group(1)
|
||||||
|
except urllib.error.HTTPError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
f.write(
|
||||||
|
f' {{\n'
|
||||||
|
f' "name": "{folder_name}",\n'
|
||||||
|
f' "ref": "{commit_hash}",\n'
|
||||||
|
f' "from_ref": "",\n'
|
||||||
|
f' "article": ""\n'
|
||||||
|
f' }},\n'
|
||||||
|
)
|
||||||
|
|
||||||
|
# Add the stable release, always
|
||||||
|
f.write(
|
||||||
|
f' {{\n'
|
||||||
|
f' "name": "stable",\n'
|
||||||
|
f' "ref": "{version_name}-stable",\n'
|
||||||
|
f' "from_ref": "",\n'
|
||||||
|
f' "article": ""\n'
|
||||||
|
f' }}\n'
|
||||||
|
)
|
||||||
|
|
||||||
|
f.write(
|
||||||
|
f' ]\n'
|
||||||
|
f'}}\n'
|
||||||
|
)
|
||||||
|
|
||||||
|
print(f"Written config '{output_path}'")
|
||||||
Reference in New Issue
Block a user