From c4a608b38c4609be62ced84c7691bf4c6da40d73 Mon Sep 17 00:00:00 2001 From: Kirilll Zaycev Date: Mon, 1 Feb 2016 01:55:59 +0300 Subject: [PATCH 1/4] Added gitlab repository avatars --- remote/gitlab/client/types.go | 1 + remote/gitlab/gitlab.go | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/remote/gitlab/client/types.go b/remote/gitlab/client/types.go index d89311a27..dbd3db977 100644 --- a/remote/gitlab/client/types.go +++ b/remote/gitlab/client/types.go @@ -48,6 +48,7 @@ type Project struct { SshRepoUrl string `json:"ssh_url_to_repo"` HttpRepoUrl string `json:"http_url_to_repo"` Url string `json:"web_url"` + AvatarUrl string `json:"avatar_url"` Permissions *Permissions `json:"permissions,omitempty"` } diff --git a/remote/gitlab/gitlab.go b/remote/gitlab/gitlab.go index 026a63de1..faf473c95 100644 --- a/remote/gitlab/gitlab.go +++ b/remote/gitlab/gitlab.go @@ -173,15 +173,20 @@ func (g *Gitlab) Repos(u *model.User) ([]*model.RepoLite, error) { var parts = strings.Split(repo.PathWithNamespace, "/") var owner = parts[0] var name = parts[1] + var avatar = repo.AvatarUrl + + if len(avatar) != 0 && !strings.HasPrefix(avatar, "http") { + avatar = fmt.Sprintf("%s/%s", g.URL, avatar) + } repos = append(repos, &model.RepoLite{ Owner: owner, Name: name, FullName: repo.PathWithNamespace, + Avatar: avatar, }) - - // TODO: add repo.AvatarUrl } + return repos, err } @@ -201,7 +206,7 @@ func (g *Gitlab) Perm(u *model.User, owner, name string) (*model.Perm, error) { // repo owner is granted full access if repo.Owner != nil && repo.Owner.Username == u.Login { - return &model.Perm{true, true, true}, nil + return &model.Perm{true, true, true}, nil } // check permission for current user From 1dbefc5281a364e3ce1c7af573fa7649fee1357c Mon Sep 17 00:00:00 2001 From: Kirilll Zaycev Date: Mon, 1 Feb 2016 02:00:47 +0300 Subject: [PATCH 2/4] Added dummy image to repos list --- static/images/dummy.png | Bin 0 -> 11083 bytes template/amber/repos.amber | 5 ++++- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 static/images/dummy.png diff --git a/static/images/dummy.png b/static/images/dummy.png new file mode 100644 index 0000000000000000000000000000000000000000..f8b12dcd8df58c014e976d63b280cbf867c2ff3e GIT binary patch literal 11083 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 literal 0 HcmV?d00001 diff --git a/template/amber/repos.amber b/template/amber/repos.amber index 37081942d..86af56eb7 100644 --- a/template/amber/repos.amber +++ b/template/amber/repos.amber @@ -20,7 +20,10 @@ block content div.col-sm-4 a.card[href="/"+$repo.FullName] div.card-header - img.avatar[src=$repo.Avatar] + if $repo.Avatar != "" + img.avatar[src=$repo.Avatar] + else + img.avatar[src="/static/images/dummy.png"] div.card-block h3.login #{$repo.Name} div.full_name.hidden #{$repo.FullName} From 193d52449391954d95ad2a316296f4972aaa2a0f Mon Sep 17 00:00:00 2001 From: Kirilll Zaycev Date: Mon, 1 Feb 2016 02:22:44 +0300 Subject: [PATCH 3/4] Ensure we add avatar when activate repo --- remote/gitlab/gitlab.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/remote/gitlab/gitlab.go b/remote/gitlab/gitlab.go index faf473c95..79471911e 100644 --- a/remote/gitlab/gitlab.go +++ b/remote/gitlab/gitlab.go @@ -145,6 +145,12 @@ func (g *Gitlab) Repo(u *model.User, owner, name string) (*model.Repo, error) { repo.Clone = repo_.HttpRepoUrl repo.Branch = "master" + repo.Avatar = repo_.AvatarUrl + + if len(repo.Avatar) != 0 && !strings.HasPrefix(repo.Avatar, "http") { + repo.Avatar = fmt.Sprintf("%s/%s", g.URL, repo.Avatar) + } + if repo_.DefaultBranch != "" { repo.Branch = repo_.DefaultBranch } From fbf36458f128dee22c6573fedd3c4f329a6ac470 Mon Sep 17 00:00:00 2001 From: Kirilll Zaycev Date: Mon, 1 Feb 2016 02:49:52 +0300 Subject: [PATCH 4/4] Committer avatar --- remote/gitlab/gitlab.go | 7 +++++++ remote/gitlab/helper.go | 18 ++++++++++++++++++ template/amber/repo.amber | 5 ++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/remote/gitlab/gitlab.go b/remote/gitlab/gitlab.go index 79471911e..01b86e482 100644 --- a/remote/gitlab/gitlab.go +++ b/remote/gitlab/gitlab.go @@ -372,6 +372,10 @@ func mergeRequest(parsed *client.HookPayload, req *http.Request) (*model.Repo, * build.Author = parsed.ObjectAttributes.LastCommit.Author.Name build.Email = parsed.ObjectAttributes.LastCommit.Author.Email + if len(build.Email) != 0 { + build.Avatar = GetUserAvatar(build.Email) + } + build.Title = parsed.ObjectAttributes.Title build.Link = parsed.ObjectAttributes.Url @@ -417,6 +421,9 @@ func push(parsed *client.HookPayload, req *http.Request) (*model.Repo, *model.Bu case head.Author != nil: build.Email = head.Author.Email build.Author = parsed.UserName + if len(build.Email) != 0 { + build.Avatar = GetUserAvatar(build.Email) + } case head.Author == nil: build.Author = parsed.UserName } diff --git a/remote/gitlab/helper.go b/remote/gitlab/helper.go index 62edc0191..616a6a04c 100644 --- a/remote/gitlab/helper.go +++ b/remote/gitlab/helper.go @@ -1,6 +1,8 @@ package gitlab import ( + "crypto/md5" + "encoding/hex" "fmt" "net/url" "strconv" @@ -8,6 +10,10 @@ import ( "github.com/drone/drone/remote/gitlab/client" ) +const ( + gravatarBase = "https://www.gravatar.com/avatar" +) + // NewClient is a helper function that returns a new GitHub // client using the provided OAuth token. func NewClient(url, accessToken string, skipVerify bool) *client.Client { @@ -79,6 +85,18 @@ func ns(owner, name string) string { return fmt.Sprintf("%s%%2F%s", owner, name) } +func GetUserAvatar(email string) string { + hasher := md5.New() + hasher.Write([]byte(email)) + + return fmt.Sprintf( + "%s/%v.jpg?s=%s", + gravatarBase, + hex.EncodeToString(hasher.Sum(nil)), + "128", + ) +} + func GetUserEmail(c *client.Client, defaultURL string) (*client.Client, error) { return c, nil } diff --git a/template/amber/repo.amber b/template/amber/repo.amber index 79e7d9dc0..d7358c69b 100644 --- a/template/amber/repo.amber +++ b/template/amber/repo.amber @@ -32,7 +32,10 @@ block content each $build in $group.Builds a.card[href=$repo.Name+"/"+$build.Number][data-build=$build.Number] div.card-header - img[src=$build.Avatar] + if $build.Avatar != "" + img[src=$build.Avatar] + else + img[src="/static/images/dummy.png"] div.card-block div div.status[class=$build.Status] #{$build.Status}