mirror of
https://github.com/godotengine/godot-builds.git
synced 2026-01-01 01:48:13 +03:00
107 lines
3.7 KiB
Python
Executable File
107 lines
3.7 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import argparse
|
|
import os
|
|
from datetime import datetime
|
|
|
|
|
|
def find_file_checksums(release_path):
|
|
files = []
|
|
|
|
checksums_path = f"{release_path}/SHA512-SUMS.txt"
|
|
with open(checksums_path, 'r') as checksums:
|
|
for line in checksums:
|
|
split_line = line.split(" ")
|
|
files.append({
|
|
"filename": split_line[1].strip(),
|
|
"checksum": split_line[0].strip()
|
|
})
|
|
|
|
return files
|
|
|
|
|
|
def generate_file(version_version: str, version_status: str, git_reference: str):
|
|
# Open the file for writing.
|
|
|
|
basedir = os.environ.get("basedir")
|
|
buildsdir = os.environ.get('buildsdir')
|
|
|
|
output_path = f"{buildsdir}/releases/godot-{version_version}-{version_status}.json"
|
|
with open(output_path, 'w') as f:
|
|
release_name = version_version
|
|
commit_hash = git_reference
|
|
if version_status == "stable":
|
|
commit_hash = f"{version_version}-stable"
|
|
else:
|
|
release_name = f"{version_version}-{version_status}"
|
|
|
|
# Start writing the file with basic meta information.
|
|
f.write(
|
|
f'{{\n'
|
|
f' "name": "{release_name}",\n'
|
|
f' "version": "{version_version}",\n'
|
|
f' "status": "{version_status}",\n'
|
|
f' "release_date": {int(datetime.now().timestamp())},\n'
|
|
f' "git_reference": "{commit_hash}",\n'
|
|
f'\n'
|
|
f' "files": [\n'
|
|
)
|
|
|
|
# Generate the list of files.
|
|
|
|
release_folder = f"{basedir}/releases/{version_version}-{version_status}"
|
|
standard_files = find_file_checksums(f"{release_folder}")
|
|
mono_files = find_file_checksums(f"{release_folder}/mono")
|
|
|
|
for i, file in enumerate(standard_files):
|
|
f.write(
|
|
f' {{\n'
|
|
f' "filename": "{file["filename"]}",\n'
|
|
f' "checksum": "{file["checksum"]}"\n'
|
|
f' }}{"" if i == len(standard_files) - 1 and len(mono_files) == 0 else ","}\n'
|
|
)
|
|
|
|
for i, file in enumerate(mono_files):
|
|
f.write(
|
|
f' {{\n'
|
|
f' "filename": "{file["filename"]}",\n'
|
|
f' "checksum": "{file["checksum"]}"\n'
|
|
f' }}{"" if i == len(mono_files) - 1 else ","}\n'
|
|
)
|
|
|
|
# Finish the file.
|
|
f.write(
|
|
f' ]\n'
|
|
f'}}\n'
|
|
)
|
|
|
|
print(f"Written release metadata to '{output_path}'.")
|
|
|
|
|
|
def main() -> None:
|
|
if os.environ.get("basedir") == "" or os.environ.get("buildsdir") == "":
|
|
print("Failed to create release metadata: Missing 'basedir' (godot-build-scripts) and 'buildsdir' (godot-builds) environment variables.\n")
|
|
exit(1)
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("-v", "--version", default="", help="Godot version in the major.minor.patch format (patch should be omitted for major and minor releases).")
|
|
parser.add_argument("-f", "--flavor", default="stable", help="Release flavor, e.g. dev, alpha, beta, rc, stable (defaults to stable).")
|
|
parser.add_argument("-g", "--git", default="", help="Git commit hash tagged for this release.")
|
|
args = parser.parse_args()
|
|
|
|
if args.version == "" or args.git == "":
|
|
print("Failed to create release metadata: Godot version and git hash cannot be empty.\n")
|
|
parser.print_help()
|
|
exit(1)
|
|
|
|
release_version = args.version
|
|
release_flavor = args.flavor
|
|
if release_flavor == "":
|
|
release_flavor = "stable"
|
|
|
|
generate_file(release_version, release_flavor, args.git)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|