mirror of https://github.com/sbt/sbt.git
85 lines
1.8 KiB
Scala
85 lines
1.8 KiB
Scala
import argonaut._
|
|
import argonaut.Argonaut._
|
|
import argonaut.ArgonautShapeless._
|
|
|
|
import sbt.Logger
|
|
|
|
object Travis {
|
|
|
|
final case class BuildId(value: Long) extends AnyVal
|
|
object BuildId {
|
|
implicit val decode: DecodeJson[BuildId] =
|
|
DecodeJson.LongDecodeJson.map(BuildId(_))
|
|
}
|
|
|
|
final case class JobId(value: Long) extends AnyVal
|
|
object JobId {
|
|
implicit val decode: DecodeJson[JobId] =
|
|
DecodeJson.LongDecodeJson.map(JobId(_))
|
|
}
|
|
|
|
final case class CommitId(value: Long) extends AnyVal
|
|
object CommitId {
|
|
implicit val decode: DecodeJson[CommitId] =
|
|
DecodeJson.LongDecodeJson.map(CommitId(_))
|
|
}
|
|
|
|
final case class Build(
|
|
id: BuildId,
|
|
job_ids: List[JobId],
|
|
pull_request: Boolean,
|
|
state: String,
|
|
commit_id: CommitId
|
|
)
|
|
|
|
final case class Builds(
|
|
builds: List[Build]
|
|
)
|
|
|
|
final case class Commit(
|
|
id: CommitId,
|
|
sha: String,
|
|
branch: String
|
|
)
|
|
|
|
final case class JobDetails(
|
|
state: String
|
|
)
|
|
|
|
final case class Job(
|
|
commit: Commit,
|
|
job: JobDetails
|
|
)
|
|
|
|
val extraHeaders = Seq(
|
|
"Accept" -> "application/vnd.travis-ci.2+json"
|
|
)
|
|
|
|
def builds(repo: String, log: Logger): List[Build] = {
|
|
|
|
val url = s"https://api.travis-ci.org/repos/$repo/builds"
|
|
val resp = HttpUtil.fetch(url, log, extraHeaders)
|
|
|
|
resp.decodeEither[Builds] match {
|
|
case Left(err) =>
|
|
sys.error(s"Error decoding response from $url: $err")
|
|
case Right(builds) =>
|
|
log.info(s"Got ${builds.builds.length} builds")
|
|
builds.builds
|
|
}
|
|
}
|
|
|
|
def job(id: JobId, log: Logger): Job = {
|
|
|
|
val url = s"https://api.travis-ci.org/jobs/${id.value}"
|
|
val resp = HttpUtil.fetch(url, log, extraHeaders)
|
|
|
|
resp.decodeEither[Job] match {
|
|
case Left(err) =>
|
|
sys.error(s"Error decoding response from $url: $err")
|
|
case Right(job) =>
|
|
job
|
|
}
|
|
}
|
|
|
|
} |