Нам часто нужны общие комбинации правил для стека технологий. Это в настоящее время тратит много места в WORKSPACE - и они должны храниться в syn c в нескольких репозиториях. Это более 50 строк после компоновщика и содержит слишком много URL, версий и хэшей.
Теперь скажите, что у меня есть репозиторий "стека технологий" и сделайте что-то вроде
load("@techstack_repo//mylang.bzl", "load_rules")
load_rules()
, где load_rules
будет загрузить и инициализировать закрепленные версии, например, rules_ go, bazel-gazelle, rules_ docker, rules_proto и инициализировать все из них в правильном порядке, чтобы они были видны в WORKSPACE?
Я не получил это в работать в моих тестах, потому что load
, очевидно, не может быть запущен в функции в файле bzl - это не сама функция.
Есть ли способ сделать это?
Вот пример из того, что я тестировал для Java:
load("@io_bazel_rules_docker//repositories:repositories.bzl", container_repositories = "repositories")
load("@io_bazel_rules_docker//repositories:deps.bzl", container_deps = "deps")
load("@io_bazel_rules_docker//container:container.bzl", "container_pull")
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains")
load(
"@io_grpc_grpc_java//:repositories.bzl",
"IO_GRPC_GRPC_JAVA_ARTIFACTS",
"IO_GRPC_GRPC_JAVA_OVERRIDE_TARGETS",
"grpc_java_repositories",
)
load("@rules_jvm_external//:defs.bzl", "maven_install")
def prepare_stack(maven_deps = []):
container_repositories()
container_deps()
container_pull(
name = "java_base",
# https://console.cloud.google.com/gcr/images/distroless/GLOBAL/java-debian10
# tag = "11", # OpenJDK 11 as of 2020-03-04
digest = "sha256:eda9e5ae2facccc9c7016f0c2d718d2ee352743bda81234783b64aaa402679b6",
registry = "gcr.io",
repository = "distroless/java-debian10",
)
rules_proto_dependencies()
rules_proto_toolchains()
maven_install(
artifacts = maven_deps + IO_GRPC_GRPC_JAVA_ARTIFACTS,
# for improved debugging in IDE
fetch_sources = True,
generate_compat_repositories = True,
override_targets = IO_GRPC_GRPC_JAVA_OVERRIDE_TARGETS,
repositories = [
"https://repo.maven.apache.org/maven2/",
"https://repo1.maven.org/maven2",
],
strict_visibility = True,
)
grpc_java_repositories()
... все http_archive
вызовы для репозиториев правил находятся в WORKSPACE
, и я хочу переместить их сюда, но это не сработало на все. Как, я получаю эту ошибку:
ERROR: Failed to load Starlark extension '@rules_python//python:pip.bzl'.
Cycle in the workspace file detected. This indicates that a repository is used prior to being defined.
The following chain of repository dependencies lead to the missing definition.
- @rules_python
This could either mean you have to add the '@rules_python' repository with a statement like `http_archive` in your WORKSPACE file (note that transitive dependencies are not added automatically), or move an existing definition earlier in your WORKSPACE file.
также добавление rules_ python тоже не помогает.