1
1
load ("//minecraft_info.bzl" , "MinecraftInfo" )
2
2
3
+ def _library_rules_match (rules ):
4
+ for rule in rules :
5
+ # Assert action is always "allow"? That's the only thing appearing in the json
6
+ os_name = rule ["os" ]["name" ]
7
+ # FIXME: Non-linux platform support
8
+ if os_name != "linux" :
9
+ return False
10
+ return True
11
+
12
+
3
13
def _minecraft_version_impl (ctx : "context" ) -> ["provider" ]:
4
14
# Convert from dependency to artifact
5
15
# TODO: Should this assert only one output?
@@ -26,12 +36,13 @@ def _minecraft_version_impl(ctx: "context") -> ["provider"]:
26
36
f = derive_version_json
27
37
)
28
38
29
- # Crawl version json and get the asset index, jars, and mappings
39
+ # Crawl version json and get the asset index, jars, mappings, and libs
30
40
asset_index_artifact = ctx .actions .declare_output ("asset_index.json" )
31
41
client_jar_artifact = ctx .actions .declare_output ("client.jar" )
32
42
client_mappings_artifact = ctx .actions .declare_output ("client.txt" )
33
43
server_jar_artifact = ctx .actions .declare_output ("server.jar" )
34
44
server_mappings_artifact = ctx .actions .declare_output ("server.txt" )
45
+ libraries_dir_artifact = ctx .actions .declare_output ("libraries" , dir = True )
35
46
36
47
def derive_version_json_contents (ctx : "context" , dynamic_artifacts , outputs ):
37
48
version_json = dynamic_artifacts [version_json_artifact ].read_json ()
@@ -60,6 +71,17 @@ def _minecraft_version_impl(ctx: "context") -> ["provider"]:
60
71
version_json ["downloads" ]["server_mappings" ]["url" ],
61
72
sha1 = version_json ["downloads" ]["server_mappings" ]["sha1" ],
62
73
)
74
+ libraries = {}
75
+ for library in version_json ["libraries" ]:
76
+ if not _library_rules_match (library .get ("rules" , [])):
77
+ continue
78
+ lib_name = library ["downloads" ]["artifact" ]["path" ]
79
+ libraries [lib_name ] = ctx .actions .download_file (
80
+ lib_name ,
81
+ library ["downloads" ]["artifact" ]["url" ],
82
+ sha1 = library ["downloads" ]["artifact" ]["sha1" ],
83
+ )
84
+ ctx .actions .symlinked_dir (outputs [libraries_dir_artifact ].as_output (), libraries )
63
85
ctx .actions .dynamic_output (
64
86
dynamic = [version_json_artifact ],
65
87
inputs = [],
@@ -69,6 +91,7 @@ def _minecraft_version_impl(ctx: "context") -> ["provider"]:
69
91
server_jar_artifact ,
70
92
server_mappings_artifact ,
71
93
asset_index_artifact ,
94
+ libraries_dir_artifact ,
72
95
],
73
96
f = derive_version_json_contents ,
74
97
)
@@ -79,6 +102,7 @@ def _minecraft_version_impl(ctx: "context") -> ["provider"]:
79
102
"client_mappings" : [DefaultInfo (default_output = client_mappings_artifact )],
80
103
"server_mappings" : [DefaultInfo (default_output = server_mappings_artifact )],
81
104
"asset_index" : [DefaultInfo (default_output = asset_index_artifact )],
105
+ "libraries" : [DefaultInfo (default_output = libraries_dir_artifact )],
82
106
},
83
107
),
84
108
MinecraftInfo (
@@ -88,6 +112,7 @@ def _minecraft_version_impl(ctx: "context") -> ["provider"]:
88
112
server_jar = server_jar_artifact ,
89
113
server_mappings = server_mappings_artifact ,
90
114
asset_index = asset_index_artifact ,
115
+ libraries_dir = libraries_dir_artifact ,
91
116
),
92
117
]
93
118
0 commit comments