Как провалить сборку Базеля из-за сбоя правила?

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

Есть несколько вариантов сделать то, что вы хотите:

  1. Использовать htmlhint_test макрос для создания тестовой цели.
  2. Создайте настраиваемое правило, которое будет использовать двоичный файл 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

Другие вопросы по тегам