Как публиковать только когда на главной ветке под Travis и sbt 0.13
Я использую Travis для непрерывной сборки и интеграции.
after_success:
- sbt publish
Пока мы хотим, чтобы Тревис построил все наши ветки и набрал запросы, мы хотим только publish
, когда на ветке master
.
publishTo <<= version { (v: String) =>
val nexus = s"asdf"
/* Don't let Travis publish when building pull requests.
* $TRAVIS_PULL_REQUEST == "false" if it not a pull request. So we wan't publishTo to be
* None when TRAVIS_PULL_REQUEST != false.
*/
if(Try(sys.env("TRAVIS_PULL_REQUEST")).getOrElse("false") != "false")
None
/* Don't let Travis publish except when building master. */
if(Try(sys.env("TRAVIS_BRANCH")).map(_ != "master").getOrElse(false))
None
else if(v.trim.endsWith("SNAPSHOT"))
Some("snapshots" at nexus + "snapshots")
// don't let Travis publish releases, either
else if(Try(sys.env("TRAVIS")).getOrElse("false") == "true")
None
else
Some("releases" at nexus + "releases")
})
Проблема с этим подходом заключается в том, что Travis дважды компилирует ветки, потому что он не публикует публикации на самом последнем этапе.
Как может Тревис полностью предотвратить запуск sbt publish
, когда на ветке не master
?
Ответы
Ответ 1
Я сделаю для него новую задачу и назову это в Travis.
val publishMasterOnTravis = taskKey[Unit]("publish master on travis")
def publishMasterOnTravisImpl = Def.taskDyn {
import scala.util.Try
val travis = Try(sys.env("TRAVIS")).getOrElse("false") == "true"
val pr = Try(sys.env("TRAVIS_PULL_REQUEST")).getOrElse("false") == "true"
val branch = Try(sys.env("TRAVIS_BRANCH")).getOrElse("??")
val snapshot = version.value.trim.endsWith("SNAPSHOT")
(travis, pr, branch, snapshot) match {
case (true, false, "master", true) => publish
case _ => Def.task ()
}
}
publishMasterOnTravis := publishMasterOnTravisImpl.value
publishTo := {
val nexus = s"asdf"
if (version.value.trim.endsWith("SNAPSHOT"))
Some("snapshots" at nexus + "snapshots")
else
Some("releases" at nexus + "releases")
}
Ключ здесь используется Def.taskDyn
, который позволяет мне называть publish
в позиции хвоста, не зависимо от него. publishTo
будет простой логикой.
Ответ 2
Вы могли бы рассмотреть возможность использования этого вне вашего публикации script:
after_success:
- test $TRAVIS_PULL_REQUEST == "false" && test $TRAVIS_BRANCH == "master" && sbt publish