From 7d64f719ebe2495a412d49d6defd880f83623004 Mon Sep 17 00:00:00 2001 From: "Alex Ellis (OpenFaaS Ltd)" Date: Thu, 6 Feb 2020 12:05:13 +0000 Subject: [PATCH] Add commits to release_notes feature Adds commits to release notes. Tested with temporary org. Closes: #141 Signed-off-by: Alex Ellis (OpenFaaS Ltd) --- Dockerfile | 7 ++-- derek.yml | 5 ++- handler/release_handler.go | 86 ++++++++++++++++++++++++++++++-------- 3 files changed, 76 insertions(+), 22 deletions(-) diff --git a/Dockerfile b/Dockerfile index 28dbd70..3397475 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,9 @@ -FROM openfaas/classic-watchdog:0.18.1 as watchdog +FROM openfaas/classic-watchdog:0.18.10 as watchdog -FROM golang:1.11-alpine as build +FROM golang:1.13-alpine as build ENV CGO_ENABLED=0 +ENV GO111MODULE=off WORKDIR /go/src/github.com/alexellis/derek COPY . . @@ -11,7 +12,7 @@ RUN go test $(go list ./... | grep -v /vendor/) -cover RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o derek . -FROM alpine:3.10 as ship +FROM alpine:3.11 as ship COPY --from=watchdog /fwatchdog /usr/bin/fwatchdog RUN chmod +x /usr/bin/fwatchdog diff --git a/derek.yml b/derek.yml index edb4027..23ee1c9 100644 --- a/derek.yml +++ b/derek.yml @@ -5,17 +5,18 @@ provider: functions: derek-098: handler: ./ - image: alexellis/derek:0.9.8 + image: alexellis/derek:0.9.9 lang: dockerfile environment: debug: true customers_url: https://raw.githubusercontent.com/alexellis/derek/master/.CUSTOMERS validate_hmac: true - validate_customers: true + validate_customers: false secret_path: /var/openfaas/secrets/ # use /run/secrets/ for older OpenFaaS versions write_debug: true read_timeout: 10s write_timeout: 10s + combine_output: false environment_file: - secrets.yml # See secrets.example.yml diff --git a/handler/release_handler.go b/handler/release_handler.go index 430ac0f..6657160 100644 --- a/handler/release_handler.go +++ b/handler/release_handler.go @@ -5,6 +5,7 @@ import ( "fmt" "log" "sort" + "strings" "time" "github.com/alexellis/derek/config" @@ -54,6 +55,72 @@ func updateReleaseNotes(client *github.Client, owner, repo, latestTag string) er workingReleases := getWorkingReleases(releases, owner, repo, latestTag) + includedPRs, err := buildClosedPRs(client, workingReleases, owner, repo, latestTag) + + if err != nil { + return err + } + + includedCommits, err := buildCommits(client, workingReleases, owner, repo, latestTag) + + if err != nil { + return err + } + + output := fmt.Sprintf("Changelog for %s:\n", workingReleases.CurrentTag) + + for _, pr := range includedPRs { + output = output + fmt.Sprintf("* PR #%d %s by @%s\n", + pr.GetNumber(), + pr.GetTitle(), + pr.GetUser().GetLogin()) + } + + output += fmt.Sprintf("\nCommits\n") + + for _, c := range includedCommits { + id := c.GetSHA() + author := c.GetAuthor().GetLogin() + title := c.GetCommit().GetMessage() + if index := strings.Index(title, "\n"); index > -1 { + title = title[:index] + } + + output = output + fmt.Sprintf("%s %s by @%s\n", id, title, author) + } + + output = fmt.Sprintf("%s\nGenerated by [Derek](https://github.com/alexellis/derek/)\n", output) + + log.Printf("Release notes: %q", output) + + err = updateRelease(client, workingReleases.CurrentRelease, owner, repo, workingReleases.CurrentTag, output) + + return err +} + +func buildCommits(client *github.Client, workingReleases WorkingRelease, owner, repo, latestTag string) ([]github.RepositoryCommit, error) { + var err error + var commits []github.RepositoryCommit + + opts := github.CommitsListOptions{ + Since: workingReleases.PreviousDate, + Until: workingReleases.CurrentDate, + } + + res, _, err := client.Repositories.ListCommits(context.Background(), owner, repo, &opts) + + for _, c := range res { + commits = append(commits, *c) + } + + if err != nil { + return nil, err + } + + return commits, err +} + +func buildClosedPRs(client *github.Client, workingReleases WorkingRelease, owner, repo, latestTag string) ([]github.PullRequest, error) { opts := &github.PullRequestListOptions{ State: "closed", Base: "master", @@ -63,7 +130,7 @@ func updateReleaseNotes(client *github.Client, owner, repo, latestTag string) er prs, _, err := client.PullRequests.List(context.Background(), owner, repo, opts) if err != nil { - return err + return nil, err } log.Printf("Release [%s/%s:%s] start: %s\tend: %q\n", @@ -80,22 +147,7 @@ func updateReleaseNotes(client *github.Client, owner, repo, latestTag string) er return included[i].GetClosedAt().After(included[j].GetClosedAt()) }) - output := fmt.Sprintf("Changelog for %s:\n", workingReleases.CurrentTag) - - for _, pr := range included { - output = output + fmt.Sprintf("* PR #%d %s by @%s\n", - pr.GetNumber(), - pr.GetTitle(), - pr.GetUser().GetLogin()) - } - - output = fmt.Sprintf("%s\nGenerated by [Derek](https://github.com/alexellis/derek/)\n", output) - - log.Printf("Release notes: %q", output) - - err = updateRelease(client, workingReleases.CurrentRelease, owner, repo, workingReleases.CurrentTag, output) - - return err + return included, nil } func getWorkingReleases(releases []*github.RepositoryRelease, owner, repo, tag string) WorkingRelease {