intellij/internal/intellij_repo/intellij_repo_plugins.bzl (72 lines of code) (raw):
load("@bazel_skylib//lib:paths.bzl", "paths")
_PLUGIN_TPL = """\
java_import(
name = "{plugin}",
jars = glob([ "{plugin}/lib/*.jar" ]),
neverlink = 1,
visibility = ["//visibility:public"],
)
"""
_ALL_PLUGINS = """\
filegroup(
name = "runfiles",
srcs = glob(
include = ["**"],
exclude = [
"**/*.tmLanguage",
"*.bazel",
],
),
visibility = ["//visibility:public"],
)
"""
def download_plugins(rctx):
"""Downloads specified plugins"""
for plugin, sha256 in rctx.attr.plugins.items():
split_arr = plugin.split(":")
if len(split_arr) != 3:
fail("Wrong plugin format: %s" % plugin)
id = split_arr[0]
plugin_dir = "plugins/%s" % id
artifact, version = split_arr[1:]
if rctx.path(plugin_dir).exists:
rctx.delete(plugin_dir)
rctx.download(
url = "{url}/com/jetbrains/plugins/{artifact}/{version}/{artifact}-{version}.zip".format(
url = rctx.attr.plugins_repo_url,
artifact = artifact,
version = version,
),
output = "plugins/plugin.zip",
sha256 = sha256,
)
rctx.execute(
[ "unzip", "plugin.zip" ],
working_directory = "plugins",
)
rctx.delete("plugins/plugin.zip")
def check_default_plugins(rctx):
"""Checks plugins directory for existence of listed ones, fails otherwise"""
for plugin in rctx.attr.default_plugins:
split_arr = plugin.split(":")
if len(split_arr) != 2:
fail("Wrong default plugin format: %s" % plugin)
id = split_arr[0]
plugin_dir = "plugins/%s" % id
if not rctx.path(plugin_dir).exists:
fail("No such builtin plugin: %s" % id)
def declare_plugins(rctx):
"""Declare targets for each plugin"""
plugins = [ paths.basename(str(x)) for x in rctx.path("plugins").readdir() ]
rctx.file(
"plugins/BUILD.bazel",
content = "\n".join([
'load("@rules_java//java:defs.bzl", "java_import")',
_ALL_PLUGINS,
] + [ _PLUGIN_TPL.format(plugin = x) for x in plugins ]
),
)
def intellij_repo_plugins(rctx):
download_plugins(rctx)
check_default_plugins(rctx)
declare_plugins(rctx)