Merge pull request #9770 from brendandburns/notes

Add some more logic to clean up the release-notes generation.
pull/6/head
Saad Ali 2015-06-16 15:49:29 -07:00
commit a00b55c023
1 changed files with 32 additions and 4 deletions

View File

@ -21,6 +21,8 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"os" "os"
"sort"
"time"
"github.com/google/go-github/github" "github.com/google/go-github/github"
flag "github.com/spf13/pflag" flag "github.com/spf13/pflag"
@ -28,12 +30,20 @@ import (
) )
var ( var (
target int target int
token string current int
token string
) )
type ByMerged []*github.PullRequest
func (a ByMerged) Len() int { return len(a) }
func (a ByMerged) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a ByMerged) Less(i, j int) bool { return a[i].MergedAt.Before(*a[j].MergedAt) }
func init() { func init() {
flag.IntVar(&target, "last-release-pr", 0, "The PR number of the last versioned release.") flag.IntVar(&target, "last-release-pr", 0, "The PR number of the last versioned release.")
flag.IntVar(&current, "current-release-pr", 0, "The PR number of the current versioned release.")
flag.StringVar(&token, "api-token", "", "Github api token for rate limiting. See https://developer.github.com/v3/#rate-limiting.") flag.StringVar(&token, "api-token", "", "Github api token for rate limiting. See https://developer.github.com/v3/#rate-limiting.")
} }
@ -44,6 +54,10 @@ func main() {
fmt.Printf("--last-release-pr is required.\n") fmt.Printf("--last-release-pr is required.\n")
os.Exit(1) os.Exit(1)
} }
if current == 0 {
fmt.Printf("--curent-release-pr is required.\n")
os.Exit(1)
}
var tc *http.Client var tc *http.Client
if len(token) > 0 { if len(token) > 0 {
@ -69,6 +83,9 @@ func main() {
} }
buffer := &bytes.Buffer{} buffer := &bytes.Buffer{}
prs := []*github.PullRequest{}
var lastVersionMerged *time.Time
var currentVersionCreated *time.Time
for !done { for !done {
opts.Page++ opts.Page++
results, _, err := client.PullRequests.List("GoogleCloudPlatform", "kubernetes", &opts) results, _, err := client.PullRequests.List("GoogleCloudPlatform", "kubernetes", &opts)
@ -76,16 +93,27 @@ func main() {
fmt.Printf("Error contacting github: %v", err) fmt.Printf("Error contacting github: %v", err)
os.Exit(1) os.Exit(1)
} }
for _, result := range results { for ix := range results {
result := &results[ix]
// Skip Closed but not Merged PRs // Skip Closed but not Merged PRs
if result.MergedAt == nil { if result.MergedAt == nil {
continue continue
} }
if *result.Number == target { if *result.Number == target {
done = true done = true
lastVersionMerged = result.MergedAt
break break
} }
fmt.Fprintf(buffer, " * %s #%d (%s)\n", *result.Title, *result.Number, *result.User.Login) if *result.Number == current {
currentVersionCreated = result.CreatedAt
}
prs = append(prs, result)
}
}
sort.Sort(ByMerged(prs))
for _, pr := range prs {
if lastVersionMerged.Before(*pr.MergedAt) && pr.MergedAt.Before(*currentVersionCreated) {
fmt.Fprintf(buffer, " * %s #%d (%s)\n", *pr.Title, *pr.Number, *pr.User.Login)
} }
} }
fmt.Printf("%s", buffer.Bytes()) fmt.Printf("%s", buffer.Bytes())