Bazel очищает только подмножество кэшированных правил
В настоящее время я разрабатываю монорепозиторий с довольно большим файлом рабочей области.
Прямо сейчас я отмечаю, что одно из моих правил тестирования не перестраивает свои правила зависимостей, когда я обновляю один из своих тестов. Вот пример этого:
load("@npm//@grafana/toolkit:index.bzl", "grafana_toolkit")
load("@build_bazel_rules_nodejs//:index.bzl", "copy_to_bin")
APPLICATION_DEPS = glob(
[
# My updated test file is included in this glob
"src/**/*",
],
) + [
"my-config-files.json"
]
RULE_DEPS = [
"@npm//@grafana/data",
"@npm//@grafana/ui",
"@npm//emotion",
"@npm//fs-extra",
]
copy_to_bin(
name = "bin_files",
srcs = APPLICATION_DEPS,
)
grafana_toolkit(
name = "test",
args = [
"plugin:test",
],
chdir = package_name(),
data = RULE_DEPS + [
":bin_files",
],
)
Затем у меня есть файл с именем возможно
something.test.ts
. я бегу
bazel run :test
и мой тест может показать, что я потерпел неудачу, и я вижу проблему и исправляю ее. Проблема в том, что в следующий раз, когда я запускаю свой тест, я вижу из вывода, что он все еще не работает, потому что он запускает старый тест вместо нового.
Проблема
Способ, которым я обычно исправляю такого рода проблемы с устаревшими файлами, которые не обновляются, заключается в запуске . Проблема в том, что делать
bazel clean
значит я убираю ВСЕ. И это делает повторный запуск всех шагов сборки чертовски долгим. Мне интересно, есть ли способ указать, что я очищаю только подмножество кеша (возможно, только вывод моего
bin_files
правило, например). Таким образом, вместо того, чтобы начинать все сначала, я перестраиваю только то, что хочу перестроить.
1 ответ
На самом деле я нашел довольно быстрый и простой способ сделать то, о чем я изначально просил, - это просто перейти кbazel-bin
каталог и удалите вывод любого правила, которое я хочу повторно запустить. Так что, возможно, в этом случае я мог бы удалить вывод в моем каталоге bazel-bin, а затем запустить свойbin_files
правило снова.
С учетом сказанного, я думаю, что @ahumsky может быть прав в том, что если вам нужно это сделать, это, скорее всего, ошибка в чем-то другом. В моем случае я запускал сборную версию своего правила вместо тестовой. Таким образом, очистка подмножества моего кеша на самом деле не имела ничего общего с моей первоначальной проблемой.