gem_release_helper 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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