gem_release_helper 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ff13664fd883a8f84e71ec0735526b42b793bcf4
4
+ data.tar.gz: eb4114d0735073d28de2438235da86066904e7a6
5
+ SHA512:
6
+ metadata.gz: 71d66bda16d7bd8be453add1f839d43c1ca558b8cfdd4ec6aa503f10963f75e23a4d5cb328aecd97292149e9844f7c4108d530cc7055cd02e65a11855d394d83
7
+ data.tar.gz: 96f1b74f48d782753241667cf6ccadbbd4c935e76a7d6b0644d905b1ff3d1ab632440f38d8473aced2570360a2e4064a9453d84b49c0605151074412a206627f
data/.travis.yml ADDED
@@ -0,0 +1,14 @@
1
+ language: ruby
2
+ rvm:
3
+ - jruby-19mode
4
+ - jruby-9.0.0.0 # NOTE: rvm 1.26.10 recognize as jruby-9.0.0pre1
5
+ env: 'JRUBY_OPTS="-Xcli.debug=true --debug"' # for test coverage
6
+ addons:
7
+ code_climate:
8
+ repo_token:
9
+ secure: "Ael9qV6oxuruF2I4l5GVm85EXmsTFJB2AxcwT3Ni2fALj+/xUdR5n9FwPxLwTqSFhLmr/ccefOIyqMDCo9LNcDc8ib7ypYHsTbNu8vZHlM5mbDA4/N5fpvahpAd532XCxOg4B90oOIbVlyalPGmO4mhCDTr17GnvPXgOfdf2zzq7xRL3gUjP7MGGLCCXhvuu6/D6+YhKCHUGymeaxFUxUeTI0h8Uempl7fhqcOyJlgMB+m7iK4Owy6sX6DWHzcYBbnWXUw0Czy47JrZHbN3YseURDpe6WTXL9eC42wo2LhMnqQH9fkMNpKRN80XE0P636ckI4nwmsPjAkV4/Q8X4oXE1Q8Muuei9ZHFV8k26GY0aaJ+zEo5ajfBXZPBQcFrhYzUuWpSym0JBCr0lEywr1DVLl1Qf/2+9782JCs8Bjvq3qTMY4AB45OqpLBScRbx0WoK03yuHLNtHLc9IftCQolxb0Wi08Q48NJmg4nsBcSaaJKlry/yr/vZ5kdKZJG8hWQfMUUjE1WP4l3gr1l2tP46s62t3B4cLcZ8wCEjzHNFKc30AfomfmABGV8M9LdRaYaNkLBaHhQVzlGJB32WDZWU5xClYDy2K6PjuXWp1BY4JcMWRkS9vAyezwRxvkXzX68DUerpUpk6+XensYcjgdOY60EYcY7FIiSm91hzB6l0="
10
+ notifications:
11
+ slack:
12
+ secure: DWXP4y5GvW5EyuZbcpXH3pnbb4lycfQ3SnxFUErjNnZacKRXLf1r93D5nT9GFvDERU7T3LIm8qwei6h3O5YNQDU1TKOhpWrGgkVYh0/VsyJhVeKSAErurmuMrBaloZ3pfszaTIK+v/WFj8E+25w1QLJaNoQ5aMCsq0r+ipuW/nDwX9HFAuLshjSy0ALmHmdha67iTZidfMLW8JbaAf1BnbmqHjFI2QuzSU01Yl2hOdY8k4JBpVtR5ntQJEaBVd+O07oNiY+GdETAD2n7jViJInjTz2Oy5c6j1ijcIknnzzlufFA7+fBmzXYQlcVOJE//DpfdAjYxlm6qKIoTKlI8JRbfX2e94qGsaLAi4OrDIdChlp+oF1Id3VDPnf3ckz1s5b+tbBtjbu5FO2+i6GvimQPysj3af2RvUZ9UkzQEgOxy+sT9STNm8Aa/2zg+TgKHvZ2E89YmMO57k/pac/Bn1BiAkActKu/gZdun6l4PC7/0qUbEI/ndnNMbpKx5gOgmpiIWkTAMo6oDbigygUwduonsoKx0oT9rm8q1AQA6PrxORj7+5cd6kmEaPvSvZS4oiSVwJvgs4RLp65grG6TxmHDzBizbJlEveDvZ9sgG9wgH7/ihtqKVG1KxXycierEJUoYvN0IUDKYQWMzzNKl5rSw58lHDEu606U15gUk5mXY=
13
+ jdk:
14
+ - oraclejdk8
data/CHANGELOG.md ADDED
@@ -0,0 +1,29 @@
1
+ ## 1.0.0 - 2016-07-13
2
+
3
+ Forked and renamed as "gem_release_helper".
4
+
5
+ ## 0.0.6 - 2015-09-09
6
+
7
+ * [fix] [gemfile] Fix 0.x-latest gemfile [#6](https://github.com/everyleaf/everyleaf-embulk_helper/pull/6)
8
+
9
+ ## 0.0.5 - 2015-09-08
10
+
11
+ * [improve] [travis] Modify template to test Embulk 0.7.x matrix [#5](https://github.com/everyleaf/everyleaf-embulk_helper/pull/5)
12
+
13
+ ## 0.0.4 - 2015-08-19
14
+ * [improve] Ignore errors on -latest versions [#4](https://github.com/everyleaf/everyleaf-embulk_helper/pull/4)
15
+
16
+ ## 0.0.3 - 2015-08-18
17
+
18
+ * [improve] travis: Initial travis.yml template has allow_failures Embulk 0.6.22 [#3](https://github.com/everyleaf/everyleaf-embulk_helper/pull/3)
19
+ * [improve] gemfiles: Genarates embulk-0.x-latest gemfile [#3](https://github.com/everyleaf/everyleaf-embulk_helper/pull/3)
20
+
21
+ ## 0.0.2 - 2015-08-11
22
+
23
+ * [fix] Fix gemspec path within generated gemfile template [#2](https://github.com/everyleaf/everyleaf-embulk_helper/pull/2)
24
+ * [improve] generage:changelog can accept `CURRENT_VER` and `NEXT_VER` environment variable instead of auto detection
25
+
26
+ ## 0.0.1 - 2015-08-11
27
+
28
+ The first release!!
29
+
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,57 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ gem_release_helper (1.0.0)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ codeclimate-test-reporter (0.4.7)
10
+ simplecov (>= 0.7.1, < 1.0.0)
11
+ coderay (1.1.0)
12
+ docile (1.1.5)
13
+ ffi (1.9.10-java)
14
+ json (1.8.3)
15
+ json (1.8.3-java)
16
+ method_source (0.8.2)
17
+ power_assert (0.2.3)
18
+ pry (0.10.1)
19
+ coderay (~> 1.1.0)
20
+ method_source (~> 0.8.1)
21
+ slop (~> 3.4)
22
+ pry (0.10.1-java)
23
+ coderay (~> 1.1.0)
24
+ method_source (~> 0.8.1)
25
+ slop (~> 3.4)
26
+ spoon (~> 0.0)
27
+ rake (10.4.2)
28
+ rr (1.1.2)
29
+ simplecov (0.10.0)
30
+ docile (~> 1.1.0)
31
+ json (~> 1.8)
32
+ simplecov-html (~> 0.10.0)
33
+ simplecov-html (0.10.0)
34
+ slop (3.6.0)
35
+ spoon (0.0.4)
36
+ ffi
37
+ test-unit (3.1.2)
38
+ power_assert
39
+ test-unit-rr (1.0.3)
40
+ rr (>= 1.1.1)
41
+ test-unit (>= 2.5.2)
42
+
43
+ PLATFORMS
44
+ java
45
+ ruby
46
+
47
+ DEPENDENCIES
48
+ bundler (~> 1.7)
49
+ codeclimate-test-reporter
50
+ gem_release_helper!
51
+ pry
52
+ rake (~> 10.0)
53
+ test-unit
54
+ test-unit-rr
55
+
56
+ BUNDLED WITH
57
+ 1.12.5
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 uu59
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,84 @@
1
+ [![Build Status](https://travis-ci.org/uu59/gem_release_helper.svg?branch=master)](https://travis-ci.org/uu59/gem_release_helper)
2
+ [![Gem Version](https://badge.fury.io/rb/gem_release_helper.svg)](http://badge.fury.io/rb/gem_release_helper)
3
+ [![Code Climate](https://codeclimate.com/github/uu59/gem_release_helper/badges/gpa.svg)](https://codeclimate.com/github/uu59/gem_release_helper)
4
+ [![Test Coverage](https://codeclimate.com/github/uu59/gem_release_helper/badges/coverage.svg)](https://codeclimate.com/github/uu59/gem_release_helper/coverage)
5
+
6
+ # GemReleaseHelper
7
+
8
+
9
+
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ ```ruby
15
+ gem 'gem_release_helper'
16
+ ```
17
+
18
+ And then execute:
19
+
20
+ $ bundle
21
+
22
+ Or install it yourself as:
23
+
24
+ $ gem install gem_release_helper
25
+
26
+ Load rake tasks at your Rakefile:
27
+
28
+ require "bundler/gem_tasks"
29
+ require "gem_release_helper/tasks"
30
+
31
+ ## Usage
32
+
33
+ $ bundle exec rake -T
34
+ rake build # Build embulk-input-your-plugin-0.1.0.gem into the pkg directory
35
+ rake generate:bump_version # Bump version
36
+ rake generate:changelog # Generate CHANGELOG.md from previous release
37
+ rake generate:prepare_release # Generate chengelog then bump version
38
+ rake install # Build and install embulk-input-your-plugin-0.1.0.gem into system gems
39
+ rake release # Create tag v0.1.0 and build and push embulk-input-your-plugin-0.1.0.gem to Rubygems
40
+
41
+ ### generate:gemfiles
42
+
43
+ $ mkdir gemfiles
44
+ $ cat > gemfiles/template.erb
45
+ source 'https://rubygems.org/'
46
+ gemspec :path => '../'
47
+
48
+ gem "embulk", "<%= version %>"
49
+
50
+ $ tree gemfiles
51
+ gemfiles
52
+ └── template.erb
53
+
54
+ 0 directories, 1 file
55
+ $ bundle exec rake generate:gemfiles MIN_VERSION=0.6.10
56
+ I, [2015-08-11T11:03:37.202083 #10238] INFO -- : Generate Embulk gemfiles from '0.6.10' to latest
57
+ I, [2015-08-11T11:03:38.966539 #10238] INFO -- : Updated Gemfiles '0.6.10' to '0.6.21'
58
+ $ tree gemfiles
59
+ gemfiles
60
+ ├── embulk-0.6.10
61
+ ├── embulk-0.6.11
62
+ ├── embulk-0.6.12
63
+ ├── embulk-0.6.13
64
+ ├── embulk-0.6.14
65
+ ├── embulk-0.6.15
66
+ ├── embulk-0.6.16
67
+ ├── embulk-0.6.17
68
+ ├── embulk-0.6.18
69
+ ├── embulk-0.6.19
70
+ ├── embulk-0.6.20
71
+ ├── embulk-0.6.21
72
+ ├── embulk-latest
73
+ └── template.erb
74
+ $ cat gemfiles/embulk-latest
75
+ source 'https://rubygems.org/'
76
+ gemspec :path => '../'
77
+
78
+ gem "embulk", "> 0.6.10"
79
+
80
+ $ cat gemfiles/embulk-0.6.18
81
+ source 'https://rubygems.org/'
82
+ gemspec :path => '../'
83
+
84
+ gem "embulk", "0.6.18"
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ task :default => :test
4
+
5
+ desc "Run tests"
6
+ task :test do
7
+ ruby("test/run-test.rb", "--use-color=yes", "--collector=dir")
8
+ end
data/Rakefile.test ADDED
@@ -0,0 +1,7 @@
1
+ $LOAD_PATH.unshift "./lib"
2
+ require "gem_release_helper/tasks"
3
+
4
+ GemReleaseHelper::Tasks.install({
5
+ gemspec: "./gem_release_helper.gemspec",
6
+ github_name: "uu59/gem_release_helper",
7
+ })
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'gem_release_helper/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "gem_release_helper"
8
+ spec.version = GemReleaseHelper::VERSION
9
+ spec.authors = ["yoshihara", "uu59"]
10
+ spec.email = ["h.yoshihara@everyleaf.com", "k@uu59.org"]
11
+ spec.summary = %q{Add some handy helpers for developing Embulk plugins}
12
+ spec.description = %q{Add some handy helpers for developing Embulk plugins}
13
+ spec.homepage = "https://github.com/uu59/gem_release_helper"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "test-unit"
24
+ spec.add_development_dependency "test-unit-rr"
25
+ spec.add_development_dependency "pry"
26
+ spec.add_development_dependency 'codeclimate-test-reporter'
27
+ end
@@ -0,0 +1,4 @@
1
+ require "gem_release_helper/version"
2
+
3
+ module GemReleaseHelper
4
+ end
@@ -0,0 +1,22 @@
1
+ require "gem_release_helper/tasks/common"
2
+
3
+ module GemReleaseHelper
4
+ module Tasks
5
+ def self.tasks
6
+ @tasks ||= []
7
+ end
8
+
9
+ def self.register(task_class)
10
+ tasks << task_class
11
+ end
12
+
13
+ def self.install(options = {})
14
+ tasks.each do |task_class|
15
+ task_class.new(options).install_tasks
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ dir = File.expand_path("../tasks", __FILE__)
22
+ Dir["#{dir}/**/*.rb"].each{|f| require f}
@@ -0,0 +1,71 @@
1
+ require "pathname"
2
+ require "open-uri"
3
+ require "logger"
4
+ require "rake"
5
+ require "erb"
6
+ require "json"
7
+ require "rubygems"
8
+
9
+ module GemReleaseHelper
10
+ module Tasks
11
+ module Common
12
+ class OptionError < StandardError; end
13
+
14
+ include Rake::DSL
15
+
16
+ attr_reader :options
17
+
18
+ def initialize(options = {})
19
+ raise "options should be a Hash, given #{options.class}: #{options} " unless options.is_a?(Hash)
20
+ @options = options
21
+ validate_options
22
+ end
23
+
24
+ def self.included(klass)
25
+ Tasks.register(klass)
26
+ end
27
+
28
+ def install_tasks
29
+ raise NotImplementedError
30
+ end
31
+
32
+ def validate_options
33
+ raise OptionError, "gemspec file path is required" unless options[:gemspec]
34
+ raise OptionError, "gemspec file '#{options[:gemspec]}' is not found" unless File.exists?(options[:gemspec])
35
+
36
+ required_options.map(&:to_sym).each do |opt|
37
+ raise OptionError, "#{opt} is required" unless options[opt]
38
+ end
39
+ end
40
+
41
+ def logger
42
+ ::Logger.new(STDERR)
43
+ end
44
+
45
+ def gemspec_path
46
+ Pathname.new(File.expand_path(options[:gemspec]))
47
+ end
48
+
49
+ def root_dir
50
+ gemspec_path.dirname
51
+ end
52
+
53
+ def gemfiles_dir
54
+ root_dir.join("gemfiles")
55
+ end
56
+
57
+ def required_options
58
+ [] # Implement this in subclass if needed
59
+ end
60
+
61
+ def embulk_tags
62
+ @embulk_tags ||= JSON.parse(open("https://api.github.com/repos/embulk/embulk/tags").read)
63
+ end
64
+
65
+ def embulk_versions
66
+ embulk_tags.map{|tag| Gem::Version.new(tag["name"][/v(.*)/, 1])}.sort
67
+ end
68
+ end
69
+ end
70
+ end
71
+
@@ -0,0 +1,7 @@
1
+ module GemReleaseHelper
2
+ module Tasks
3
+ module Generator
4
+ end
5
+ end
6
+ end
7
+
@@ -0,0 +1,120 @@
1
+ require "gem_release_helper/tasks/common"
2
+
3
+ module GemReleaseHelper
4
+ module Tasks
5
+ module Generator
6
+ class Changelog
7
+ include Tasks::Common
8
+
9
+ DEFAULT_CHANGELOG_TEMPLATE = "changelog.erb".freeze
10
+
11
+ def install_tasks
12
+ namespace :generate do
13
+ desc "Generate chengelog then bump version"
14
+ task :prepare_release => [:changelog, :bump_version]
15
+
16
+ desc "Generate CHANGELOG.md from previous release"
17
+ task :changelog do
18
+ changelog
19
+ end
20
+
21
+ desc "Bump version. UP=major to do major version up, UP=minor, UP=patch(default) so on."
22
+ task :bump_version do
23
+ bump_version
24
+ update_gemfile_lock
25
+ end
26
+ end
27
+ end
28
+
29
+ def changelog
30
+ content = new_changelog
31
+ File.open(changelog_path, "w") do |f|
32
+ f.write content
33
+ end
34
+ end
35
+
36
+ def bump_version
37
+ logger.info "Version bump '#{current_version}' to '#{next_version}'"
38
+ old_content = gemspec_path.read
39
+ new_content = old_content.gsub(/(spec\.version += *)".*?"/, %Q!\\1"#{next_version}"!)
40
+ File.open(gemspec_path, "w") do |f|
41
+ f.write new_content
42
+ end
43
+ end
44
+
45
+ private
46
+
47
+ def required_options
48
+ %w(github_name)
49
+ end
50
+
51
+ def current_version
52
+ ENV["CURRENT_VER"] || Gem::Version.new(gemspec_path.read[/spec\.version += *"([0-9]+\.[0-9]+\.[0-9]+)"/, 1])
53
+ end
54
+
55
+ def next_version
56
+ return ENV["NEXT_VER"] if ENV["NEXT_VER"]
57
+ major, minor, patch = current_version.segments
58
+ ver = case version_target
59
+ when "patch"
60
+ [major, minor, patch + 1].join(".")
61
+ when "minor"
62
+ [major, minor + 1, 0].join(".")
63
+ when "major"
64
+ [major + 1, 0, 0].join(".")
65
+ end
66
+
67
+ Gem::Version.new(ver)
68
+ end
69
+
70
+ def version_target
71
+ ENV["UP"] || options[:version_target] || "patch"
72
+ end
73
+
74
+ def update_gemfile_lock
75
+ system("bundle install")
76
+ end
77
+
78
+ def github_name
79
+ options[:github_name]
80
+ end
81
+
82
+ def pull_request_numbers
83
+ sync_git_repo
84
+ `git log v#{current_version}..origin/master --oneline`.scan(/#[0-9]+/).map do |num_with_hash|
85
+ num_with_hash[/[0-9]+/]
86
+ end
87
+ end
88
+
89
+ def pull_request_info(number)
90
+ body = open("https://api.github.com/repos/#{github_name}/issues/#{number}").read
91
+ JSON.parse(body)
92
+ end
93
+
94
+ def changes
95
+ pull_request_numbers.map do |number|
96
+ payload = pull_request_info(number)
97
+ "* [] #{payload["title"]} [##{number}](https://github.com/#{github_name}/pull/#{number})"
98
+ end
99
+ end
100
+
101
+ def new_changelog
102
+ <<-HEADER
103
+ ## #{next_version} - #{Time.now.strftime("%Y-%m-%d")}
104
+ #{changes.join("\n")}
105
+
106
+ #{changelog_path.read.chomp}
107
+ HEADER
108
+ end
109
+
110
+ def sync_git_repo
111
+ system('git fetch --all')
112
+ end
113
+
114
+ def changelog_path
115
+ root_dir.join("CHANGELOG.md")
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end
@@ -0,0 +1,96 @@
1
+ require "gem_release_helper/tasks/common"
2
+
3
+ module GemReleaseHelper
4
+ module Tasks
5
+ module Generator
6
+ class Gemfiles
7
+ include Tasks::Common
8
+
9
+ DEFAULT_EMBULK_GEMFILE_TEMPLATE = "gemfiles/template.erb".freeze
10
+
11
+ def install_tasks
12
+ namespace :generate do
13
+ desc "Generate gemfiles to test this plugin with released Embulk versions (since MIN_VERSION)"
14
+ task :gemfiles do
15
+ gemfiles
16
+ end
17
+ end
18
+ end
19
+
20
+ def gemfiles
21
+ logger.info "Generate Embulk gemfiles from '#{min_version}' to latest"
22
+ init
23
+ create_gemfiles
24
+ logger.info "Updated Gemfiles '#{min_version}' to '#{embulk_versions.max}'"
25
+ end
26
+
27
+ private
28
+
29
+ def init
30
+ FileUtils.mkdir_p File.dirname(gemfile_template_path)
31
+ unless File.exists?(gemfile_template_path)
32
+ logger.info "Generate gemfiles template file (#{gemfile_template_path})"
33
+ File.open(gemfile_template_path, "w") do |f|
34
+ f.write initial_template
35
+ end
36
+ end
37
+ end
38
+
39
+ def initial_template
40
+ <<-ERB
41
+ source 'https://rubygems.org/'
42
+ gemspec :path => '#{gemspec_path.dirname.relative_path_from(gemfiles_dir)}/'
43
+
44
+ gem "embulk", "<%= version %>"
45
+ ERB
46
+ end
47
+
48
+ def create_gemfiles
49
+ FileUtils.mkdir_p(gemfiles_dir)
50
+
51
+ Dir[gemfiles_dir.join("embulk-*")].each{|f| File.unlink(f)}
52
+
53
+ target_versions.each do |version|
54
+ create_gemfile(version)
55
+ end
56
+
57
+ # e.g. embulk-0.6-latest
58
+ target_versions_without_patch.each do |version|
59
+ create_gemfile("~> #{version}", "#{version}-latest")
60
+ end
61
+
62
+ # embulk-latest
63
+ create_gemfile("> #{min_version}", "latest")
64
+ end
65
+
66
+ def create_gemfile(version, name = nil)
67
+ erb = ERB.new(gemfile_template_path.read)
68
+ File.open(gemfiles_dir.join("embulk-#{name || version}"), "w") do |f|
69
+ f.write erb.result(binding())
70
+ end
71
+ end
72
+
73
+ def min_version
74
+ Gem::Version.new(ENV["MIN_VERSION"] || options[:min_version] || "0.0.1")
75
+ end
76
+
77
+ def gemfile_template_path
78
+ root_dir.join(options[:gemfile_template] || DEFAULT_EMBULK_GEMFILE_TEMPLATE)
79
+ end
80
+
81
+ def target_versions
82
+ embulk_versions.find_all do |version|
83
+ version >= min_version
84
+ end
85
+ end
86
+
87
+ def target_versions_without_patch
88
+ target_versions.map do |version|
89
+ major, minor, _ = version.segments
90
+ Gem::Version.new([major, minor, 0].join(".")) # NOTE: "~> 0.1.0" -> 0.1.x (< 0.2) / "~> 0.1" -> 0.x (< 1.0)
91
+ end.uniq
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,3 @@
1
+ module GemReleaseHelper
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,152 @@
1
+ module GemReleaseHelper
2
+ module Tasks
3
+ module Generator
4
+ class TestChangelog < Test::Unit::TestCase
5
+ def setup
6
+ FileUtils.touch(gemspec_path)
7
+
8
+ @task = Changelog.new(options)
9
+ mute_logger(@task)
10
+
11
+ File.open(gemspec_path, "w") do |f|
12
+ f.write <<-SPEC
13
+ spec.version = "0.1.2"
14
+ SPEC
15
+ end
16
+ end
17
+
18
+ def test_task_installed
19
+ GemReleaseHelper::Tasks.install(options)
20
+ tasks = Rake::Task.tasks.find_all do |task|
21
+ %w(generate:prepare_release generate:changelog generate:bump_version).include?(task.name)
22
+ end
23
+ assert_equal(3, tasks.length)
24
+ ensure
25
+ Rake::Task.clear
26
+ end
27
+
28
+ class TestChangelog < self
29
+ def setup
30
+ super
31
+ stub(@task).sync_git_repo {}
32
+ File.open(changelog_path, "w") do |f|
33
+ f.write old_content
34
+ end
35
+ end
36
+
37
+ def test_changelog_content
38
+ stub(@task).changes { [
39
+ "foo",
40
+ "bar",
41
+ ]}
42
+ @task.changelog
43
+
44
+ new_content = changelog_path.read
45
+ assert new_content.include?(old_content)
46
+ assert new_content.include?("foo")
47
+ assert new_content.include?("bar")
48
+ end
49
+
50
+ def test_task_installed
51
+ any_instance_of(Changelog) do |klass|
52
+ mock(klass).changelog
53
+ end
54
+ Tasks.install(options)
55
+ task = Rake::Task.tasks.find {|task| task.name == "generate:changelog"}
56
+ task.execute
57
+ ensure
58
+ Rake::Task.clear
59
+ end
60
+
61
+ private
62
+
63
+ def changelog_path
64
+ @task.root_dir.join("CHANGELOG.md")
65
+ end
66
+
67
+ def old_content
68
+ <<-TXT
69
+ ## 0.0.1 - 1999-12-25
70
+ Merry Xmas!
71
+ TXT
72
+ end
73
+ end
74
+
75
+ class TestBumpVersion < self
76
+ def test_bump_version_task
77
+ any_instance_of(Changelog) do |klass|
78
+ mock(klass).bump_version
79
+ mock(klass).update_gemfile_lock
80
+ end
81
+ Tasks.install(options)
82
+ task = Rake::Task.tasks.find {|task| task.name == "generate:bump_version"}
83
+ task.execute
84
+ ensure
85
+ Rake::Task.clear
86
+ end
87
+
88
+ def test_without_option
89
+ @task = Changelog.new(options)
90
+ mute_logger(@task)
91
+
92
+ @task.bump_version
93
+
94
+ assert_equal(<<-SPEC, gemspec_path.read)
95
+ spec.version = "0.1.3"
96
+ SPEC
97
+ end
98
+
99
+ def test_with_patch
100
+ @task = Changelog.new(options.merge(version_target: "patch"))
101
+ mute_logger(@task)
102
+
103
+ @task.bump_version
104
+
105
+ assert_equal(<<-SPEC, gemspec_path.read)
106
+ spec.version = "0.1.3"
107
+ SPEC
108
+ end
109
+
110
+ def test_with_minor
111
+ @task = Changelog.new(options.merge(version_target: "minor"))
112
+ mute_logger(@task)
113
+
114
+ @task.bump_version
115
+
116
+ assert_equal(<<-SPEC, gemspec_path.read)
117
+ spec.version = "0.2.0"
118
+ SPEC
119
+ end
120
+
121
+ def test_with_major
122
+ @task = Changelog.new(options.merge(version_target: "major"))
123
+ mute_logger(@task)
124
+
125
+ @task.bump_version
126
+
127
+ assert_equal(<<-SPEC, gemspec_path.read)
128
+ spec.version = "1.0.0"
129
+ SPEC
130
+ end
131
+ end
132
+
133
+ private
134
+
135
+ def gemspec_path
136
+ Pathname.new("/tmp/changelog.gemspec")
137
+ end
138
+
139
+ def options
140
+ {
141
+ gemspec: gemspec_path.to_s,
142
+ github_name: "uu59/gem_release_helper",
143
+ }
144
+ end
145
+
146
+ def mute_logger(task)
147
+ stub(task).logger { ::Logger.new(File::NULL) }
148
+ end
149
+ end
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,156 @@
1
+ module GemReleaseHelper
2
+ module Tasks
3
+ module Generator
4
+ class TestGemfiles < Test::Unit::TestCase
5
+ def setup
6
+ FileUtils.touch(gemspec)
7
+
8
+ @task = Gemfiles.new(options)
9
+ mute_logger(@task)
10
+ template = Pathname.new("/tmp/gem.erb")
11
+ stub(@task).gemfile_template_path { template }
12
+ File.open(template, "w") do |f|
13
+ f.write <<-ERB
14
+ gem "embulk", "<%= version %>"
15
+ ERB
16
+ end
17
+ stub(@task).embulk_versions { embulk_versions }
18
+ end
19
+
20
+ class TestMinVersion < self
21
+ def test_without_specified
22
+ @task.gemfiles
23
+ files = Dir["#{@task.root_dir}/gemfiles/embulk-*"]
24
+
25
+ # all versions + minor versions + latest version
26
+ assert_equal(embulk_versions.length + minor_versions.length + 1, files.length)
27
+ end
28
+
29
+ def test_0_1_1_with_env
30
+ ENV["MIN_VERSION"] = "0.1.1"
31
+ @task.gemfiles
32
+ files = Dir["#{@task.root_dir}/gemfiles/embulk-*"]
33
+
34
+ # 0.1.1 + 0.1.2 + 0.1-latest + 0.2.0 + 0.2-latest + latest version
35
+ assert_equal(6, files.length)
36
+ ensure
37
+ ENV.delete("MIN_VERSION")
38
+ end
39
+
40
+ def test_0_1_1_with_options
41
+ stub(@task).options { options.merge(min_version: "0.1.1") }
42
+
43
+ @task.gemfiles
44
+ files = Dir["#{@task.root_dir}/gemfiles/embulk-*"]
45
+
46
+ # 0.1.1 + 0.1.2 + 0.1-latest + 0.2.0 + 0.2-latest + latest version
47
+ assert_equal(6, files.length)
48
+ end
49
+
50
+ def minor_versions
51
+ @task.send(:target_versions_without_patch)
52
+ end
53
+ end
54
+
55
+ class TestContent < self
56
+ def test_content_latest
57
+ @task.gemfiles
58
+ content = @task.root_dir.join("gemfiles/embulk-latest").read
59
+ assert_equal(<<-TXT, content)
60
+ gem "embulk", "> 0.0.1"
61
+ TXT
62
+ end
63
+
64
+ def test_content_0_1_2
65
+ @task.gemfiles
66
+ content = @task.root_dir.join("gemfiles/embulk-0.1.2").read
67
+ assert_equal(<<-TXT, content)
68
+ gem "embulk", "0.1.2"
69
+ TXT
70
+ end
71
+ end
72
+
73
+ class TestInitialContent < self
74
+ def setup
75
+ FileUtils.mkdir_p root
76
+ FileUtils.touch gemspec_path
77
+
78
+ task = Gemfiles.new(options.merge({
79
+ github_name: "dummy/dummy",
80
+ gemspec: gemspec_path,
81
+ gemfile_template_path: gemfile_template_path,
82
+ }))
83
+ mute_logger(task)
84
+ task.send(:init)
85
+ end
86
+
87
+ def teardown
88
+ FileUtils.rm_rf root
89
+ end
90
+
91
+ def test_relative_path
92
+ content = File.read(gemfile_template_path)
93
+ assert content.include?("path => '../'") # the gemspec path from each gemfiles/* as relative
94
+ end
95
+
96
+ def test_embulk_version_contain
97
+ content = File.read(gemfile_template_path)
98
+ assert content.include?(%Q|gem "embulk", "<%= version %>"|)
99
+ end
100
+
101
+ private
102
+
103
+ def gemfile_template_path
104
+ root.join("gemfiles/template.erb")
105
+ end
106
+
107
+ def root
108
+ Pathname.new("/tmp/foo")
109
+ end
110
+
111
+ def gemspec_path
112
+ root.join("bar.spec")
113
+ end
114
+ end
115
+
116
+ def test_task_installed
117
+ GemReleaseHelper::Tasks.install(options)
118
+ gemfiles_task = Rake::Task.tasks.find do |task|
119
+ task.name == "generate:gemfiles"
120
+ end
121
+ assert gemfiles_task
122
+ ensure
123
+ Rake::Task.clear
124
+ end
125
+
126
+ def test_gemfiles_create
127
+ @task.gemfiles
128
+ files = Dir["#{@task.root_dir}/gemfiles/embulk-*"]
129
+
130
+ assert_false(files.empty?)
131
+ end
132
+
133
+ private
134
+
135
+ def gemspec
136
+ "/tmp/foo.gemspec"
137
+ end
138
+
139
+ def embulk_versions
140
+ %W(0.1.0 0.1.1 0.1.2 0.2.0).map{|v| Gem::Version.new(v)}
141
+ end
142
+
143
+ def options
144
+ {
145
+ gemspec: gemspec,
146
+ github_name: "uu59/gem_release_helper",
147
+ }
148
+ end
149
+
150
+ def mute_logger(task)
151
+ stub(task).logger { ::Logger.new(File::NULL) }
152
+ end
153
+ end
154
+ end
155
+ end
156
+ end
data/test/run-test.rb ADDED
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ base_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
4
+ lib_dir = File.join(base_dir, "lib")
5
+ test_dir = File.join(base_dir, "test")
6
+
7
+ require "test-unit"
8
+ require "test/unit/rr"
9
+ require "codeclimate-test-reporter"
10
+ require "pry"
11
+
12
+ $LOAD_PATH.unshift(lib_dir)
13
+ $LOAD_PATH.unshift(test_dir)
14
+
15
+ ENV["TEST_UNIT_MAX_DIFF_TARGET_STRING_SIZE"] ||= "5000"
16
+
17
+ CodeClimate::TestReporter.start
18
+
19
+ require "gem_release_helper/tasks"
20
+
21
+ exit Test::Unit::AutoRunner.run(true, test_dir)
metadata ADDED
@@ -0,0 +1,152 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gem_release_helper
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - yoshihara
8
+ - uu59
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-07-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.7'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.7'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '10.0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '10.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: test-unit
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: test-unit-rr
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: pry
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: codeclimate-test-reporter
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ description: Add some handy helpers for developing Embulk plugins
99
+ email:
100
+ - h.yoshihara@everyleaf.com
101
+ - k@uu59.org
102
+ executables: []
103
+ extensions: []
104
+ extra_rdoc_files: []
105
+ files:
106
+ - ".travis.yml"
107
+ - CHANGELOG.md
108
+ - Gemfile
109
+ - Gemfile.lock
110
+ - LICENSE.txt
111
+ - README.md
112
+ - Rakefile
113
+ - Rakefile.test
114
+ - gem_release_helper.gemspec
115
+ - lib/gem_release_helper.rb
116
+ - lib/gem_release_helper/tasks.rb
117
+ - lib/gem_release_helper/tasks/common.rb
118
+ - lib/gem_release_helper/tasks/generator.rb
119
+ - lib/gem_release_helper/tasks/generator/changelog.rb
120
+ - lib/gem_release_helper/tasks/generator/gemfile.rb
121
+ - lib/gem_release_helper/version.rb
122
+ - test/gem_release_helper/tasks/generator/test_changelog.rb
123
+ - test/gem_release_helper/tasks/generator/test_gemfiles.rb
124
+ - test/run-test.rb
125
+ homepage: https://github.com/uu59/gem_release_helper
126
+ licenses:
127
+ - MIT
128
+ metadata: {}
129
+ post_install_message:
130
+ rdoc_options: []
131
+ require_paths:
132
+ - lib
133
+ required_ruby_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ required_rubygems_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ requirements: []
144
+ rubyforge_project:
145
+ rubygems_version: 2.5.1
146
+ signing_key:
147
+ specification_version: 4
148
+ summary: Add some handy helpers for developing Embulk plugins
149
+ test_files:
150
+ - test/gem_release_helper/tasks/generator/test_changelog.rb
151
+ - test/gem_release_helper/tasks/generator/test_gemfiles.rb
152
+ - test/run-test.rb