semvergen 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e02ad8f4dd53a6c302389c2a8cf964f9ac440b4a
4
- data.tar.gz: b87a41c3c1b8ecba73f1c403bea1017d91303261
3
+ metadata.gz: c8c261bd75260cff24e44263032e7c82fd737630
4
+ data.tar.gz: 9be85711ee737bc09177a2aab242516eed974d48
5
5
  SHA512:
6
- metadata.gz: 2b60c0f46e65c8f9b6e333adfc66db4a2819475f823e3c8eb4ae603e6d2e5f6aedb328fc13436b259cec39d3767c2586582f2d488beb2f0181a7e421b0ce06be
7
- data.tar.gz: 1d26dd9f007fda192291cf6fc3d267da86188f69fcfc3ecb414f11d77b648758a4c44011a2b05aa946110494fab00e6538cd79c1482201d0e8c200e6bf0b319e
6
+ metadata.gz: b1d516039ea09de2bc06c3d72863a836ff8154c6acce51fd3bb6b41177c046090286120621f458730b8c1338317ec1868cd511d68a2c25a152b573c83a171dfe
7
+ data.tar.gz: 1a1167667dcd659fa2dadcd1a035b0b27a1ba84188861abe438da6362106c1d12ae3ed7122a84131b19e8f2b55dd667e798c0e5e08ecf4b14c2f704bb4be50fd
data/.gitignore CHANGED
@@ -34,4 +34,5 @@ build/
34
34
  # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
35
35
  .rvmrc
36
36
 
37
- .gem_server
37
+ .gem_server
38
+ .semvergen
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ # 1.2.0
4
+ * Foo
5
+
6
+
3
7
  # 1.1.0
4
8
  * Push to origin in bump step
5
9
  * Release in bump step
data/Gemfile.lock CHANGED
@@ -1,22 +1,32 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- semvergen (1.1.0)
4
+ semvergen (1.2.0)
5
5
  geminabox
6
6
  highline (~> 1.6)
7
+ slack-notifier
7
8
  thor (~> 0.14)
8
9
 
9
10
  GEM
10
11
  remote: https://rubygems.org/
11
12
  specs:
13
+ binding_of_caller (0.7.2)
14
+ debug_inspector (>= 0.0.1)
12
15
  builder (3.2.2)
13
- celluloid (0.15.2)
14
- timers (~> 1.1.0)
16
+ byebug (3.5.1)
17
+ columnize (~> 0.8)
18
+ debugger-linecache (~> 1.2)
19
+ slop (~> 3.6)
20
+ celluloid (0.16.0)
21
+ timers (~> 4.0.0)
15
22
  coderay (1.1.0)
23
+ columnize (0.8.9)
24
+ debug_inspector (0.0.2)
25
+ debugger-linecache (1.2.0)
16
26
  diff-lcs (1.2.5)
17
27
  faraday (0.9.0)
18
28
  multipart-post (>= 1.2, < 3)
19
- ffi (1.9.3)
29
+ ffi (1.9.6)
20
30
  formatador (0.2.5)
21
31
  geminabox (0.12.4)
22
32
  builder
@@ -24,18 +34,20 @@ GEM
24
34
  httpclient (>= 2.2.7)
25
35
  nesty
26
36
  sinatra (>= 1.2.7)
27
- guard (2.6.1)
37
+ guard (2.8.0)
28
38
  formatador (>= 0.2.4)
29
39
  listen (~> 2.7)
30
40
  lumberjack (~> 1.0)
31
41
  pry (>= 0.9.12)
32
42
  thor (>= 0.18.1)
33
- guard-rspec (4.2.10)
43
+ guard-rspec (4.3.1)
34
44
  guard (~> 2.1)
35
45
  rspec (>= 2.14, < 4.0)
36
46
  highline (1.6.21)
37
- httpclient (2.4.0)
38
- listen (2.7.9)
47
+ hitimes (1.2.2)
48
+ httpclient (2.5.3.1)
49
+ interception (0.5)
50
+ listen (2.7.11)
39
51
  celluloid (>= 0.15.2)
40
52
  rb-fsevent (>= 0.9.3)
41
53
  rb-inotify (>= 0.9)
@@ -43,10 +55,19 @@ GEM
43
55
  method_source (0.8.2)
44
56
  multipart-post (2.0.0)
45
57
  nesty (1.0.2)
46
- pry (0.10.0)
58
+ pry (0.10.1)
47
59
  coderay (~> 1.1.0)
48
60
  method_source (~> 0.8.1)
49
61
  slop (~> 3.4)
62
+ pry-byebug (2.0.0)
63
+ byebug (~> 3.4)
64
+ pry (~> 0.10)
65
+ pry-rescue (1.4.1)
66
+ interception (>= 0.5)
67
+ pry
68
+ pry-stack_explorer (0.4.9.1)
69
+ binding_of_caller (>= 0.7)
70
+ pry (>= 0.9.11)
50
71
  rack (1.5.2)
51
72
  rack-protection (1.5.3)
52
73
  rack
@@ -54,26 +75,28 @@ GEM
54
75
  rb-fsevent (0.9.4)
55
76
  rb-inotify (0.9.5)
56
77
  ffi (>= 0.5.0)
57
- rspec (3.0.0)
58
- rspec-core (~> 3.0.0)
59
- rspec-expectations (~> 3.0.0)
60
- rspec-mocks (~> 3.0.0)
61
- rspec-core (3.0.2)
62
- rspec-support (~> 3.0.0)
63
- rspec-expectations (3.0.2)
78
+ rspec (3.1.0)
79
+ rspec-core (~> 3.1.0)
80
+ rspec-expectations (~> 3.1.0)
81
+ rspec-mocks (~> 3.1.0)
82
+ rspec-core (3.1.7)
83
+ rspec-support (~> 3.1.0)
84
+ rspec-expectations (3.1.2)
64
85
  diff-lcs (>= 1.2.0, < 2.0)
65
- rspec-support (~> 3.0.0)
66
- rspec-mocks (3.0.2)
67
- rspec-support (~> 3.0.0)
68
- rspec-support (3.0.2)
86
+ rspec-support (~> 3.1.0)
87
+ rspec-mocks (3.1.3)
88
+ rspec-support (~> 3.1.0)
89
+ rspec-support (3.1.2)
69
90
  sinatra (1.4.5)
70
91
  rack (~> 1.4)
71
92
  rack-protection (~> 1.4)
72
93
  tilt (~> 1.3, >= 1.3.4)
73
- slop (3.5.0)
94
+ slack-notifier (1.0.0)
95
+ slop (3.6.0)
74
96
  thor (0.19.1)
75
97
  tilt (1.4.1)
76
- timers (1.1.0)
98
+ timers (4.0.1)
99
+ hitimes
77
100
 
78
101
  PLATFORMS
79
102
  ruby
@@ -81,6 +104,10 @@ PLATFORMS
81
104
  DEPENDENCIES
82
105
  bundler (~> 1.6)
83
106
  guard-rspec (~> 4.0)
107
+ pry
108
+ pry-byebug
109
+ pry-rescue
110
+ pry-stack_explorer
84
111
  rake (~> 10.1)
85
112
  rspec (~> 3.0)
86
113
  semvergen!
@@ -16,20 +16,43 @@ module Semvergen
16
16
 
17
17
  def_delegators :@interface, :say, :ask, :color, :choose, :newline, :agree
18
18
 
19
- def initialize(interface, version_file, change_log_file, shell, gem_name, gem_server)
19
+ def initialize(interface, version_file, change_log_file, shell, gem_name, gem_server, notifier)
20
20
  @interface = interface
21
21
  @version_file = version_file
22
22
  @change_log_file = change_log_file
23
23
  @shell = shell
24
24
  @gem_name = gem_name
25
25
  @gem_server = gem_server
26
+ @notifier = notifier
26
27
  end
27
28
 
28
29
  def run!(options)
30
+ unless @shell.current_branch == "master"
31
+ say color("You are not on master. It is not recommended to create releases from a branch", :red)
32
+ newline
33
+ return unless agree("Proceed anyway? ")
34
+ newline
35
+ end
36
+
37
+ unless @shell.git_branch_is_tracking?
38
+ @interface.fail_exit color("This branch is not tracking a remote branch. Aborting...", :red)
39
+ end
40
+
41
+ say "Checking for upstream changes..."
42
+ @shell.git_fetch
43
+ newline
44
+
45
+ unless @shell.git_up_to_date?
46
+ @interface.fail_exit color("This branch is not up to date with upstream", :red)
47
+ end
48
+
49
+ say "Git status: #{color("Up to date", :green)}"
50
+ newline
51
+
29
52
  if @shell.git_index_dirty? && !options[:ignore_dirty]
30
53
  say color("Git index dirty. Commit changes before continuing", :red, :bold)
31
54
  else
32
- say color("Cut new Quattro Release", :white, :underline, :bold)
55
+ say color("Cut new #{@gem_name} Release", :white, :underline, :bold)
33
56
 
34
57
  newline
35
58
 
@@ -110,7 +133,7 @@ module Semvergen
110
133
 
111
134
  @shell.commit(@version_file.path, new_version, commit_message, features)
112
135
 
113
- @shell.push
136
+ @shell.push(new_version)
114
137
 
115
138
  newline
116
139
  end
@@ -126,6 +149,8 @@ module Semvergen
126
149
  say color("Publishing: ")
127
150
  @shell.publish(@gem_name, @version_file.version, @gem_server)
128
151
  say color("OK", :green, :bold)
152
+
153
+ @notifier.gem_published(@gem_name, new_version, change_log_message)
129
154
  end
130
155
 
131
156
  end
@@ -3,13 +3,17 @@ module Semvergen
3
3
  class Launcher
4
4
 
5
5
  def bump!(options={})
6
- Semvergen::Bump.new(interface, version_file, change_log_file, shell, gem_name, gem_server).run!(options)
6
+ Semvergen::Bump.new(interface, version_file, change_log_file, shell, gem_name, gem_server, notifier).run!(options)
7
7
  end
8
8
 
9
9
  private
10
10
 
11
11
  def version_file
12
- VersionFile.new(File.open(version_path, "r+"))
12
+ if File.exist? version_path
13
+ VersionFile.new(File.open(version_path, "r+"))
14
+ else
15
+ interface.fail_exit "A bundler style version file should be found at #{version_path}"
16
+ end
13
17
  end
14
18
 
15
19
  def change_log_file
@@ -43,6 +47,8 @@ module Semvergen
43
47
  def gem_server
44
48
  if File.exists?(gem_server_file)
45
49
  File.read(gem_server_file)
50
+ elsif (gem_server = config["gemserver"])
51
+ gem_server
46
52
  else
47
53
  interface.fail_exit "To publish, place the url (with optional username and pass) in a .gem_server file"
48
54
  end
@@ -52,6 +58,28 @@ module Semvergen
52
58
  File.join(".gem_server")
53
59
  end
54
60
 
61
+ def config
62
+ @config ||= if File.exist?(config_path)
63
+ YAML.load_file(config_path)
64
+ else
65
+ {}
66
+ end
67
+ end
68
+
69
+ def config_path
70
+ File.join(".semvergen")
71
+ end
72
+
73
+ def notifier
74
+ if config["slack"]
75
+ require 'semvergen/slack_notifier'
76
+ SlackNotifier.new config["slack"]
77
+ else
78
+ require 'semvergen/null_notifier'
79
+ NullNotifier.new
80
+ end
81
+ end
82
+
55
83
  end
56
84
 
57
- end
85
+ end
@@ -0,0 +1,11 @@
1
+ module Semvergen
2
+
3
+ class NullNotifier
4
+
5
+ def gem_published(gem_name, new_version, change_log_message)
6
+ # no-op
7
+ end
8
+
9
+ end
10
+
11
+ end
@@ -10,16 +10,33 @@ module Semvergen
10
10
  execute("git status --porcelain") =~ /^\s*(D|M|A|R|C)\s/
11
11
  end
12
12
 
13
+ def current_branch
14
+ execute("git symbolic-ref --short HEAD").strip
15
+ end
16
+
17
+ def git_fetch
18
+ `git fetch -q`
19
+ end
20
+
21
+ def git_branch_is_tracking?
22
+ `git rev-list HEAD..@{u} --count` and return $?.exitstatus == 0
23
+ end
24
+
25
+ def git_up_to_date?
26
+ `git rev-list HEAD..@{u} --count`.strip.to_i == 0
27
+ end
28
+
13
29
  def commit(version_path, new_version, commit_subject, features)
14
30
  commit_body = COMMIT_MESSAGE % [new_version, commit_subject, features.join("\n")]
15
31
 
16
32
  execute "git add CHANGELOG.md"
17
33
  execute "git add #{version_path}"
18
34
  execute %Q[git commit -m "#{commit_body}"]
35
+ execute %Q[git tag #{new_version} -m "Version: #{new_version} - #{commit_subject}"]
19
36
  end
20
37
 
21
- def push(remote_name="origin", branch_name="master")
22
- execute "git push #{remote_name} #{branch_name}"
38
+ def push(new_version, remote_name="origin", branch_name="master")
39
+ execute "git push -q #{remote_name} #{branch_name} #{new_version}"
23
40
  end
24
41
 
25
42
  def build_gem(gem_name)
@@ -0,0 +1,50 @@
1
+ require 'slack-notifier'
2
+
3
+ module Semvergen
4
+
5
+ class SlackNotifier
6
+
7
+ def initialize(opts)
8
+ @webhook_url = opts["webhook_url"]
9
+ @username = opts["username"]
10
+ @icons = opts["icons"]
11
+ end
12
+
13
+ def gem_published(gem_name, new_version, change_log_message)
14
+ options = {}
15
+ options[:icon_url] = @icons.sample if @icons
16
+ options[:attachments] = [attachment(gem_name, new_version, change_log_message)]
17
+ notifier.ping "Semvergen: release #{gem_name}", options
18
+ end
19
+
20
+ def notifier
21
+ @notifier ||= Slack::Notifier.new(
22
+ @webhook_url,
23
+ username: @username
24
+ )
25
+ end
26
+
27
+ def user
28
+ [
29
+ ENV["USER"],
30
+ `whoami`
31
+ ].compact.detect { |u| !u.nil? }
32
+ end
33
+
34
+ def attachment(gem_name, new_version, change_log_message)
35
+ {
36
+ title: "#{user} has published a new version of '#{gem_name}'",
37
+ fallback: change_log_message,
38
+ fields: [
39
+ {title: "Version", value: new_version},
40
+ {title: "Change Log", value: change_log_message}
41
+
42
+ ],
43
+ color: "good",
44
+ mrkdwn_in: ["text", "title", "fallback", "fields"]
45
+ }
46
+ end
47
+
48
+ end
49
+
50
+ end
@@ -1,3 +1,3 @@
1
1
  module Semvergen
2
- VERSION = "1.1.0"
2
+ VERSION = "1.2.0"
3
3
  end
@@ -7,7 +7,7 @@ module Semvergen
7
7
  end
8
8
 
9
9
  def version
10
- if file.read =~ /VERSION = "(\d+\.\d+\.\d+)"/
10
+ if file.read =~ /VERSION\s*=\s*["'](\d+\.\d+\.\d+)["']/
11
11
  $1
12
12
  else
13
13
  raise "Don't understand version"
data/lib/semvergen.rb CHANGED
@@ -7,6 +7,8 @@ require "semvergen/change_log_file"
7
7
  require "semvergen/shell"
8
8
  require "semvergen/version_file"
9
9
 
10
+ require "yaml"
11
+
10
12
  module Semvergen
11
13
 
12
14
  def self.bump!(options)
data/semvergen.gemspec CHANGED
@@ -20,9 +20,15 @@ Gem::Specification.new do |spec|
20
20
  spec.add_runtime_dependency "highline", "~> 1.6"
21
21
  spec.add_runtime_dependency "thor", "~> 0.14"
22
22
  spec.add_runtime_dependency "geminabox"
23
+ spec.add_runtime_dependency "slack-notifier"
23
24
 
24
25
  spec.add_development_dependency "bundler", "~> 1.6"
25
26
  spec.add_development_dependency "rake", "~> 10.1"
26
27
  spec.add_development_dependency "rspec", "~> 3.0"
27
28
  spec.add_development_dependency "guard-rspec", "~> 4.0"
29
+ spec.add_development_dependency "pry"
30
+ spec.add_development_dependency 'pry-byebug'
31
+ spec.add_development_dependency 'pry-stack_explorer'
32
+ spec.add_development_dependency 'pry-rescue'
33
+
28
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: semvergen
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brendon McLean
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-17 00:00:00.000000000 Z
11
+ date: 2014-11-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: slack-notifier
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: bundler
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +122,62 @@ dependencies:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
124
  version: '4.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: pry
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: pry-byebug
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: pry-stack_explorer
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: pry-rescue
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
111
181
  description:
112
182
  email:
113
183
  - brendon@intellectionsoftware.com
@@ -133,7 +203,9 @@ files:
133
203
  - lib/semvergen/change_log_file.rb
134
204
  - lib/semvergen/interface.rb
135
205
  - lib/semvergen/launcher.rb
206
+ - lib/semvergen/null_notifier.rb
136
207
  - lib/semvergen/shell.rb
208
+ - lib/semvergen/slack_notifier.rb
137
209
  - lib/semvergen/version.rb
138
210
  - lib/semvergen/version_file.rb
139
211
  - semvergen.gemspec