Skip to content

Commit 0fadec1

Browse files
author
Rui Yang
authored
Merge pull request #119 from coro/generate-release-notes
Allow release notes for a GitHub release to be autogenerated
2 parents f963eb9 + 8ea5d3d commit 0fadec1

7 files changed

Lines changed: 76 additions & 14 deletions

File tree

README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ Fetches and creates versioned GitHub resources.
8888
body: path/to/body/file
8989
globs:
9090
- paths/to/files/to/upload-*.tgz
91+
generate_release_notes: true
9192
```
9293
9394
To get a specific version of a release:
@@ -180,6 +181,11 @@ prepended with this string. This is useful for adding v in front of version numb
180181
* `globs`: *Optional.* A list of globs for files that will be uploaded alongside
181182
the created release.
182183

184+
* `generate_release_notes`: *Optional.* Causes GitHub to autogenerate the release notes
185+
when creating a new release, based on the commits since the last release.
186+
If `body` is specified, the body will be pre-pended to the automatically generated
187+
notes. Has no effect when updating an existing release. Defaults to `false`.
188+
183189
## Development
184190

185191
### Prerequisites
@@ -200,7 +206,7 @@ Run the tests with the following commands for both `alpine` and `ubuntu` images:
200206

201207
```sh
202208
docker build -t github-release-resource -f dockerfiles/alpine/Dockerfile .
203-
docker build -t github-release-resource -f dockerfiles/ubuntu/Dockerfile .
209+
docker build -t github-release-resource -f dockerfiles/ubuntu/Dockerfile --build-arg base_image=ubuntu:latest .
204210
```
205211

206212
### Contributing

dockerfiles/ubuntu/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
ARG base_image
22
ARG builder_image=concourse/golang-builder
33

4-
FROM ${builder_image} as builder
4+
FROM ${builder_image} AS builder
55
COPY . $GOPATH/src/github.com/concourse/github-release-resource
66
ENV CGO_ENABLED 0
77
WORKDIR $GOPATH/src/github.com/concourse/github-release-resource

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ require (
66
github.com/Masterminds/semver v1.5.0
77
github.com/cppforlife/go-semi-semantic v0.0.0-20160921010311-576b6af77ae4
88
github.com/golang/protobuf v1.5.2 // indirect
9-
github.com/google/go-github/v39 v39.0.0
9+
github.com/google/go-github/v39 v39.2.0
1010
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db
1111
github.com/nxadm/tail v1.4.5 // indirect
1212
github.com/onsi/ginkgo v1.14.2

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
9696
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
9797
github.com/google/go-github/v39 v39.0.0 h1:pygGA5ySwxEez1N39GnDauD0PaWWuGgayudyZAc941s=
9898
github.com/google/go-github/v39 v39.0.0/go.mod h1:C1s8C5aCC9L+JXIYpJM5GYytdX52vC1bLvHEF1IhBrE=
99+
github.com/google/go-github/v39 v39.2.0 h1:rNNM311XtPOz5rDdsJXAp2o8F67X9FnROXTvto3aSnQ=
100+
github.com/google/go-github/v39 v39.2.0/go.mod h1:C1s8C5aCC9L+JXIYpJM5GYytdX52vC1bLvHEF1IhBrE=
99101
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
100102
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
101103
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=

out_command.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,16 @@ func (c *OutCommand) Run(sourceDir string, request OutRequest) (OutResponse, err
6363
prerelease = request.Source.PreRelease
6464
}
6565

66+
generateReleaseNotes := request.Params.GenerateReleaseNotes
67+
6668
release := &github.RepositoryRelease{
67-
Name: github.String(name),
68-
TagName: github.String(tag),
69-
Body: github.String(body),
70-
Draft: github.Bool(draft),
71-
Prerelease: github.Bool(prerelease),
72-
TargetCommitish: github.String(targetCommitish),
69+
Name: github.String(name),
70+
TagName: github.String(tag),
71+
Body: github.String(body),
72+
Draft: github.Bool(draft),
73+
Prerelease: github.Bool(prerelease),
74+
TargetCommitish: github.String(targetCommitish),
75+
GenerateReleaseNotes: github.Bool(generateReleaseNotes),
7376
}
7477

7578
existingReleases, err := c.github.ListReleases()

out_command_test.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,24 @@ var _ = Describe("Out Command", func() {
217217
Ω(updatedRelease.TargetCommitish).Should(Equal(github.String("1z22f1")))
218218
})
219219
})
220+
221+
Context("when set to autogenerate release notes", func() {
222+
BeforeEach(func() {
223+
request.Params.GenerateReleaseNotes = true
224+
})
225+
// See https://github.com/google/go-github/issues/2444
226+
It("has no effect on updating the existing release", func() {
227+
_, err := command.Run(sourcesDir, request)
228+
Ω(err).ShouldNot(HaveOccurred())
229+
230+
Ω(githubClient.UpdateReleaseCallCount()).Should(Equal(1))
231+
232+
updatedRelease := githubClient.UpdateReleaseArgsForCall(0)
233+
Ω(*updatedRelease.Name).Should(Equal("v0.3.12"))
234+
Ω(*updatedRelease.Body).Should(Equal("this is a great release"))
235+
Ω(updatedRelease.GenerateReleaseNotes).Should(BeNil())
236+
})
237+
})
220238
})
221239

222240
Context("when the release has not already been created", func() {
@@ -585,5 +603,37 @@ var _ = Describe("Out Command", func() {
585603
Ω(*release.TagName).Should(Equal("version-0.3.12"))
586604
})
587605
})
606+
607+
Context("with generate_release_notes set to false", func() {
608+
BeforeEach(func() {
609+
request.Params.GenerateReleaseNotes = false
610+
})
611+
612+
It("creates a release on GitHub without autogenerated release notes", func() {
613+
_, err := command.Run(sourcesDir, request)
614+
Ω(err).ShouldNot(HaveOccurred())
615+
616+
Ω(githubClient.CreateReleaseCallCount()).Should(Equal(1))
617+
release := githubClient.CreateReleaseArgsForCall(0)
618+
619+
Ω(release.GenerateReleaseNotes).Should(Equal(github.Bool(false)))
620+
})
621+
})
622+
623+
Context("with generate_release_notes set to true", func() {
624+
BeforeEach(func() {
625+
request.Params.GenerateReleaseNotes = true
626+
})
627+
628+
It("creates a release on GitHub with autogenerated release notes", func() {
629+
_, err := command.Run(sourcesDir, request)
630+
Ω(err).ShouldNot(HaveOccurred())
631+
632+
Ω(githubClient.CreateReleaseCallCount()).Should(Equal(1))
633+
release := githubClient.CreateReleaseArgsForCall(0)
634+
635+
Ω(release.GenerateReleaseNotes).Should(Equal(github.Bool(true)))
636+
})
637+
})
588638
})
589639
})

resources.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,12 @@ type OutRequest struct {
7171
}
7272

7373
type OutParams struct {
74-
NamePath string `json:"name"`
75-
BodyPath string `json:"body"`
76-
TagPath string `json:"tag"`
77-
CommitishPath string `json:"commitish"`
78-
TagPrefix string `json:"tag_prefix"`
74+
NamePath string `json:"name"`
75+
BodyPath string `json:"body"`
76+
TagPath string `json:"tag"`
77+
CommitishPath string `json:"commitish"`
78+
TagPrefix string `json:"tag_prefix"`
79+
GenerateReleaseNotes bool `json:"generate_release_notes"`
7980

8081
Globs []string `json:"globs"`
8182
}

0 commit comments

Comments
 (0)