mirror of
https://github.com/glanceapp/glance.git
synced 2024-11-22 00:13:55 +01:00
Merge pull request #77 from aharivel/github-commit
Add last Github commits
This commit is contained in:
commit
d7bd34531f
@ -1201,6 +1201,7 @@ Example:
|
|||||||
repository: glanceapp/glance
|
repository: glanceapp/glance
|
||||||
pull-requests-limit: 5
|
pull-requests-limit: 5
|
||||||
issues-limit: 3
|
issues-limit: 3
|
||||||
|
commits-limit: 3
|
||||||
```
|
```
|
||||||
|
|
||||||
Preview:
|
Preview:
|
||||||
@ -1215,6 +1216,7 @@ Preview:
|
|||||||
| token | string | no | |
|
| token | string | no | |
|
||||||
| pull-requests-limit | integer | no | 3 |
|
| pull-requests-limit | integer | no | 3 |
|
||||||
| issues-limit | integer | no | 3 |
|
| issues-limit | integer | no | 3 |
|
||||||
|
| commits-limit | integer | no | -1 |
|
||||||
|
|
||||||
##### `repository`
|
##### `repository`
|
||||||
The owner and repository name that will have their information displayed.
|
The owner and repository name that will have their information displayed.
|
||||||
@ -1228,6 +1230,9 @@ The maximum number of latest open pull requests to show. Set to `-1` to not show
|
|||||||
##### `issues-limit`
|
##### `issues-limit`
|
||||||
The maximum number of latest open issues to show. Set to `-1` to not show any.
|
The maximum number of latest open issues to show. Set to `-1` to not show any.
|
||||||
|
|
||||||
|
##### `commits-limit`
|
||||||
|
The maximum number of lastest commits to show from the default branch. Set to `-1` to not show any.
|
||||||
|
|
||||||
### Bookmarks
|
### Bookmarks
|
||||||
Display a list of links which can be grouped.
|
Display a list of links which can be grouped.
|
||||||
|
|
||||||
|
@ -7,6 +7,23 @@
|
|||||||
<li>{{ .RepositoryDetails.Forks | formatNumber }} forks</li>
|
<li>{{ .RepositoryDetails.Forks | formatNumber }} forks</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
{{ if gt (len .RepositoryDetails.Commits) 0 }}
|
||||||
|
<hr class="margin-block-10">
|
||||||
|
<a class="text-compact" href="https://github.com/{{ $.RepositoryDetails.Name }}/commits" target="_blank" rel="noreferrer">Last {{ .CommitsLimit }} commits</a>
|
||||||
|
<div class="flex gap-7 size-h5 margin-top-3">
|
||||||
|
<ul class="list list-gap-2">
|
||||||
|
{{ range .RepositoryDetails.Commits }}
|
||||||
|
<li {{ dynamicRelativeTimeAttrs .CreatedAt }}></li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
<ul class="list list-gap-2 min-width-0">
|
||||||
|
{{ range .RepositoryDetails.Commits }}
|
||||||
|
<li><a class="color-primary-if-not-visited text-truncate block" title="{{ .Author }}" target="_blank" rel="noreferrer" href="https://github.com/{{ $.RepositoryDetails.Name }}/commit/{{ .Sha }}">{{ .Message }}</a></li>
|
||||||
|
{{ end }}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
{{ if gt (len .RepositoryDetails.PullRequests) 0 }}
|
{{ if gt (len .RepositoryDetails.PullRequests) 0 }}
|
||||||
<hr class="margin-block-10">
|
<hr class="margin-block-10">
|
||||||
<a class="text-compact" href="https://github.com/{{ $.RepositoryDetails.Name }}/pulls" target="_blank" rel="noreferrer">Open pull requests ({{ .RepositoryDetails.OpenPullRequests | formatNumber }} total)</a>
|
<a class="text-compact" href="https://github.com/{{ $.RepositoryDetails.Name }}/pulls" target="_blank" rel="noreferrer">Open pull requests ({{ .RepositoryDetails.OpenPullRequests | formatNumber }} total)</a>
|
||||||
|
@ -3,6 +3,7 @@ package feed
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@ -67,6 +68,8 @@ type RepositoryDetails struct {
|
|||||||
PullRequests []GithubTicket
|
PullRequests []GithubTicket
|
||||||
OpenIssues int
|
OpenIssues int
|
||||||
Issues []GithubTicket
|
Issues []GithubTicket
|
||||||
|
LastCommits int
|
||||||
|
Commits []CommitDetails
|
||||||
}
|
}
|
||||||
|
|
||||||
type githubRepositoryDetailsResponseJson struct {
|
type githubRepositoryDetailsResponseJson struct {
|
||||||
@ -84,21 +87,40 @@ type githubTicketResponseJson struct {
|
|||||||
} `json:"items"`
|
} `json:"items"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func FetchRepositoryDetailsFromGithub(repository string, token string, maxPRs int, maxIssues int) (RepositoryDetails, error) {
|
type CommitDetails struct {
|
||||||
repositoryRequest, err := http.NewRequest("GET", fmt.Sprintf("https://api.github.com/repos/%s", repository), nil)
|
Sha string
|
||||||
|
Author string
|
||||||
|
CreatedAt time.Time
|
||||||
|
Message string
|
||||||
|
}
|
||||||
|
|
||||||
|
type gitHubCommitResponseJson struct {
|
||||||
|
Sha string `json:"sha"`
|
||||||
|
Commit struct {
|
||||||
|
Author struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Date string `json:"date"`
|
||||||
|
} `json:"author"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
} `json:"commit"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func FetchRepositoryDetailsFromGithub(repository string, token string, maxPRs int, maxIssues int, maxCommits int) (RepositoryDetails, error) {
|
||||||
|
repositoryRequest, err := http.NewRequest("GET", fmt.Sprintf("https://api.github.com/repos/%s", repository), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return RepositoryDetails{}, fmt.Errorf("%w: could not create request with repository: %v", ErrNoContent, err)
|
return RepositoryDetails{}, fmt.Errorf("%w: could not create request with repository: %v", ErrNoContent, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
PRsRequest, _ := http.NewRequest("GET", fmt.Sprintf("https://api.github.com/search/issues?q=is:pr+is:open+repo:%s&per_page=%d", repository, maxPRs), nil)
|
PRsRequest, _ := http.NewRequest("GET", fmt.Sprintf("https://api.github.com/search/issues?q=is:pr+is:open+repo:%s&per_page=%d", repository, maxPRs), nil)
|
||||||
issuesRequest, _ := http.NewRequest("GET", fmt.Sprintf("https://api.github.com/search/issues?q=is:issue+is:open+repo:%s&per_page=%d", repository, maxIssues), nil)
|
issuesRequest, _ := http.NewRequest("GET", fmt.Sprintf("https://api.github.com/search/issues?q=is:issue+is:open+repo:%s&per_page=%d", repository, maxIssues), nil)
|
||||||
|
CommitsRequest, _ := http.NewRequest("GET", fmt.Sprintf("https://api.github.com/repos/%s/commits?per_page=%d", repository, maxCommits), nil)
|
||||||
|
|
||||||
if token != "" {
|
if token != "" {
|
||||||
token = fmt.Sprintf("Bearer %s", token)
|
token = fmt.Sprintf("Bearer %s", token)
|
||||||
repositoryRequest.Header.Add("Authorization", token)
|
repositoryRequest.Header.Add("Authorization", token)
|
||||||
PRsRequest.Header.Add("Authorization", token)
|
PRsRequest.Header.Add("Authorization", token)
|
||||||
issuesRequest.Header.Add("Authorization", token)
|
issuesRequest.Header.Add("Authorization", token)
|
||||||
|
CommitsRequest.Header.Add("Authorization", token)
|
||||||
}
|
}
|
||||||
|
|
||||||
var detailsResponse githubRepositoryDetailsResponseJson
|
var detailsResponse githubRepositoryDetailsResponseJson
|
||||||
@ -107,6 +129,8 @@ func FetchRepositoryDetailsFromGithub(repository string, token string, maxPRs in
|
|||||||
var PRsErr error
|
var PRsErr error
|
||||||
var issuesResponse githubTicketResponseJson
|
var issuesResponse githubTicketResponseJson
|
||||||
var issuesErr error
|
var issuesErr error
|
||||||
|
var commitsResponse []gitHubCommitResponseJson
|
||||||
|
var CommitsErr error
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
|
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
@ -131,6 +155,14 @@ func FetchRepositoryDetailsFromGithub(repository string, token string, maxPRs in
|
|||||||
})()
|
})()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if maxCommits > 0 {
|
||||||
|
wg.Add(1)
|
||||||
|
go (func() {
|
||||||
|
defer wg.Done()
|
||||||
|
commitsResponse, CommitsErr = decodeJsonFromRequest[[]gitHubCommitResponseJson](defaultClient, CommitsRequest)
|
||||||
|
})()
|
||||||
|
}
|
||||||
|
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
|
|
||||||
if detailsErr != nil {
|
if detailsErr != nil {
|
||||||
@ -143,6 +175,7 @@ func FetchRepositoryDetailsFromGithub(repository string, token string, maxPRs in
|
|||||||
Forks: detailsResponse.Forks,
|
Forks: detailsResponse.Forks,
|
||||||
PullRequests: make([]GithubTicket, 0, len(PRsResponse.Tickets)),
|
PullRequests: make([]GithubTicket, 0, len(PRsResponse.Tickets)),
|
||||||
Issues: make([]GithubTicket, 0, len(issuesResponse.Tickets)),
|
Issues: make([]GithubTicket, 0, len(issuesResponse.Tickets)),
|
||||||
|
Commits: make([]CommitDetails, 0, len(commitsResponse)),
|
||||||
}
|
}
|
||||||
|
|
||||||
err = nil
|
err = nil
|
||||||
@ -180,5 +213,20 @@ func FetchRepositoryDetailsFromGithub(repository string, token string, maxPRs in
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if maxCommits > 0 {
|
||||||
|
if CommitsErr != nil {
|
||||||
|
err = fmt.Errorf("%w: could not get issues: %s", ErrPartialContent, CommitsErr)
|
||||||
|
} else {
|
||||||
|
for i := range commitsResponse {
|
||||||
|
details.Commits = append(details.Commits, CommitDetails{
|
||||||
|
Sha: commitsResponse[i].Sha,
|
||||||
|
Author: commitsResponse[i].Commit.Author.Name,
|
||||||
|
CreatedAt: parseRFC3339Time(commitsResponse[i].Commit.Author.Date),
|
||||||
|
Message: strings.SplitN(commitsResponse[i].Commit.Message, "\n\n", 2)[0],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return details, err
|
return details, err
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ type Repository struct {
|
|||||||
Token OptionalEnvString `yaml:"token"`
|
Token OptionalEnvString `yaml:"token"`
|
||||||
PullRequestsLimit int `yaml:"pull-requests-limit"`
|
PullRequestsLimit int `yaml:"pull-requests-limit"`
|
||||||
IssuesLimit int `yaml:"issues-limit"`
|
IssuesLimit int `yaml:"issues-limit"`
|
||||||
|
CommitsLimit int `yaml:"commits-limit"`
|
||||||
RepositoryDetails feed.RepositoryDetails
|
RepositoryDetails feed.RepositoryDetails
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -29,6 +30,10 @@ func (widget *Repository) Initialize() error {
|
|||||||
widget.IssuesLimit = 3
|
widget.IssuesLimit = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if widget.CommitsLimit == 0 || widget.CommitsLimit < -1 {
|
||||||
|
widget.CommitsLimit = -1
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,6 +43,7 @@ func (widget *Repository) Update(ctx context.Context) {
|
|||||||
string(widget.Token),
|
string(widget.Token),
|
||||||
widget.PullRequestsLimit,
|
widget.PullRequestsLimit,
|
||||||
widget.IssuesLimit,
|
widget.IssuesLimit,
|
||||||
|
widget.CommitsLimit,
|
||||||
)
|
)
|
||||||
|
|
||||||
if !widget.canContinueUpdateAfterHandlingErr(err) {
|
if !widget.canContinueUpdateAfterHandlingErr(err) {
|
||||||
|
Loading…
Reference in New Issue
Block a user