Compare commits

..

42 Commits

Author SHA1 Message Date
Olle Jonsson
4de6f52572 v1.13.2 2016-09-29 23:27:14 +02:00
Olle Jonsson
e3f7e27a63 Add bump gem to development deps (#423)
- in Gemfile
2016-09-29 23:08:23 +02:00
Petr Korolev
b027884a68 Merge pull request #420 from olleolleolle/feature/travis-with-2.4.0
Travis: Test on 2.4.0-preview2
2016-09-29 18:51:10 +03:00
Olle Jonsson
963e18820a README: Add Gitter badge (#413) 2016-09-27 22:25:35 +02:00
Olle Jonsson
dcd15d1f5d Merge pull request #421 from olleolleolle/fix/coverage-skip-logger-helper
Skip logger helper in coverage
2016-09-27 22:24:17 +02:00
Olle Jonsson
e2020bbab3 Skip logger helper in coverage 2016-09-27 22:08:18 +02:00
Olle Jonsson
725194acc0 SimpleCov config: Ignore gemfiles folder 2016-09-27 21:40:23 +02:00
Olle Jonsson
30ffc0e945 Travis: Get rid of Gemfile.lock 2016-09-27 21:31:17 +02:00
Olle Jonsson
3ab802ae7a Travis: Test on 2.4.0-preview2 2016-09-27 21:25:44 +02:00
Olle Jonsson
fac944786b Merge pull request #417 from skywinder/fix/move-deps-about
Travis: Collecting the config, gemspec: extract development deps to Gemfile
2016-09-26 16:23:37 +02:00
Olle Jonsson
88cad51b06 Travis: The bare test can not work on 2.1. Try 2.2.2 2016-09-22 19:35:52 +02:00
Olle Jonsson
f57dcd5be4 README: Explain the use of Gemfiles for older rubies 2016-09-22 19:35:31 +02:00
Olle Jonsson
7f8131d5cd Lint: avoid multi-line ternary operator 2016-09-22 19:17:23 +02:00
Olle Jonsson
04215618a2 Lint: frozen-string-literal 2016-09-22 19:16:29 +02:00
Olle Jonsson
f226343233 Rubocop rule: Disable too-modern ones 2016-09-22 19:16:00 +02:00
Olle Jonsson
5c21fc980f Rubocop setting: avoid copping the universe 2016-09-22 19:04:35 +02:00
Olle Jonsson
334fd3497a Travis: Introduce gemfiles 2016-09-22 18:50:19 +02:00
Olle Jonsson
443d59769f Ruby version file for the CircleCI tests 2016-09-22 18:41:26 +02:00
Olle Jonsson
b9c0a2f736 Travis: Give up 2016-09-22 18:37:05 +02:00
Olle Jonsson
9bd44b010f Gemfile: Try to keep rack runnable on 2.1 again again again 2016-09-22 18:33:31 +02:00
Olle Jonsson
98ddde0094 Gemfile: Try to keep rack runnable on 2.1 again again 2016-09-22 18:30:20 +02:00
Olle Jonsson
22d8113ade Gemfile: Try to keep rack runnable on 2.1 again 2016-09-22 18:29:14 +02:00
Olle Jonsson
1c69994c8a Gemfile: Try to keep rack runnable on 2.1 2016-09-22 18:27:13 +02:00
Olle Jonsson
99c58d3b94 Travis: Collecting the config
- comment
  - tighter matrix
  - pull out development dependencies into the Gemfile
2016-09-22 18:20:58 +02:00
Olle Jonsson
cdd4b7f201 Merge pull request #415 from dijonkitchen/patch-1
Update README.md
2016-09-18 13:55:04 +02:00
Jonathan Chen
94820df2f4 Update README.md 2016-09-18 06:48:52 -04:00
Olle Jonsson
e402eae344 Merge pull request #411 from olleolleolle/feature/community-gitter
CircleCI hook for Gitter notification
2016-09-08 14:10:42 +02:00
Olle Jonsson
7f3ef24b3f circle.yml: Notify chat room as well as Lobby 2016-09-05 21:48:21 +02:00
Olle Jonsson
74c752c3ce CircleCI hook for Gitter notification 2016-09-01 22:02:01 +02:00
Olle Jonsson
d4140f05c9 Merge pull request #409 from olleolleolle/specs/avoid-a-warning-by-using-stub-const
Spec: avoid Ruby warning about already-defined constant
2016-09-01 21:24:48 +02:00
Olle Jonsson
96491a21e0 Merge pull request #408 from jamesc/jc/remove-colorize
Replace GPL'd colorize gem with MIT-licensed rainbow
2016-09-01 21:15:42 +02:00
Olle Jonsson
b259b186a7 Rainbow library: do not extend String
- do not include all the rainbow presenter methods directly in the
    String class
2016-09-01 11:51:53 -07:00
Olle Jonsson
7e77fd6c57 Drop all local color method calls
- The central logging method decides the color of the output
  - pass Rubocop complaints
2016-09-01 11:50:17 -07:00
Olle Jonsson
91b5abc477 Spec: avoid warning when stubbing ARGV 2016-09-01 20:47:31 +02:00
James Casey
f647dc0d98 Change to use Rainbow instead of colorize
colorize is licensed under GPL-2 which conflicts with the MIT license of
github_changelog_generator.  This changes all usage of colorize to
rainbow which does have a compatible license (MIT)
2016-08-31 14:27:39 -07:00
Olle Jonsson
d23375f5ac Merge pull request #405 from jkeiser/jk/error2
Report actual github error when rate limit exceeded
2016-08-11 00:19:35 +02:00
Olle Jonsson
cbb435511b Merge pull request #407 from jkeiser/jk/thread-cap
Limit number of simultaneous requests to 25
2016-08-10 09:19:42 +02:00
John Keiser
27f2536a0e Limit number of simultaneous requests to 25 2016-08-09 18:42:58 -07:00
John Keiser
07f4e530a4 Report actual github error when rate limit exceeded
Also, don't report rate limit exceeded error unless the rate limit was exceeded.
2016-08-09 13:28:52 -07:00
Olle Jonsson
15de60e1d1 Merge pull request #404 from jkeiser/jk/error-message
Make error messages print on error
2016-08-09 00:26:08 +02:00
John Keiser
c66b0f9aff Make error messages print on error 2016-08-08 12:49:02 -07:00
Petr Korolev
b02e8402b3 Merge branch 'hotfix/update-changelog' 2016-07-22 11:17:55 +03:00
35 changed files with 172 additions and 181 deletions

2
.gitignore vendored
View File

@@ -7,3 +7,5 @@ coverage/
spec/*.lock spec/*.lock
doc doc
.yardoc .yardoc
Gemfile.lock
gemfiles/Gemfile.2_4_0.lock

View File

@@ -1,5 +1,12 @@
inherit_from: .rubocop_todo.yml inherit_from: .rubocop_todo.yml
AllCops:
DisplayCopNames: true
DisplayStyleGuide: true
Exclude:
- 'vendor/**/*'
- 'gemfiles/**/*'
Metrics/LineLength: Metrics/LineLength:
Enabled: false Enabled: false
@@ -53,4 +60,10 @@ Style/RegexpLiteral:
Style/MutableConstant: Style/MutableConstant:
Enabled: false Enabled: false
# "Use idx.positive? instead of idx > 0."
Style/NumericPredicate:
Enabled: false
Style/SafeNavigation:
Enabled: false

1
.ruby-version Normal file
View File

@@ -0,0 +1 @@
2.3.1

View File

@@ -1,23 +1,25 @@
language: ruby
cache: cache:
- bundler - bundler
language: ruby
before_install: before_install:
- gem update --system - gem update --system
- gem install bundler - gem install bundler
rvm:
- 2.1
script: bundle exec rake checks
matrix: matrix:
include: include:
# Test install on clean system - rvm: 2.2.2
- install: true install: true # This skips 'bundle install'
script: script: gem build github_changelog_generator && gem install *.gem
- gem build github_changelog_generator - rvm: 2.2.2
- gem install *.gem install: true # This skips 'bundle install'
- install: true script: gem build github_changelog_generator && bundle install
script: gemfile: spec/install-gem-in-bundler.gemfile
- gem build github_changelog_generator - rvm: 2.1
- bundle install --gemfile spec/install-gem-in-bundler.gemfile gemfile: gemfiles/Gemfile.with_rack16
- rvm: 2.3.1
gemfile: gemfiles/Gemfile.with_rack2
- rvm: 2.4.0-preview2
gemfile: gemfiles/Gemfile.2_4_0
notifications: notifications:
email: email:
recipients: recipients:

22
Gemfile
View File

@@ -1,15 +1,27 @@
# frozen_string_literal: true
source "https://rubygems.org" source "https://rubygems.org"
gemspec gemspec
group :test do group :development, :test do
gem "rake" gem "rake"
gem "bundler" gem "bundler"
gem "rubocop" gem "overcommit", ">= 0.31"
gem "overcommit" gem "rubocop", ">= 0.43"
end
group :development do
gem "bump"
end
group :test do
gem "coveralls", "~>0.8", require: false gem "coveralls", "~>0.8", require: false
gem "simplecov", "~>0.10", require: false gem "simplecov", "~>0.10", require: false
gem "codeclimate-test-reporter", "~>0.4" gem "codeclimate-test-reporter", "~>0.4"
# JSON 2.0.1 is ruby 2.0+ if RUBY_VERSION > "2"
gem "json", "< 2.0" gem "json", "~> 2.0", ">= 2.0.2"
else
gem "json"
end
gem "rspec", "< 4"
end end

View File

@@ -1,108 +0,0 @@
PATH
remote: .
specs:
github_changelog_generator (1.13.1)
colorize (>= 0.7)
github_api (>= 0.12)
rake (>= 10.0)
GEM
remote: https://rubygems.org/
specs:
addressable (2.4.0)
ast (2.3.0)
childprocess (0.5.9)
ffi (~> 1.0, >= 1.0.11)
codeclimate-test-reporter (0.6.0)
simplecov (>= 0.7.1, < 1.0.0)
colorize (0.8.1)
coveralls (0.8.14)
json (>= 1.8, < 3)
simplecov (~> 0.12.0)
term-ansicolor (~> 1.3)
thor (~> 0.19.1)
tins (~> 1.6.0)
descendants_tracker (0.0.4)
thread_safe (~> 0.3, >= 0.3.1)
diff-lcs (1.2.5)
docile (1.1.5)
faraday (0.9.2)
multipart-post (>= 1.2, < 3)
ffi (1.9.14)
github_api (0.14.4)
addressable (~> 2.4.0)
descendants_tracker (~> 0.0.4)
faraday (~> 0.8, < 0.10)
hashie (>= 3.4)
oauth2 (~> 1.0.0)
hashie (3.4.4)
iniparse (1.4.2)
json (1.8.3)
jwt (1.5.4)
multi_json (1.12.1)
multi_xml (0.5.5)
multipart-post (2.0.0)
oauth2 (1.0.0)
faraday (>= 0.8, < 0.10)
jwt (~> 1.0)
multi_json (~> 1.3)
multi_xml (~> 0.5)
rack (~> 1.2)
overcommit (0.34.2)
childprocess (~> 0.5.8)
iniparse (~> 1.4)
parser (2.3.1.2)
ast (~> 2.2)
powerpack (0.1.1)
rack (1.6.4)
rainbow (2.1.0)
rake (11.2.2)
rspec (3.5.0)
rspec-core (~> 3.5.0)
rspec-expectations (~> 3.5.0)
rspec-mocks (~> 3.5.0)
rspec-core (3.5.1)
rspec-support (~> 3.5.0)
rspec-expectations (3.5.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.5.0)
rspec-mocks (3.5.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.5.0)
rspec-support (3.5.0)
rubocop (0.41.2)
parser (>= 2.3.1.1, < 3.0)
powerpack (~> 0.1)
rainbow (>= 1.99.1, < 3.0)
ruby-progressbar (~> 1.7)
unicode-display_width (~> 1.0, >= 1.0.1)
ruby-progressbar (1.8.1)
simplecov (0.12.0)
docile (~> 1.1.0)
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.0)
term-ansicolor (1.3.2)
tins (~> 1.0)
thor (0.19.1)
thread_safe (0.3.5)
tins (1.6.0)
unicode-display_width (1.1.0)
PLATFORMS
ruby
DEPENDENCIES
bundler
codeclimate-test-reporter (~> 0.4)
coveralls (~> 0.8)
github_changelog_generator!
json (< 2.0)
overcommit
rake
rspec (>= 3.2)
rubocop
simplecov (~> 0.10)
BUNDLED WITH
1.12.5

View File

@@ -4,6 +4,7 @@
[![Inline docs](http://inch-ci.org/github/skywinder/github-changelog-generator.svg)](http://inch-ci.org/github/skywinder/github-changelog-generator) [![Inline docs](http://inch-ci.org/github/skywinder/github-changelog-generator.svg)](http://inch-ci.org/github/skywinder/github-changelog-generator)
[![Code Climate](https://codeclimate.com/github/skywinder/github-changelog-generator/badges/gpa.svg)](https://codeclimate.com/github/skywinder/github-changelog-generator) [![Code Climate](https://codeclimate.com/github/skywinder/github-changelog-generator/badges/gpa.svg)](https://codeclimate.com/github/skywinder/github-changelog-generator)
[![Test Coverage](https://codeclimate.com/github/skywinder/github-changelog-generator/badges/coverage.svg)](https://codeclimate.com/github/skywinder/github-changelog-generator) [![Test Coverage](https://codeclimate.com/github/skywinder/github-changelog-generator/badges/coverage.svg)](https://codeclimate.com/github/skywinder/github-changelog-generator)
[![Join the chat at https://gitter.im/github-changelog-generator/chat](https://badges.gitter.im/github-changelog-generator/chat.svg)](https://gitter.im/github-changelog-generator/chat?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
GitHub Changelog Generator ![GitHub Logo](../master/images/logo.jpg) GitHub Changelog Generator ![GitHub Logo](../master/images/logo.jpg)
================== ==================
@@ -23,7 +24,7 @@ GitHub Changelog Generator ![GitHub Logo](../master/images/logo.jpg)
### Changelog generation has never been so easy ### Changelog generation has never been so easy
**Fully automate changelog generation** - This gem generates change log file based on **tags**, **issues** and merged **pull requests** (and splits them into separate lists according labels) from :octocat: GitHub Issue Tracker. **Fully automate changelog generation** - This gem generates change log file based on **tags**, **issues** and merged **pull requests** (and splits them into separate lists according to labels) from :octocat: GitHub Issue Tracker.
Since now you don't have to fill your `CHANGELOG.md` manually: just run the script, relax and take a cup of :coffee: before your next release! :tada: Since now you don't have to fill your `CHANGELOG.md` manually: just run the script, relax and take a cup of :coffee: before your next release! :tada:
@@ -36,7 +37,9 @@ Because software tools are for people. If you dont care, why are you contribu
## Installation ## Installation
[sudo] gem install github_changelog_generator gem install github_changelog_generator
See also Troubleshooting.
## Output example ## Output example
@@ -223,6 +226,31 @@ If you're seeing this warning, please do the following:
1. Make sure you're providing an OAuth token, so you're not making requests anonymously. Using an OAuth token increases your hourly request maximum from 60 to 5000. 1. Make sure you're providing an OAuth token, so you're not making requests anonymously. Using an OAuth token increases your hourly request maximum from 60 to 5000.
2. If you have a large repo with lots of issues/PRs, you can use `--max-issues NUM` to limit the number of issues that are pulled back. For example: `--max-issues 1000` 2. If you have a large repo with lots of issues/PRs, you can use `--max-issues NUM` to limit the number of issues that are pulled back. For example: `--max-issues 1000`
- ***My Ruby version is very old, can I use this?***
When your Ruby is old, and you don't want to upgrade, and your want to
control which libraries you use, you can use Bundler.
In a Gemfile, perhaps in a non-deployed `:development` group, add this
gem:
```ruby
group :development do
gem 'github_changelog_generator', require: false
end
```
Then you can keep back dependencies like rack, which currently is only
compatible with Ruby >= 2.2.2. So, use an older version for your app by
adding a line like this to the Gemfile:
```
gem 'rack', '~> 1.6'
```
This way, you can keep on using github_changelog_generator, even if you
can't get the latest version of Ruby installed.
## Contributing ## Contributing
1. Create an issue and describe your idea 1. Create an issue and describe your idea

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
require "bundler" require "bundler"
require "bundler/gem_tasks" require "bundler/gem_tasks"
require "rubocop/rake_task" require "rubocop/rake_task"
@@ -36,4 +37,4 @@ task :copy_man_page_to_manpath do |_t|
end end
task checks: [:rubocop, :rspec] task checks: [:rubocop, :rspec]
task default: [:copy_man_page_to_manpath] task default: [:rubocop, :rspec]

View File

@@ -1,4 +1,5 @@
#! /usr/bin/env ruby #! /usr/bin/env ruby
# frozen_string_literal: true
require_relative "../lib/github_changelog_generator" require_relative "../lib/github_changelog_generator"
GitHubChangelogGenerator::ChangelogGenerator.new.run GitHubChangelogGenerator::ChangelogGenerator.new.run

View File

@@ -1,4 +1,5 @@
#! /usr/bin/env ruby #! /usr/bin/env ruby
# frozen_string_literal: true
require_relative "../lib/github_changelog_generator" require_relative "../lib/github_changelog_generator"
GitHubChangelogGenerator::ChangelogGenerator.new.run GitHubChangelogGenerator::ChangelogGenerator.new.run

8
circle.yml Normal file
View File

@@ -0,0 +1,8 @@
notify:
webhooks:
# A list of hook hashes, containing the url field
# gitter hook
- url: https://webhooks.gitter.im/e/2d81eb1ae7695fdc82c4
- url: https://webhooks.gitter.im/e/3ec6a35fad7e9991058e

3
gemfiles/Gemfile.2_4_0 Normal file
View File

@@ -0,0 +1,3 @@
eval_gemfile File.expand_path('../../Gemfile', __FILE__)
gem 'rack', '>= 2'

View File

@@ -0,0 +1,2 @@
eval_gemfile File.expand_path('../../Gemfile', __FILE__)
gem 'rack', '~> 1.6'

View File

@@ -0,0 +1,2 @@
eval_gemfile File.expand_path('../../Gemfile', __FILE__)
gem 'rack', '>= 2'

View File

@@ -1,4 +1,5 @@
# coding: utf-8 # coding: utf-8
# frozen_string_literal: true
lib = File.expand_path("../lib", __FILE__) lib = File.expand_path("../lib", __FILE__)
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
require "github_changelog_generator/version" require "github_changelog_generator/version"
@@ -24,11 +25,6 @@ Gem::Specification.new do |spec|
spec.require_paths = ["lib"] spec.require_paths = ["lib"]
spec.add_runtime_dependency "rake", ">= 10.0" spec.add_runtime_dependency "rake", ">= 10.0"
spec.add_runtime_dependency "github_api", ">= 0.12" spec.add_runtime_dependency "github_api", ">= 0.14"
spec.add_runtime_dependency "colorize", ">= 0.7" spec.add_runtime_dependency "rainbow", ">= 2.1"
spec.add_development_dependency "overcommit", ">= 0.31"
spec.add_development_dependency "rspec", ">= 3.2"
spec.add_development_dependency "bundler", ">= 1.7"
spec.add_development_dependency "rubocop", ">= 0.31"
end end

View File

@@ -1,8 +1,8 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
# frozen_string_literal: true
require "github_api" require "github_api"
require "json" require "json"
require "colorize"
require "benchmark" require "benchmark"
require_relative "github_changelog_generator/helper" require_relative "github_changelog_generator/helper"

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
module GitHubChangelogGenerator module GitHubChangelogGenerator
# A Fetcher responsible for all requests to GitHub and all basic manipulation with related data # A Fetcher responsible for all requests to GitHub and all basic manipulation with related data
# (such as filtering, validating, e.t.c) # (such as filtering, validating, e.t.c)
@@ -7,6 +8,7 @@ module GitHubChangelogGenerator
class Fetcher class Fetcher
PER_PAGE_NUMBER = 30 PER_PAGE_NUMBER = 30
MAX_SIMULTANEOUS_REQUESTS = 25
CHANGELOG_GITHUB_TOKEN = "CHANGELOG_GITHUB_TOKEN" CHANGELOG_GITHUB_TOKEN = "CHANGELOG_GITHUB_TOKEN"
GH_RATE_LIMIT_EXCEEDED_MSG = "Warning: Can't finish operation: GitHub API rate limit exceeded, change log may be " \ GH_RATE_LIMIT_EXCEEDED_MSG = "Warning: Can't finish operation: GitHub API rate limit exceeded, change log may be " \
"missing some issues. You can limit the number of issues fetched using the `--max-issues NUM` argument." "missing some issues. You can limit the number of issues fetched using the `--max-issues NUM` argument."
@@ -33,7 +35,7 @@ module GitHubChangelogGenerator
def fetch_github_token def fetch_github_token
env_var = @options[:token] ? @options[:token] : (ENV.fetch CHANGELOG_GITHUB_TOKEN, nil) env_var = @options[:token] ? @options[:token] : (ENV.fetch CHANGELOG_GITHUB_TOKEN, nil)
Helper.log.warn NO_TOKEN_PROVIDED.yellow unless env_var Helper.log.warn NO_TOKEN_PROVIDED unless env_var
env_var env_var
end end
@@ -52,11 +54,11 @@ module GitHubChangelogGenerator
begin begin
value = yield value = yield
rescue Github::Error::Unauthorized => e rescue Github::Error::Unauthorized => e
Helper.log.error e.body.red Helper.log.error e.response_message
abort "Error: wrong GitHub token" abort "Error: wrong GitHub token"
rescue Github::Error::Forbidden => e rescue Github::Error::Forbidden => e
Helper.log.warn e.body.red Helper.log.warn e.response_message
Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG
end end
value value
end end
@@ -75,9 +77,9 @@ module GitHubChangelogGenerator
end end
print_empty_line print_empty_line
if tags.count == 0 if tags.empty?
Helper.log.warn "Warning: Can't find any tags in repo.\ Helper.log.warn "Warning: Can't find any tags in repo.\
Make sure, that you push tags to remote repo via 'git push --tags'".yellow Make sure, that you push tags to remote repo via 'git push --tags'"
else else
Helper.log.info "Found #{tags.count} tags" Helper.log.info "Found #{tags.count} tags"
end end
@@ -108,8 +110,9 @@ Make sure, that you push tags to remote repo via 'git push --tags'".yellow
print_empty_line print_empty_line
Helper.log.info "Received issues: #{issues.count}" Helper.log.info "Received issues: #{issues.count}"
rescue rescue Github::Error::Forbidden => e
Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow Helper.log.warn e.error_messages.map { |m| m[:message] }.join(", ")
Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG
end end
# separate arrays of issues and pull requests: # separate arrays of issues and pull requests:
@@ -142,8 +145,9 @@ Make sure, that you push tags to remote repo via 'git push --tags'".yellow
pull_requests.concat(page) pull_requests.concat(page)
end end
print_empty_line print_empty_line
rescue rescue Github::Error::Forbidden => e
Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow Helper.log.warn e.error_messages.map { |m| m[:message] }.join(", ")
Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG
end end
Helper.log.info "Fetching merged dates: #{pull_requests.count}" Helper.log.info "Fetching merged dates: #{pull_requests.count}"
@@ -166,9 +170,8 @@ Make sure, that you push tags to remote repo via 'git push --tags'".yellow
# @return [Void] # @return [Void]
def fetch_events_async(issues) def fetch_events_async(issues)
i = 0 i = 0
max_thread_number = 50
threads = [] threads = []
issues.each_slice(max_thread_number) do |issues_slice| issues.each_slice(MAX_SIMULTANEOUS_REQUESTS) do |issues_slice|
issues_slice.each do |issue| issues_slice.each do |issue|
threads << Thread.new do threads << Thread.new do
begin begin
@@ -179,8 +182,9 @@ Make sure, that you push tags to remote repo via 'git push --tags'".yellow
response.each_page do |page| response.each_page do |page|
issue[:events].concat(page) issue[:events].concat(page)
end end
rescue rescue Github::Error::Forbidden => e
Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow Helper.log.warn e.error_messages.map { |m| m[:message] }.join(", ")
Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG
end end
print_in_same_line("Fetching events for issues and PR: #{i + 1}/#{issues.count}") print_in_same_line("Fetching events for issues and PR: #{i + 1}/#{issues.count}")
i += 1 i += 1
@@ -205,8 +209,9 @@ Make sure, that you push tags to remote repo via 'git push --tags'".yellow
commit_data = @github.git_data.commits.get @options[:user], commit_data = @github.git_data.commits.get @options[:user],
@options[:project], @options[:project],
tag["commit"]["sha"] tag["commit"]["sha"]
rescue rescue Github::Error::Forbidden => e
Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG.yellow Helper.log.warn e.error_messages.map { |m| m[:message] }.join(", ")
Helper.log.warn GH_RATE_LIMIT_EXCEEDED_MSG
end end
time_string = commit_data["committer"]["date"] time_string = commit_data["committer"]["date"]
Time.parse(time_string) Time.parse(time_string)

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
require_relative "../fetcher" require_relative "../fetcher"
require_relative "generator_generation" require_relative "generator_generation"
require_relative "generator_fetcher" require_relative "generator_fetcher"

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
module GitHubChangelogGenerator module GitHubChangelogGenerator
class Generator class Generator
# Fetch event for issues and pull requests # Fetch event for issues and pull requests
@@ -74,7 +75,7 @@ module GitHubChangelogGenerator
commit = @fetcher.fetch_commit(event) commit = @fetcher.fetch_commit(event)
issue[:actual_date] = commit[:author][:date] issue[:actual_date] = commit[:author][:date]
rescue rescue
puts "Warning: Can't fetch commit #{event[:commit_id]}. It is probably referenced from another repo.".yellow puts "Warning: Can't fetch commit #{event[:commit_id]}. It is probably referenced from another repo."
issue[:actual_date] = issue[:closed_at] issue[:actual_date] = issue[:closed_at]
end end
end end

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
module GitHubChangelogGenerator module GitHubChangelogGenerator
class Generator class Generator
# Main function to start change log generation # Main function to start change log generation
@@ -39,10 +40,10 @@ module GitHubChangelogGenerator
index2 = hash[tag2] index2 = hash[tag2]
log += generate_log_between_tags(all_tags[index1], all_tags[index2]) log += generate_log_between_tags(all_tags[index1], all_tags[index2])
else else
raise ChangelogGeneratorError, "Can't find tag #{tag2} -> exit".red raise ChangelogGeneratorError, "Can't find tag #{tag2} -> exit"
end end
else else
raise ChangelogGeneratorError, "Can't find tag #{tag1} -> exit".red raise ChangelogGeneratorError, "Can't find tag #{tag1} -> exit"
end end
log log
end end
@@ -141,7 +142,7 @@ module GitHubChangelogGenerator
(1...filtered_tags.size).each do |index| (1...filtered_tags.size).each do |index|
log += generate_log_between_tags(filtered_tags[index], filtered_tags[index - 1]) log += generate_log_between_tags(filtered_tags[index], filtered_tags[index - 1])
end end
if @filtered_tags.count != 0 if filtered_tags.any?
log += generate_log_between_tags(nil, filtered_tags.last) log += generate_log_between_tags(nil, filtered_tags.last)
end end

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
module GitHubChangelogGenerator module GitHubChangelogGenerator
class Generator class Generator
# delete all labels with labels from @options[:exclude_labels] array # delete all labels with labels from @options[:exclude_labels] array
@@ -130,11 +131,14 @@ module GitHubChangelogGenerator
end end
def filter_by_include_labels(issues) def filter_by_include_labels(issues)
filtered_issues = @options[:include_labels].nil? ? issues : issues.select do |issue| if @options[:include_labels].nil?
labels = issue.labels.map(&:name) & @options[:include_labels] issues
labels.any? else
issues.select do |issue|
labels = issue.labels.map(&:name) & @options[:include_labels]
labels.any?
end
end end
filtered_issues
end end
# General filtered function # General filtered function

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
module GitHubChangelogGenerator module GitHubChangelogGenerator
class Generator class Generator
# fetch, filter tags, fetch dates and sort them in time order # fetch, filter tags, fetch dates and sort them in time order
@@ -19,7 +20,7 @@ module GitHubChangelogGenerator
# @param [Hash] tag_name name of the tag # @param [Hash] tag_name name of the tag
# @return [Time] time of specified tag # @return [Time] time of specified tag
def get_time_of_tag(tag_name) def get_time_of_tag(tag_name)
raise ChangelogGeneratorError, "tag_name is nil".red if tag_name.nil? raise ChangelogGeneratorError, "tag_name is nil" if tag_name.nil?
name_of_tag = tag_name["name"] name_of_tag = tag_name["name"]
time_for_name = @tag_times_hash[name_of_tag] time_for_name = @tag_times_hash[name_of_tag]
@@ -99,7 +100,7 @@ module GitHubChangelogGenerator
filtered_tags = all_tags filtered_tags = all_tags
tag = @options[:due_tag] tag = @options[:due_tag]
if tag if tag
if (all_tags.count > 0) && (all_tags.map(&:name).include? tag) if all_tags.any? && all_tags.map(&:name).include?(tag)
idx = all_tags.index { |t| t.name == tag } idx = all_tags.index { |t| t.name == tag }
last_index = all_tags.count - 1 last_index = all_tags.count - 1
filtered_tags = if idx > 0 && idx < last_index filtered_tags = if idx > 0 && idx < last_index

View File

@@ -1,4 +1,7 @@
# frozen_string_literal: true
require "logger" require "logger"
require "rainbow"
module GitHubChangelogGenerator module GitHubChangelogGenerator
module Helper module Helper
# @return true if the currently running program is a unit test # @return true if the currently running program is a unit test
@@ -6,6 +9,7 @@ module GitHubChangelogGenerator
defined? SpecHelper defined? SpecHelper
end end
# :nocov:
@log ||= if test? @log ||= if test?
Logger.new(nil) # don't show any logs when running tests Logger.new(nil) # don't show any logs when running tests
else else
@@ -13,21 +17,16 @@ module GitHubChangelogGenerator
end end
@log.formatter = proc do |severity, _datetime, _progname, msg| @log.formatter = proc do |severity, _datetime, _progname, msg|
string = "#{msg}\n" string = "#{msg}\n"
case severity
if severity == "DEBUG" when "DEBUG" then Rainbow(string).magenta
string = string.magenta when "INFO" then Rainbow(string).white
elsif severity == "INFO" when "WARN" then Rainbow(string).yellow
string = string.white when "ERROR" then Rainbow(string).red
elsif severity == "WARN" when "FATAL" then Rainbow(string).red.bright
string = string.yellow else string
elsif severity == "ERROR"
string = string.red
elsif severity == "FATAL"
string = string.red.bold
end end
string
end end
# :nocov:
# Logging happens using this method # Logging happens using this method
class << self class << self

View File

@@ -1,4 +1,5 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
# frozen_string_literal: true
require "optparse" require "optparse"
require "pp" require "pp"
require_relative "version" require_relative "version"

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
require "pathname" require "pathname"
module GitHubChangelogGenerator module GitHubChangelogGenerator

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
# #
# Author:: Enrico Stahn <mail@enricostahn.com> # Author:: Enrico Stahn <mail@enricostahn.com>
# #

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
require "rake" require "rake"
require "rake/tasklib" require "rake/tasklib"
require "github_changelog_generator" require "github_changelog_generator"

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
module GitHubChangelogGenerator module GitHubChangelogGenerator
VERSION = "1.13.1" VERSION = "1.13.2"
end end

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
# #
# Author:: Enrico Stahn <mail@enricostahn.com> # Author:: Enrico Stahn <mail@enricostahn.com>
# #
@@ -28,7 +29,9 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new([
SimpleCov::Formatter::HTMLFormatter, SimpleCov::Formatter::HTMLFormatter,
CodeClimate::TestReporter::Formatter CodeClimate::TestReporter::Formatter
]) ])
SimpleCov.start SimpleCov.start do
add_filter "gemfiles/"
end
require "github_changelog_generator" require "github_changelog_generator"
require "github_changelog_generator/task" require "github_changelog_generator/task"

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
VALID_TOKEN = "0123456789abcdef" VALID_TOKEN = "0123456789abcdef"
INVALID_TOKEN = "0000000000000000" INVALID_TOKEN = "0000000000000000"

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
module GitHubChangelogGenerator module GitHubChangelogGenerator
describe Generator do describe Generator do
context "#exclude_issues_by_labels" do context "#exclude_issues_by_labels" do

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
describe GitHubChangelogGenerator::Generator do describe GitHubChangelogGenerator::Generator do
def tag_mash_with_name(tag) def tag_mash_with_name(tag)
Hashie::Mash.new.tap { |mash_tag| mash_tag.name = tag } Hashie::Mash.new.tap { |mash_tag| mash_tag.name = tag }

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
describe GitHubChangelogGenerator::ParserFile do describe GitHubChangelogGenerator::ParserFile do
describe ".github_changelog_generator" do describe ".github_changelog_generator" do
let(:options) { {} } let(:options) { {} }

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
describe GitHubChangelogGenerator::Parser do describe GitHubChangelogGenerator::Parser do
describe ".user_project_from_remote" do describe ".user_project_from_remote" do
context "when remote is type 1" do context "when remote is type 1" do
@@ -63,9 +64,10 @@ describe GitHubChangelogGenerator::Parser do
end end
end end
describe ".fetch_user_and_project" do describe ".fetch_user_and_project" do
before :each do before do
ARGV = ["https://github.com/skywinder/github-changelog-generator"] stub_const("ARGV", ["https://github.com/skywinder/github-changelog-generator"])
end end
context do context do
let(:valid_user) { "initialized_user" } let(:valid_user) { "initialized_user" }
let(:options) { { user: valid_user } } let(:options) { { user: valid_user } }

View File

@@ -1,3 +1,4 @@
# frozen_string_literal: true
# #
# Author:: Enrico Stahn <mail@enricostahn.com> # Author:: Enrico Stahn <mail@enricostahn.com>
# #