mirror of
https://github.com/godotengine/godot-builds.git
synced 2026-01-01 01:48:13 +03:00
Compare commits
7 Commits
4.1.2-stab
...
4.2-beta3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
67352ad26b | ||
|
|
571ff6249b | ||
|
|
30426404b5 | ||
|
|
3a2388aa4b | ||
|
|
e0fbe2af47 | ||
|
|
40158a6a25 | ||
|
|
a68806e782 |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,2 +1,2 @@
|
||||
# Project folders.
|
||||
temp/
|
||||
tmp/
|
||||
|
||||
86
releases/godot-4.2-beta1.json
Normal file
86
releases/godot-4.2-beta1.json
Normal file
@@ -0,0 +1,86 @@
|
||||
{
|
||||
"name": "4.2-beta1",
|
||||
"version": "4.2",
|
||||
"status": "beta1",
|
||||
"release_date": 1697095477,
|
||||
"git_reference": "b1371806ad3907c009458ea939bd4b810f9deb21",
|
||||
|
||||
"files": [
|
||||
{
|
||||
"filename": "godot-4.2-beta1.tar.xz",
|
||||
"checksum": "cedd39add1596ff2d5858a904f9b04683be1ae59390fa4340b326e1a9cda5480b6ed71964bfd3c4f832d7b849cf2a2b46717509e0f9d2e129f7f53b9166e6482"
|
||||
},
|
||||
{
|
||||
"filename": "godot-4.2-beta1.tar.xz.sha256",
|
||||
"checksum": "7463fc82f9d633553157f7ea9a760fcb6ea89b2e94f3d1e350cf48c8d079bb12647c7788260f6b77fed3337c8e9e45bbb2a6e18c5dcecb08319bb06120807690"
|
||||
},
|
||||
{
|
||||
"filename": "godot-lib.4.2.beta1.template_release.aar",
|
||||
"checksum": "307acb80ffb11f1136e64c2c2d17c67868805e0c72072405ad46574c6ceb9872d22f7ea1c685f6fc5bed59dcd2f57fdc114183276f8750351acee3043be9a30e"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta1_android_editor.aab",
|
||||
"checksum": "302574253eaca2381f5be8a74415c752dad478b5c56fd437c2cb47c873dc2552a2157395b8445a78b14b8c3a6ee9b59142c21d3df5dedcc4543058f518909b5c"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta1_android_editor.apk",
|
||||
"checksum": "9d0028909e40af2bc97a5f8923987c2a2df66eb8fba7ac10902534d41970b8f979f71ec1ce3a4c1dc8e82c027e264b7b4daabafa0e546a0ea38293c8762f66f2"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta1_export_templates.tpz",
|
||||
"checksum": "be19d1613fad8fc0c1fea2ff44491e1502d04bbffa6faeb6854f56bb2f85e94fee65f512c428073b5064977fb768e5d3da8300e29b596d8c46d14ad05c3a4acb"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta1_linux.x86_32.zip",
|
||||
"checksum": "bc243d0528eee7385a70883c5db39357f5949e3f74c5d29c4adfcb1a91cac33671dc0bdde0e6322716c244a6346d8f31b28807e6711c3fbaacacc3428999be5e"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta1_linux.x86_64.zip",
|
||||
"checksum": "2ba328723d9365cc3034c06c2b0992c3b31398d553e7cc17b461d4e3ad0ca8a72d25ab7d1f1cbea62c204ae7eb719ab0168b0b8153b5afeeb43a157103bb281e"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta1_macos.universal.zip",
|
||||
"checksum": "049a7d31383f5ece3e99df144611ce4ad9d8e36f69144419115a21bf175a4189e5b4a785ff3b96d6a5b00f75e113b415e36336e885d2eb47510bd94b5a7acdc0"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta1_web_editor.zip",
|
||||
"checksum": "4d69dc8586cc98c8717df922209ce84985c87755d7519dbde34aab7d645313eba79af11897e50fa9de4350553d235b62c71bc6f9dc9f670d6d8b95db27d3c40f"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta1_win32.exe.zip",
|
||||
"checksum": "bfa272aaaad3f243002315d51a1a56aa149ad6fab512e32bba55e532f50853a9a707a05f51c138a7737548aba7f449a44b213914f60c15ec52c7f6b7ae9bfa43"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta1_win64.exe.zip",
|
||||
"checksum": "bff452173bc2d3361b5960e2bdca7d9323e239c1af5ccad88bedc8f465bade284e16f013606834dc707d8378daf1663e59bfb3473c29d58dd56085a068f76f02"
|
||||
},
|
||||
{
|
||||
"filename": "godot-lib.4.2.beta1.mono.template_release.aar",
|
||||
"checksum": "8c8505646f593d498a430ec50caf353e3794afdf98ed568ffa767a4a4466e99184df791b569eddb5e57282ba164127c0ae3336606b67e8971d6710ab86b6c41d"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta1_mono_export_templates.tpz",
|
||||
"checksum": "97d5a32965db87fd2a31f494670403adcdb14ea4e3c04640a93244ba6520222eaa4a24964cbb556a80444193cc29f9b61e31fbe99c6182d0434249c047a9e140"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta1_mono_linux_x86_32.zip",
|
||||
"checksum": "bb8db0c6580c9c8de7089546baf4e42de589d54722c745f0db36f673492e9f61609899d4ad72271a7ddb10d7a71a92cbcd789808e48651cf07af6de76b72fd20"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta1_mono_linux_x86_64.zip",
|
||||
"checksum": "07499691ff05d3077a912f8b104eaf9ed085db162c38763e37ee057c4fb36324686539211f57ab98db2a0d5fba274bb7ccf4383306d213f579782a51bdd831cc"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta1_mono_macos.universal.zip",
|
||||
"checksum": "deaf4afe2f51588613a7727365486b05897ead1507dab87029fc6a0d84b10056b43954cb2f5aef075f47a4b6163777c263b0390583b5aa7b80e9c06355ee0958"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta1_mono_win32.zip",
|
||||
"checksum": "c4a5089c540daeeab0067927e0b787fbad91a5d47d41e5b5fe9fea54d9d5ca2cdec39f83b41ddadb3d168837f8f4654bf04d2b874ca9d8e646557feb02f13d27"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta1_mono_win64.zip",
|
||||
"checksum": "85b7a372c7101d11493a60c693d4c841270ead936388480ac25679cf744f0bd8d498c702c6d228fa01575a8900c4a17d384885d0cb84a5f6dee5e21718dc0e22"
|
||||
}
|
||||
]
|
||||
}
|
||||
86
releases/godot-4.2-beta2.json
Normal file
86
releases/godot-4.2-beta2.json
Normal file
@@ -0,0 +1,86 @@
|
||||
{
|
||||
"name": "4.2-beta2",
|
||||
"version": "4.2",
|
||||
"status": "beta2",
|
||||
"release_date": 1697705267,
|
||||
"git_reference": "f8818f85e6c43cdf1277e8ae85eba19ca0a003b0",
|
||||
|
||||
"files": [
|
||||
{
|
||||
"filename": "godot-4.2-beta2.tar.xz",
|
||||
"checksum": "bb7ba9c92bfbc19c5d6fc2f89a9d48c5990d0433a183031cde678d5cfdf6d8faa92ddadd1e471d129af94159cb91cbf33064b6178f44a4041e811d413e7d4b7f"
|
||||
},
|
||||
{
|
||||
"filename": "godot-4.2-beta2.tar.xz.sha256",
|
||||
"checksum": "adeef432f095ae9232cec8f952d8dfc4497caf2ec94a10cdb42f3e8d987eb007f4cffa9cf5be7567cf25b3c7bdaba3f30f288b7572d4c0a34da9b5a6bca0b686"
|
||||
},
|
||||
{
|
||||
"filename": "godot-lib.4.2.beta2.template_release.aar",
|
||||
"checksum": "2f56464d973dc0e1882f768da4d9feab3b67f08bec697661ba44305b2194dec1abe6c35e34e5dbc9a8b85d5ea9e89a6c3c893297e4b3780e3f2d4908fdf77fb9"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta2_android_editor.aab",
|
||||
"checksum": "0f5d483436706db659558edb89d2bf9f3e652dbcb150f1d0696a163e39f81a11ae8e627ddbf9645ee7469771c727dba5ec13bee84d6f37809786cf0403f36e25"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta2_android_editor.apk",
|
||||
"checksum": "0474527fcba4c936f96d288410e97c98abbeac10cb7f882a94b11741eb8cff583f48401cc95ed4e6f835bd04297a65bd62310deb2295c980199a2245a6ed2fe9"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta2_export_templates.tpz",
|
||||
"checksum": "9917124a3bd4b4197a48367fe645730a97d52564f8eac6693fbc24031af2e7c0985f1d4a473f82adc6cc0547619bfadcb667ba9ebb9dddae4fbdec68f56ea71e"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta2_linux.x86_32.zip",
|
||||
"checksum": "f0b9b86d85868f06e8ca6ee9a61409254681f9dcc5e232bd7a4beda4d634c9aa384fac5f74ffec0a3beda960dfaae973a4a4df1d50b0e95b4ddfee7e758af041"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta2_linux.x86_64.zip",
|
||||
"checksum": "2f9938fa57b27925740ff75f70185a8ac940e6def5393e407f7b98417ef20b0839cddc7ed1b21afff975a4cb6c98a07442a3506194dc83d1c637531f23bc4480"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta2_macos.universal.zip",
|
||||
"checksum": "e778c6245cc95c36e4d46081efb4810603fcf07765959e84c1988578f0b741477fc847589125fd6b4946dd1b3d5c59e27f0540be91c4103b9b7fef3446986dd9"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta2_web_editor.zip",
|
||||
"checksum": "753804dee7890663d102427123f493822a637d4c980ed80334ae44fbc1d8348706145e527bd99ef866e1e0da6668a87f98c7b6c6798b9fd8a6bffd6c2df2ae7d"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta2_win32.exe.zip",
|
||||
"checksum": "5893f84c2e232cb2a5c44add547a70e70710524b5fb02f9870126e7ad45b1e7cb35a15e9f0474d23814d0d2c5bd6177dddecadecc08687f1a01bb341462ae13c"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta2_win64.exe.zip",
|
||||
"checksum": "bae4971ad7938684c786feae1a01a312ed780bfaaf36e8630c35637e6fc84a292579a6f1625eb5cb1769cc56aa8be2311a047b7fb34efddd81e9ea907a4c29c3"
|
||||
},
|
||||
{
|
||||
"filename": "godot-lib.4.2.beta2.mono.template_release.aar",
|
||||
"checksum": "afc7d2215c368859c329a2a517da065e1f4d45ca38906ecfd93aa9eca69d1a9f09db4ee4a7c87485cf13e812649ab4edb360fcba16df6c17f18e3a4064519088"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta2_mono_export_templates.tpz",
|
||||
"checksum": "1949af0bb1d71f708273d5706990e26dcf5cfb85d75de40726f305570f93ff78b47cf5df57d4f5c6f36ad5cd8c4314108e323fbd06fb332508bdb8a142f1ff31"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta2_mono_linux_x86_32.zip",
|
||||
"checksum": "72086d18e482f1b6d19cbc8669f1c5e30f0de0774265589d0e31cbc28f534c108a609b412ea7c93aab872fe290de1e1663a36016621aa732c16d1d6607c8a713"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta2_mono_linux_x86_64.zip",
|
||||
"checksum": "bd2f8c156d3885960bcb661bf354d82a3feed14d32a41700a2514fccfd9823f0f9a018a0bfb97d71155fdb2d0c51e661ae3c94f23fc92527350ebe4ed9aadd33"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta2_mono_macos.universal.zip",
|
||||
"checksum": "d0df7045452b93b9a88a124776f1912974bb893ef0b4378f74aa574b2de420aa58ee21341611bc25bb8ee8bc36eac93d3ecd1eb96119ef33d58586e4a7a5b9d0"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta2_mono_win32.zip",
|
||||
"checksum": "c9279cf1584f3584cd2a3671f61eabafd74ae7bf48e76a0602fdd1977525d46160650ae8d0e0e223514fd5309a54f9f8258198e9783bfa2048b688ea48d7e607"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta2_mono_win64.zip",
|
||||
"checksum": "046bb692a852524bacbd3d044d1928225859da652350730a352411b03e12db860cdc73026797a20c95fd1a3beed9020a25b7b157083397b9143e3cf55c2b0250"
|
||||
}
|
||||
]
|
||||
}
|
||||
86
releases/godot-4.2-beta3.json
Normal file
86
releases/godot-4.2-beta3.json
Normal file
@@ -0,0 +1,86 @@
|
||||
{
|
||||
"name": "4.2-beta3",
|
||||
"version": "4.2",
|
||||
"status": "beta3",
|
||||
"release_date": 1698156451,
|
||||
"git_reference": "e8d57afaeccf0d9f9726746f49936eb93aa0039b",
|
||||
|
||||
"files": [
|
||||
{
|
||||
"filename": "godot-4.2-beta3.tar.xz",
|
||||
"checksum": "18439d3e5a35834c16bf479c267a27cc3ead398900b39b083c1805895dde135ecf0af5ed826844989f9f9a6baca7ac9cd0611dda8ea9e2677ad80249b2ddeeb9"
|
||||
},
|
||||
{
|
||||
"filename": "godot-4.2-beta3.tar.xz.sha256",
|
||||
"checksum": "4116f7a4122a9795c3eae56d54c3e9e049e16ceccf358a55d54730a651908074c780d115b3beb432dcf08c0d030214c3cabb4b59acc1b896547d229e9edadb7f"
|
||||
},
|
||||
{
|
||||
"filename": "godot-lib.4.2.beta3.template_release.aar",
|
||||
"checksum": "edbc0451d469378d31ae1b2231c37ca44f9e4c1fc63d657eb2ce6eca14f54522ee221a29823085294689ad7b9806d39ddeb8616839f679cc7c7b1f3eb064734b"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta3_android_editor.aab",
|
||||
"checksum": "dcb8434064d8413c3657b7105d71a0d543dbbd2d98bc81317e9bd25d1af1713a51f4c18e09e300b80f2599f63953779522ff75a280345f10cef38f32fa1fb2d5"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta3_android_editor.apk",
|
||||
"checksum": "b084bf2a25b54eb5a9a8457eb7bb0618b44794eb88e65e258cb0c3b40029e14c6331ee5ff2ad1209365eeba1f07d405c14f2597a7fa660786ae066fe5a86b214"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta3_export_templates.tpz",
|
||||
"checksum": "24c04c56523196126374648cc85c458eff554888913b7562fa52b4cf88f06ccaf1900fa372e54aa5ec35e96fe4b99aa24884c5a005dc1ef5da11cd608e3415dd"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta3_linux.x86_32.zip",
|
||||
"checksum": "00fb08b30c13d47f38688311ef8351ccc1e8cddf891dd6fd2bbc7bb3d6f6ba570c2ac612a296fe4adf4ff45ec5d2d865f4ae2d80e276238ae41276ae703b2137"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta3_linux.x86_64.zip",
|
||||
"checksum": "250874c620131ace3c40f8bc7a327271f06b3a0f6a5ca7289fc20c21daa48f0f316cc6ac2bf2e3270f28c41deb4cd014f4544d6133f4732dc1c1fd15de149cc5"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta3_macos.universal.zip",
|
||||
"checksum": "49df596244d5704213d3c75c086234e9f6c3c7638da4e35d2ce881611e951c9f9f77ce68d9344378565c3a7bea632dd41ce743615a72bede8fe250d86caa1b3b"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta3_web_editor.zip",
|
||||
"checksum": "ee04423428cceb0e6595eda858be38a1ad5a6c12239deb280901d4ab79c9289d3b52fef669a6179b8b40ea84db4a66cafb4c0387383130bd57534d736c7f6f5b"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta3_win32.exe.zip",
|
||||
"checksum": "7e3958d79e60cfee9735cfa5016336289d12bd22418ddeca5bcddc1f9773f4604a8b8ed0d16ccfa2829e66e749ad9cdc94b006ba5d870e6445a8bb3460bd4b6b"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta3_win64.exe.zip",
|
||||
"checksum": "eefe4028ed45a35a500ce66416c0ea8e43520de40fffd5d30371222eec35cc18bb8febcc6076e0434c385929b3ffc0efdc7e973f1257573b6132fe0dc601059e"
|
||||
},
|
||||
{
|
||||
"filename": "godot-lib.4.2.beta3.mono.template_release.aar",
|
||||
"checksum": "375fcbcb9fafcff96ef80b05e33065555df8000e803f7b2acb50ebf698e0e1b9516626f23246527f83e9328951966ff94dd79b43790c78a451c14b4c001c9ac3"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta3_mono_export_templates.tpz",
|
||||
"checksum": "e578c1d9a55136baaccc3b7b636525917738e271cd4e862634f8969eab4a835e6874225fcbd59f4ef64faead50c79567b633d84bf3f95aa1ffa0346ef48f0423"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta3_mono_linux_x86_32.zip",
|
||||
"checksum": "ebf175f7f15d06944e8c4775a820e6d03603d00f28c5e301c476600390513f03335823098029a7abf490dcef097daa9e218176be27d4117bb2ee21591c96c234"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta3_mono_linux_x86_64.zip",
|
||||
"checksum": "62740f46620e4837c53e1774d35c56cfe845198ea27b49785fdc4f39b2755388f61858ec1d88639f982762e306fd51adb230c2c768e71e8329b67f4d9cae3e45"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta3_mono_macos.universal.zip",
|
||||
"checksum": "883905fc42871354c7a4883005d99cd57946ee4fe5792cb7caca7d0b9bb80529c580bed24ea33c9862ce18218b698614d32c02745cb3bf4c5824a4719429b0d7"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta3_mono_win32.zip",
|
||||
"checksum": "de9378b59cae19c6cbca49b11154171f38f511306b87f44a67e3beb1b2d135e732a268b176b419521bbab43a7e74af79cd5840ca6fe93b4788a8094ed6607376"
|
||||
},
|
||||
{
|
||||
"filename": "Godot_v4.2-beta3_mono_win64.zip",
|
||||
"checksum": "ee73502cca53736cc329de6e099180d0676a85a39de24c366157e22ed5c42470ec65d87cdb5b1d1b69b5cbbdff11d60210bbbebfa86c843e657543dd4cd63de4"
|
||||
}
|
||||
]
|
||||
}
|
||||
15
generate-history.py → tools/bootstrap/generate-history.py
Normal file → Executable file
15
generate-history.py → tools/bootstrap/generate-history.py
Normal file → Executable file
@@ -1,3 +1,18 @@
|
||||
### This script has been used to generate initial data for this repository
|
||||
### and is preserved as a reference. DO NOT USE IT.
|
||||
|
||||
### Generate commit history adding each official release in order.
|
||||
###
|
||||
### Make sure JSON metadata files are put into the releases folder.
|
||||
### Using these files this script recreates the commit history,
|
||||
### placing each release at their approximate time and date of
|
||||
### publication. Each commit is tagged with the release identity.
|
||||
###
|
||||
### Make sure you do not rebase or otherwise change the history
|
||||
### afterwards, as that destroys git tags (they remain assigned
|
||||
### to old commits).
|
||||
|
||||
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
19
extract-hashes.py → tools/bootstrap/generate-metadata.py
Normal file → Executable file
19
extract-hashes.py → tools/bootstrap/generate-metadata.py
Normal file → Executable file
@@ -1,3 +1,14 @@
|
||||
### This script has been used to generate initial data for this repository
|
||||
### and is preserved as a reference. DO NOT USE IT.
|
||||
|
||||
### Generate JSON metadata files for each official release of Godot.
|
||||
###
|
||||
### Files are put into a temporary folder tmp/releases. To generate
|
||||
### the data we extract dates and commit hashes from releases published
|
||||
### on TuxFamily. We also extract SHA512 checksums for release files
|
||||
### where possible.
|
||||
|
||||
|
||||
import os
|
||||
import urllib.request
|
||||
import urllib.error
|
||||
@@ -96,9 +107,9 @@ def generate_file(version_name, release_name, release_status, release_url):
|
||||
|
||||
# Open the file for writing.
|
||||
|
||||
output_path = f"./temp/releases/godot-{release_name}.json"
|
||||
output_path = f"./tmp/releases/godot-{release_name}.json"
|
||||
if release_status == "stable":
|
||||
output_path = f"./temp/releases/godot-{release_name}-stable.json"
|
||||
output_path = f"./tmp/releases/godot-{release_name}-stable.json"
|
||||
|
||||
with open(output_path, 'w') as f:
|
||||
# Get the commit hash / git reference.
|
||||
@@ -179,8 +190,8 @@ for match in matches:
|
||||
version_names.append(subfolder_name[:-1])
|
||||
|
||||
# Create the output directory if it doesn't exist.
|
||||
if not os.path.exists("./temp/releases"):
|
||||
os.makedirs("./temp/releases")
|
||||
if not os.path.exists("./tmp/releases"):
|
||||
os.makedirs("./tmp/releases")
|
||||
|
||||
for version_name in version_names:
|
||||
version_url = url + version_name
|
||||
23
generate-releases.py → tools/bootstrap/generate-releases.py
Normal file → Executable file
23
generate-releases.py → tools/bootstrap/generate-releases.py
Normal file → Executable file
@@ -1,8 +1,20 @@
|
||||
### This script has been used to generate initial data for this repository
|
||||
### and is preserved as a reference. DO NOT USE IT.
|
||||
|
||||
### Generate GitHub releases for each official Godot release.
|
||||
###
|
||||
### For each release creates a canned release summary based on
|
||||
### release's characteristics, then publishes a new GitHub release
|
||||
### in the linked repository. Make sure to use gh to configure
|
||||
### the default repository for this project's folder.
|
||||
###
|
||||
### Generated release notes are available in tmp/notes for examination.
|
||||
|
||||
|
||||
import json
|
||||
import os
|
||||
import subprocess
|
||||
import yaml
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
website_versions = []
|
||||
@@ -43,7 +55,6 @@ def generate_notes(release_data):
|
||||
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":
|
||||
@@ -125,7 +136,7 @@ def generate_notes(release_data):
|
||||
return notes
|
||||
|
||||
|
||||
with open("./temp/versions.yml", "r") as f:
|
||||
with open("./tmp/versions.yml", "r") as f:
|
||||
try:
|
||||
website_versions = yaml.safe_load(f)
|
||||
except yaml.YAMLError as exc:
|
||||
@@ -159,8 +170,8 @@ releases.sort(key=lambda x: x['data']['release_date'])
|
||||
# match the release date.
|
||||
|
||||
# Create the output directory if it doesn't exist.
|
||||
if not os.path.exists("./temp/notes"):
|
||||
os.makedirs("./temp/notes")
|
||||
if not os.path.exists("./tmp/notes"):
|
||||
os.makedirs("./tmp/notes")
|
||||
|
||||
for release_data in releases:
|
||||
release_tag = f"{release_data['data']['version']}-{release_data['data']['status']}"
|
||||
@@ -170,7 +181,7 @@ for release_data in releases:
|
||||
prerelease_flag = "--prerelease"
|
||||
|
||||
release_notes = generate_notes(release_data['data'])
|
||||
release_notes_file = f"./temp/notes/release-notes-{release_tag}.txt"
|
||||
release_notes_file = f"./tmp/notes/release-notes-{release_tag}.txt"
|
||||
with open(release_notes_file, 'w') as temp_notes:
|
||||
temp_notes.write(release_notes)
|
||||
|
||||
106
tools/create-release-metadata.py
Executable file
106
tools/create-release-metadata.py
Executable file
@@ -0,0 +1,106 @@
|
||||
#!/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()
|
||||
175
tools/create-release-notes.py
Executable file
175
tools/create-release-notes.py
Executable file
@@ -0,0 +1,175 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import os
|
||||
|
||||
|
||||
def get_version_name(version_version: str, version_status: str) -> str:
|
||||
version_name = version_version
|
||||
|
||||
if version_status == "stable":
|
||||
return version_name
|
||||
|
||||
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
|
||||
|
||||
return version_name
|
||||
|
||||
|
||||
def get_version_description(version_version: str, version_status: str, version_flavor: str) -> str:
|
||||
version_description = ""
|
||||
|
||||
if version_status == "stable":
|
||||
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."
|
||||
|
||||
return version_description
|
||||
|
||||
|
||||
def get_release_notes_url(version_version: str, version_status: str, version_flavor: str) -> str:
|
||||
release_notes_slug = ""
|
||||
version_sluggified = version_version.replace(".", "-")
|
||||
|
||||
if version_status == "stable":
|
||||
if version_flavor == "major":
|
||||
release_notes_slug = f"major-release-godot-{version_sluggified}"
|
||||
elif version_flavor == "minor":
|
||||
release_notes_slug = f"feature-release-godot-{version_sluggified}"
|
||||
else:
|
||||
release_notes_slug = f"maintenance-release-godot-{version_sluggified}"
|
||||
else:
|
||||
if version_status.startswith("rc"):
|
||||
status_sluggified = version_status.removeprefix("rc").replace(".", "-")
|
||||
release_notes_slug = f"release-candidate-godot-{version_sluggified}-rc-{status_sluggified}"
|
||||
elif version_status.startswith("beta"):
|
||||
status_sluggified = version_status.removeprefix("beta").replace(".", "-")
|
||||
release_notes_slug = f"dev-snapshot-godot-{version_sluggified}-beta-{status_sluggified}"
|
||||
elif version_status.startswith("alpha"):
|
||||
status_sluggified = version_status.removeprefix("alpha").replace(".", "-")
|
||||
release_notes_slug = f"dev-snapshot-godot-{version_sluggified}-alpha-{status_sluggified}"
|
||||
elif version_status.startswith("dev"):
|
||||
status_sluggified = version_status.removeprefix("dev").replace(".", "-")
|
||||
release_notes_slug = f"dev-snapshot-godot-{version_sluggified}-dev-{status_sluggified}"
|
||||
else:
|
||||
status_sluggified = version_status.replace(".", "-")
|
||||
release_notes_slug = f"dev-snapshot-godot-{version_sluggified}-{status_sluggified}"
|
||||
|
||||
return f"https://godotengine.org/article/{release_notes_slug}/"
|
||||
|
||||
|
||||
def generate_notes(version_version: str, version_status: str, git_reference: str) -> None:
|
||||
notes = ""
|
||||
|
||||
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 = get_version_name(version_version, version_status)
|
||||
version_description = get_version_description(version_version, version_status, version_flavor)
|
||||
|
||||
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 = 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 = get_release_notes_url(version_version, version_status, version_flavor)
|
||||
|
||||
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
|
||||
|
||||
|
||||
def main() -> None:
|
||||
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 notes: 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"
|
||||
release_tag = f"{release_version}-{release_flavor}"
|
||||
|
||||
release_notes = generate_notes(release_version, release_flavor, args.git)
|
||||
release_notes_file = f"./tmp/release-notes-{release_tag}.txt"
|
||||
with open(release_notes_file, 'w') as temp_notes:
|
||||
temp_notes.write(release_notes)
|
||||
|
||||
print(f"Written release notes to '{release_notes_file}'.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
141
tools/upload-github.sh
Executable file
141
tools/upload-github.sh
Executable file
@@ -0,0 +1,141 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
# Generate GitHub release for a Godot version and upload artifacts.
|
||||
#
|
||||
# Usage: ./upload-github.sh -v 3.6
|
||||
# Usage: ./upload-github.sh -v 3.6 -f beta3
|
||||
# Usage: ./upload-github.sh -v 3.6 -f beta3 -r owner/repository
|
||||
#
|
||||
# Run this script from the root of the godot-build-scripts folder
|
||||
# after building Godot.
|
||||
|
||||
# Folder this script is called from, a.k.a its working directory.
|
||||
export basedir=$(pwd)
|
||||
|
||||
# Folder where this scripts resides in.
|
||||
scriptpath=$(readlink -f "$0")
|
||||
scriptdir=$(dirname "$scriptpath")
|
||||
# Root folder of this project, hopefully.
|
||||
export buildsdir=$(dirname "$scriptdir")
|
||||
|
||||
if [ ! -d "${basedir}/releases" ] || [ ! -d "${basedir}/tmp" ]; then
|
||||
echo "Cannot find one of the required folders: releases, tmp."
|
||||
echo " Make sure you're running this script from the root of your godot-build-scripts clone, and that Godot has been built with it."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Setup.
|
||||
|
||||
godot_version=""
|
||||
godot_flavor="stable"
|
||||
godot_repository="godotengine/godot-builds"
|
||||
|
||||
while getopts "v:f:r:" opt; do
|
||||
case "$opt" in
|
||||
v)
|
||||
godot_version=$OPTARG
|
||||
;;
|
||||
f)
|
||||
godot_flavor=$OPTARG
|
||||
;;
|
||||
r)
|
||||
godot_repository=$OPTARG
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
release_tag="$godot_version-$godot_flavor"
|
||||
|
||||
echo "Preparing release $release_tag..."
|
||||
|
||||
version_path="$basedir/releases/$release_tag"
|
||||
if [ ! -d "${version_path}" ]; then
|
||||
echo "Cannot find the release folder at $version_path."
|
||||
echo " Make sure you're running this script from the root of godot-build-scripts, and that Godot has been built."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd git
|
||||
git_reference=$(git rev-parse HEAD)
|
||||
cd ..
|
||||
|
||||
# Generate release metadata and commit it to Git.
|
||||
|
||||
echo "Creating and committing release metadata for $release_tag..."
|
||||
|
||||
if ! $buildsdir/tools/create-release-metadata.py -v $godot_version -f $godot_flavor -g $git_reference; then
|
||||
echo "Failed to create release metadata for $release_tag."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd $buildsdir
|
||||
git add ./releases/godot-$release_tag.json
|
||||
git commit -m "Add Godot $release_tag"
|
||||
git tag $release_tag
|
||||
if ! git push --atomic origin main $release_tag; then
|
||||
echo "Failed to push release metadata for $release_tag to GitHub."
|
||||
exit 1
|
||||
fi
|
||||
cd $basedir
|
||||
|
||||
# Exactly one time it failed to create release immediately after pushing the tag,
|
||||
# so we use this for protection...
|
||||
sleep 2
|
||||
|
||||
# Generate GitHub release.
|
||||
|
||||
echo "Creating and publishing GitHub release for $release_tag..."
|
||||
|
||||
if ! $buildsdir/tools/create-release-notes.py -v $godot_version -f $godot_flavor -g $git_reference; then
|
||||
echo "Failed to create release notes for $release_tag."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
release_notes="$basedir/tmp/release-notes-$release_tag.txt"
|
||||
release_flag=""
|
||||
if [ $godot_flavor != "stable" ]; then
|
||||
release_flag="--prerelease"
|
||||
fi
|
||||
|
||||
if ! gh release create $release_tag --verify-tag --title "$release_tag" --notes-file $release_notes $release_flag -R $godot_repository; then
|
||||
echo "Cannot create a GitHub release for $release_tag."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Upload release files to GitHub.
|
||||
|
||||
echo "Uploading release files from $version_path..."
|
||||
|
||||
# We are picking up all relevant files lazily, using a substring.
|
||||
# The first letter can be in either case, so we're skipping it.
|
||||
for f in $version_path/*odot*; do
|
||||
echo "Uploading $f..."
|
||||
gh release upload $release_tag $f -R $godot_repository
|
||||
done
|
||||
|
||||
# Do the same for .NET builds.
|
||||
for f in $version_path/mono/*odot*; do
|
||||
echo "Uploading $f..."
|
||||
gh release upload $release_tag $f -R $godot_repository
|
||||
done
|
||||
|
||||
# README.txt is only generated for pre-releases.
|
||||
readme_path="$version_path/README.txt"
|
||||
if [ $godot_flavor != "stable" ] && [ -f "${readme_path}" ]; then
|
||||
echo "Uploading $readme_path..."
|
||||
gh release upload $release_tag $readme_path -R $godot_repository
|
||||
fi
|
||||
|
||||
# SHA512-SUMS.txt is split into two: classic and mono, and we need to upload them as one.
|
||||
checksums_path="$basedir/tmp/SHA512-SUMS.txt"
|
||||
cp $basedir/releases/$release_tag/SHA512-SUMS.txt $checksums_path
|
||||
if [ -d "${basedir}/releases/${release_tag}/mono" ]; then
|
||||
cat $basedir/releases/$release_tag/mono/SHA512-SUMS.txt >> $checksums_path
|
||||
fi
|
||||
|
||||
echo "Uploading $checksums_path..."
|
||||
gh release upload $release_tag $checksums_path -R $godot_repository
|
||||
|
||||
echo "Done."
|
||||
Reference in New Issue
Block a user