blob: 45dfad856754bdc4523c72f94e810a26e7a791c4 [file] [edit]
def _execute_or_fail(repository_ctx, args, what):
result = repository_ctx.execute(args)
if result.return_code != 0:
fail("{} failed (rc={})\nargs: {}\nstdout: {}\nstderr: {}".format(
what,
result.return_code,
[str(a) for a in args],
result.stdout,
result.stderr,
))
return result
def _dmg_archive_impl(repository_ctx):
repository_ctx.file("BUILD.bazel", repository_ctx.attr.build_file_content)
if not repository_ctx.which("hdiutil"):
# hdiutil is macOS-only; skip download on other platforms
return
url = repository_ctx.attr.url
(ignored, ignored, dmg_name) = url.rpartition("/")
dmg_name = dmg_name.replace("%20", "_")
attrs = {
"output": dmg_name,
}
if repository_ctx.attr.sha256:
attrs.update({"sha256": repository_ctx.attr.sha256})
repository_ctx.download(
url,
**attrs
)
zip_name = dmg_name.replace(".dmg", ".zip")
_execute_or_fail(
repository_ctx,
[
repository_ctx.path(Label("@selenium//common/private:convert_dmg.sh")),
dmg_name,
zip_name,
],
"convert_dmg.sh",
)
repository_ctx.extract(
archive = zip_name,
stripPrefix = repository_ctx.attr.strip_prefix,
output = repository_ctx.attr.output,
)
repository_ctx.delete(dmg_name)
repository_ctx.delete(zip_name)
dmg_archive = repository_rule(
_dmg_archive_impl,
attrs = {
"url": attr.string(
mandatory = True,
),
"sha256": attr.string(),
"strip_prefix": attr.string(),
"output": attr.string(),
"build_file_content": attr.string(),
"build_file": attr.label(),
},
)