Implement golang project run
This commit is contained in:
@ -31,10 +31,17 @@ type Project struct {
|
||||
AvatarURL string
|
||||
LastActivityAt time.Time
|
||||
Readme string
|
||||
Language *string
|
||||
Languages *ProjectLanguages
|
||||
gitRepo *git.Repository
|
||||
}
|
||||
|
||||
type ProjectLanguages []*ProjectLanguage
|
||||
|
||||
type ProjectLanguage struct {
|
||||
Name string
|
||||
Percentage float32
|
||||
}
|
||||
|
||||
type User struct {
|
||||
ID int
|
||||
Username string
|
||||
@ -61,6 +68,23 @@ func (p *Project) String() string {
|
||||
return fmt.Sprintf("%s (%s)", p.Path, p.PathWithNamespace)
|
||||
}
|
||||
|
||||
func (p *Project) GetLanguage() *ProjectLanguage {
|
||||
if p.Languages == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
var lang *ProjectLanguage
|
||||
var maxPcnt float32
|
||||
for _, p := range *p.Languages {
|
||||
if p.Percentage > maxPcnt {
|
||||
lang = p
|
||||
}
|
||||
maxPcnt = p.Percentage
|
||||
}
|
||||
|
||||
return lang
|
||||
}
|
||||
|
||||
func (p *Project) SanitizedPath() string {
|
||||
return strings.Trim(p.PathWithNamespace, " '\"%<>|`")
|
||||
}
|
||||
@ -197,7 +221,7 @@ func (c *Client) handleProjects(projects []*gitlab.Project) []*Project {
|
||||
AvatarURL: project.AvatarURL,
|
||||
LastActivityAt: *project.LastActivityAt,
|
||||
Readme: project.ReadmeURL,
|
||||
Language: c.GetProjectLanguage(project),
|
||||
Languages: c.GetProjectLanguages(project),
|
||||
}
|
||||
pList = append(pList, p)
|
||||
}
|
||||
@ -206,23 +230,26 @@ func (c *Client) handleProjects(projects []*gitlab.Project) []*Project {
|
||||
|
||||
// A nil return indicates an API error or GitLab doesn't know what
|
||||
// language the project uses.
|
||||
func (c *Client) GetProjectLanguage(project *gitlab.Project) *string {
|
||||
func (c *Client) GetProjectLanguages(project *gitlab.Project) *ProjectLanguages {
|
||||
l, _, e := c.gitlab.Projects.GetProjectLanguages(project.ID, gitlab.WithContext(c.Ctx))
|
||||
if e != nil {
|
||||
pterm.Error.Printfln("Failed requesting project languages: %s", e.Error())
|
||||
return nil
|
||||
}
|
||||
|
||||
var mainLang *string
|
||||
var mostUsed float32
|
||||
for name, p := range *l {
|
||||
if p > mostUsed {
|
||||
mostUsed = p
|
||||
mainLang = &name
|
||||
var pLangs ProjectLanguages
|
||||
pLangs = make([]*ProjectLanguage, len(*l))
|
||||
|
||||
var i int
|
||||
for name, pcnt := range *l {
|
||||
pLangs[i] = &ProjectLanguage{
|
||||
Name: name,
|
||||
Percentage: pcnt,
|
||||
}
|
||||
i++
|
||||
}
|
||||
|
||||
return mainLang
|
||||
return &pLangs
|
||||
}
|
||||
|
||||
func NewGitlabClient(ctx context.Context, host, token string) (*Client, error) {
|
||||
|
Reference in New Issue
Block a user