Compare commits

...

3 Commits

Author SHA1 Message Date
Rémi Verschelde
9ff46d037c Add Godot 4.2-dev5 2023-09-19 12:08:03 +02:00
Yuri Sizov
3e49d03fac Add a script to generate GitHub releases 2023-09-12 18:19:29 +02:00
Yuri Sizov
b474c06cfb Add Godot 3.5.3-rc1 2023-09-07 11:54:37 +00:00
3 changed files with 364 additions and 0 deletions

180
generate-releases.py Normal file
View File

@@ -0,0 +1,180 @@
import json
import os
import subprocess
import yaml
from datetime import datetime
website_versions = []
# Helpers.
def generate_notes(release_data):
notes = ""
version_version = release_data["version"]
version_status = release_data["status"]
version_tag = f"{version_version}-{version_status}"
version_bits = version_version.split(".")
version_flavor = "patch"
if len(version_bits) == 2 and version_bits[1] == "0":
version_flavor = "major"
elif len(version_bits) == 2 and version_bits[1] != "0":
version_flavor = "minor"
# Add the intro line.
version_name = version_version
if version_status != "stable":
version_name += " "
if version_status.startswith("rc"):
version_name += f"RC {version_status.removeprefix('rc')}"
elif version_status.startswith("beta"):
version_name += f"beta {version_status.removeprefix('beta')}"
elif version_status.startswith("alpha"):
version_name += f"alpha {version_status.removeprefix('alpha')}"
elif version_status.startswith("dev"):
version_name += f"dev {version_status.removeprefix('dev')}"
else:
version_name += version_status
version_description = ""
if version_status == "stable":
version_bits = version_version.split(".")
if version_flavor == "major":
version_description = "a major release introducing new features and considerable changes to core systems. **Major version releases contain compatibility breaking changes.**"
elif version_flavor == "minor":
version_description = "a feature release improving upon the previous version in many aspects, such as usability and performance. Feature releases also contain new features, but preserve compatibility with previous releases."
else:
version_description = "a maintenance release addressing stability and usability issues, and fixing all sorts of bugs. Maintenance releases are compatible with previous releases and are recommended for adoption."
else:
flavor_name = "maintenance"
if version_flavor == "major":
flavor_name = "major"
elif version_flavor == "minor":
flavor_name = "feature"
if version_status.startswith("rc"):
version_description = f"a release candidate for the {version_version} {flavor_name} release. Release candidates focus on finalizing the release and fixing remaining critical bugs."
elif version_status.startswith("beta"):
version_description = f"a beta snapshot for the {version_version} {flavor_name} release. Beta snapshots are feature-complete and provided for public beta testing to catch as many bugs as possible ahead of the stable release."
else: # alphas and devs go here.
version_description = f"a dev snapshot for the {version_version} {flavor_name} release. Dev snapshots are in-development builds of the engine provided for early testing and feature evaluation while the engine is still being worked on."
notes += f"**Godot {version_name}** is {version_description}\n\n"
# Link to the bug tracker.
notes += "Report bugs on GitHub after checking that they haven't been reported:\n"
notes += "- https://github.com/godotengine/godot/issues\n"
notes += "\n"
# Add build information.
# Only for pre-releases.
if version_status != "stable":
commit_hash = release_data["git_reference"]
notes += f"Built from commit [{commit_hash}](https://github.com/godotengine/godot/commit/{commit_hash}).\n"
notes += f"To make a custom build which would also be recognized as {version_status}, you should define `GODOT_VERSION_STATUS={version_status}` in your build environment prior to compiling.\n"
notes += "\n"
# Add useful links.
notes += "----\n"
notes += "\n"
release_notes_url = ""
release_notes_version = version_version
if version_version == "3.2.4":
release_notes_version = "3.3"
for web_version in website_versions:
if web_version["name"] != release_notes_version:
continue
if web_version["flavor"] == version_status:
release_notes_url = f"https://godotengine.org{web_version['release_notes']}"
break
for web_release in web_version["releases"]:
if web_release["name"] != version_status:
continue
release_notes_url = f"https://godotengine.org{web_release['release_notes']}"
break
notes += f"- [Release notes]({release_notes_url})\n"
if version_status == "stable":
notes += f"- [Complete changelog](https://godotengine.github.io/godot-interactive-changelog/#{version_version})\n"
notes += f"- [Curated changelog](https://github.com/godotengine/godot/blob/{version_tag}/CHANGELOG.md)\n"
else:
notes += f"- [Complete changelog](https://godotengine.github.io/godot-interactive-changelog/#{version_tag})\n"
notes += "- Download (GitHub): Expand **Assets** below\n"
if version_status == "stable":
notes += f"- [Download (TuxFamily)](https://downloads.tuxfamily.org/godotengine/{version_version})\n"
else:
notes += f"- [Download (TuxFamily)](https://downloads.tuxfamily.org/godotengine/{version_version}/{version_status})\n"
notes += "\n"
notes += "*All files for this release are mirrored under **Assets** below.*\n"
return notes
with open("./temp/versions.yml", "r") as f:
try:
website_versions = yaml.safe_load(f)
except yaml.YAMLError as exc:
pass
releases = []
# Read JSON files and generate GitHub release in order.
releases_path = "./releases"
dir_contents = os.listdir(releases_path)
for filename in dir_contents:
filepath = os.path.join(releases_path, filename)
if not os.path.isfile(filepath):
continue
with open(filepath, 'r') as json_data:
release_data = json.load(json_data)
print(f"Reading release '{release_data['name']}' data.")
releases.append({
"file": filepath,
"data": release_data
})
# Sort by release date so we can create commits in order
releases.sort(key=lambda x: x['data']['release_date'])
# Generate a commit for each release, spoof the commit date to
# match the release date.
# Create the output directory if it doesn't exist.
if not os.path.exists("./temp/notes"):
os.makedirs("./temp/notes")
for release_data in releases:
release_tag = f"{release_data['data']['version']}-{release_data['data']['status']}"
release_title = f"{release_data['data']['version']}-{release_data['data']['status']}"
prerelease_flag = ""
if release_data['data']['status'] != "stable":
prerelease_flag = "--prerelease"
release_notes = generate_notes(release_data['data'])
release_notes_file = f"./temp/notes/release-notes-{release_tag}.txt"
with open(release_notes_file, 'w') as temp_notes:
temp_notes.write(release_notes)
cmd_create_release = f"gh release create {release_tag} --verify-tag --title \"{release_title}\" --notes-file {release_notes_file} {prerelease_flag}"
print(cmd_create_release)
subprocess.run(cmd_create_release)

View File

@@ -0,0 +1,98 @@
{
"name": "3.5.3-rc1",
"version": "3.5.3",
"status": "rc1",
"release_date": 1694080477,
"git_reference": "fc32e066af1cd6766762dec31c7d2224f3d42c5f",
"files": [
{
"filename": "godot-3.5.3-rc1.tar.xz",
"checksum": "dad7d09afb86866b99cf0400a7241343e2f331c842a96a1ccaa1104f954d2d83b7cd024dccf3e28edc1cf511d36266b3bbf0e3306357d5694c8136a8570d723e"
},
{
"filename": "godot-3.5.3-rc1.tar.xz.sha256",
"checksum": "5c2043a63793282872774ec31e3684e01869f0e941aeaecac6a0c07e63bb8ffc51995f6f2695db54128ed822e01d110bc77afbe059ad1950c57cfd184be6e164"
},
{
"filename": "godot-lib.3.5.3.rc1.release.aar",
"checksum": "2171f7976f03e21e0498e6c6747aea440a2318a9806ff8952b330c4481bef5e8ca419002098217f09c671e7bf4a2cbc2cadbefdbdaf9bd80fed7edd85b6ddaa1"
},
{
"filename": "Godot_v3.5.3-rc1_android_editor.apk",
"checksum": "95275d358ec77c1ba6ba487f381d4b08fa11b16b008d7b309d4a90b81a54142f57817cb11df14a6d1ab9cefa3f74de3512b0df60e82c8a5374ca7e3ebc7285b8"
},
{
"filename": "Godot_v3.5.3-rc1_export_templates.tpz",
"checksum": "e34d05f6ee12ef12003208ff9facb81099396f63428a6d1751458bf50e58ef469f9cd46c611151af8f084a82b6e7d878ecf72289121a40aa30d04a46bc687ddb"
},
{
"filename": "Godot_v3.5.3-rc1_linux_headless.64.zip",
"checksum": "dd19e91a8d8678448cd68d5e7be7c70d29e4cb7036110b38f5810f793dfa71259f29ed7efa459468cf1fcfa604ea3bc2eac5fbb8bbb1fe22cc358f85e0533001"
},
{
"filename": "Godot_v3.5.3-rc1_linux_server.64.zip",
"checksum": "fc563e9a4a5c1d6a2823a26a3200185b1dcf782b47287714b88c1c7025714918ffaede04ccb1f1c7127678aa346bbe09bedb0214485581f83d17284c53340732"
},
{
"filename": "Godot_v3.5.3-rc1_osx.universal.zip",
"checksum": "55041353ce858d7d5bcb73793ae62665dc401ff175e22127d7de9f50309a8a52befc69a01f59ac8bea33add3691ccffb759809b0ce633bae5a56112323c22749"
},
{
"filename": "Godot_v3.5.3-rc1_web_editor.zip",
"checksum": "88b60bc31b3e59c8935b00a243c3da749ac6016d44794d41218a3fa15219957389b5da0802eced4eb513de22e40a402f71b47c01db904f1330fb5fdd2e150d10"
},
{
"filename": "Godot_v3.5.3-rc1_win32.exe.zip",
"checksum": "045067c02a8a51080d2639938eda08de60f607b726bc4aa1ffd0f3f0859b63160c1e7e54b3f3818effa4843679548758e0866254bdf818384f192abc6c723b07"
},
{
"filename": "Godot_v3.5.3-rc1_win64.exe.zip",
"checksum": "0b5d69ac1529a6bf559fe6cd126e1f78907d18ec55483e291f2425449061c3a5f634be2389ee02f6a44972aec9d7f10f86fb5c00d26e14edc8ece4ccd1345ffd"
},
{
"filename": "Godot_v3.5.3-rc1_x11.32.zip",
"checksum": "f687fe8f2558c174fb3b54930bf9009854b8f12a3980c91ae8fbfcd9bad99b5e8742adf287ceaf2c048a24e6212656aadd5a859bcbf01c6952bae30ebe312cfa"
},
{
"filename": "Godot_v3.5.3-rc1_x11.64.zip",
"checksum": "25ae3594cea8074f74abdf7528e243f4810bf0a1d1aac0920311995a2548be1d34ecb3edc023b566ad36a8f2575df314bebc6ada86c4df3da157b0fe60aa3176"
},
{
"filename": "godot-lib.3.5.3.rc1.mono.release.aar",
"checksum": "c6ad3ea6ee5633beea6775bd85c85352549d9c42abd743a46c1f097cd62845038866839dfcc28474661c3a680cc92af997f3de10c99c9d74b496c2818c61f669"
},
{
"filename": "Godot_v3.5.3-rc1_mono_export_templates.tpz",
"checksum": "c09de5b81e04bedb03ade802f23ea2193a4390a877aa8f4cf02cf0aa3095684ed569776c686f4a6c66d96b6090770f9226291fe0b78dcddc4ad79232809e28f4"
},
{
"filename": "Godot_v3.5.3-rc1_mono_linux_headless_64.zip",
"checksum": "9afbc19bd6d0ae372fcd2b5b6f7cf59cd2f4ddbf66f960922e831141083608ca7b5f1e1b8ad442056d0a2309cbc9fed9fcc96c9cd497605d8dec10af55b04f6f"
},
{
"filename": "Godot_v3.5.3-rc1_mono_linux_server_64.zip",
"checksum": "b8ca435ddb3c3527e8cb80352e59cf654b11617786c5135bcfdd9a7c8a59ff4c418f78b40494ad694ff3c61eb5b72f7dd2f99310d7c16e5c1a5468304594d799"
},
{
"filename": "Godot_v3.5.3-rc1_mono_osx.universal.zip",
"checksum": "7a8c1907a52b1657a83feb495e67d44e34fe1262996f3a531035c320324ea294fe7b8cbd2d0ed9d13cca421f277ac8b1683cbf25bd62b2b5df999290b19a3c5e"
},
{
"filename": "Godot_v3.5.3-rc1_mono_win32.zip",
"checksum": "c6685b84bdbd63af0b5c56317f93e73e43fdff895141e232a9f50480283c4b051d592980fdad02ad6c1f9a6518b6ff09dd2880033d83d4865b4b91d828b81a97"
},
{
"filename": "Godot_v3.5.3-rc1_mono_win64.zip",
"checksum": "5bad54024d832c0c4dcae2d213810c346476e68e1e948b9c8156d8ae41f1129c14611be08380918ac9a10f71c8e8d39c88d3cb39f439357ae8c432e12c250586"
},
{
"filename": "Godot_v3.5.3-rc1_mono_x11_32.zip",
"checksum": "7890bb21d97f459c3b700df7164a823d0efe4e69107ed2b193c4103483e271ccc629d25b1b521bb96e043ad8a53b3ee80b9f539b7b0c760e31ea18527e9b03d6"
},
{
"filename": "Godot_v3.5.3-rc1_mono_x11_64.zip",
"checksum": "11f157d8723dd6537a59a41f1b2eff5afd40a6bfe36ef8825322e60dcace4ce7d5f1e46895efb1c1e7f69da20a3fdd2d84dee68ad813d264635382df62196a5f"
}
]
}

View File

@@ -0,0 +1,86 @@
{
"name": "4.2-dev5",
"version": "4.2",
"status": "dev5",
"release_date": 1695117942,
"git_reference": "e3e2528ba7f6e85ac167d687dd6312b35f558591",
"files": [
{
"filename": "godot-4.2-dev5.tar.xz",
"checksum": "cf15d10a40e56ea1049a8d516b2b45f824bdc16cb457dede21c14f2d6214b45f6099eec4293286c5f5aed612d836351613f6de1614730fdcb39f26c5f80c44e5"
},
{
"filename": "godot-4.2-dev5.tar.xz.sha256",
"checksum": "c01fc7ad1b9b254e8eedbd4db576467399d9113a6fba12f6e5c25f4ef35d8a02104eddbaec7b76ebf5b3f7984300507525e01a370be42bf207a6e7e7fe2d0d10"
},
{
"filename": "godot-lib.4.2.dev5.template_release.aar",
"checksum": "84db60f169a1cfd55d4fe9793841a2c17f06b869b2927f5d0fd62bf1c2b38754b44c7aa363516b63ee3f72abff154ab934218bc0da6c2b47ac4d4e27051e84c4"
},
{
"filename": "Godot_v4.2-dev5_android_editor.aab",
"checksum": "13c343755cee1c375b3022518d92ac9326c52ac759178c5155d2c1f5ff58d6bce682ad084660e365704bd97c568257ed39f133b484415155f58762dbdcee1877"
},
{
"filename": "Godot_v4.2-dev5_android_editor.apk",
"checksum": "fe25bcff8b890e461f76d3687150b661cb08298366c4476b4a6d870c973bbcf516677291872703b031c59acdaf2a55f87fd9985cc7744945ea5dba0ad1d0b40f"
},
{
"filename": "Godot_v4.2-dev5_export_templates.tpz",
"checksum": "bfd0f6546faaed02f64f54aae3c57484d26e4ea02ae26bdbbd34f3f4a9676eedebb315f92609c63c8c89165e6293a15db8ce288429979bf5a70f26c31e5e168e"
},
{
"filename": "Godot_v4.2-dev5_linux.x86_32.zip",
"checksum": "db3e31856493f90794688c0e0431747da2fbe17a9ff312313a427960e7682bddffe1a2e5ef9826bc4296b8e5b3a76495ee2fa2c6d7192776aa39ca6af4e626f7"
},
{
"filename": "Godot_v4.2-dev5_linux.x86_64.zip",
"checksum": "82db8ad7ce9f992a0ad48f271f63a8e89d9a40a082502117ccac05db10b53724e6733075661efed3ef5113ca4def53459b66dd1037ad855396b5cb7b0604b9f8"
},
{
"filename": "Godot_v4.2-dev5_macos.universal.zip",
"checksum": "98f77d928f7448bd15c85a3d3c26ae9c36feeb188ee323ad7dcfb6569aaf731b183ee2fdeb461a3f17e83d5e565c5f3bf59ce69efa5f8039e7e094619a7f327a"
},
{
"filename": "Godot_v4.2-dev5_web_editor.zip",
"checksum": "0b5f7714cf33426854e782408e5947d76d0b69238fc40f2eef050ffb36ea306cecad6abf8d000fcf2112c5b4850017ea3e101fdd150fd085577166bb9e861c1d"
},
{
"filename": "Godot_v4.2-dev5_win32.exe.zip",
"checksum": "3b424b983cffd11aef27a39ed56745a34342748020bf9893f531987d9e5c39eaf297df15414d7a53e2a516b6355d9081998d8b947de798bd4a6779f9b127831b"
},
{
"filename": "Godot_v4.2-dev5_win64.exe.zip",
"checksum": "5a551522f14532fb6b8533f8379ed95e69a7a7aed8855388951d5c580ac37f3ccadae0b9f92f0e2ce3dfc3fc8815c43633ff0a783425cbf2ab315841fe9df23a"
},
{
"filename": "godot-lib.4.2.dev5.mono.template_release.aar",
"checksum": "b258bf9254bc798c32ac9bff9d7fcb1021d1c834e71fbd85bfbb16a9fa71d7ca61c889b3aee37c7ba42075319708a73bad3869832a5a247a0d3c9b62cbd01d34"
},
{
"filename": "Godot_v4.2-dev5_mono_export_templates.tpz",
"checksum": "c3519f4903521656c8fa5dc73f7322d460ecc526f5ea848aff26c2fa3ce69c312854bcbed1c175bdfa34565af87da5c0ac36fe107e1b2487222d16ec4ddb75e9"
},
{
"filename": "Godot_v4.2-dev5_mono_linux_x86_32.zip",
"checksum": "838f1fd4089e0853039f48c4dd3cf1ef138bcc09e385365d8cdf37001a81520b33f3139131c9b59d2c8031630a04c011d8e36113df073a690d877732f6f8d436"
},
{
"filename": "Godot_v4.2-dev5_mono_linux_x86_64.zip",
"checksum": "fc005013c9f7e7572fab93215246da1329c01a254b491c3d371ff0203df0c393055f1df0569032c65073b1e3ebd31b505a0143964d8b66287eca1b312e94dd4a"
},
{
"filename": "Godot_v4.2-dev5_mono_macos.universal.zip",
"checksum": "0c56b8efc71008c601882e031fc038e3f4acc3a2c206d36a4b230b96c2a34780e78480425c16bf13eebb030345a9fe097e6503c3cce638ab700d82f340edb5b5"
},
{
"filename": "Godot_v4.2-dev5_mono_win32.zip",
"checksum": "70261e753bd825d84368af90575aca76a94995745a81727b628ccc3ca4391afcec3fb944adefd978acb26ba75e324d67e7e9839308110cf66cff3e8b9fc812f4"
},
{
"filename": "Godot_v4.2-dev5_mono_win64.zip",
"checksum": "3b26df959c9e7521887f05e4896f7d6d3f45328b29363330d57a9a9f3b1865571a0d14090cfe35b97fbec62b04e02396379cacc1de21eafb79333a361b8351dc"
}
]
}