Итак, вы написали плагин для Play … вы уверены, что он работает?
Недавно я подарил Deadbolt некоторую любовь, и как часть работы я добавил тестовое приложение для функционального тестирования. Это приложение, которое использует все функции Deadbolt и управляется HTTP-вызовами REST-Assured. Первоначально он был основан на Play 2.3.5, но при этом игнорируются поддерживаемые версии Play с 2.3.1 по 2.3.4. Кроме того, эти трудолюбивые люди из команды Play в Typesafe продолжают выпускать новые версии с полным набором функций.
Кроме того, требуется поддержка Scala 2.10.4 и 2.11.1, поэтому необходимо тестирование кросс-версии Scala.
Очевидно, что тестирование вашего плагина на одной версии Play недостаточно. Кажется, что какая-то непрерывная интеграция может помочь нам здесь …
Опираясь на Трэвис CI
Deadbolt основан на Travis CI , отличной платформе CI, бесплатной для проектов с открытым исходным кодом. Это запускает тесты и публикует версии снимков в Sonatype. Я не буду вдаваться в подробности, потому что в Cake Solutions уже есть отличное руководство. Вы можете найти руководство здесь: http://www.cakesolutions.net/teamblogs/publishing-artefacts-to-oss-sonatype-nexus-using-sbt-and-travis-ci-here…
Я внес некоторые изменения в скрипт сборки, потому что код плагина не находится на верхнем уровне хранилища; скорее он расположен на один уровень ниже. Репозиторий выглядит так:
deadbolt-2-java |-code # plugin code lives here |-test-app # the functional test application
В результате файл .travis.yml, который определяет сборку, выглядит следующим образом.
language: scala jdk: - openjdk6 scala: - 2.11.1 script: - cd code - sbt ++$TRAVIS_SCALA_VERSION +test - cd ../test-app - sbt ++$TRAVIS_SCALA_VERSION +test - cd ../code - sbt ++$TRAVIS_SCALA_VERSION +publish-local after_success: - ! '[[ $TRAVIS_BRANCH == "master" ]] && { sbt +publish; };' env: global: - secure: foo - secure: bar
Это устанавливает версию Java (люди злятся, когда я не предоставляю Java 6-совместимые версии), и определяет сценарий как процесс сборки. Обратите внимание на cd
команды, используемые для переключения между каталогом плагина и каталогом test-app.
Этот сценарий уже охватывает требование кросс-версии Scala — добавление к команде префикса с +, например +test
, выполнит эту команду для всех версий Scala, определенных в вашем build.sbt. Важно отметить, что хотя в .travis.yml определен только Scala 2.11.1, сам SBT позаботится об установке текущей версии сборки на основе build.sbt.
crossScalaVersions := Seq("2.11.1", "2.10.4")
Тестирование нескольких версий Play
Однако версия Play, используемая тестовым приложением, все еще жестко запрограммирована в 2.3.5 в test-app / project / plugins.sbt.
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.5")
К счастью, файлы .sbt — это не просто файлы конфигурации, а настоящий код. Это означает, что мы можем изменить версию Play в зависимости от свойств среды. Значение по умолчанию 2.3.5 дается, чтобы позволить тестам запускаться локально без необходимости устанавливать версию.
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % System.getProperty("playTestVersion", "2.3.5"))
Наконец, мы обновляем .travis.yml, чтобы воспользоваться этим.
language: scala jdk: - openjdk6 scala: - 2.11.1 script: - cd code - sbt ++$TRAVIS_SCALA_VERSION +test - cd ../test-app - sbt ++$TRAVIS_SCALA_VERSION -DplayTestVersion=2.3.1 +test - sbt ++$TRAVIS_SCALA_VERSION -DplayTestVersion=2.3.2 +test - sbt ++$TRAVIS_SCALA_VERSION -DplayTestVersion=2.3.3 +test - sbt ++$TRAVIS_SCALA_VERSION -DplayTestVersion=2.3.4 +test - sbt ++$TRAVIS_SCALA_VERSION -DplayTestVersion=2.3.5 +test - cd ../code - sbt ++$TRAVIS_SCALA_VERSION +publish-local after_success: - ! '[[ $TRAVIS_BRANCH == "master" ]] && { sbt +publish; };' env: global: - secure: foo - secure: bar
Это означает, что во время сборки выполняются следующие шаги:
- sbt ++ $ TRAVIS_SCALA_VERSION + test
- Запустите тесты плагинов для Scala 2.11.1
- Запустите тесты плагинов для Scala 2.10.4
- sbt ++ $ TRAVIS_SCALA_VERSION -DplayTestVersion = 2.3.1 + test
- Запустите функциональные тесты тестового приложения для Scala 2.11.1 и Play 2.3.1.
- Запустите функциональные тесты тестового приложения для Scala 2.10.4 и Play 2.3.1.
- sbt ++ $ TRAVIS_SCALA_VERSION -DplayTestVersion = 2.3.2 + test
- Запустите функциональные тесты тестового приложения для Scala 2.11.1 и Play 2.3.2.
- Запустите функциональные тесты тестового приложения для Scala 2.10.4 и Play 2.3.2.
- sbt ++ $ TRAVIS_SCALA_VERSION -DplayTestVersion = 2.3.3 + test
- Запустите функциональные тесты тестового приложения для Scala 2.11.1 и Play 2.3.3.
- Запустите функциональные тесты тестового приложения для Scala 2.10.4 и Play 2.3.3.
- sbt ++ $ TRAVIS_SCALA_VERSION -DplayTestVersion = 2.3.4 + test
- Запустите функциональные тесты тестового приложения для Scala 2.11.1 и Play 2.3.4.
- Запустите функциональные тесты тестового приложения для Scala 2.10.4 и Play 2.3.4.
- sbt ++ $ TRAVIS_SCALA_VERSION -DplayTestVersion = 2.3.5 + test
- Запустите функциональные тесты тестового приложения для Scala 2.11.1 и Play 2.3.5.
- Запустите функциональные тесты тестового приложения для Scala 2.10.4 и Play 2.3.5.
Если все эти шаги пройдены, after_success
будет выполнена ветка сценария сборки. Если какой-либо из этапов завершится неудачно, сборка будет нарушена и снимки не будут опубликованы
Вы можете взглянуть на хранилище, используя этот подход здесь: https://github.com/schaloner/deadbolt-2-java .
Полученная сборка Travis доступна здесь: https://travis-ci.org/schaloner/deadbolt-2-java .