mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-11-27 04:11:03 +00:00
Merge pull request #1258 from bradrydzewski/master
parse deploy hooks into Builds for #1144
This commit is contained in:
commit
f235f0b413
5 changed files with 93 additions and 9 deletions
|
@ -43,15 +43,15 @@ func ShowIndex(c *gin.Context) {
|
|||
|
||||
// for each repository in the remote system we get
|
||||
// the intersection of those repostiories in Drone
|
||||
repos_, err := store.GetRepoListOf(c, repos)
|
||||
if err != nil {
|
||||
log.Errorf("Failure to get repository list for %s. %s.",
|
||||
user.Login, err)
|
||||
}
|
||||
// repos_, err := store.GetRepoListOf(c, repos)
|
||||
// if err != nil {
|
||||
// log.Errorf("Failure to get repository list for %s. %s.",
|
||||
// user.Login, err)
|
||||
// }
|
||||
|
||||
c.HTML(200, "repos.html", gin.H{
|
||||
"User": user,
|
||||
"Repos": repos_,
|
||||
"Repos": repos,
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -291,6 +291,8 @@ func (g *Github) Hook(r *http.Request) (*model.Repo, *model.Build, error) {
|
|||
return g.pullRequest(r)
|
||||
case "push":
|
||||
return g.push(r)
|
||||
case "deployment":
|
||||
return g.deployment(r)
|
||||
default:
|
||||
return nil, nil, nil
|
||||
}
|
||||
|
@ -403,6 +405,56 @@ func (g *Github) pullRequest(r *http.Request) (*model.Repo, *model.Build, error)
|
|||
return repo, build, nil
|
||||
}
|
||||
|
||||
func (g *Github) deployment(r *http.Request) (*model.Repo, *model.Build, error) {
|
||||
payload := GetPayload(r)
|
||||
hook := &deployHook{}
|
||||
|
||||
err := json.Unmarshal(payload, hook)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
repo := &model.Repo{}
|
||||
repo.Owner = hook.Repo.Owner.Login
|
||||
if len(repo.Owner) == 0 {
|
||||
repo.Owner = hook.Repo.Owner.Name
|
||||
}
|
||||
repo.Name = hook.Repo.Name
|
||||
repo.FullName = fmt.Sprintf("%s/%s", repo.Owner, repo.Name)
|
||||
repo.Link = hook.Repo.HTMLURL
|
||||
repo.IsPrivate = hook.Repo.Private
|
||||
repo.Clone = hook.Repo.CloneURL
|
||||
repo.Branch = hook.Repo.DefaultBranch
|
||||
|
||||
// ref can be
|
||||
// branch, tag, or sha
|
||||
|
||||
build := &model.Build{}
|
||||
build.Event = model.EventDeploy
|
||||
build.Commit = hook.Deployment.Sha
|
||||
build.Link = hook.Deployment.Url
|
||||
build.Message = hook.Deployment.Desc
|
||||
build.Avatar = hook.Sender.Avatar
|
||||
build.Author = hook.Sender.Login
|
||||
build.Ref = hook.Deployment.Ref
|
||||
build.Branch = hook.Deployment.Ref
|
||||
|
||||
// if the ref is a sha or short sha we need to manually
|
||||
// construct the ref.
|
||||
if strings.HasPrefix(build.Commit, build.Ref) || build.Commit == build.Ref {
|
||||
build.Branch = repo.Branch
|
||||
build.Ref = fmt.Sprintf("refs/heads/%s", repo.Branch)
|
||||
|
||||
}
|
||||
// if the ref is a branch we should make sure it has refs/heads prefix
|
||||
if !strings.HasPrefix(build.Ref, "refs/") { // branch or tag
|
||||
build.Ref = fmt.Sprintf("refs/heads/%s", build.Branch)
|
||||
|
||||
}
|
||||
|
||||
return repo, build, nil
|
||||
}
|
||||
|
||||
const (
|
||||
StatusPending = "pending"
|
||||
StatusSuccess = "success"
|
||||
|
|
|
@ -29,7 +29,39 @@ type pushHook struct {
|
|||
Sender struct {
|
||||
Login string `json:"login"`
|
||||
Avatar string `json:"avatar_url"`
|
||||
}
|
||||
} `json:"sender"`
|
||||
|
||||
Repo struct {
|
||||
Owner struct {
|
||||
Login string `json:"login"`
|
||||
Name string `json:"name"`
|
||||
} `json:"owner"`
|
||||
|
||||
Name string `json:"name"`
|
||||
FullName string `json:"full_name"`
|
||||
Language string `json:"language"`
|
||||
Private bool `json:"private"`
|
||||
HTMLURL string `json:"html_url"`
|
||||
CloneURL string `json:"clone_url"`
|
||||
DefaultBranch string `json:"default_branch"`
|
||||
} `json:"repository"`
|
||||
}
|
||||
|
||||
type deployHook struct {
|
||||
Deployment struct {
|
||||
ID int64 `json:"id"`
|
||||
Sha string `json:"sha"`
|
||||
Ref string `json:"ref"`
|
||||
Task string `json:"task"`
|
||||
Env string `json:"environment"`
|
||||
Url string `json:"url"`
|
||||
Desc string `json:"description"`
|
||||
} `json:"deployment"`
|
||||
|
||||
Sender struct {
|
||||
Login string `json:"login"`
|
||||
Avatar string `json:"avatar_url"`
|
||||
} `json:"sender"`
|
||||
|
||||
Repo struct {
|
||||
Owner struct {
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
border-radius: 0px;
|
||||
border-top: 1px solid #eceeef;
|
||||
text-decoration: none;
|
||||
color: 2b303b;
|
||||
color: #2b303b;
|
||||
.card-header
|
||||
background: #FFF;
|
||||
border: none;
|
||||
|
|
|
@ -88,7 +88,7 @@ input[type=range]:focus::-ms-fill-upper { background: #367ebd; }
|
|||
|
||||
.timeline { padding-left: 50px; position: relative; margin-top: 10px; margin-bottom: 40px; }
|
||||
|
||||
.timeline .card { display: flex; border: none; border-radius: 0px; border-top: 1px solid #eceeef; text-decoration: none; color: 2b303b; }
|
||||
.timeline .card { display: flex; border: none; border-radius: 0px; border-top: 1px solid #eceeef; text-decoration: none; color: #2b303b; }
|
||||
|
||||
.timeline .card .card-header { background: #FFF; border: none; padding: 0px; width: 50px; min-width: 50px; max-width: 50px; padding-top: 30px; }
|
||||
|
||||
|
|
Loading…
Reference in a new issue