releaser: Include stats from hugoDocs
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 6 Aug 2017 08:42:07 +0000 (10:42 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 6 Aug 2017 09:18:19 +0000 (11:18 +0200)
Fixes #3727

releaser/git.go
releaser/git_test.go
releaser/releasenotes_writer.go
releaser/releasenotes_writer_test.go
releaser/releaser.go

index 2d49d21026588bc67be414577880cbf2c39eb93e..cfef434dd289de27dbb0dd5e01c6a6fa1442c3d5 100644 (file)
@@ -38,6 +38,7 @@ type changeLog struct {
        Fixes        map[string]gitInfos
        Notes        gitInfos
        All          gitInfos
+       Docs         gitInfos
 
        // Overall stats
        Repo             *gitHubRepo
@@ -45,11 +46,12 @@ type changeLog struct {
        ThemeCount       int
 }
 
-func newChangeLog(infos gitInfos) *changeLog {
+func newChangeLog(infos, docInfos gitInfos) *changeLog {
        return &changeLog{
                Enhancements: make(map[string]gitInfos),
                Fixes:        make(map[string]gitInfos),
                All:          infos,
+               Docs:         docInfos,
        }
 }
 
@@ -78,8 +80,8 @@ func (l *changeLog) addGitInfo(isFix bool, info gitInfo, category string) {
        segment[category] = infos
 }
 
-func gitInfosToChangeLog(infos gitInfos) *changeLog {
-       log := newChangeLog(infos)
+func gitInfosToChangeLog(infos, docInfos gitInfos) *changeLog {
+       log := newChangeLog(infos, docInfos)
        for _, info := range infos {
                los := strings.ToLower(info.Subject)
                isFix := strings.Contains(los, "fix")
@@ -154,8 +156,8 @@ func git(args ...string) (string, error) {
        return string(out), nil
 }
 
-func getGitInfos(tag string, remote bool) (gitInfos, error) {
-       return getGitInfosBefore("HEAD", tag, remote)
+func getGitInfos(tag, repoPath string, remote bool) (gitInfos, error) {
+       return getGitInfosBefore("HEAD", tag, repoPath, remote)
 }
 
 type countribCount struct {
@@ -211,11 +213,11 @@ func (g gitInfos) ContribCountPerAuthor() contribCounts {
        return c
 }
 
-func getGitInfosBefore(ref, tag string, remote bool) (gitInfos, error) {
+func getGitInfosBefore(ref, tag, repoPath string, remote bool) (gitInfos, error) {
 
        var g gitInfos
 
-       log, err := gitLogBefore(ref, tag)
+       log, err := gitLogBefore(ref, tag, repoPath)
        if err != nil {
                return g, err
        }
@@ -246,7 +248,7 @@ func getGitInfosBefore(ref, tag string, remote bool) (gitInfos, error) {
 // Ignore autogenerated commits etc. in change log. This is a regexp.
 const ignoredCommits = "releaser?:|snapcraft:|Merge commit|Squashed|Revert"
 
-func gitLogBefore(ref, tag string) (string, error) {
+func gitLogBefore(ref, tag, repoPath string) (string, error) {
        var prevTag string
        var err error
        if tag != "" {
@@ -257,7 +259,18 @@ func gitLogBefore(ref, tag string) (string, error) {
                        return "", err
                }
        }
-       log, err := git("log", "-E", fmt.Sprintf("--grep=%s", ignoredCommits), "--invert-grep", "--pretty=format:%x1e%h%x1f%aE%x1f%s%x1f%b", "--abbrev-commit", prevTag+".."+ref)
+
+       defaultArgs := []string{"log", "-E", fmt.Sprintf("--grep=%s", ignoredCommits), "--invert-grep", "--pretty=format:%x1e%h%x1f%aE%x1f%s%x1f%b", "--abbrev-commit", prevTag + ".." + ref}
+
+       var args []string
+
+       if repoPath != "" {
+               args = append([]string{"-C", repoPath}, defaultArgs...)
+       } else {
+               args = defaultArgs
+       }
+
+       log, err := git(args...)
        if err != nil {
                return ",", err
        }
@@ -270,7 +283,7 @@ func gitVersionTagBefore(ref string) (string, error) {
 }
 
 func gitLog() (string, error) {
-       return gitLogBefore("HEAD", "")
+       return gitLogBefore("HEAD", "", "")
 }
 
 func gitShort(args ...string) (output string, err error) {
index 1c102520ef419d105a886a620ac8f70b4c3a1b69..8053f7702577328b5260dcb43c71178aff992d8f 100644 (file)
@@ -22,7 +22,7 @@ import (
 
 func TestGitInfos(t *testing.T) {
        skipIfCI(t)
-       infos, err := getGitInfos("v0.20", false)
+       infos, err := getGitInfos("v0.20", "", false)
 
        require.NoError(t, err)
        require.True(t, len(infos) > 0)
index fbce85e6d46b63bba0449cf6fc02ea4bc46eeacd..09570be2cfb5d29042a620d3a5027f279681d060 100644 (file)
@@ -34,7 +34,7 @@ const (
        releaseNotesMarkdownTemplate = `
 {{- $patchRelease := isPatch . -}}
 {{- $contribsPerAuthor := .All.ContribCountPerAuthor -}}
-
+{{- $docsContribsPerAuthor := .Docs.ContribCountPerAuthor -}}
 {{- if $patchRelease }}
 {{ if eq (len .All) 1 }}
 This is a bug-fix release with one important fix.
@@ -53,6 +53,16 @@ This release represents **{{ len .All }} contributions by {{ len $contribsPerAut
 {{- $u1.AuthorLink }} leads the Hugo development with a significant amount of contributions, but also a big shoutout to {{ $u2.AuthorLink }}, {{ $u3.AuthorLink }}, and {{ $u4.AuthorLink }} for their ongoing contributions.
 And as always a big thanks to [@digitalcraftsman](https://github.com/digitalcraftsman) for his relentless work on keeping the documentation and the themes site in pristine condition.
 {{ end }}
+{{- if not $patchRelease }}
+Many have also been busy writing and fixing the documentation in [hugoDocs](https://github.com/gohugoio/hugoDocs), 
+which has received **{{ len .Docs }} contributions by {{ len $docsContribsPerAuthor }} contributors**.
+{{- if  gt (len $docsContribsPerAuthor) 3 -}}
+{{- $u1 := index $docsContribsPerAuthor 0 -}}
+{{- $u2 := index $docsContribsPerAuthor 1 -}}
+{{- $u3 := index $docsContribsPerAuthor 2 -}}
+{{- $u4 := index $docsContribsPerAuthor 3 }} A special thanks to {{ $u1.AuthorLink }}, {{ $u2.AuthorLink }}, {{ $u3.AuthorLink }}, and {{ $u4.AuthorLink }} for their work on the documentation site.
+{{ end }}
+{{ end }}
 Hugo now has:
 
 {{ with .Repo -}}
@@ -61,7 +71,7 @@ Hugo now has:
 {{- end -}}
 {{ with .ThemeCount }}
 * {{ . }}+ [themes](http://themes.gohugo.io/)
-{{- end }}
+{{ end }}
 {{ with .Notes }}
 ## Notes
 {{ template "change-section" . }}
@@ -128,8 +138,8 @@ var templateFuncs = template.FuncMap{
        },
 }
 
-func writeReleaseNotes(version string, infos gitInfos, to io.Writer) error {
-       changes := gitInfosToChangeLog(infos)
+func writeReleaseNotes(version string, infosMain, infosDocs gitInfos, to io.Writer) error {
+       changes := gitInfosToChangeLog(infosMain, infosDocs)
        changes.Version = version
        repo, err := fetchRepo()
        if err == nil {
@@ -165,7 +175,7 @@ func fetchThemeCount() (int, error) {
        return bytes.Count(b, []byte("submodule")), nil
 }
 
-func writeReleaseNotesToTmpFile(version string, infos gitInfos) (string, error) {
+func writeReleaseNotesToTmpFile(version string, infosMain, infosDocs gitInfos) (string, error) {
        f, err := ioutil.TempFile("", "hugorelease")
        if err != nil {
                return "", err
@@ -173,7 +183,7 @@ func writeReleaseNotesToTmpFile(version string, infos gitInfos) (string, error)
 
        defer f.Close()
 
-       if err := writeReleaseNotes(version, infos, f); err != nil {
+       if err := writeReleaseNotes(version, infosMain, infosDocs, f); err != nil {
                return "", err
        }
 
@@ -188,7 +198,7 @@ func getReleaseNotesDocsTempFilename(version string) string {
        return filepath.Join(getReleaseNotesDocsTempDirAndName(version))
 }
 
-func (r *ReleaseHandler) writeReleaseNotesToTemp(version string, infos gitInfos) (string, error) {
+func (r *ReleaseHandler) writeReleaseNotesToTemp(version string, infosMain, infosDocs gitInfos) (string, error) {
 
        docsTempPath, name := getReleaseNotesDocsTempDirAndName(version)
 
@@ -214,7 +224,7 @@ func (r *ReleaseHandler) writeReleaseNotesToTemp(version string, infos gitInfos)
                w = os.Stdout
        }
 
-       if err := writeReleaseNotes(version, infos, w); err != nil {
+       if err := writeReleaseNotes(version, infosMain, infosDocs, w); err != nil {
                return "", err
        }
 
index 1b759b1d926621c95f392e74b9c522d2e246e8c2..f3e984d55bf5275191bff4e53f679b348dc58bec 100644 (file)
@@ -34,10 +34,10 @@ func _TestReleaseNotesWriter(t *testing.T) {
        var b bytes.Buffer
 
        // TODO(bep) consider to query GitHub directly for the gitlog with author info, probably faster.
-       infos, err := getGitInfosBefore("HEAD", "v0.20", false)
+       infos, err := getGitInfosBefore("HEAD", "v0.20", "", false)
        require.NoError(t, err)
 
-       require.NoError(t, writeReleaseNotes("0.21", infos, &b))
+       require.NoError(t, writeReleaseNotes("0.21", infos, infos, &b))
 
        fmt.Println(b.String())
 
index d32e511c6d6143e9f0893808957b10fc28325090..4da767949fc5494dd4e0df72962debc0642ea428 100644 (file)
@@ -130,17 +130,24 @@ func (r *ReleaseHandler) Run() error {
                }
        }
 
-       var gitCommits gitInfos
+       var (
+               gitCommits     gitInfos
+               gitCommitsDocs gitInfos
+       )
 
        if r.shouldPrepareReleasenotes() || r.shouldRelease() {
-               gitCommits, err = getGitInfos(changeLogFromTag, !r.try)
+               gitCommits, err = getGitInfos(changeLogFromTag, "", !r.try)
+               if err != nil {
+                       return err
+               }
+               gitCommitsDocs, err = getGitInfos(changeLogFromTag, "../hugoDocs", !r.try)
                if err != nil {
                        return err
                }
        }
 
        if r.shouldPrepareReleasenotes() {
-               releaseNotesFile, err := r.writeReleaseNotesToTemp(version, gitCommits)
+               releaseNotesFile, err := r.writeReleaseNotesToTemp(version, gitCommits, gitCommitsDocs)
                if err != nil {
                        return err
                }