sbt: вызов тестов после других задач - PullRequest
0 голосов
/ 06 июня 2019

У меня многопроектная сборка, и я хочу запустить тесты после запуска двух контейнеров Docker. Это мое пользовательское задание:

runTestsWithDocker := Def.taskDyn {
  startDirectoryServer.value
  val containerId = buildOrStartTestDatabase.value
  Def.task {
    (test in Test).value
    sLog.value.info("running inside dynamic task")
    containerId
  }
}.value

Как видно из вывода ниже, контейнеры Docker запускаются, и сообщение журнала записывается из динамической задачи. Однако тестовых выходных данных нет (и сборка выполняется слишком быстро для запуска тестов).

> runTestsWithDocker
[info] logging into ECR registry 123456789012.dkr.ecr.us-east-1.amazonaws.com
[info] checking repository for image container1:1.2.3-1200
[info] successfully logged-in to ECR registry 123456789012.dkr.ecr.us-east-1.amazonaws.com
[info] DockerSupport: pulling 123456789012.dkr.ecr.us-east-1.amazonaws.com/container2:latest
[info] DockerSupport: docker run -d -p 389:389 123456789012.dkr.ecr.us-east-1.amazonaws.com/container2:latest
[info] container ID: 80d16a268c6e13dd810f8c271ca8778fc8eaa6835f2d0640fa62d032ff052345
[info] image already exists; no need to build
[info] DockerSupport: pulling 123456789012.dkr.ecr.us-east-1.amazonaws.com/container1:1.2.3-1200
[info] DockerSupport: docker run -d -p 5432:5432 123456789012.dkr.ecr.us-east-1.amazonaws.com/container1:1.2.3-1200
[info] container ID: 2de559b0737e69d61b1234567890123bd123456789012d382ba8ffa40e0480cf
[info] Updating {file:/home/ubuntu/Workspace/mybuild/}mybuild...
[info] Resolving jline#jline;2.12.1 ...
[info] Done updating.
[info] running inside dynamic task
[success] Total time: 2 s, completed Jun 5, 2019 9:05:20 PM

Я предполагаю, что моя область действия неверна, и что мне нужно сослаться на test в какой-то другой области, но я понятия не имею, что это может быть (я пробовал Compile и ThisBuild как случайные удары в темноте).

Я также видел (test in Test).result.value из других вопросов в SO. Думая, что, возможно, задача test выполняла что-то нестандартное, я попробовал это сделать, но с тем же (не) результатом.

Наконец, я использую SBT 0.13.16, поэтому любой убедительный аргумент (как в сообщении об ошибке), что это проблема с этой версией, заставил бы меня обновиться раньше, чем планировалось (моя текущая цель - реорганизовать сборку затем обновить).


Обновление: вот вывод inspect. Он не показывает зависимость от test, но я предполагаю, что это потому, что он вызывается из динамической задачи.

> inspect runTestsWithDocker
[info] Task: java.lang.String
[info] Description:
[info]  Runs the test suite, after starting the LDAP server and running/initializing the test database
[info] Provided by:
[info]  {file:/home/ubuntu/Workspace/mybuild/}mybuild/*:runTestsWithDocker
[info] Defined at:
[info]  /home/ubuntu/Workspace/mybuild/build.sbt:597
[info] Dependencies:
[info]  mybuild/*:buildOrStartTestDatabase
[info]  mybuild/*:startDirectoryServer
[info]  mybuild/*:settingsData
[info] Reverse dependencies:
[info]  mybuild/*:publishTestDatabase
[info] Delegates:
[info]  mybuild/*:runTestsWithDocker
[info]  {.}/*:runTestsWithDocker
[info]  */*:runTestsWithDocker

Обновление: если я указываю один подпроект, он корректно выполняет задачи в этом подпроекте.

runTestsWithDocker := Def.taskDyn {
  startDirectoryServer.value
  val containerId = buildOrStartTestDatabase.value
  Def.task {
    (test in (subproject,Test)).result.value
    containerId
  }
}.value

Похоже, что корневой проект не агрегирует? Мы полагаемся на проект «root по умолчанию», поэтому я думаю, что моим следующим изменением будет создание явного корневого проекта.

1 Ответ

0 голосов
/ 10 июня 2019

Оказалось, что корневой проект по умолчанию на самом деле не "объединяет все другие проекты в сборке". После того, как я создал этот проект и явно агрегировал другие подпроекты под ним, я смог указать свою задачу следующим образом:

runTestsWithDocker := Def.taskDyn {
  startDirectoryServer.value
  val containerId = buildOrStartTestDatabase.value
  Def.task {
    (test in (root,Test)).result.value
    containerId
  }
}.value

: пожимают плечами:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...