Я пытаюсь перевести проект моей компании с устаревшего инструмента сборки на bazel. Теперь я столкнулся с этой проблемой и много искал, но, к сожалению, до сих пор не имел ни малейшего представления.
Вот в чем дело:
Для соответствия аудиту с открытым исходным кодом мы должны предоставить список программного обеспечения с открытым исходным кодом, которое встроено в наш двоичный файл. Поскольку внешние зависимости вводятся правилами репозитория, моя интуитивная мысль состоит в том, чтобы запросить эти правила и получить URL-адреса. Однако подкоманда query/cquery еще не предоставила такую функциональность, насколько мне известно, она может печатать файлы правил/целей/сборки, но не правила репозитория и их атрибуты.
Есть ли способ собрать такую информацию из правил репозитория в WORKSPACE? Делать это вручную нецелесообразно, так как в моей компании тысячи проектов и зависимости также часто меняются.
Например, правило рабочей области:
http_archive(
name = "testrunner",
urls = ["https://github.com/testrunner/v2.zip"],
sha256 = "..."
)
Эта зависимость используется правилом с именем «my_target», поэтому я ожидал, что зависимость может быть запрошена следующим образом:
> bazel queryExtDep my_target
External Dependency of my_target: name->testrunner, urls = "https://github.com/testrunner/v2.zip"
Решение проблемы
--experimental_repository_resolved_file предоставит вам всю эту информацию в одном файле Starlark, который вы можете легко обработать с помощью Starlark или Python и т. д., чтобы извлечь нужную информацию.
Разрешенный файл выглядит примерно так:
resolved = [
...,
{
"original_rule_class": "@bazel_tools//tools/build_defs/repo:git.bzl%git_repository",
"original_attributes": {
"name": "com_google_protobuf",
"remote": "https://github.com/google/protobuf",
"branch": "master"
},
"repositories": [
{
"rule_class": "@bazel_tools//tools/build_defs/repo:git.bzl%git_repository",
"attributes": {
"remote": "https://github.com/google/protobuf",
"commit": "78ba021b846e060d5b8f3424259d30a1f3ae4eef",
"shallow_since": "2018-02-07",
"init_submodules": False,
"verbose": False,
"strip_prefix": "",
"patches": [],
"patch_tool": "patch",
"patch_args": [
"-p0"
],
"patch_cmds": [],
"name": "com_google_protobuf"
}
}
]
}
]
Сюда входят исходные атрибуты, в которых находится искомый URL-адрес. Он также включает любую дополнительную информацию, возвращаемую правилом репозитория (например, для git_repository фактическая фиксация, на которую ссылается данная ссылка).
Я получил этот пример из сообщения в блоге, представляющего этот флаг, который также имеет дополнительную предысторию.
Комментариев нет:
Отправить комментарий