Как провалить сборку Базеля из-за сбоя правила?
Я использую правила Bazel NodeJS в своем приложении. Цель состоит в том, чтобы просто запечатать набор файлов и завершить сборку, если линтинг не удался. Я вижу, что сборка прошла успешно, несмотря на ошибки lint. Вот часть моего
load("@npm//htmlhint:index.bzl", "htmlhint")
filegroup(
name = "htmldata",
srcs = glob(["**/*.html"]),
)
htmlhint(
name = "compile",
data = [
"htmlhint.conf",
"//:htmldata"
],
args = [
"--config",
"htmlhint.conf",
"$(locations //:htmldata)"
]
)
Сначала я загружаю библиотеку подсказок. Затем определите файловую группу для всех файлов HTML, которые я хочу линтировать. Затем используйте правило с его данными и аргументами.
Для запуска сборки я использую параметр по умолчанию через скрипт npm:
bazel build //...
1 ответ
Ваш файл сборки работает должным образом. К сожалению, он не делает того, что вы хотите, потому что, когда вы загружаете макрос из
@npm//htmlhint:index.bzl
он устанавливает двоичный файл nodejs, который является исполняемой целью, а это означает, что он будет создавать только исполняемые файлы + исполняемый файл при сборке. В этом случае сборка не запустит библиотеку.
Есть несколько вариантов сделать то, что вы хотите:
- Использовать
htmlhint_test
макрос для создания тестовой цели. - Создайте настраиваемое правило, которое будет использовать двоичный файл nodejs для создания некоторых артефактов. В этом случае вы можете принудительно завершить сборку.
Однако я предлагаю использовать первый подход, потому что если
htmlhint
это инструмент линтинга, он не даст никаких значимых результатов, и его лучше оставить как часть набора тестов.
Вот что вам нужно сделать, чтобы настроить цель в качестве тестовой.
diff --git a/BUILD.bazel b/BUILD.bazel
index 4e58ac5..3db5dbb 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -1,11 +1,11 @@
-load("@npm//htmlhint:index.bzl", "htmlhint")
+load("@npm//htmlhint:index.bzl", "htmlhint_test")
filegroup(
name = "htmldata",
srcs = glob(["**/*.html"]),
)
-htmlhint(
+htmlhint_test(
name = "compile",
data = [
"htmlhint.conf",
Тогда вы можете проверить это с помощью
bazel test //...
.
Если вы хотите увидеть результат, просто запустите свой
compile
цель с
bazel run //path/to:compile