Skip to content

Commit

Permalink
Look for Releases if CHANGELOG not found
Browse files Browse the repository at this point in the history
  • Loading branch information
pengwynn committed Feb 6, 2016
1 parent 6c49779 commit 20ed7c5
Show file tree
Hide file tree
Showing 6 changed files with 1,260 additions and 4 deletions.
1,172 changes: 1,172 additions & 0 deletions fixtures/octokit.rb_releases.json

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions flint/app_test.go
Expand Up @@ -83,6 +83,10 @@ func (f *fakeGitHubFetcher) FetchTree(nwo string) ([]string, error) {
return []string{}, nil
}

func (f *fakeGitHubFetcher) FetchReleases(nwo string) ([]string, error) {
return []string{}, nil
}

func setupAppTest() {
_run = run
newGitHubFetcher = func(c *cli.Context) RemoteRepositoryFetcher {
Expand Down
30 changes: 30 additions & 0 deletions flint/github_fetcher.go
Expand Up @@ -60,6 +60,36 @@ func (g *GitHubFetcher) FetchTree(nwo string) (paths []string, err error) {
return
}

func (g *GitHubFetcher) FetchReleases(nwo string) (releases []string, err error) {
if g.Client == nil {
return nil, errors.New("GitHub client required")
}

owner, name, err := g.ParseFullName(nwo)
if err != nil {
return nil, err
}
url, err := octokit.ReleasesURL.Expand(octokit.M{
"owner": owner,
"repo": name,
})
if err != nil {
return nil, err
}
items, result := g.Releases(url).All()
if result.HasError() {
return nil, result.Err
}

for _, release := range items {
if name := release.Name; len(name) > 0 {
releases = append(releases, name)
}
}

return
}

func (g *GitHubFetcher) ParseFullName(nwo string) (owner, name string, err error) {
parts := strings.Split(nwo, "/")
if len(parts) != 2 {
Expand Down
17 changes: 17 additions & 0 deletions flint/github_fetcher_test.go
Expand Up @@ -115,6 +115,23 @@ func TestGitHubFetcher_FetchTree(t *testing.T) {
assert.Nil(t, err)
}

func TestGitHubFetcher_FetchReleases(t *testing.T) {
setupGitHubFetcherTest()
defer tearDownGitHubFetcherTest()

mux.HandleFunc("/repos/octokit/octokit.rb/releases", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
respondWithJSON(w, loadFixture("octokit.rb_releases.json"))
})

fetcher := &GitHubFetcher{&*client}
paths, err := fetcher.FetchReleases("octokit/octokit.rb")
assert.Contains(t, paths, "v3.2.0")
assert.Contains(t, paths, "2.0.0 Preview")
assert.NotContains(t, paths, "") // ignore tag-only releases
assert.Nil(t, err)
}

func TestGitHubFetcher_ParseFullName(t *testing.T) {
fetcher := &GitHubFetcher{}

Expand Down
14 changes: 10 additions & 4 deletions flint/remote_project.go
Expand Up @@ -13,11 +13,13 @@ type Repository struct {
type RemoteRepositoryFetcher interface {
FetchRepository(string) (*Repository, error)
FetchTree(string) ([]string, error)
FetchReleases(string) ([]string, error)
}

type RemoteProject struct {
FullName string
paths []string
releases []string
Repository
}

Expand All @@ -31,19 +33,23 @@ func (r *RemoteProject) Fetch(fetcher RemoteRepositoryFetcher) error {
if err != nil {
return err
}

r.Repository.Description = info.Description
r.Homepage = info.Homepage

paths, err := fetcher.FetchTree(r.FullName)

if err != nil {
return err

}

r.paths = paths

releases, err := fetcher.FetchReleases(r.FullName)

if err != nil {
return err
}
r.releases = releases

return nil
}

Expand All @@ -69,7 +75,7 @@ func (l *RemoteProject) CheckLicense() bool {
}

func (l *RemoteProject) CheckChangelog() bool {
return l.searchPath(regexp.MustCompile(`CHANGELOG`))
return l.searchPath(regexp.MustCompile(`CHANGELOG`)) || len(l.releases) > 1
}

func (l *RemoteProject) CheckBootstrap() bool {
Expand Down
27 changes: 27 additions & 0 deletions flint/remote_project_test.go
Expand Up @@ -90,6 +90,16 @@ func TestRemoteProjectCheckChangelog(t *testing.T) {
err = project.Fetch(fetcher)
assert.Nil(t, err)
assert.False(t, project.CheckChangelog())

project = &RemoteProject{FullName: "projects/has-releases"}
err = project.Fetch(fetcher)
assert.Nil(t, err)
assert.True(t, project.CheckChangelog())

project = &RemoteProject{FullName: "projects/no-changelog"}
err = project.Fetch(fetcher)
assert.Nil(t, err)
assert.False(t, project.CheckChangelog())
}

func TestRemoteProjectCheckBootstrap(t *testing.T) {
Expand Down Expand Up @@ -176,6 +186,23 @@ func (f *FakeProjectFetcher) FetchTree(nwo string) (paths []string, err error) {
"script/bootstrap",
"script/test",
}
case "projects/has-releases":
paths = []string{}
}

return paths, nil
}

func (f *FakeProjectFetcher) FetchReleases(nwo string) (releases []string, err error) {
switch nwo {
case "projects/has-releases":
releases = []string{
"v0.0.1",
"v1.0.0",
}
case "projects/no-changelog":
releases = []string{}
}

return releases, nil
}

0 comments on commit 20ed7c5

Please sign in to comment.