def _dmg_archive_impl(repository_ctx): 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") repository_ctx.execute([ repository_ctx.path(Label("@selenium//common/private:convert_dmg.sh")), dmg_name, zip_name, ]) repository_ctx.extract( archive = zip_name, stripPrefix = repository_ctx.attr.strip_prefix, output = repository_ctx.attr.output, ) repository_ctx.file( "BUILD.bazel", repository_ctx.attr.build_file_content, ) 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(), }, )