mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2025-01-03 14:18:42 +00:00
Move gitlab routes to gitlab group
This commit is contained in:
parent
9ded21d792
commit
654dd31cbd
4 changed files with 155 additions and 158 deletions
|
@ -185,15 +185,6 @@ func main() {
|
||||||
repo.GET("/logs/:number/:task", server.GetLogs)
|
repo.GET("/logs/:number/:task", server.GetLogs)
|
||||||
// repo.POST("/status/:number", server.PostBuildStatus)
|
// repo.POST("/status/:number", server.PostBuildStatus)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Routes for external services
|
|
||||||
repoExternal := repos.Group("")
|
|
||||||
{
|
|
||||||
repoExternal.Use(server.SetRepo())
|
|
||||||
|
|
||||||
repoExternal.GET("/commits/:sha", server.GetCommit)
|
|
||||||
repoExternal.GET("/pulls/:number", server.GetPullRequest)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
badges := api.Group("/badges/:owner/:name")
|
badges := api.Group("/badges/:owner/:name")
|
||||||
|
@ -245,13 +236,19 @@ func main() {
|
||||||
auth.POST("", server.GetLogin)
|
auth.POST("", server.GetLogin)
|
||||||
}
|
}
|
||||||
|
|
||||||
redirects := r.Group("/redirect")
|
gitlab := r.Group("/gitlab/:owner/:name")
|
||||||
{
|
{
|
||||||
redirects.Use(server.SetDatastore(store))
|
gitlab.Use(server.SetDatastore(store))
|
||||||
redirects.Use(server.SetRepo())
|
gitlab.Use(server.SetRepo())
|
||||||
|
|
||||||
redirects.GET("/:owner/:name/commits/:sha", server.RedirectSha)
|
gitlab.GET("/commits/:sha", server.GetCommit)
|
||||||
redirects.GET("/:owner/:name/pulls/:number", server.RedirectPullRequest)
|
gitlab.GET("/pulls/:number", server.GetPullRequest)
|
||||||
|
|
||||||
|
redirects := gitlab.Group("/redirect")
|
||||||
|
{
|
||||||
|
redirects.GET("/commits/:sha", server.RedirectSha)
|
||||||
|
redirects.GET("/pulls/:number", server.RedirectPullRequest)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
r.SetHTMLTemplate(index())
|
r.SetHTMLTemplate(index())
|
||||||
|
|
|
@ -57,84 +57,6 @@ func GetBuilds(c *gin.Context) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPullRequest accepts a requests to retvie a pull request
|
|
||||||
// from the datastore for the given repository and
|
|
||||||
// pull request number
|
|
||||||
//
|
|
||||||
// GET /api/repos/:owner/:name/pulls/:number
|
|
||||||
//
|
|
||||||
// REASON: It required by GitLab, becuase we get only
|
|
||||||
// sha and ref name, but drone uses build numbers
|
|
||||||
func GetPullRequest(c *gin.Context) {
|
|
||||||
store := ToDatastore(c)
|
|
||||||
repo := ToRepo(c)
|
|
||||||
|
|
||||||
// get the token and verify the hook is authorized
|
|
||||||
if c.Request.FormValue("access_token") != hash(repo.FullName, repo.Hash) {
|
|
||||||
c.AbortWithStatus(403)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
num, err := strconv.Atoi(c.Params.ByName("number"))
|
|
||||||
if err != nil {
|
|
||||||
c.Fail(400, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
build, err := store.BuildPullRequestNumber(repo, num)
|
|
||||||
if err != nil {
|
|
||||||
c.Fail(404, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
build.Jobs, err = store.JobList(build)
|
|
||||||
if err != nil {
|
|
||||||
c.Fail(404, err)
|
|
||||||
} else {
|
|
||||||
c.JSON(200, build)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetCommit accepts a requests to retvie a sha and branch
|
|
||||||
// from the datastore for the given repository and
|
|
||||||
// pull request number
|
|
||||||
//
|
|
||||||
// GET /api/repos/:owner/:name/commits/:sha
|
|
||||||
//
|
|
||||||
// REASON: It required by GitLab, becuase we get only
|
|
||||||
// sha and ref name, but drone uses build numbers
|
|
||||||
func GetCommit(c *gin.Context) {
|
|
||||||
var branch string
|
|
||||||
|
|
||||||
store := ToDatastore(c)
|
|
||||||
repo := ToRepo(c)
|
|
||||||
sha := c.Params.ByName("sha")
|
|
||||||
|
|
||||||
// get the token and verify the hook is authorized
|
|
||||||
if c.Request.FormValue("access_token") != hash(repo.FullName, repo.Hash) {
|
|
||||||
c.AbortWithStatus(403)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
branch = c.Request.FormValue("branch")
|
|
||||||
if branch == "" {
|
|
||||||
branch = repo.Branch
|
|
||||||
}
|
|
||||||
|
|
||||||
build, err := store.BuildSha(repo, sha, branch)
|
|
||||||
if err != nil {
|
|
||||||
c.Fail(404, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
build.Jobs, err = store.JobList(build)
|
|
||||||
if err != nil {
|
|
||||||
c.Fail(404, err)
|
|
||||||
} else {
|
|
||||||
c.JSON(200, build)
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetLogs accepts a request to retrieve logs from the
|
// GetLogs accepts a request to retrieve logs from the
|
||||||
// datastore for the given repository, build and task
|
// datastore for the given repository, build and task
|
||||||
// number.
|
// number.
|
||||||
|
|
144
pkg/server/gitlab.go
Normal file
144
pkg/server/gitlab.go
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
package server
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/drone/drone/Godeps/_workspace/src/github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
// RedirectSha accepts a request to retvie a redirect
|
||||||
|
// to job from the datastore for the given repository
|
||||||
|
// and commit sha
|
||||||
|
//
|
||||||
|
// GET /gitlab/:owner/:name/redirect/commits/:sha
|
||||||
|
//
|
||||||
|
// REASON: It required by GitLab, becuase we get only
|
||||||
|
// sha and ref name, but drone uses build numbers
|
||||||
|
func RedirectSha(c *gin.Context) {
|
||||||
|
var branch string
|
||||||
|
|
||||||
|
store := ToDatastore(c)
|
||||||
|
repo := ToRepo(c)
|
||||||
|
sha := c.Params.ByName("sha")
|
||||||
|
|
||||||
|
branch = c.Request.FormValue("branch")
|
||||||
|
if branch == "" {
|
||||||
|
branch = repo.Branch
|
||||||
|
}
|
||||||
|
|
||||||
|
build, err := store.BuildSha(repo, sha, branch)
|
||||||
|
if err != nil {
|
||||||
|
c.Redirect(301, "/")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.Redirect(301, fmt.Sprintf("/%s/%s/%d", repo.Owner, repo.Name, build.ID))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// RedirectPullRequest accepts a request to retvie a redirect
|
||||||
|
// to job from the datastore for the given repository
|
||||||
|
// and pull request number
|
||||||
|
//
|
||||||
|
// GET /gitlab/:owner/:name/redirect/pulls/:number
|
||||||
|
//
|
||||||
|
// REASON: It required by GitLab, because we get only
|
||||||
|
// internal merge request id/ref/sha, but drone uses
|
||||||
|
// build numbers
|
||||||
|
func RedirectPullRequest(c *gin.Context) {
|
||||||
|
store := ToDatastore(c)
|
||||||
|
repo := ToRepo(c)
|
||||||
|
num, err := strconv.Atoi(c.Params.ByName("number"))
|
||||||
|
if err != nil {
|
||||||
|
c.Redirect(301, "/")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
build, err := store.BuildPullRequestNumber(repo, num)
|
||||||
|
if err != nil {
|
||||||
|
c.Redirect(301, "/")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.Redirect(301, fmt.Sprintf("/%s/%s/%d", repo.Owner, repo.Name, build.ID))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPullRequest accepts a requests to retvie a pull request
|
||||||
|
// from the datastore for the given repository and
|
||||||
|
// pull request number
|
||||||
|
//
|
||||||
|
// GET /gitlab/:owner/:name/pulls/:number
|
||||||
|
//
|
||||||
|
// REASON: It required by GitLab, becuase we get only
|
||||||
|
// sha and ref name, but drone uses build numbers
|
||||||
|
func GetPullRequest(c *gin.Context) {
|
||||||
|
store := ToDatastore(c)
|
||||||
|
repo := ToRepo(c)
|
||||||
|
|
||||||
|
// get the token and verify the hook is authorized
|
||||||
|
if c.Request.FormValue("access_token") != hash(repo.FullName, repo.Hash) {
|
||||||
|
c.AbortWithStatus(403)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
num, err := strconv.Atoi(c.Params.ByName("number"))
|
||||||
|
if err != nil {
|
||||||
|
c.Fail(400, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
build, err := store.BuildPullRequestNumber(repo, num)
|
||||||
|
if err != nil {
|
||||||
|
c.Fail(404, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
build.Jobs, err = store.JobList(build)
|
||||||
|
if err != nil {
|
||||||
|
c.Fail(404, err)
|
||||||
|
} else {
|
||||||
|
c.JSON(200, build)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCommit accepts a requests to retvie a sha and branch
|
||||||
|
// from the datastore for the given repository and
|
||||||
|
// pull request number
|
||||||
|
//
|
||||||
|
// GET /gitlab/:owner/:name/commits/:sha
|
||||||
|
//
|
||||||
|
// REASON: It required by GitLab, becuase we get only
|
||||||
|
// sha and ref name, but drone uses build numbers
|
||||||
|
func GetCommit(c *gin.Context) {
|
||||||
|
var branch string
|
||||||
|
|
||||||
|
store := ToDatastore(c)
|
||||||
|
repo := ToRepo(c)
|
||||||
|
sha := c.Params.ByName("sha")
|
||||||
|
|
||||||
|
// get the token and verify the hook is authorized
|
||||||
|
if c.Request.FormValue("access_token") != hash(repo.FullName, repo.Hash) {
|
||||||
|
c.AbortWithStatus(403)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
branch = c.Request.FormValue("branch")
|
||||||
|
if branch == "" {
|
||||||
|
branch = repo.Branch
|
||||||
|
}
|
||||||
|
|
||||||
|
build, err := store.BuildSha(repo, sha, branch)
|
||||||
|
if err != nil {
|
||||||
|
c.Fail(404, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
build.Jobs, err = store.JobList(build)
|
||||||
|
if err != nil {
|
||||||
|
c.Fail(404, err)
|
||||||
|
} else {
|
||||||
|
c.JSON(200, build)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
|
@ -1,66 +0,0 @@
|
||||||
package server
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"strconv"
|
|
||||||
|
|
||||||
"github.com/drone/drone/Godeps/_workspace/src/github.com/gin-gonic/gin"
|
|
||||||
)
|
|
||||||
|
|
||||||
// RedirectSha accepts a request to retvie a redirect
|
|
||||||
// to job from the datastore for the given repository
|
|
||||||
// and commit sha
|
|
||||||
//
|
|
||||||
// GET /redirect/:owner/:name/commits/:sha
|
|
||||||
//
|
|
||||||
// REASON: It required by GitLab, becuase we get only
|
|
||||||
// sha and ref name, but drone uses build numbers
|
|
||||||
func RedirectSha(c *gin.Context) {
|
|
||||||
var branch string
|
|
||||||
|
|
||||||
store := ToDatastore(c)
|
|
||||||
repo := ToRepo(c)
|
|
||||||
sha := c.Params.ByName("sha")
|
|
||||||
|
|
||||||
branch = c.Request.FormValue("branch")
|
|
||||||
if branch == "" {
|
|
||||||
branch = repo.Branch
|
|
||||||
}
|
|
||||||
|
|
||||||
build, err := store.BuildSha(repo, sha, branch)
|
|
||||||
if err != nil {
|
|
||||||
c.Redirect(301, "/")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
c.Redirect(301, fmt.Sprintf("/%s/%s/%d", repo.Owner, repo.Name, build.ID))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// RedirectPullRequest accepts a request to retvie a redirect
|
|
||||||
// to job from the datastore for the given repository
|
|
||||||
// and pull request number
|
|
||||||
//
|
|
||||||
// GET /redirect/:owner/:name/pulls/:number
|
|
||||||
//
|
|
||||||
// REASON: It required by GitLab, because we get only
|
|
||||||
// internal merge request id/ref/sha, but drone uses
|
|
||||||
// build numbers
|
|
||||||
func RedirectPullRequest(c *gin.Context) {
|
|
||||||
store := ToDatastore(c)
|
|
||||||
repo := ToRepo(c)
|
|
||||||
num, err := strconv.Atoi(c.Params.ByName("number"))
|
|
||||||
if err != nil {
|
|
||||||
c.Redirect(301, "/")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
build, err := store.BuildPullRequestNumber(repo, num)
|
|
||||||
if err != nil {
|
|
||||||
c.Redirect(301, "/")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
c.Redirect(301, fmt.Sprintf("/%s/%s/%d", repo.Owner, repo.Name, build.ID))
|
|
||||||
return
|
|
||||||
}
|
|
Loading…
Reference in a new issue