diff --git a/src/main/resources/update/gitbucket-ci_1.7.0.xml b/src/main/resources/update/gitbucket-ci_1.7.0.xml new file mode 100644 index 0000000..fc752c7 --- /dev/null +++ b/src/main/resources/update/gitbucket-ci_1.7.0.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/src/main/scala/Plugin.scala b/src/main/scala/Plugin.scala index 927afac..8e37bf7 100644 --- a/src/main/scala/Plugin.scala +++ b/src/main/scala/Plugin.scala @@ -54,7 +54,9 @@ class Plugin extends gitbucket.core.plugin.Plugin with CIService with AccountSer new Version("1.4.0", new LiquibaseMigration("update/gitbucket-ci_1.4.0.xml")), new Version("1.5.0", - new LiquibaseMigration("update/gitbucket-ci_1.5.0.xml")) + new LiquibaseMigration("update/gitbucket-ci_1.5.0.xml")), + new Version("1.6.0"), + new Version("1.7.0", new LiquibaseMigration("update/gitbucket-ci_1.7.0.xml")) ) override val assetsMappings = Seq("/ci" -> "/gitbucket/ci/assets") diff --git a/src/main/scala/io/github/gitbucket/ci/controller/CIController.scala b/src/main/scala/io/github/gitbucket/ci/controller/CIController.scala index 92c1a12..bf3cd63 100644 --- a/src/main/scala/io/github/gitbucket/ci/controller/CIController.scala +++ b/src/main/scala/io/github/gitbucket/ci/controller/CIController.scala @@ -1,6 +1,6 @@ package io.github.gitbucket.ci.controller -import java.io.FileInputStream +import java.io.{File, FileInputStream} import gitbucket.core.controller.ControllerBase import gitbucket.core.service.RepositoryService.RepositoryInfo @@ -48,7 +48,8 @@ object CIController { buildFile: Option[String], notification: Boolean, skipWords: Option[String], - runWords: Option[String] + runWords: Option[String], + pagesDir: Option[String] ) case class CISystemConfigForm( @@ -70,7 +71,8 @@ class CIController extends ControllerBase "buildFile" -> trim(label("Build file", optionalRequired(_("buildType") == Seq("file"), text()))), "notification" -> trim(label("Notification", boolean())), "skipWords" -> trim(label("Skip words", optional(text()))), - "runWords" -> trim(label("Run words", optional(text()))) + "runWords" -> trim(label("Run words", optional(text()))), + "pagesDir" -> trim(label("Pages Directory", optional(text()))) )(BuildConfigForm.apply) val ciSystemConfigForm = mapping( @@ -215,6 +217,20 @@ class CIController extends ControllerBase workspace(repository, buildNumber, path) }) + get("/:owner/:repository/ci-pages/*")(referrersOnly{ repository => + val path = multiParams("splat").head + (for( config <- loadCIConfig(repository.owner, repository.name); + buildNumber <- getLatestBuildNumberForDefaultBranch(repository); + pagesDir <- config.pagesDir + ) yield { + val buildDir = CIUtils.getBuildDir(repository.owner, repository.name, buildNumber) + val workspaceDir = new File(buildDir, "workspace") + new File(new File(workspaceDir, pagesDir), path) + }).getOrElse{ + NotFound() + } + }) + private def workspace(repository: RepositoryInfo, buildNumber: Int, path: String) = { val buildNumber = params("buildNumber").toInt val path = multiParams("splat").headOption.getOrElse("") @@ -324,7 +340,8 @@ class CIController extends ControllerBase }), form.notification, form.skipWords, - form.runWords + form.runWords, + form.pagesDir ) )) } else { diff --git a/src/main/scala/io/github/gitbucket/ci/manager/BuildJobThread.scala b/src/main/scala/io/github/gitbucket/ci/manager/BuildJobThread.scala index 8541161..4b92960 100644 --- a/src/main/scala/io/github/gitbucket/ci/manager/BuildJobThread.scala +++ b/src/main/scala/io/github/gitbucket/ci/manager/BuildJobThread.scala @@ -10,7 +10,7 @@ import gitbucket.core.service.SystemSettingsService.SystemSettings import gitbucket.core.service.{AccountService, CommitStatusService, RepositoryService, SystemSettingsService} import gitbucket.core.servlet.Database import gitbucket.core.util.Directory.getRepositoryDir -import gitbucket.core.util.Mailer +import gitbucket.core.util.{Directory, Mailer} import gitbucket.core.util.SyntaxSugars.using import io.github.gitbucket.ci.model.CIResult import io.github.gitbucket.ci.service._ diff --git a/src/main/scala/io/github/gitbucket/ci/model/CIConfig.scala b/src/main/scala/io/github/gitbucket/ci/model/CIConfig.scala index d18a05b..18255e3 100644 --- a/src/main/scala/io/github/gitbucket/ci/model/CIConfig.scala +++ b/src/main/scala/io/github/gitbucket/ci/model/CIConfig.scala @@ -14,7 +14,8 @@ trait CIConfigComponent { self: gitbucket.core.model.Profile => val notification = column[Boolean]("NOTIFICATION") val skipWords = column[String]("SKIP_WORDS") val runWords = column[String]("RUN_WORDS") - def * = (userName, repositoryName, buildType, buildScript, notification, skipWords.?, runWords.?) <> (CIConfig.tupled, CIConfig.unapply) + val pagesDir = column[String]("PAGES_DIR") + def * = (userName, repositoryName, buildType, buildScript, notification, skipWords.?, runWords.?, pagesDir.?) <> (CIConfig.tupled, CIConfig.unapply) } } @@ -25,7 +26,8 @@ case class CIConfig( buildScript: String, notification: Boolean, skipWords: Option[String], - runWords: Option[String] + runWords: Option[String], + pagesDir: Option[String] ){ lazy val skipWordsSeq: Seq[String] = skipWords.map(_.split(",").map(_.trim).toSeq).getOrElse(Nil) lazy val runWordsSeq: Seq[String] = runWords.map(_.split(",").map(_.trim).toSeq).getOrElse(Nil) diff --git a/src/main/scala/io/github/gitbucket/ci/service/CIService.scala b/src/main/scala/io/github/gitbucket/ci/service/CIService.scala index 89c26e1..514536d 100644 --- a/src/main/scala/io/github/gitbucket/ci/service/CIService.scala +++ b/src/main/scala/io/github/gitbucket/ci/service/CIService.scala @@ -5,9 +5,11 @@ import io.github.gitbucket.ci.manager.BuildManager import io.github.gitbucket.ci.model._ import io.github.gitbucket.ci.model.Profile._ import gitbucket.core.model.Profile.profile.blockingApi._ +import gitbucket.core.service.RepositoryService.RepositoryInfo import gitbucket.core.service.{AccountService, RepositoryService} import io.github.gitbucket.ci.util.CIUtils import org.apache.commons.io.FileUtils + import scala.collection.JavaConverters._ case class BuildJob( @@ -103,6 +105,12 @@ trait CIService { self: AccountService with RepositoryService => } } + def getLatestBuildNumberForDefaultBranch(repository: RepositoryInfo)(implicit s: Session): Option[Int] = { + CIResults.filter { t => + (t.userName === repository.owner.bind) && (t.repositoryName === repository.name.bind) && (t.buildBranch === repository.repository.defaultBranch.bind) + }.sortBy(_.buildNumber.desc).map(_.buildNumber).firstOption + } + def runBuild(userName: String, repositoryName: String, buildUserName: String, buildRepositoryName: String, buildBranch: String, sha: String, commitMessage: String, commitUserName: String, commitMailAddress: String, pullRequestId: Option[Int], buildAuthor: Account, config: CIConfig)(implicit s: Session): Unit = { diff --git a/src/main/twirl/gitbucket/ci/config.scala.html b/src/main/twirl/gitbucket/ci/config.scala.html index 9343be2..f612ac5 100644 --- a/src/main/twirl/gitbucket/ci/config.scala.html +++ b/src/main/twirl/gitbucket/ci/config.scala.html @@ -53,6 +53,10 @@ (comma-separated words) +
+ + +