mr_bump 0.0.10 → 0.1.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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NDljMWFkOGIzNmMxZDViNWNmODNiZTdmMjYxNzg2OWJjYmE0NGNiNw==
4
+ YjZmNTY4ODM4MjMyNzFiNmE4MDY2MWVlOWJmN2YwODhlYzcwYmQwYg==
5
5
  data.tar.gz: !binary |-
6
- ZGFiZTIwNzI4Njk2YjFhMzA3OTkwNzY4YzI2ZmRlMjdjMjM4NjZlYw==
6
+ ZDZiNWQwYmJiNmJkMzMzZDYzNjZiMmQyNDJhZmQwZmM5Y2Q0ODRhMg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZjM5NjZjZjRjODcyNjRkMjg4ZGYxN2E3MDgyOTk0YTM0YTQxNmY2ZWU1MTc0
10
- MjZmM2RiNWU1ZDdkMDllYWQyM2UxZjg3ZGJmM2UyYTg0ZTMxOTU2N2FlOGM5
11
- ZTJhNTY1OTg0MzFmYmJmMTJkMGE5MjViNTBhOTQ5MDhlZjkxMWY=
9
+ NGIzNTUwNDc2OTAzOTFhNWY4OGI5MWIyODczMTdkODliYTg2MmUxMWEwNzgx
10
+ YWE0Mzk1OTA3OWZhMDY5ZWEyZmI3MzIyYTYzMWVkZjdhYjc1NTMxMTE5ZjY3
11
+ NWU4M2U2ODY0OTMwNjExODRiOTFiZmIwYzkzNTRiNWM0YTJlYjA=
12
12
  data.tar.gz: !binary |-
13
- ODUxNjNlN2UyMmYzMjAzZjgyMjk0ZThhNDEyYzk3ZjI1ZTUwZWE1NDU0ZTIy
14
- MzY3ZGUzZGJiNmViYzQ5ZGZjOGE3NzllYmM3ZjM1NmQ1MjBkMDEwNDBjNzJm
15
- NGMyYjViYmViNjQ1NWYwNWE2ZDQ0ZGM2ZDZkOWQyMTQ0NDlmZTA=
13
+ ODg4MzE1MzZmZGQzYjJiYTk0Y2IyMWJhNDVjODFkNWQyZmMzMDA2Zjg2MzFl
14
+ ZTlkZjczY2Y2M2JjMmUyYTgzOGFmOWQ3YTdkNjI5OTI2MTMwMDY4ZWI3OWIw
15
+ MTg5MWVlNWFkYzAyMjEzZmRmNDBiZGZmZWViZTQ3ZGZjMWM0ZTE=
data/bin/mr_bump CHANGED
@@ -1,10 +1,45 @@
1
1
  #!/usr/bin/env ruby
2
- # Small script to tag releases and update changelogs
2
+ # This Source Code Form is subject to the terms of the Mozilla Public
3
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+
6
+ # Script to tag releases and update changelogs
7
+ require 'optparse'
8
+
3
9
  require 'mr_bump'
10
+ require 'mr_bump/git_api'
11
+
12
+ def menu(text, valid_options, &block)
13
+ loop do
14
+ print text + ': '
15
+ choice = gets.chomp.upcase
16
+ if valid_options.include? choice
17
+ block.call(choice)
18
+ break
19
+ else
20
+ puts "I'm sorry Dave; I'm afraid I can't do that."
21
+ end
22
+ end
23
+ end
24
+
25
+ options = {
26
+ dryrun: false
27
+ }
28
+ OptionParser.new do |parser|
29
+ parser.on(
30
+ '-n', '--dry-run',
31
+ 'Make no changes to git state (except to update remotes), and change some fatal errors to ' \
32
+ 'warnings'
33
+ ) do
34
+ options[:dryrun] = true
35
+ end
36
+ end.parse!
4
37
 
5
38
  release = !MrBump.current_branch[/^release/].nil?
6
39
  master = !MrBump.current_branch[/^master$/].nil?
7
40
 
41
+ changelog = "#{`git rev-parse --show-toplevel`.strip}/CHANGELOG.md"
42
+
8
43
  unless release || master
9
44
  puts 'Need to be on either release or master branch'
10
45
  exit 1
@@ -16,102 +51,130 @@ unless master || MrBump.current_branch.to_s == "release/#{MrBump.current_uat_maj
16
51
  exit 1
17
52
  end
18
53
 
54
+ unless MrBump.config_file['github_api_token']
55
+ puts "Couldn't find a github API token in configuration files"
56
+ puts "Please obtain a github token by following the guide at\n" \
57
+ " https://help.github.com/articles/creating-an-access-token-for-command-line-use/\n" \
58
+ "and add it with the 'github_api_token:' option"
59
+ exit 1
60
+ end
61
+
62
+ puts 'Have you already closed your PR?'
63
+
64
+ github_client = MrBump::GitApi.new(MrBump.config_file['github_api_token'])
65
+ menu '[Y]es / [N]o', %w(Y N) do |choice|
66
+ if choice == 'N'
67
+ puts 'Here are the 10 most recent PRs in your repo:'
68
+ puts github_client.sorted_prs(MrBump.git_config.path)
69
+ loop do
70
+ print 'Enter the PR number to merge : '
71
+ pr_id = gets.chomp
72
+ if options[:dryrun]
73
+ puts "dryrun: Would merge ##{pr_id}"
74
+ else
75
+ github_client.merge_pr(MrBump.git_config.path, pr_id)
76
+ end
77
+ break
78
+ end
79
+ end
80
+ end
81
+
19
82
  unless system('git remote update > /dev/null 2>&1')
20
83
  puts 'Failed to update remotes. (Connectivity problems?)'
21
84
  exit 1
22
85
  end
23
86
 
24
87
  unless `git rev-parse @` == `git rev-parse @{u}`
25
- puts 'Not up to date with origin! Please run git pull'
26
- exit 1
88
+ if options[:dryrun]
89
+ puts 'WARNING! Not up to date with origin! Please run git pull'
90
+ else
91
+ puts 'Not up to date with origin! Please run git pull'
92
+ exit 1
93
+ end
94
+ end
95
+
96
+ unless MrBump.all_tagged_versions.include? MrBump.current_uat_major
97
+ base_sha = `git merge_base release/#{MrBump.current_uat_major} develop`
98
+
99
+ puts "Missing tag for version #{MrBump.current_uat_major}. Suggesting commit #{base_sha[0...8]}"
100
+ puts "\t#{`git log --format="(%ci) %cn - %s" -n 1 #{base_sha}`}"
101
+ puts 'Would you like to tag this commit?'
102
+ menu '[Y]es / [N]o', %w(Y N) do |choice|
103
+ exit 1 if choice == 'N'
104
+ end
105
+ `git tag #{MrBump.current_uat_major} #{base_sha}`
27
106
  end
28
107
 
29
- unless File.file?('CHANGELOG.md')
30
- puts "Couldn't find CHANGELOG.md. ensure you are in the root of the git checkout"
108
+ unless File.file?(changelog)
109
+ puts "Couldn't find CHANGELOG.md at '#{changelog}'."
31
110
  exit 1
32
111
  end
33
112
 
34
113
  if release
35
114
  last_release = MrBump.current_uat
36
- current_uat_major = MrBump.current_uat_major
37
- changes = MrBump.change_log_items_for_range(last_release, "release/#{current_uat_major}")
115
+ uat_major = MrBump.current_uat_major
116
+ changes = MrBump.change_log_items_for_range(last_release, "release/#{uat_major}")
38
117
  else
39
118
  last_release = MrBump.current_master
40
119
  changes = MrBump.change_log_items_for_range(last_release, 'master')
41
120
  end
42
121
 
43
122
  new_release = last_release.bump_patch
44
- changes = changes.join('')
45
- md_changes = "# #{new_release}#{changes}\n\n"
123
+ changes = changes.join("\n")
124
+ md_changes = "# #{new_release}\n#{changes}\n\n"
46
125
 
47
126
  puts 'Changelog additions'
48
127
  puts '----------'
49
128
  puts md_changes
50
129
  puts '----------'
51
130
 
52
- loop do
53
- print '[A]ccept these changes / Manually [E]dit / [C]ancel Release : '
54
- choice = gets.chomp.upcase
55
-
56
- case choice
57
- when 'A'
58
- MrBump.file_prepend('CHANGELOG.md', md_changes)
59
- break
60
- when 'E'
61
- MrBump.file_prepend('CHANGELOG.md', md_changes)
62
- system 'nano CHANGELOG.md'
63
- loop do
64
- log = File.open('CHANGELOG.md', 'r').read
65
- changes = log.split("\n\n").first.strip.split("\n").drop(1)
66
- changes = changes.join("\n")
67
- md_changes = "# #{new_release}\n#{changes}\n\n"
68
- puts 'Modified Changelog additions'
69
- puts '----------'
70
- puts md_changes
71
- puts '----------'
72
- print '[A]ccept modified changes / [C]ancel Release : '
73
- choice2 = gets.chomp.upcase
74
- if choice2 == 'C'
75
- exit 1
76
- elsif choice2 == 'A'
77
- break
78
- else
79
- puts "I'm sorry Dave; I'm afraid I can't do that."
80
- end
81
- end
82
- break
83
- when 'C'
131
+ menu '[A]ccept these changes / Manually [E]dit / [C]ancel Release', %w(A E C) do |choice|
132
+ if choice == 'C'
84
133
  exit 1
85
- else
86
- puts "I'm sorry Dave; I'm afraid I can't do that."
134
+ elsif choice == 'E'
135
+ tempfile = Tempfile.new('CHANGELOG')
136
+ tempfile.write(changes)
137
+ tempfile.close
138
+ system "nano #{tempfile.path}"
139
+ changes = File.open(tempfile.path, 'r').read.rstrip
140
+ md_changes = "# #{new_release}\n#{changes}\n\n"
141
+ puts 'Modified Changelog additions'
142
+ puts '----------'
143
+ puts md_changes
144
+ puts '----------'
145
+
146
+ menu '[A]ccept modified changes / [C]ancel Release', %w(A C) do |cancel|
147
+ exit 1 if cancel == 'C'
148
+ end
87
149
  end
88
- end
89
150
 
90
- `git commit -m 'Bump version to #{new_release}' CHANGELOG.md`
91
- `git tag #{new_release}`
92
- `git push && git push --tags`
151
+ MrBump.file_prepend(changelog, md_changes) unless options[:dryrun]
152
+ end
93
153
 
94
- MrBump.slack_notifier(new_release, changes)
154
+ if options[:dryrun]
155
+ puts "dry-run: `git commit -m 'Bump version to #{new_release}' -- #{changelog}`"
156
+ puts "dry-run: `git tag #{new_release}`"
157
+ puts 'dry-run: git push && git push --tags`'
158
+ else
159
+ `git commit -m 'Bump version to #{new_release}' -- #{changelog}`
160
+ `git tag #{new_release}`
161
+ `git push && git push --tags`
162
+ MrBump.slack_notifier(new_release, changes)
163
+ end
95
164
 
96
165
  config_file = MrBump.config_file()
97
166
  branch_type = release ? "release" : 'master'
98
167
  bump_cmd_exists = config_file.key?('post_bump') &&
99
168
  config_file['post_bump'].key?(branch_type)
100
169
  if bump_cmd_exists
101
- loop do
102
- puts 'Would you like to execute post bump commands? '
103
- print '[Y]es execute / [N]o Im done : '
104
- choice = gets.chomp.upcase
105
-
106
- case choice
107
- when 'Y'
108
- post_command = config_file['post_bump'][branch_type]
109
- system post_command
110
- break
111
- when 'N'
112
- break
113
- else
114
- puts "I'm sorry Dave; I'm afraid I can't do that."
170
+ puts 'Would you like to execute post bump commands? '
171
+ menu '[Y]es execute / [N]o Im done', %w(Y N) do |choice|
172
+ if choice == 'Y'
173
+ if options[:dryrun]
174
+ puts "dry-run: `#{config_file['post_bump'][branch_type]}`"
175
+ else
176
+ system(config_file['post_bump'][branch_type])
177
+ end
115
178
  end
116
179
  end
117
180
  end
data/defaults.yml ADDED
@@ -0,0 +1,27 @@
1
+ # Slack integration
2
+
3
+ # Mr Bump can be configured to post a message to slack while bumping.
4
+ # To do so, a slack web hook is needed, as well as an icon and user name
5
+ # format for this configuration is below
6
+ #slack:
7
+ # webhook_url: "https://hooks.slack.com/services/some_custom_webhook"
8
+ # username: "Mr Bump"
9
+ # icon: "https://path_to_image.png"
10
+
11
+ # Post bump hooks
12
+
13
+ # Mr Bump can also run custom deploy or other commands after a bumping
14
+ #post_bump:
15
+ # release: "echo 'There has been a release on the release branch'"
16
+ # master: "echo 'There has been a release on the master branch'"
17
+
18
+
19
+ # Changelog template
20
+ # Your changelog can be customized by using a template. The template is in
21
+ # mustache format. The allowed parameters are
22
+ # - branch_type: Bugfix / Feature / Hotfix
23
+ # - dev_id: The development ID for this feature
24
+ # - comment_lines: Array of all lines in commit comment
25
+ # - first_commit_line: The first line of the commit comment
26
+ # - comment_body: The rest of the lines in the comment
27
+ markdown_template: " * {{branch_type}} - {{dev_id}} - {{first_comment_line}}{{#comment_body}}\n {{.}}{{/comment_body}}"
data/lib/mr_bump.rb CHANGED
@@ -1,8 +1,12 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
+
1
5
  require 'mr_bump/version'
2
6
  require 'mr_bump/slack'
3
7
  require 'mr_bump/config'
4
8
  require 'mr_bump/git_config'
5
-
9
+ require 'mr_bump/change'
6
10
 
7
11
  module MrBump
8
12
  def self.current_branch
@@ -10,45 +14,42 @@ module MrBump
10
14
  @current_branch.strip
11
15
  end
12
16
 
17
+ def self.latest_release_from_list(branches)
18
+ prefix = 'origin/release[-/]'
19
+ regex = Regexp.new("^#{prefix}(\\d+\\.\\d+)\\.\\d+$")
20
+ branches.map do |branch|
21
+ matches = regex.match(branch)
22
+ MrBump::Version.new(matches[1]) if matches
23
+ end.compact.max
24
+ end
25
+
13
26
  def self.current_uat_major
14
- prefix = 'origin/release/'
15
- vers = `git branch -r`
16
- regex = Regexp.new("^#{prefix}(\\d+\\.\\d+\\.0)$")
17
- vers = vers.each_line.map do |branch|
18
- branch = branch.strip
19
- MrBump::Version.new(branch.gsub(regex, '\1')) if branch[regex]
27
+ branches = `git branch -r`.each_line.map(&:strip)
28
+ latest_release_from_list(branches)
29
+ end
30
+
31
+ def self.all_tags
32
+ `git tag -l`.each_line.map(&:strip)
33
+ end
34
+
35
+ def self.all_tagged_versions
36
+ all_tags.map do |tag|
37
+ begin
38
+ MrBump::Version.new(tag)
39
+ rescue
40
+ nil
41
+ end
20
42
  end.compact
21
- vers.max
22
43
  end
23
44
 
24
45
  def self.current_uat
25
46
  uat = current_uat_major
26
- vers = `git tag -l`
27
- vers = vers.each_line.map do |branch|
28
- MrBump::Version.new(branch) rescue nil
29
- end.compact
30
- vers.select { |ver| ver.major == uat.major && ver.minor == uat.minor }.max
47
+ all_tagged_versions.select { |ver| ver.major == uat.major && ver.minor == uat.minor }.max
31
48
  end
32
49
 
33
50
  def self.current_master
34
51
  uat = current_uat_major
35
- vers = `git tag -l`
36
- vers = vers.each_line.map do |branch|
37
- MrBump::Version.new(branch) rescue nil
38
- end.compact
39
- vers.select { |ver| ver < uat }.max
40
- end
41
-
42
- def self.story_information(merge_str)
43
- branch_fmt = '(?<fix_type>bugfix|feature|hotfix)/(?<dev_id>\w+[-_]?\d+)?'
44
- merge_pr_fmt = "^Merge pull request #(?<pr_number>\\d+) from \\w+/#{branch_fmt}"
45
- merge_manual_fmt = "^Merge branch '#{branch_fmt}'"
46
- matches = Regexp.new(merge_pr_fmt + '|' + merge_manual_fmt).match(merge_str)
47
- if matches
48
- type = matches['fix_type'].capitalize
49
- dev_id = (matches['dev_id'].nil? ? 'UNKNOWN' : matches['dev_id'])
50
- "#{type} - #{dev_id} - "
51
- end
52
+ all_tagged_versions.select { |ver| ver < uat }.max
52
53
  end
53
54
 
54
55
  def self.merge_logs(rev, head)
@@ -69,9 +70,10 @@ module MrBump
69
70
  def self.change_log_items_for_range(rev, head)
70
71
  chunked_log = merge_logs(rev, head).chunk { |change| change[/^Merge/].nil? }
71
72
  chunked_log.each_slice(2).map do |merge_str, comment|
72
- merge_str = merge_str[1][0]
73
- unless merge_str[ignored_merges_regex]
74
- "\n* #{story_information(merge_str)}" + comment[1].join("\n ")
73
+ begin
74
+ MrBump::Change.new(config_file, merge_str[1][0], comment[1]).to_md
75
+ rescue ArgumentError => e
76
+ puts e
75
77
  end
76
78
  end.compact
77
79
  end
@@ -85,16 +87,19 @@ module MrBump
85
87
  File.open(file, 'w') do |fd|
86
88
  fd.write(new_contents)
87
89
  end
90
+ end
88
91
 
89
- def self.config_file
90
- MrBump::Config.new().config
91
- end
92
+ def self.config_file
93
+ @config_file ||= MrBump::Config.new.config
94
+ end
92
95
 
93
- def self.slack_notifier(version, changelog)
94
- if config_file.key? 'slack'
95
- MrBump::Slack.new(MrBump::GitConfig.from_current_path, config_file["slack"]).bump(version, changelog)
96
- end
96
+ def self.slack_notifier(version, changelog)
97
+ if config_file.key? 'slack'
98
+ MrBump::Slack.new(git_config, config_file['slack']).bump(version, changelog)
97
99
  end
100
+ end
98
101
 
102
+ def self.git_config
103
+ @git_config ||= MrBump::GitConfig.from_current_path
99
104
  end
100
105
  end
@@ -0,0 +1,40 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
+
5
+ require 'mustache'
6
+
7
+ module MrBump
8
+ # This class acts parses merge information from a commit message string
9
+ class Change
10
+ attr_reader :pr_number, :branch_type, :dev_id, :config, :comment_lines
11
+
12
+ BRANCH_FMT = '((?<branch_type>bugfix|feature|hotfix)/)?(?<dev_id>\w+[-_]?\d+)?[\\w\\-_]+'.freeze
13
+ MERGE_PR_FMT = "^Merge pull request #(?<pr_number>\\d+) from [\\w\\-_]+/#{BRANCH_FMT}".freeze
14
+ MERGE_MANUAL_FMT = "^Merge branch '#{BRANCH_FMT}'".freeze
15
+ MERGE_REGEX = Regexp.new(MERGE_PR_FMT + '|' + MERGE_MANUAL_FMT).freeze
16
+
17
+ def initialize(config, commit_msg, comment_lines)
18
+ matches = MERGE_REGEX.match(commit_msg)
19
+ raise ArgumentError, "Couldn't extract merge information from commit message " \
20
+ "'#{commit_msg}'" unless matches
21
+ @config = config
22
+ @branch_type = (matches['branch_type'] || 'Task').capitalize
23
+ @dev_id = matches['dev_id'] || 'UNKNOWN'
24
+ @pr_number = matches['pr_number'] || ''
25
+ @comment_lines = Array(comment_lines)
26
+ end
27
+
28
+ def first_comment_line
29
+ comment_lines.first
30
+ end
31
+
32
+ def comment_body
33
+ comment_lines[1..-1] if comment_lines.size > 1
34
+ end
35
+
36
+ def to_md
37
+ Mustache.render(config['markdown_template'], self)
38
+ end
39
+ end
40
+ end
@@ -1,3 +1,7 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
+
1
5
  require 'yaml'
2
6
 
3
7
  module MrBump
@@ -6,20 +10,40 @@ module MrBump
6
10
  attr_reader :config_file
7
11
 
8
12
  def initialize(config_file = nil)
9
- @config_file = config_file || default_file
13
+ @config_file = config_file || default_project_filename
10
14
  end
11
15
 
12
- def config
13
- @config ||= if File.exist?(@config_file)
14
- YAML.load_file(@config_file) || {}
15
- else
16
- {}
16
+ def user_config_file
17
+ File.join(Dir.home, '.mr_bump.yml')
18
+ end
19
+
20
+ def default_project_filename
21
+ File.join('.mr_bump')
22
+ end
23
+
24
+ def default_config
25
+ @default_config = begin
26
+ defaults_yml = File.join(File.dirname(__FILE__), '..', '..', 'defaults.yml')
27
+ YAML.load_file(defaults_yml)
17
28
  end
18
29
  end
19
30
 
20
- def default_file
21
- File.join(".mr_bump")
31
+ def user_config
32
+ @user_config = begin
33
+ loaded = YAML.load_file(user_config_file) if File.exist?(user_config_file)
34
+ loaded || {}
35
+ end
36
+ end
37
+
38
+ def project_config
39
+ @project_config ||= begin
40
+ loaded = YAML.load_file(@config_file) if File.exist?(@config_file)
41
+ loaded || {}
42
+ end
22
43
  end
23
44
 
45
+ def config
46
+ @config ||= default_config.merge(user_config).merge(project_config)
47
+ end
24
48
  end
25
49
  end
@@ -0,0 +1,25 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
+
5
+ require 'octokit'
6
+ module MrBump
7
+ # This class makes calls to the github API
8
+ class GitApi
9
+ def initialize(token)
10
+ @client = Octokit::Client.new(access_token: token)
11
+ end
12
+
13
+ def prs(repo_url)
14
+ @prs ||= client.pull_requests(repo_url, state: 'open')
15
+ end
16
+
17
+ def sorted_prs(repo_url)
18
+ prs(repo_url).map { |x| '#' + x[:number].to_s + ' - ' + x[:title].to_s + "\n" }.first(10).join
19
+ end
20
+
21
+ def merge_pr(repo_url, pr_id)
22
+ client.merge_pull_request(repo_url, pr_id)
23
+ end
24
+ end
25
+ end
@@ -1,16 +1,22 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
+
1
5
  module MrBump
2
6
  # This class gathers configuration infromation from git
3
7
  class GitConfig
4
- attr_reader :user, :username, :repo_url, :repo_name, :orgin
8
+ attr_reader :user, :username, :repo_url, :host, :path, :repo_name, :orgin
5
9
  GITHUB_URL_REGEX = Regexp.new(
6
10
  '(https?://((?<user>[\w_\-\d]+)@)?|git@)(?<domain>github.com)[:/](?<path>[\w_\-\d]+)/' \
7
11
  '(?<repo_name>[\w_\-\d\.]+?)(\.git)?$'
8
12
  ).freeze
9
13
 
10
- def initialize(origin, repo_name, repo_url, username, user)
14
+ def initialize(origin, repo_name, repo_host, repo_path, username, user)
11
15
  @origin = origin
12
16
  @repo_name = repo_name
13
- @repo_url = repo_url
17
+ @repo_url = repo_host + '/' + repo_path + '/'
18
+ @host = repo_host
19
+ @path = repo_path
14
20
  @username = username
15
21
  @user = user || `git config user.name`
16
22
  end
@@ -22,7 +28,8 @@ module MrBump
22
28
  GitConfig.new(
23
29
  origin,
24
30
  match['repo_name'],
25
- "https://#{match['domain']}/#{match['path']}/#{match['repo_name']}/",
31
+ "https://#{match['domain']}",
32
+ "#{match['path']}/#{match['repo_name']}",
26
33
  match['user'],
27
34
  user
28
35
  )
data/lib/mr_bump/slack.rb CHANGED
@@ -1,3 +1,7 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
+
1
5
  require 'slack-notifier'
2
6
  module MrBump
3
7
  # This class uses a slack webhook to push notifications to slack
@@ -1,3 +1,7 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
+
1
5
  module MrBump
2
6
  # This class enables comparison and bumping of sementic versions and
3
7
  # conversion to and from strings
@@ -0,0 +1,275 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
+
5
+ require 'mr_bump/change'
6
+
7
+ describe MrBump::Change do
8
+ let(:config) do
9
+ {
10
+ 'markdown_template' => ' * {{branch_type}} - {{dev_id}} - {{first_comment_line}}' \
11
+ "{{#comment_body}}\n {{.}}{{/comment_body}}"
12
+ }
13
+ end
14
+
15
+ let(:change) { described_class.new(config, merge_str, ['Line 1', 'Line 2']) }
16
+
17
+ context 'when given a merge string in the default PR format for a feature' do
18
+ let(:merge_str) { 'Merge pull request #555 from AGithubUsername/feature/DEV-1_Stuff' }
19
+
20
+ it 'extracts the correct PR Number' do
21
+ expect(change.pr_number).to eq('555')
22
+ end
23
+
24
+ it 'extracts the correct branch type' do
25
+ expect(change.branch_type).to eq('Feature')
26
+ end
27
+
28
+ it 'extracts the correct dev ID' do
29
+ expect(change.dev_id).to eq('DEV-1')
30
+ end
31
+
32
+ it 'renders to markdown correctly' do
33
+ expect(change.to_md).to eq(" * Feature - DEV-1 - Line 1\n Line 2")
34
+ end
35
+ end
36
+
37
+ context 'when given a merge string in the default PR format for a feature' do
38
+ let(:merge_str) { 'Merge pull request #555 from AGithubUsername/feature/Stuff' }
39
+
40
+ it 'extracts the correct PR Number' do
41
+ expect(change.pr_number).to eq('555')
42
+ end
43
+
44
+ it 'extracts the correct branch type' do
45
+ expect(change.branch_type).to eq('Feature')
46
+ end
47
+
48
+ it 'defaults the dev ID to UNKNOWN' do
49
+ expect(change.dev_id).to eq('UNKNOWN')
50
+ end
51
+
52
+ it 'renders to markdown correctly' do
53
+ expect(change.to_md).to eq(" * Feature - UNKNOWN - Line 1\n Line 2")
54
+ end
55
+ end
56
+
57
+ context 'when given a merge string in the default PR format for a bugfix' do
58
+ let(:merge_str) { 'Merge pull request #555 from AGithubUsername/bugfix/DEV-1_Stuff' }
59
+
60
+ it 'extracts the correct PR Number' do
61
+ expect(change.pr_number).to eq('555')
62
+ end
63
+
64
+ it 'extracts the correct branch type' do
65
+ expect(change.branch_type).to eq('Bugfix')
66
+ end
67
+
68
+ it 'extracts the correct dev ID' do
69
+ expect(change.dev_id).to eq('DEV-1')
70
+ end
71
+
72
+ it 'renders to markdown correctly' do
73
+ expect(change.to_md).to eq(" * Bugfix - DEV-1 - Line 1\n Line 2")
74
+ end
75
+ end
76
+
77
+ context 'when given a merge string in the default PR format for a bugfix' do
78
+ let(:merge_str) { 'Merge pull request #555 from AGithubUsername/bugfix/Stuff' }
79
+
80
+ it 'extracts the correct PR Number' do
81
+ expect(change.pr_number).to eq('555')
82
+ end
83
+
84
+ it 'extracts the correct branch type' do
85
+ expect(change.branch_type).to eq('Bugfix')
86
+ end
87
+
88
+ it 'defaults the dev ID to UNKNOWN' do
89
+ expect(change.dev_id).to eq('UNKNOWN')
90
+ end
91
+
92
+ it 'renders to markdown correctly' do
93
+ expect(change.to_md).to eq(" * Bugfix - UNKNOWN - Line 1\n Line 2")
94
+ end
95
+ end
96
+
97
+ context 'when given a merge string in the default PR format for a hotfix' do
98
+ let(:merge_str) { 'Merge pull request #555 from AGithubUsername/hotfix/DEV-1_Stuff' }
99
+
100
+ it 'extracts the correct PR Number' do
101
+ expect(change.pr_number).to eq('555')
102
+ end
103
+
104
+ it 'extracts the correct branch type' do
105
+ expect(change.branch_type).to eq('Hotfix')
106
+ end
107
+
108
+ it 'extracts the correct dev ID' do
109
+ expect(change.dev_id).to eq('DEV-1')
110
+ end
111
+
112
+ it 'renders to markdown correctly' do
113
+ expect(change.to_md).to eq(" * Hotfix - DEV-1 - Line 1\n Line 2")
114
+ end
115
+ end
116
+
117
+ context 'when given a merge string in the default PR format for a hotfix' do
118
+ let(:merge_str) { 'Merge pull request #555 from AGithubUsername/hotfix/Stuff' }
119
+
120
+ it 'extracts the correct PR Number' do
121
+ expect(change.pr_number).to eq('555')
122
+ end
123
+
124
+ it 'extracts the correct branch type' do
125
+ expect(change.branch_type).to eq('Hotfix')
126
+ end
127
+
128
+ it 'defaults the dev ID to UNKNOWN' do
129
+ expect(change.dev_id).to eq('UNKNOWN')
130
+ end
131
+
132
+ it 'renders to markdown correctly' do
133
+ expect(change.to_md).to eq(" * Hotfix - UNKNOWN - Line 1\n Line 2")
134
+ end
135
+ end
136
+
137
+ context 'when given a merge string in the default manual format for a feature' do
138
+ let(:merge_str) { "Merge branch 'feature/DEV-1_Stuff'" }
139
+
140
+ it 'defaults PR Number to a blank string' do
141
+ expect(change.pr_number).to eq('')
142
+ end
143
+
144
+ it 'extracts the correct branch type' do
145
+ expect(change.branch_type).to eq('Feature')
146
+ end
147
+
148
+ it 'extracts the correct dev ID' do
149
+ expect(change.dev_id).to eq('DEV-1')
150
+ end
151
+
152
+ it 'renders to markdown correctly' do
153
+ expect(change.to_md).to eq(" * Feature - DEV-1 - Line 1\n Line 2")
154
+ end
155
+ end
156
+
157
+ context 'when given a merge string in the default PR format for a feature' do
158
+ let(:merge_str) { "Merge branch 'feature/Stuff'" }
159
+
160
+ it 'defaults PR Number to a blank string' do
161
+ expect(change.pr_number).to eq('')
162
+ end
163
+
164
+ it 'extracts the correct branch type' do
165
+ expect(change.branch_type).to eq('Feature')
166
+ end
167
+
168
+ it 'defaults the dev ID to UNKNOWN' do
169
+ expect(change.dev_id).to eq('UNKNOWN')
170
+ end
171
+
172
+ it 'renders to markdown correctly' do
173
+ expect(change.to_md).to eq(" * Feature - UNKNOWN - Line 1\n Line 2")
174
+ end
175
+ end
176
+
177
+ context 'when given a merge string in the default manual format for a bugfix' do
178
+ let(:merge_str) { "Merge branch 'bugfix/DEV-1_Stuff'" }
179
+
180
+ it 'defaults PR Number to a blank string' do
181
+ expect(change.pr_number).to eq('')
182
+ end
183
+
184
+ it 'extracts the correct branch type' do
185
+ expect(change.branch_type).to eq('Bugfix')
186
+ end
187
+
188
+ it 'extracts the correct dev ID' do
189
+ expect(change.dev_id).to eq('DEV-1')
190
+ end
191
+
192
+ it 'renders to markdown correctly' do
193
+ expect(change.to_md).to eq(" * Bugfix - DEV-1 - Line 1\n Line 2")
194
+ end
195
+ end
196
+
197
+ context 'when given a merge string in the default PR format for a bugfix' do
198
+ let(:merge_str) { "Merge branch 'bugfix/Stuff'" }
199
+
200
+ it 'defaults PR Number to a blank string' do
201
+ expect(change.pr_number).to eq('')
202
+ end
203
+
204
+ it 'extracts the correct branch type' do
205
+ expect(change.branch_type).to eq('Bugfix')
206
+ end
207
+
208
+ it 'defaults the dev ID to UNKNOWN' do
209
+ expect(change.dev_id).to eq('UNKNOWN')
210
+ end
211
+
212
+ it 'renders to markdown correctly' do
213
+ expect(change.to_md).to eq(" * Bugfix - UNKNOWN - Line 1\n Line 2")
214
+ end
215
+ end
216
+
217
+ context 'when given a merge string in the default manual format for a hotfix' do
218
+ let(:merge_str) { "Merge branch 'hotfix/DEV-1_Stuff'" }
219
+
220
+ it 'defaults PR Number to a blank string' do
221
+ expect(change.pr_number).to eq('')
222
+ end
223
+
224
+ it 'extracts the correct branch type' do
225
+ expect(change.branch_type).to eq('Hotfix')
226
+ end
227
+
228
+ it 'extracts the correct dev ID' do
229
+ expect(change.dev_id).to eq('DEV-1')
230
+ end
231
+
232
+ it 'renders to markdown correctly' do
233
+ expect(change.to_md).to eq(" * Hotfix - DEV-1 - Line 1\n Line 2")
234
+ end
235
+ end
236
+
237
+ context 'when given a merge string in the default PR format for a hotfix' do
238
+ let(:merge_str) { "Merge branch 'hotfix/Stuff'" }
239
+
240
+ it 'defaults PR Number to a blank string' do
241
+ expect(change.pr_number).to eq('')
242
+ end
243
+
244
+ it 'extracts the correct branch type' do
245
+ expect(change.branch_type).to eq('Hotfix')
246
+ end
247
+
248
+ it 'defaults the dev ID to UNKNOWN' do
249
+ expect(change.dev_id).to eq('UNKNOWN')
250
+ end
251
+
252
+ it 'renders to markdown correctly' do
253
+ expect(change.to_md).to eq(" * Hotfix - UNKNOWN - Line 1\n Line 2")
254
+ end
255
+ end
256
+
257
+ context 'when no merge type given' do
258
+ let(:merge_str) { 'Merge pull request #1224 from Xulaus/gem_bump' }
259
+ it 'extracts the correct PR Number' do
260
+ expect(change.pr_number).to eq('1224')
261
+ end
262
+
263
+ it 'defaults the branch type to "Task"' do
264
+ expect(change.branch_type).to eq('Task')
265
+ end
266
+
267
+ it 'defaults the dev ID to UNKNOWN' do
268
+ expect(change.dev_id).to eq('UNKNOWN')
269
+ end
270
+
271
+ it 'renders to markdown correctly' do
272
+ expect(change.to_md).to eq(" * Task - UNKNOWN - Line 1\n Line 2")
273
+ end
274
+ end
275
+ end
@@ -0,0 +1,24 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
+
5
+ require 'mr_bump/config'
6
+
7
+ describe MrBump::Config do
8
+ context 'when given default, user and project level configuration' do
9
+ let(:default) { { 'a' => 'a', 'b' => 'a', 'c' => 'a' } }
10
+ let(:user_level) { { 'c' => 'b', 'b' => 'b' } }
11
+ let(:project_level) { { 'c' => 'c' } }
12
+ let(:expected_result) { { 'a' => 'a', 'b' => 'b', 'c' => 'c' } }
13
+ let(:config) do
14
+ config = described_class.new
15
+ allow(config).to receive(:default_config).and_return(default)
16
+ allow(config).to receive(:user_config).and_return(user_level)
17
+ allow(config).to receive(:project_config).and_return(project_level)
18
+ config.config
19
+ end
20
+ it 'correctly prefers more specific configuration' do
21
+ expect(config).to eq(expected_result)
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,76 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
+
5
+ require 'mr_bump/git_config'
6
+
7
+ describe MrBump::GitConfig do
8
+ let(:config) { described_class.from_origin(origin, 'Someone') }
9
+
10
+ context 'Given https origin with no username' do
11
+ let(:origin) { 'https://github.com/xulaus/mr_bump' }
12
+ it 'correctly extracts the repository name' do
13
+ expect(config.repo_name).to eq('mr_bump')
14
+ end
15
+
16
+ it 'correctly constructs github url' do
17
+ expect(config.repo_url).to eq('https://github.com/xulaus/mr_bump/')
18
+ end
19
+
20
+ it "doesn't extract a username" do
21
+ expect(config.username.nil?)
22
+ end
23
+
24
+ it "extracts correct host" do
25
+ expect(config.host).to eq('https://github.com')
26
+ end
27
+
28
+ it "extracts the correct path" do
29
+ expect(config.path).to eq('xulaus/mr_bump')
30
+ end
31
+ end
32
+
33
+ context 'Given https origin with username' do
34
+ let(:origin) { 'https://xulaus@github.com/xulaus/mr_bump.git' }
35
+ it 'correctly extracts the repository name' do
36
+ expect(config.repo_name).to eq('mr_bump')
37
+ end
38
+ it 'correctly constructs github url' do
39
+ expect(config.repo_url).to eq('https://github.com/xulaus/mr_bump/')
40
+ end
41
+
42
+ it 'correctly extracts the username' do
43
+ expect(config.username).to eq('xulaus')
44
+ end
45
+
46
+ it "extracts correct host" do
47
+ expect(config.host).to eq('https://github.com')
48
+ end
49
+
50
+ it "extracts the correct path" do
51
+ expect(config.path).to eq('xulaus/mr_bump')
52
+ end
53
+ end
54
+
55
+ context 'Given git origin' do
56
+ let(:origin) { 'git@github.com:xulaus/mr_bump.git' }
57
+ it 'correctly extracts the repository name' do
58
+ expect(config.repo_name).to eq('mr_bump')
59
+ end
60
+ it 'correctly constructs github url' do
61
+ expect(config.repo_url).to eq('https://github.com/xulaus/mr_bump/')
62
+ end
63
+
64
+ it "doesn't extract a username" do
65
+ expect(config.username.nil?)
66
+ end
67
+
68
+ it "extracts correct host" do
69
+ expect(config.host).to eq('https://github.com')
70
+ end
71
+
72
+ it "extracts the correct path" do
73
+ expect(config.path).to eq('xulaus/mr_bump')
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,238 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
+
5
+ require 'mr_bump/version'
6
+ require 'mr_bump'
7
+
8
+ describe MrBump do
9
+ describe '#all_tagged_versions' do
10
+ before(:each) { allow(MrBump).to receive(:all_tags).and_return(tag_list) }
11
+
12
+ context 'when given a mixed list of tags' do
13
+ let(:tag_list) do
14
+ [
15
+ 'safbdhasgbd',
16
+ '',
17
+ '9.1.32',
18
+ '21.1',
19
+ '132',
20
+ 'Not.A Version'
21
+ ]
22
+ end
23
+ it 'parses into versions where possible' do
24
+ expect(MrBump.all_tagged_versions).to match_array(
25
+ [
26
+ MrBump::Version.new('9.1.32'),
27
+ MrBump::Version.new('21.1'),
28
+ MrBump::Version.new('132')
29
+ ]
30
+ )
31
+ end
32
+ end
33
+ end
34
+
35
+ describe '#current_uat' do
36
+ before(:each) do
37
+ allow(MrBump).to receive(:all_tags).and_return(tag_list)
38
+ allow(MrBump).to receive(:current_uat_major).and_return(MrBump::Version.new(next_version))
39
+ end
40
+
41
+ context 'when the next release is a minor bump' do
42
+ let(:next_version) { '1.2.0' }
43
+ let(:tag_list) do
44
+ [
45
+ 'safbdhasgbd',
46
+ '',
47
+ 'Not.A Version',
48
+ '1.2.3',
49
+ '1.2.2',
50
+ '1.1.1',
51
+ '1.1.9'
52
+ ]
53
+ end
54
+ it 'returns the maximum tagged version with the same major and minor numbers' do
55
+ expect(MrBump.current_uat).to eq(MrBump::Version.new('1.2.3'))
56
+ end
57
+ end
58
+
59
+ context 'when the next release is a major bump' do
60
+ let(:next_version) { '2.0.0' }
61
+ let(:tag_list) do
62
+ [
63
+ 'safbdhasgbd',
64
+ '',
65
+ 'Not.A Version',
66
+ '1.2.3',
67
+ '1.2.2',
68
+ '1.1.1',
69
+ '1.0.9',
70
+ '2.0.0',
71
+ '2.0.1',
72
+ '2.0.9'
73
+ ]
74
+ end
75
+ it 'returns the maximum tagged version with the same major and minor numbers' do
76
+ expect(MrBump.current_uat).to eq(MrBump::Version.new('2.0.9'))
77
+ end
78
+ end
79
+ end
80
+
81
+ describe '#current_master' do
82
+ before(:each) do
83
+ allow(MrBump).to receive(:all_tags).and_return(tag_list)
84
+ allow(MrBump).to receive(:current_uat_major).and_return(MrBump::Version.new(next_version))
85
+ end
86
+
87
+ context 'when the next release is a minor bump' do
88
+ let(:next_version) { '1.2.0' }
89
+ let(:tag_list) do
90
+ [
91
+ 'safbdhasgbd',
92
+ '',
93
+ 'Not.A Version',
94
+ '1.2.3',
95
+ '1.2.2',
96
+ '1.1.1',
97
+ '1.1.9'
98
+ ]
99
+ end
100
+ it 'returns the maximum tagged version below the UAT version' do
101
+ expect(MrBump.current_master).to eq(MrBump::Version.new('1.1.9'))
102
+ end
103
+ end
104
+
105
+ context 'when the next release is a major bump' do
106
+ let(:next_version) { '2.0.0' }
107
+ let(:tag_list) do
108
+ [
109
+ 'safbdhasgbd',
110
+ '',
111
+ 'Not.A Version',
112
+ '1.2.3',
113
+ '1.2.2',
114
+ '1.1.1',
115
+ '1.0.9',
116
+ '2.0.0',
117
+ '2.0.1',
118
+ '2.0.9'
119
+ ]
120
+ end
121
+ it 'returns the maximum tagged version below the UAT version' do
122
+ expect(MrBump.current_master).to eq(MrBump::Version.new('1.2.3'))
123
+ end
124
+ end
125
+ end
126
+
127
+ describe '#latest_release_from_list' do
128
+ context 'With many release branches and using slash separator' do
129
+ it 'extracts the highest version' do
130
+ branch_list = [
131
+ 'origin/release/10.16.0',
132
+ 'origin/release/10.15.9',
133
+ 'origin/release/10.1.0',
134
+ 'origin/release/10.15.0',
135
+ 'origin/rse/10.16.0',
136
+ 'origin/master',
137
+ ''
138
+ ]
139
+ expect(MrBump.latest_release_from_list(branch_list)).to eq(MrBump::Version.new('10.16.0'))
140
+ end
141
+ end
142
+
143
+ context 'With a single release branch and using slash separator' do
144
+ it 'extracts the version' do
145
+ branch_list = [
146
+ 'origin/release/10.16.9',
147
+ 'origin/rse/1.2.0',
148
+ 'origin/master',
149
+ ''
150
+ ]
151
+ expect(MrBump.latest_release_from_list(branch_list)).to eq(MrBump::Version.new('10.16.0'))
152
+ end
153
+ end
154
+
155
+ context 'With many release branches and minor versions and using slash separator' do
156
+ it 'extracts the highest version with patch version set to 0' do
157
+ branch_list = [
158
+ 'origin/release/10.16.0',
159
+ 'origin/release/10.15.9',
160
+ 'origin/release/10.1.0',
161
+ 'origin/release/10.15.0',
162
+ 'origin/release/10.16.9',
163
+ 'origin/rse/10.16.0',
164
+ 'origin/master',
165
+ ''
166
+ ]
167
+ expect(MrBump.latest_release_from_list(branch_list)).to eq(MrBump::Version.new('10.16.0'))
168
+ end
169
+ end
170
+
171
+ context 'With a single release branch with a patch number and using slash separator' do
172
+ it 'extracts the version with patch version set to 0' do
173
+ branch_list = [
174
+ 'origin/release/10.16.9',
175
+ 'origin/rse/1.2.0',
176
+ 'origin/master',
177
+ ''
178
+ ]
179
+ expect(MrBump.latest_release_from_list(branch_list)).to eq(MrBump::Version.new('10.16.0'))
180
+ end
181
+ end
182
+
183
+ context 'With many release branches and using dash separator' do
184
+ it 'extracts the highest version' do
185
+ branch_list = [
186
+ 'origin/release-10.16.0',
187
+ 'origin/release-10.15.9',
188
+ 'origin/release-10.1.0',
189
+ 'origin/release-10.15.0',
190
+ 'origin/rse-10.16.0',
191
+ 'origin/master',
192
+ ''
193
+ ]
194
+ expect(MrBump.latest_release_from_list(branch_list)).to eq(MrBump::Version.new('10.16.0'))
195
+ end
196
+ end
197
+
198
+ context 'With a single release branch and using dash separator' do
199
+ it 'extracts the version' do
200
+ branch_list = [
201
+ 'origin/release-10.16.9',
202
+ 'origin/rse-1.2.0',
203
+ 'origin/master',
204
+ ''
205
+ ]
206
+ expect(MrBump.latest_release_from_list(branch_list)).to eq(MrBump::Version.new('10.16.0'))
207
+ end
208
+ end
209
+
210
+ context 'With many release branches and minor versions and using dash separator' do
211
+ it 'extracts the highest version with patch version set to 0' do
212
+ branch_list = [
213
+ 'origin/release-10.16.0',
214
+ 'origin/release-10.15.9',
215
+ 'origin/release-10.1.0',
216
+ 'origin/release-10.15.0',
217
+ 'origin/release-10.16.9',
218
+ 'origin/rse-10.16.0',
219
+ 'origin/master',
220
+ ''
221
+ ]
222
+ expect(MrBump.latest_release_from_list(branch_list)).to eq(MrBump::Version.new('10.16.0'))
223
+ end
224
+ end
225
+
226
+ context 'With a single release branch with a patch number and using dash separator' do
227
+ it 'extracts the version with patch version set to 0' do
228
+ branch_list = [
229
+ 'origin/release-10.16.9',
230
+ 'origin/rse-1.2.0',
231
+ 'origin/master',
232
+ ''
233
+ ]
234
+ expect(MrBump.latest_release_from_list(branch_list)).to eq(MrBump::Version.new('10.16.0'))
235
+ end
236
+ end
237
+ end
238
+ end
@@ -0,0 +1,8 @@
1
+ # This Source Code Form is subject to the terms of the Mozilla Public
2
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
4
+
5
+ require 'bundler/setup'
6
+ Bundler.setup
7
+
8
+ require 'mr_bump'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mr_bump
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Fitzgerald
@@ -25,6 +25,76 @@ dependencies:
25
25
  - - ~>
26
26
  - !ruby/object:Gem::Version
27
27
  version: '1.0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: octokit
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: '4.0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ~>
40
+ - !ruby/object:Gem::Version
41
+ version: '4.0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: mustache
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ version: 0.99.3
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 0.99.3
56
+ - !ruby/object:Gem::Dependency
57
+ name: OptionParser
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :runtime
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: rspec
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: pry
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'
28
98
  description: Bump versions
29
99
  email: richard.fitzgerald36@gmail.com
30
100
  executables:
@@ -33,13 +103,22 @@ extensions: []
33
103
  extra_rdoc_files: []
34
104
  files:
35
105
  - bin/mr_bump
106
+ - defaults.yml
36
107
  - lib/mr_bump.rb
108
+ - lib/mr_bump/change.rb
37
109
  - lib/mr_bump/config.rb
110
+ - lib/mr_bump/git_api.rb
38
111
  - lib/mr_bump/git_config.rb
39
112
  - lib/mr_bump/slack.rb
40
113
  - lib/mr_bump/version.rb
114
+ - spec/change_spec.rb
115
+ - spec/config_spec.rb
116
+ - spec/git_config_spec.rb
117
+ - spec/mr_bump_spec.rb
118
+ - spec/spec_helper.rb
41
119
  homepage: https://github.com/xulaus/mr_bump
42
- licenses: []
120
+ licenses:
121
+ - MPL 2.0
43
122
  metadata: {}
44
123
  post_install_message:
45
124
  rdoc_options: []
@@ -61,4 +140,9 @@ rubygems_version: 2.4.8
61
140
  signing_key:
62
141
  specification_version: 3
63
142
  summary: BUMP!
64
- test_files: []
143
+ test_files:
144
+ - spec/change_spec.rb
145
+ - spec/config_spec.rb
146
+ - spec/git_config_spec.rb
147
+ - spec/mr_bump_spec.rb
148
+ - spec/spec_helper.rb