Additional fixes

This commit is contained in:
Kirilll Zaitsev 2015-08-30 01:18:45 +03:00
parent ce50e0fd4b
commit 6854d1343e
6 changed files with 87 additions and 89 deletions

View file

@ -178,8 +178,8 @@ func main() {
repo.POST("/watch", server.Subscribe) repo.POST("/watch", server.Subscribe)
repo.DELETE("/unwatch", server.Unsubscribe) repo.DELETE("/unwatch", server.Unsubscribe)
repo.GET("/builds", server.GetCommits) repo.GET("/builds", server.GetBuilds)
repo.GET("/builds/:number", server.GetCommit) repo.GET("/builds/:number", server.GetBuild)
repo.POST("/builds/:number", server.RunBuild) repo.POST("/builds/:number", server.RunBuild)
repo.DELETE("/builds/:number", server.KillBuild) repo.DELETE("/builds/:number", server.KillBuild)
repo.GET("/logs/:number/:task", server.GetLogs) repo.GET("/logs/:number/:task", server.GetLogs)
@ -191,7 +191,8 @@ func main() {
{ {
repoExternal.Use(server.SetRepo()) repoExternal.Use(server.SetRepo())
repoExternal.GET("/pr/:number", server.GetPullRequest) repoExternal.GET("/commits/:sha", server.GetCommit)
repoExternal.GET("/pulls/:number", server.GetPullRequest)
} }
} }
@ -249,7 +250,8 @@ func main() {
redirects.Use(server.SetDatastore(store)) redirects.Use(server.SetDatastore(store))
redirects.Use(server.SetRepo()) redirects.Use(server.SetRepo())
redirects.GET("/:owner/:name/commit/:sha", server.RedirectSha) redirects.GET("/:owner/:name/commits/:sha", server.RedirectSha)
redirects.GET("/:owner/:name/pulls/:number", server.RedirectPullRequest)
} }
r.SetHTMLTemplate(index()) r.SetHTMLTemplate(index())

View file

@ -199,8 +199,13 @@ func (r *Gitlab) Activate(user *common.User, repo *common.Repo, k *common.Keypai
droneUrl := fmt.Sprintf("%s://%s", uri.Scheme, uri.Host) droneUrl := fmt.Sprintf("%s://%s", uri.Scheme, uri.Host)
droneToken := uri.Query().Get("access_token") droneToken := uri.Query().Get("access_token")
ssl_verify := strconv.FormatBool(!r.SkipVerify)
return client.AddDroneService(id, map[string]string{"token": droneToken, "drone_url": droneUrl}) return client.AddDroneService(id, map[string]string{
"token": droneToken,
"drone_url": droneUrl,
"enable_ssl_verification": ssl_verify,
})
} }
// Deactivate removes a repository by removing all the post-commit hooks // Deactivate removes a repository by removing all the post-commit hooks

View file

@ -20,7 +20,7 @@ import (
// //
// GET /api/repos/:owner/:name/:number // GET /api/repos/:owner/:name/:number
// //
func GetCommit(c *gin.Context) { func GetBuild(c *gin.Context) {
store := ToDatastore(c) store := ToDatastore(c)
repo := ToRepo(c) repo := ToRepo(c)
num, err := strconv.Atoi(c.Params.ByName("number")) num, err := strconv.Atoi(c.Params.ByName("number"))
@ -41,12 +41,30 @@ func GetCommit(c *gin.Context) {
} }
} }
// GetCommits accepts a request to retrieve a list
// of commits from the datastore for the given repository.
//
// GET /api/repos/:owner/:name/builds
//
func GetBuilds(c *gin.Context) {
store := ToDatastore(c)
repo := ToRepo(c)
builds, err := store.BuildList(repo, 20, 0)
if err != nil {
c.Fail(404, err)
} else {
c.JSON(200, builds)
}
}
// GetPullRequest accepts a requests to retvie a pull request // GetPullRequest accepts a requests to retvie a pull request
// from the datastore for the given repository and // from the datastore for the given repository and
// pull request number // pull request number
// //
// GET /api/repos/:owner/:name/pr/: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) { func GetPullRequest(c *gin.Context) {
store := ToDatastore(c) store := ToDatastore(c)
repo := ToRepo(c) repo := ToRepo(c)
@ -75,20 +93,46 @@ func GetPullRequest(c *gin.Context) {
} }
} }
// GetCommits accepts a request to retrieve a list // GetCommit accepts a requests to retvie a sha and branch
// of commits from the datastore for the given repository. // from the datastore for the given repository and
// pull request number
// //
// GET /api/repos/:owner/:name/builds // GET /api/repos/:owner/:name/commits/:sha
// //
func GetCommits(c *gin.Context) { // 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) store := ToDatastore(c)
repo := ToRepo(c) repo := ToRepo(c)
builds, err := store.BuildList(repo, 20, 0) 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 { if err != nil {
c.Fail(404, err) c.Fail(404, err)
} else { } else {
c.JSON(200, builds) c.JSON(200, build)
} }
return
} }
// GetLogs accepts a request to retrieve logs from the // GetLogs accepts a request to retrieve logs from the

View file

@ -11,8 +11,10 @@ import (
// to job from the datastore for the given repository // to job from the datastore for the given repository
// and commit sha // and commit sha
// //
// GET /redirect/:owner/:name/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) { func RedirectSha(c *gin.Context) {
var branch string var branch string
@ -35,12 +37,15 @@ func RedirectSha(c *gin.Context) {
return return
} }
// RedirectSha accepts a request to retvie a redirect // RedirectPullRequest accepts a request to retvie a redirect
// to job from the datastore for the given repository // to job from the datastore for the given repository
// and pull request number // and pull request number
// //
// GET /redirect/:owner/:name/pr/: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) { func RedirectPullRequest(c *gin.Context) {
store := ToDatastore(c) store := ToDatastore(c)
repo := ToRepo(c) repo := ToRepo(c)

View file

@ -112,6 +112,21 @@ func (db *Buildstore) KillBuilds() error {
return err2 return err2
} }
const stmtBuildSelectPullRequestNumber = stmtBuildSelectList + `
WHERE build_repo_id = ?
AND build_pull_request_number = ?
ORDER BY build_number DESC
LIMIT 1
`
const stmtBuildSelectSha = stmtBuildSelectList + `
WHERE build_repo_id = ?
AND build_commit_sha = ?
AND build_commit_branch = ?
ORDER BY build_number DESC
LIMIT 1
`
// SQL query to retrieve the latest builds across all branches. // SQL query to retrieve the latest builds across all branches.
const buildListQuery = ` const buildListQuery = `
SELECT SELECT

View file

@ -596,79 +596,6 @@ WHERE build_repo_id = ?
AND build_number = ? AND build_number = ?
` `
const stmtBuildSelectPullRequestNumber = `
SELECT
build_id
,build_repo_id
,build_number
,build_status
,build_started
,build_finished
,build_commit_sha
,build_commit_ref
,build_commit_link
,build_commit_branch
,build_commit_message
,build_commit_timestamp
,build_commit_remote
,build_commit_author_login
,build_commit_author_email
,build_pull_request_number
,build_pull_request_title
,build_pull_request_link
,build_pull_request_base_sha
,build_pull_request_base_ref
,build_pull_request_base_link
,build_pull_request_base_branch
,build_pull_request_base_message
,build_pull_request_base_timestamp
,build_pull_request_base_remote
,build_pull_request_base_author_login
,build_pull_request_base_author_email
FROM builds
WHERE build_repo_id = ?
AND build_pull_request_number = ?
ORDER BY build_number DESC
LIMIT 1
`
const stmtBuildSelectSha = `
SELECT
build_id
,build_repo_id
,build_number
,build_status
,build_started
,build_finished
,build_commit_sha
,build_commit_ref
,build_commit_link
,build_commit_branch
,build_commit_message
,build_commit_timestamp
,build_commit_remote
,build_commit_author_login
,build_commit_author_email
,build_pull_request_number
,build_pull_request_title
,build_pull_request_link
,build_pull_request_base_sha
,build_pull_request_base_ref
,build_pull_request_base_link
,build_pull_request_base_branch
,build_pull_request_base_message
,build_pull_request_base_timestamp
,build_pull_request_base_remote
,build_pull_request_base_author_login
,build_pull_request_base_author_email
FROM builds
WHERE build_repo_id = ?
AND build_commit_sha = ?
AND build_commit_branch = ?
ORDER BY build_number DESC
LIMIT 1
`
const stmtBuildSelectCommitBranch = ` const stmtBuildSelectCommitBranch = `
SELECT SELECT
build_id build_id