meta-unmojang/meta/run/generate_authlib_injector.py
2024-07-02 20:33:20 -04:00

136 lines
4.5 KiB
Python
Executable File

import json
import os
import dateutil.parser
from meta.common import (
ensure_component_dir,
launcher_path,
upstream_path,
)
from meta.common.authlib_injector import BASE_DIR, ARTIFACTS_DIR, AGENT_COMPONENT
from meta.model import Agent, MetaVersion, Library, MetaPackage, GradleSpecifier
LAUNCHER_DIR = launcher_path()
UPSTREAM_DIR = upstream_path()
ensure_component_dir(AGENT_COMPONENT)
LEGACY_RELEASE_TIMES = {
1: "2018-06-28T21:14:02+08:00",
2: "2018-06-28T21:14:02+08:00",
3: "2018-06-28T21:14:02+08:00",
4: "2018-06-28T21:14:02+08:00",
6: "2018-06-28T21:14:02+08:00",
7: "2018-06-28T21:15:12+08:00",
8: "2018-06-28T21:26:23+08:00",
9: "2018-06-28T21:28:04+08:00",
10: "2018-06-28T21:28:14+08:00",
11: "2018-06-28T21:28:23+08:00",
12: "2018-06-28T21:28:29+08:00",
13: "2018-06-28T21:28:35+08:00",
14: "2018-06-28T21:28:42+08:00",
15: "2018-06-28T21:28:49+08:00",
16: "2018-06-28T21:28:55+08:00",
17: "2018-06-28T21:29:00+08:00",
18: "2018-06-29T13:25:41+00:00",
19: "2018-09-30T13:17:16+00:00",
20: "2018-10-20T13:43:43+00:00",
21: "2018-10-20T13:49:31+00:00",
22: "2018-11-23T16:11:54+00:00",
23: "2018-11-24T17:16:56+00:00",
24: "2018-12-31T13:03:32+00:00",
25: "2019-01-19T15:40:25+00:00",
26: "2019-02-14T05:26:31+00:00",
27: "2020-04-10T16:05:12+00:00",
28: "2020-04-29T02:46:56+00:00",
29: "2020-06-20T14:30:17Z",
30: "2020-08-15T03:08:38Z",
31: "2020-08-23T07:06:55Z",
32: "2020-08-27T04:21:52Z",
33: "2020-09-11T23:27:27Z",
34: "2020-10-17T17:18:31Z",
35: "2021-05-14T06:55:24Z",
36: "2021-06-11T10:34:18Z",
37: "2021-06-11T19:55:54Z",
38: "2021-06-13T22:05:49Z",
39: "2021-08-20T20:30:11Z",
40: "2021-11-18T13:49:40Z",
41: "2022-03-11T05:48:00Z",
42: "2022-03-15T18:07:46Z",
43: "2022-04-20T17:21:18Z",
44: "2022-05-03T13:42:48Z",
45: "2022-06-06T18:02:59Z",
46: "2022-07-02T06:06:24Z",
47: "2022-07-14T11:37:08Z",
48: "2022-08-04T16:53:00Z",
49: "2022-08-05T17:11:21Z",
50: "2023-03-25T10:42:43Z",
51: "2023-06-11T18:47:31Z",
}
def main():
latest_version: Optional[str] = None
with open(
os.path.join(UPSTREAM_DIR, BASE_DIR, "artifacts.json"), "r", encoding="utf-8"
) as artifacts_file:
artifacts = json.load(artifacts_file)
latest_build = 0
for artifact_info in artifacts["artifacts"]:
build_number = artifact_info["build_number"]
print(f"Processing agent {build_number}")
with open(
os.path.join(UPSTREAM_DIR, ARTIFACTS_DIR, f"{build_number}.json"),
"r",
encoding="utf-8",
) as artifact_file:
artifact = json.load(artifact_file)
version = artifact["version"]
latest_build = max(latest_build, build_number)
if latest_build == build_number:
latest_version = version
if "release_time" in artifact:
release_time = dateutil.parser.isoparse(artifact["release_time"])
elif build_number in LEGACY_RELEASE_TIMES:
release_time = LEGACY_RELEASE_TIMES[build_number]
else:
continue
v = MetaVersion(
name="authlib-injector",
uid=AGENT_COMPONENT,
version=version,
release_time=release_time,
)
v.type = "release"
v.additional_agents = [
Agent(
name=GradleSpecifier(
group="moe.yushi",
artifact="authlibinjector",
version=version,
),
absoluteUrl=artifact["download_url"],
)
]
v.write(
os.path.join(LAUNCHER_DIR, AGENT_COMPONENT, f"{v.version}.json")
)
package = MetaPackage(uid=AGENT_COMPONENT, name="authlib-injector")
package.recommended = [latest_version]
package.description = "authlib-injector enables you to build a Minecraft authentication system offering all the features that genuine Minecraft has."
package.project_url = "https://github.com/yushijinhun/authlib-injector"
package.authors = ["Haowei Wen"]
package.write(os.path.join(LAUNCHER_DIR, AGENT_COMPONENT, "package.json"))
if __name__ == "__main__":
main()