buildar 0.3.2.2 → 1.0.0.1
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.
- data/MANIFEST.txt +2 -0
- data/VERSION +1 -1
- data/lib/buildar.rb +114 -0
- data/lib/buildar/tasks.rb +114 -0
- data/rakefile.rb +14 -198
- metadata +25 -6
data/MANIFEST.txt
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
1.0.0.1
|
data/lib/buildar.rb
ADDED
@@ -0,0 +1,114 @@
|
|
1
|
+
# Buildar is effectively a hand-rolled singleton. Yes, a NIH miserable excuse
|
2
|
+
# for a global.
|
3
|
+
# Look, we want to be able to call Buildar.conf in the project rakefile, but
|
4
|
+
# we need that data accessible here and inside lib/buildar/raketasks.
|
5
|
+
# So we need a global. But if we use a class-based singleton, it's namespaced.
|
6
|
+
# And it can't be set to nil, for example.
|
7
|
+
#
|
8
|
+
class Buildar
|
9
|
+
# Call this from the rakefile, like:
|
10
|
+
# Buildar.conf(__FILE__) do |b|
|
11
|
+
# b.name = 'foo'
|
12
|
+
# # ...
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
def self.conf(rakefile = nil)
|
16
|
+
unless defined?(@@instance)
|
17
|
+
args = rakefile ? [File.dirname(rakefile)] : []
|
18
|
+
@@instance = Buildar.new(*args)
|
19
|
+
end
|
20
|
+
yield @@instance if block_given?
|
21
|
+
end
|
22
|
+
|
23
|
+
# Confirming singleton.
|
24
|
+
# Only buildar/raketasks should need to call this
|
25
|
+
# Use conf inside project/Rakefile
|
26
|
+
#
|
27
|
+
def self.instance
|
28
|
+
raise "no instance; call Buildar.conf" unless defined?(@@instance)
|
29
|
+
@@instance
|
30
|
+
end
|
31
|
+
|
32
|
+
# e.g. bump(:minor, '1.2.3') #=> '1.3.0'
|
33
|
+
# only works for versions consisting of integers delimited by periods (dots)
|
34
|
+
#
|
35
|
+
def self.bump(position, version)
|
36
|
+
pos = [:major, :minor, :patch, :build].index(position) || position
|
37
|
+
places = version.split('.')
|
38
|
+
if pos >= places.length and pos <= places.length + 2
|
39
|
+
# add zeroes to places up to pos
|
40
|
+
# allows bump(:build, '0') #=> '0.0.0.1'
|
41
|
+
places.length.upto(pos) { |i| places[i] = 0 }
|
42
|
+
end
|
43
|
+
raise "bad position: #{pos} (for version #{version})" unless places[pos]
|
44
|
+
places.map.with_index { |place, i|
|
45
|
+
if i < pos
|
46
|
+
place
|
47
|
+
elsif i == pos
|
48
|
+
place.to_i + 1
|
49
|
+
else
|
50
|
+
0
|
51
|
+
end
|
52
|
+
}.join('.')
|
53
|
+
end
|
54
|
+
|
55
|
+
attr_accessor :root, :version_filename, :manifest_filename,
|
56
|
+
:use_git, :publish, :use_manifest_file
|
57
|
+
attr_reader :name
|
58
|
+
|
59
|
+
def initialize(root = nil, name = nil)
|
60
|
+
@root = root ? File.expand_path(root) : Dir.pwd
|
61
|
+
@name = name || File.split(@root).last
|
62
|
+
@version_filename = 'VERSION'
|
63
|
+
@use_manifest_file = true
|
64
|
+
@manifest_filename = 'MANIFEST.txt'
|
65
|
+
@use_git = true
|
66
|
+
@publish = { rubygems: true }
|
67
|
+
end
|
68
|
+
|
69
|
+
# previously, we did this in initialize
|
70
|
+
# now, give conf a chance to fix things up before calling self.version etc.
|
71
|
+
#
|
72
|
+
def gemspec
|
73
|
+
@gemspec ||= Gem::Specification.new do |s|
|
74
|
+
# Static assignments
|
75
|
+
s.summary = "FIX"
|
76
|
+
s.description = "FIX"
|
77
|
+
s.authors = ["FIX"]
|
78
|
+
s.email = "FIX@FIX.COM"
|
79
|
+
s.homepage = "http://FIX.COM/"
|
80
|
+
s.licenses = ['FIX']
|
81
|
+
# s.has_rdoc = true
|
82
|
+
# s.test_files = ['FIX']
|
83
|
+
|
84
|
+
s.add_development_dependency "minitest", [">= 0"]
|
85
|
+
s.add_development_dependency "rake", [">= 0"]
|
86
|
+
s.add_development_dependency "buildar", ["> 0.4"]
|
87
|
+
end
|
88
|
+
# Make sure things tracked elsewhere stay updated
|
89
|
+
@gemspec.name = @name
|
90
|
+
@gemspec.files = self.manifest if @use_manifest_file
|
91
|
+
@gemspec.version = self.version
|
92
|
+
@gemspec
|
93
|
+
end
|
94
|
+
|
95
|
+
def version_file
|
96
|
+
File.join(@root, @version_filename)
|
97
|
+
end
|
98
|
+
|
99
|
+
def version
|
100
|
+
File.read(self.version_file).chomp
|
101
|
+
end
|
102
|
+
|
103
|
+
def write_version new_version
|
104
|
+
File.open(self.version_file, 'w') { |f| f.write(new_version) }
|
105
|
+
end
|
106
|
+
|
107
|
+
def manifest_file
|
108
|
+
File.join(@root, @manifest_filename)
|
109
|
+
end
|
110
|
+
|
111
|
+
def manifest
|
112
|
+
File.readlines(self.manifest_file).map { |line| line.chomp }
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'buildar'
|
2
|
+
require 'rubygems/package_task'
|
3
|
+
|
4
|
+
# shortcut to Buildar's data from the project rakefile
|
5
|
+
#
|
6
|
+
def proj
|
7
|
+
Buildar.instance
|
8
|
+
end
|
9
|
+
|
10
|
+
# the reason you're here
|
11
|
+
#
|
12
|
+
task :release => [:message, :build, :tag, :publish]
|
13
|
+
|
14
|
+
# these are handy
|
15
|
+
#
|
16
|
+
task :release_patch => [:bump_patch, :release]
|
17
|
+
task :release_minor => [:bump_minor, :release]
|
18
|
+
task :release_major => [:bump_major, :release]
|
19
|
+
|
20
|
+
# make sure ENV['message'] is populated
|
21
|
+
#
|
22
|
+
task :message do
|
23
|
+
unless ENV['message']
|
24
|
+
print "Enter a one-line message:\n> "
|
25
|
+
ENV['message'] = $stdin.gets.chomp
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# roughly equivalent to `gem build foo.gemspec`
|
30
|
+
# places .gem file in pkg/
|
31
|
+
#
|
32
|
+
task :build => [:test, :bump_build] do
|
33
|
+
# definine the task at runtime, rather than requiretime
|
34
|
+
# so that the gemspec will reflect any version bumping since requiretime
|
35
|
+
Gem::PackageTask.new(proj.gemspec).define
|
36
|
+
Rake::Task["package"].invoke
|
37
|
+
end
|
38
|
+
|
39
|
+
# tasks :bump_major, :bump_minor, :bump_patch, :bump_build
|
40
|
+
# commit the version file if proj.use_git
|
41
|
+
#
|
42
|
+
[:major, :minor, :patch, :build].each { |v|
|
43
|
+
task "bump_#{v}" do
|
44
|
+
old_version = proj.version
|
45
|
+
new_version = Buildar.bump(v, old_version)
|
46
|
+
puts "bumping #{old_version} to #{new_version}"
|
47
|
+
proj.write_version new_version
|
48
|
+
if proj.use_git
|
49
|
+
msg = "rake bump_#{v} to #{new_version}"
|
50
|
+
sh "git commit #{proj.version_file} -m '#{msg}'"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
}
|
54
|
+
|
55
|
+
# if proj.use_git:
|
56
|
+
# create annotated git tag based on VERSION and ENV['message'] if available
|
57
|
+
# push tags to origin
|
58
|
+
#
|
59
|
+
task :tag => [:test] do
|
60
|
+
if proj.use_git
|
61
|
+
tagname = "v#{proj.version}"
|
62
|
+
message = ENV['message'] || "auto-tagged #{tagname} by Rake"
|
63
|
+
sh "git tag -a '#{tagname}' -m '#{message}'"
|
64
|
+
sh "git push origin --tags"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# roughly, gem push foo-VERSION.gem
|
69
|
+
#
|
70
|
+
task :publish => [:verify_publish_credentials] do
|
71
|
+
if proj.publish[:rubygems]
|
72
|
+
fragment = "-#{proj.version}.gem"
|
73
|
+
pkg_dir = File.join(proj.root, 'pkg')
|
74
|
+
Dir.chdir(pkg_dir) {
|
75
|
+
candidates = Dir.glob "*#{fragment}"
|
76
|
+
# sanity check
|
77
|
+
case candidates.length
|
78
|
+
when 0
|
79
|
+
raise "could not find .gem matching #{fragment}"
|
80
|
+
when 1
|
81
|
+
sh "gem push #{candidates.first}"
|
82
|
+
else
|
83
|
+
raise "multiple candidates found matching #{fragment}"
|
84
|
+
end
|
85
|
+
}
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# just make sure the ~/.gem/credentials file is readable
|
90
|
+
#
|
91
|
+
task :verify_publish_credentials do
|
92
|
+
if proj.publish[:rubygems]
|
93
|
+
creds = '~/.gem/credentials'
|
94
|
+
fp = File.expand_path(creds)
|
95
|
+
raise "#{creds} does not exist" unless File.exists?(fp)
|
96
|
+
raise "can't read #{creds}" unless File.readable?(fp)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
# display project name and version
|
101
|
+
#
|
102
|
+
task :version do
|
103
|
+
puts "#{proj.name} #{proj.version}"
|
104
|
+
end
|
105
|
+
|
106
|
+
# display Buildar's understanding of the manifest file
|
107
|
+
#
|
108
|
+
task :manifest do
|
109
|
+
puts proj.manifest.join("\n") if proj.use_manifest_file
|
110
|
+
end
|
111
|
+
|
112
|
+
# if the user wants a bump, make it a patch
|
113
|
+
#
|
114
|
+
task :bump => [:bump_patch]
|
data/rakefile.rb
CHANGED
@@ -1,204 +1,20 @@
|
|
1
|
-
require '
|
1
|
+
require 'buildar/tasks'
|
2
2
|
require 'rake/testtask'
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
PUBLISH = {
|
17
|
-
rubygems: true, # publish .gem to http://rubygems.org/
|
18
|
-
}
|
19
|
-
|
20
|
-
def self.gemspec
|
21
|
-
Gem::Specification.new do |s|
|
22
|
-
# Static assignments
|
23
|
-
s.name = PROJECT_NAME
|
24
|
-
s.summary = "FIX"
|
25
|
-
s.description = "FIX"
|
26
|
-
s.authors = ["FIX"]
|
27
|
-
s.email = "FIX@FIX.COM"
|
28
|
-
s.homepage = "http://FIX.COM/"
|
29
|
-
s.licenses = ['FIX']
|
30
|
-
s.has_rdoc = true
|
31
|
-
# s.test_files = ['FIX']
|
32
|
-
|
33
|
-
# Dynamic assignments
|
34
|
-
s.files = manifest
|
35
|
-
s.version = version
|
36
|
-
# s.date = Time.now.strftime("%Y-%m-%d")
|
37
|
-
|
38
|
-
# s.add_runtime_dependency "rest-client", ["~> 1"]
|
39
|
-
# s.add_runtime_dependency "json", ["~> 1"]
|
40
|
-
s.add_development_dependency "minitest", [">= 0"]
|
41
|
-
s.add_development_dependency "rake", [">= 0"]
|
42
|
-
end
|
43
|
-
end
|
44
|
-
#
|
45
|
-
#
|
46
|
-
# End project-specific settings.
|
47
|
-
################################
|
48
|
-
|
49
|
-
def self.version
|
50
|
-
File.read(VERSION_FILE).chomp
|
51
|
-
end
|
52
|
-
|
53
|
-
def self.manifest
|
54
|
-
File.readlines(MANIFEST_FILE).map { |line| line.chomp }
|
55
|
-
end
|
56
|
-
|
57
|
-
def self.write_version new_version
|
58
|
-
File.open(VERSION_FILE, 'w') { |f| f.write(new_version) }
|
59
|
-
end
|
60
|
-
|
61
|
-
# e.g. bump(:minor, '1.2.3') #=> '1.3.0'
|
62
|
-
# only works for versions consisting of integers delimited by periods (dots)
|
63
|
-
#
|
64
|
-
def self.bump(position, version)
|
65
|
-
pos = [:major, :minor, :patch, :build].index(position) || position
|
66
|
-
places = version.split('.')
|
67
|
-
if pos >= places.length and pos <= places.length + 2
|
68
|
-
# add zeroes to places up to pos
|
69
|
-
# allows bump(:build, '0') #=> '0.0.0.1'
|
70
|
-
places.length.upto(pos) { |i| places[i] = 0 }
|
71
|
-
end
|
72
|
-
raise "bad position: #{pos} (for version #{version})" unless places[pos]
|
73
|
-
places.map.with_index { |place, i|
|
74
|
-
if i < pos
|
75
|
-
place
|
76
|
-
elsif i == pos
|
77
|
-
place.to_i + 1
|
78
|
-
else
|
79
|
-
0
|
80
|
-
end
|
81
|
-
}.join('.')
|
82
|
-
end
|
4
|
+
Buildar.conf(__FILE__) do |b|
|
5
|
+
b.version_filename = 'VERSION'
|
6
|
+
b.manifest_filename = 'MANIFEST.txt'
|
7
|
+
b.use_git = true
|
8
|
+
b.publish[:rubygems] = true
|
9
|
+
b.gemspec.name = 'buildar'
|
10
|
+
b.gemspec.summary = 'Buildar crept inside your rakefile and scratched some tasks'
|
11
|
+
b.gemspec.description = 'Buildar helps automate the release process with versioning, building, packaging, and publishing. Optional git integration'
|
12
|
+
b.gemspec.author = 'Rick Hull'
|
13
|
+
b.gemspec.homepage = 'https://github.com/rickhull/buildar'
|
14
|
+
b.gemspec.license = 'MIT'
|
15
|
+
b.gemspec.has_rdoc = true
|
83
16
|
end
|
84
17
|
|
85
|
-
|
86
|
-
#######
|
87
|
-
# Tasks
|
88
|
-
#
|
89
|
-
#
|
90
|
-
|
91
|
-
# i.e. task :test, runs your test files
|
92
|
-
#
|
93
18
|
Rake::TestTask.new :test do |t|
|
94
|
-
t.pattern = 'test/*.rb'
|
95
|
-
end
|
96
|
-
|
97
|
-
# display project name and version
|
98
|
-
#
|
99
|
-
task :version do
|
100
|
-
puts "#{Buildar::PROJECT_NAME} #{Buildar.version}"
|
101
|
-
end
|
102
|
-
|
103
|
-
# make sure ENV['message'] is populated
|
104
|
-
#
|
105
|
-
task :message do
|
106
|
-
unless ENV['message']
|
107
|
-
print "Enter a one-line message:\n> "
|
108
|
-
ENV['message'] = $stdin.gets.chomp
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
# if USE_GIT:
|
113
|
-
# create annotated git tag based on VERSION and ENV['message'] if available
|
114
|
-
# push tags to origin
|
115
|
-
#
|
116
|
-
task :tag => [:test] do
|
117
|
-
if Buildar::USE_GIT
|
118
|
-
message = ENV['message'] || "auto-tagged #{tagname} by Rake"
|
119
|
-
sh "git tag -a 'v#{Buildar.version}' -m '#{message}'"
|
120
|
-
sh "git push origin --tags"
|
121
|
-
end
|
19
|
+
t.pattern = 'test/*.rb'
|
122
20
|
end
|
123
|
-
|
124
|
-
# display Buildar's understanding of the MANIFEST.txt file
|
125
|
-
#
|
126
|
-
task :manifest do
|
127
|
-
puts Buildar.manifest.join("\n")
|
128
|
-
end
|
129
|
-
|
130
|
-
# roughly equivalent to `gem build foo.gemspec`
|
131
|
-
# places .gem file in pkg/
|
132
|
-
#
|
133
|
-
task :build => [:test, :bump_build] do
|
134
|
-
# definine the task at runtime, rather than requiretime
|
135
|
-
# so that the gemspec will reflect any version bumping since requiretime
|
136
|
-
#
|
137
|
-
Gem::PackageTask.new(Buildar.gemspec).define
|
138
|
-
Rake::Task["package"].invoke
|
139
|
-
end
|
140
|
-
|
141
|
-
# e.g. task :bump_build, with VERSION 1.2.3.4, updates VERSION to 1.2.3.5
|
142
|
-
# if USE_GIT and GIT_COMMIT_VERSION: add VERSION and commit
|
143
|
-
#
|
144
|
-
[:major, :minor, :patch, :build].each { |v|
|
145
|
-
task "bump_#{v}" do
|
146
|
-
old_version = Buildar.version
|
147
|
-
new_version = Buildar.bump(v, old_version)
|
148
|
-
puts "bumping #{old_version} to #{new_version}"
|
149
|
-
Buildar.write_version new_version
|
150
|
-
if Buildar::USE_GIT and Buildar::GIT_COMMIT_VERSION
|
151
|
-
msg = "rake bump_#{v} to #{new_version}"
|
152
|
-
sh "git commit #{Buildar::VERSION_FILE} -m '#{msg}'"
|
153
|
-
end
|
154
|
-
end
|
155
|
-
}
|
156
|
-
|
157
|
-
# not used internally, but if the user wants a bump, make it a patch
|
158
|
-
#
|
159
|
-
task :bump => [:bump_patch]
|
160
|
-
|
161
|
-
# just make sure the ~/.gem/credentials file is readable
|
162
|
-
#
|
163
|
-
task :verify_publish_credentials do
|
164
|
-
if Buildar::PUBLISH[:rubygems]
|
165
|
-
creds = '~/.gem/credentials'
|
166
|
-
fp = File.expand_path(creds)
|
167
|
-
raise "#{creds} does not exist" unless File.exists?(fp)
|
168
|
-
raise "can't read #{creds}" unless File.readable?(fp)
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
|
173
|
-
# roughly, gem push foo-VERSION.gem
|
174
|
-
#
|
175
|
-
task :publish => [:verify_publish_credentials] do
|
176
|
-
if Buildar::PUBLISH[:rubygems]
|
177
|
-
fragment = "-#{Buildar.version}.gem"
|
178
|
-
pkg_dir = File.join(Buildar::PROJECT_ROOT, 'pkg')
|
179
|
-
Dir.chdir(pkg_dir) {
|
180
|
-
candidates = Dir.glob "*#{fragment}"
|
181
|
-
case candidates.length
|
182
|
-
when 0
|
183
|
-
raise "could not find .gem matching #{fragment}"
|
184
|
-
when 1
|
185
|
-
sh "gem push #{candidates.first}"
|
186
|
-
else
|
187
|
-
raise "multiple candidates found matching #{fragment}"
|
188
|
-
end
|
189
|
-
}
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
|
-
# if USE_GIT: git push origin
|
194
|
-
#
|
195
|
-
task :gitpush do
|
196
|
-
# may prompt
|
197
|
-
sh "git push origin" if Buildar::USE_GIT
|
198
|
-
end
|
199
|
-
|
200
|
-
task :release => [:message, :build, :tag, :publish, :gitpush]
|
201
|
-
|
202
|
-
task :release_patch => [:bump_patch, :release]
|
203
|
-
task :release_minor => [:bump_minor, :release]
|
204
|
-
task :release_major => [:bump_major, :release]
|
metadata
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: buildar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
|
-
-
|
8
|
+
- Rick Hull
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
@@ -43,7 +43,24 @@ dependencies:
|
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
45
|
version: '0'
|
46
|
-
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: buildar
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>'
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0.4'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>'
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.4'
|
62
|
+
description: Buildar helps automate the release process with versioning, building,
|
63
|
+
packaging, and publishing. Optional git integration
|
47
64
|
email: FIX@FIX.COM
|
48
65
|
executables: []
|
49
66
|
extensions: []
|
@@ -52,9 +69,11 @@ files:
|
|
52
69
|
- MANIFEST.txt
|
53
70
|
- VERSION
|
54
71
|
- rakefile.rb
|
55
|
-
|
72
|
+
- lib/buildar.rb
|
73
|
+
- lib/buildar/tasks.rb
|
74
|
+
homepage: https://github.com/rickhull/buildar
|
56
75
|
licenses:
|
57
|
-
-
|
76
|
+
- MIT
|
58
77
|
post_install_message:
|
59
78
|
rdoc_options: []
|
60
79
|
require_paths:
|
@@ -76,5 +95,5 @@ rubyforge_project:
|
|
76
95
|
rubygems_version: 1.8.23
|
77
96
|
signing_key:
|
78
97
|
specification_version: 3
|
79
|
-
summary:
|
98
|
+
summary: Buildar crept inside your rakefile and scratched some tasks
|
80
99
|
test_files: []
|