GOOGLE ADS

воскресенье, 24 апреля 2022 г.

Как запросить правило репозитория в bazel?

Я пытаюсь перевести проект моей компании с устаревшего инструмента сборки на 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 фактическая фиксация, на которую ссылается данная ссылка).

Я получил этот пример из сообщения в блоге, представляющего этот флаг, который также имеет дополнительную предысторию.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...