diff options
author | Luke T. Shumaker <lukeshu@lukeshu.com> | 2024-06-08 17:51:41 -0600 |
---|---|---|
committer | Luke T. Shumaker <lukeshu@lukeshu.com> | 2024-06-08 17:51:41 -0600 |
commit | 5dc2e9533a111d75ff91a56dd50af8e03ebf5f5f (patch) | |
tree | e90d2b74612ecb44fb0e41a19e44483f90a071ba /cmd/generate/forge_github.go | |
parent | f6080300406a674419dba5005c76bc424df35502 (diff) |
wip pipermail threading
Diffstat (limited to 'cmd/generate/forge_github.go')
-rw-r--r-- | cmd/generate/forge_github.go | 68 |
1 files changed, 67 insertions, 1 deletions
diff --git a/cmd/generate/forge_github.go b/cmd/generate/forge_github.go index d3618ce..d29e3f7 100644 --- a/cmd/generate/forge_github.go +++ b/cmd/generate/forge_github.go @@ -7,7 +7,10 @@ import ( "time" ) -var reGitHubPR = regexp.MustCompile(`^https://github\.com/([^/?#]+)/([^/?#]+)/pull/([0-9]+)(?:\?[^#]*)?(?:#.*)?$`) +var ( + reGitHubPR = regexp.MustCompile(`^https://github\.com/([^/?#]+)/([^/?#]+)/pull/([0-9]+)(?:\?[^#]*)?(?:#.*)?$`) + reGitHubCommit = regexp.MustCompile(`^https://github\.com/([^/?#]+)/([^/?#]+)/commit/([0-9a-f]+)(?:\?[^#]*)?(?:#.*)?$`) +) func githubPagination(i int) url.Values { params := make(url.Values) @@ -20,6 +23,7 @@ type GitHub struct{} var _ Forge = GitHub{} func (GitHub) FetchStatus(urls []string) (string, error) { + // PR for _, u := range urls { m := reGitHubPR.FindStringSubmatch(u) if m == nil { @@ -54,6 +58,31 @@ func (GitHub) FetchStatus(urls []string) (string, error) { return ret, nil } + // Commits from a non-PR + var gitURL string + var gitCommits []string + for _, u := range urls { + if m := reGitHubCommit.FindStringSubmatch(u); m != nil { + user := m[1] + repo := m[2] + hash := m[3] + + gitURL = "https://github.com/" + user + "/" + repo + gitCommits = append(gitCommits, hash) + } + } + if len(gitCommits) > 0 { + ret := statusMerged + tag, err := getGitTagThatContainsAll(gitURL, gitCommits...) + if err != nil { + return "", err + } + if tag != "" { + ret = fmt.Sprintf(statusReleasedFmt, tag) + } + return ret, nil + } + // Nope return "", nil } @@ -81,6 +110,7 @@ func (GitHub) FetchSubmittedAt(urls []string) (time.Time, error) { } func (GitHub) FetchLastUpdated(urls []string) (time.Time, User, error) { + // PR for _, u := range urls { m := reGitHubPR.FindStringSubmatch(u) if m == nil { @@ -184,5 +214,41 @@ func (GitHub) FetchLastUpdated(urls []string) (time.Time, User, error) { return retUpdatedAt, retUser, nil } + // Commits from a non-PR + { + var ret time.Time + for _, u := range urls { + if m := reGitHubCommit.FindStringSubmatch(u); m != nil { + user := m[1] + repo := m[2] + hash := m[3] + + urlStr := "https://api.github.com/repos/" + user + "/" + repo + "/commits/" + hash + var obj struct { + Commit struct { + Author struct { + Date time.Time `json:"date"` + } `json:"author"` + Committer struct { + Date time.Time `json:"date"` + } `json:"committer"` + } `json:"commit"` + } + if err := httpGetJSON(urlStr, nil, &obj); err != nil { + return time.Time{}, User{}, err + } + if obj.Commit.Author.Date.After(ret) { + ret = obj.Commit.Author.Date + } + if obj.Commit.Committer.Date.After(ret) { + ret = obj.Commit.Committer.Date + } + } + } + if ret.IsZero() { + return time.Time{}, User{}, nil + } + } + // Nope return time.Time{}, User{}, nil } |