releasy 0.2.0rc2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/releasy/builders/windows_folder.rb +1 -1
- data/lib/releasy/deployers/github.rb +102 -3
- data/lib/releasy/mixins/log.rb +7 -0
- data/lib/releasy/project.rb +32 -27
- data/lib/releasy/version.rb +1 -1
- data/test/releasy/deployers/github_test.rb +3 -3
- data/test/releasy/project_test.rb +136 -27
- metadata +27 -24
@@ -24,7 +24,7 @@ module Releasy
|
|
24
24
|
system tmp_ocra_executable
|
25
25
|
rm tmp_ocra_executable, fileutils_options
|
26
26
|
|
27
|
-
mv Dir["#{File.dirname(folder)}/ocr
|
27
|
+
mv Dir["#{File.dirname(folder)}/ocr*.tmp"].first, folder, fileutils_options
|
28
28
|
|
29
29
|
maker = Releasy::WindowsWrapperMaker.new
|
30
30
|
maker.build_executable("#{folder}/#{executable_name}", "src/#{project.executable}",
|
@@ -9,7 +9,99 @@ module Releasy
|
|
9
9
|
# @attr repository [String] Name of Github repository (defaults to: the repository name in `git config remote.origin.url` or _project.underscored_name_).
|
10
10
|
# @attr token [String] Github token associated with {#login} - a 32-digit hexadecimal string - DO NOT COMMIT A FILE CONTAINING YOUR GITHUB TOKEN (defaults to: `git config github.token`)
|
11
11
|
class Github < Deployer
|
12
|
+
# Patch to add an asynchronous version of upload, that also yields every second and takes into account timeout.
|
13
|
+
module UploaderUploadAsync
|
14
|
+
def upload_async(info)
|
15
|
+
unless info[:repos]
|
16
|
+
raise "required repository name"
|
17
|
+
end
|
18
|
+
info[:repos] = @login + '/' + info[:repos] unless info[:repos].include? '/'
|
19
|
+
|
20
|
+
if info[:file]
|
21
|
+
file = info[:file]
|
22
|
+
unless File.exist?(file) && File.readable?(file)
|
23
|
+
raise "file does not exsits or readable"
|
24
|
+
end
|
25
|
+
info[:name] ||= File.basename(file)
|
26
|
+
end
|
27
|
+
unless info[:file] || info[:data]
|
28
|
+
raise "required file or data parameter to upload"
|
29
|
+
end
|
30
|
+
|
31
|
+
unless info[:name]
|
32
|
+
raise "required name parameter for filename with data parameter"
|
33
|
+
end
|
34
|
+
|
35
|
+
if info[:replace]
|
36
|
+
list_files(info[:repos]).each { |obj|
|
37
|
+
next unless obj[:name] == info[:name]
|
38
|
+
delete info[:repos], obj[:id]
|
39
|
+
}
|
40
|
+
elsif list_files(info[:repos]).any?{|obj| obj[:name] == info[:name]}
|
41
|
+
raise "file '#{info[:name]}' is already uploaded. please try different name"
|
42
|
+
end
|
43
|
+
|
44
|
+
info[:content_type] ||= 'application/octet-stream'
|
45
|
+
stat = HTTPClient.post("https://github.com/#{info[:repos]}/downloads", {
|
46
|
+
"file_size" => info[:file] ? File.stat(info[:file]).size : info[:data].size,
|
47
|
+
"content_type" => info[:content_type],
|
48
|
+
"file_name" => info[:name],
|
49
|
+
"description" => info[:description] || '',
|
50
|
+
"login" => @login,
|
51
|
+
"token" => @token
|
52
|
+
})
|
53
|
+
|
54
|
+
unless stat.code == 200
|
55
|
+
raise "Failed to post file info"
|
56
|
+
end
|
57
|
+
|
58
|
+
upload_info = JSON.parse(stat.content)
|
59
|
+
if info[:file]
|
60
|
+
f = File.open(info[:file], 'rb')
|
61
|
+
else
|
62
|
+
f = Tempfile.open('net-github-upload')
|
63
|
+
f << info[:data]
|
64
|
+
f.flush
|
65
|
+
end
|
66
|
+
|
67
|
+
client = HTTPClient.new
|
68
|
+
client.send_timeout = info[:upload_timeout] if info[:upload_timeout]
|
69
|
+
|
70
|
+
res = begin
|
71
|
+
connection = client.post_async("http://github.s3.amazonaws.com/", [
|
72
|
+
['Filename', info[:name]],
|
73
|
+
['policy', upload_info['policy']],
|
74
|
+
['success_action_status', 201],
|
75
|
+
['key', upload_info['path']],
|
76
|
+
['AWSAccessKeyId', upload_info['accesskeyid']],
|
77
|
+
['Content-Type', upload_info['content_type'] || 'application/octet-stream'],
|
78
|
+
['signature', upload_info['signature']],
|
79
|
+
['acl', upload_info['acl']],
|
80
|
+
['file', f]
|
81
|
+
])
|
82
|
+
|
83
|
+
until connection.finished?
|
84
|
+
yield if block_given?
|
85
|
+
sleep info[:yield_interval] || 1
|
86
|
+
end
|
87
|
+
|
88
|
+
connection.pop
|
89
|
+
ensure
|
90
|
+
f.close
|
91
|
+
end
|
92
|
+
|
93
|
+
if res.status == 201
|
94
|
+
return FasterXmlSimple.xml_in(res.body.read)['PostResponse']['Location']
|
95
|
+
else
|
96
|
+
raise 'Failed to upload' + extract_error_message(res.body)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
|
12
102
|
TYPE = :github
|
103
|
+
# Maximum time to allow an upload to continue. An hour to upload a file isn't unreasonable. Better than the default 2 minutes, which uploads about 4MB for me.
|
104
|
+
UPLOAD_TIMEOUT = 60 * 60
|
13
105
|
|
14
106
|
Deployers.register self
|
15
107
|
|
@@ -83,7 +175,10 @@ module Releasy
|
|
83
175
|
raise ConfigError, "#user must be set manually if it is not configured on the system" unless user
|
84
176
|
raise ConfigError, "#token must be set manually if it is not configured on the system" unless token
|
85
177
|
|
86
|
-
|
178
|
+
# Hold off requiring this unless needed, so it doesn't slow down creating tasks.
|
179
|
+
if require 'net/github-upload'
|
180
|
+
Net::GitHub::Upload.send :include, UploaderUploadAsync
|
181
|
+
end
|
87
182
|
|
88
183
|
uploader = Net::GitHub::Upload.new(:login => user, :token => token)
|
89
184
|
|
@@ -92,7 +187,10 @@ module Releasy
|
|
92
187
|
t = Time.now
|
93
188
|
|
94
189
|
begin
|
95
|
-
uploader.
|
190
|
+
uploader.upload_async :repos => repository, :file => file, :description => description, :replace => @force_replace, :upload_timeout => UPLOAD_TIMEOUT do
|
191
|
+
print '.'
|
192
|
+
end
|
193
|
+
puts '.'
|
96
194
|
rescue => ex
|
97
195
|
# Probably failed to overwrite an existing file.
|
98
196
|
error "Error uploading file #{file}: #{ex.message}"
|
@@ -100,7 +198,8 @@ module Releasy
|
|
100
198
|
end
|
101
199
|
|
102
200
|
link = "https://github.com/downloads/#{user}/#{repository}/#{File.basename(file)}"
|
103
|
-
|
201
|
+
time = "%d:%02d" % (Time.now - t).ceil.divmod(60)
|
202
|
+
heading %[Successfully uploaded to "#{link}" in #{time}]
|
104
203
|
|
105
204
|
link
|
106
205
|
end
|
data/lib/releasy/mixins/log.rb
CHANGED
@@ -10,28 +10,35 @@ module Releasy::Mixins::Log
|
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
|
+
protected
|
14
|
+
# Current level of logging. This affects ALL objects that are logging!
|
13
15
|
def log_level; Releasy::Mixins::Log.log_level; end
|
14
16
|
|
17
|
+
protected
|
15
18
|
# Options for fileutils commands, based on log_level.
|
16
19
|
def fileutils_options
|
17
20
|
{ :verbose => log_level == :verbose }
|
18
21
|
end
|
19
22
|
|
23
|
+
protected
|
20
24
|
# Heading message shown unless :silent
|
21
25
|
def heading(str)
|
22
26
|
puts "=== #{str}" unless log_level == :silent
|
23
27
|
end
|
24
28
|
|
29
|
+
protected
|
25
30
|
# Heading message shown if :verbose
|
26
31
|
def info(str)
|
27
32
|
puts str if log_level == :verbose
|
28
33
|
end
|
29
34
|
|
35
|
+
protected
|
30
36
|
# Warning message shown unless :silent
|
31
37
|
def warn(str)
|
32
38
|
puts "=== WARNING: #{str}" unless log_level == :silent
|
33
39
|
end
|
34
40
|
|
41
|
+
protected
|
35
42
|
# Error message always shown.
|
36
43
|
def error(str)
|
37
44
|
puts "=== ERROR: #{str}"
|
data/lib/releasy/project.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'set'
|
2
|
+
|
1
3
|
require 'releasy/dsl_wrapper'
|
2
4
|
require 'releasy/builders'
|
3
5
|
require 'releasy/packagers'
|
@@ -270,9 +272,9 @@ module Releasy
|
|
270
272
|
def generate_archive_tasks
|
271
273
|
return if active_builders.empty?
|
272
274
|
|
273
|
-
windows_tasks =
|
274
|
-
osx_tasks =
|
275
|
-
top_level_tasks =
|
275
|
+
windows_tasks = Set.new
|
276
|
+
osx_tasks = Set.new
|
277
|
+
top_level_tasks = Set.new
|
276
278
|
|
277
279
|
active_builders.each do |builder|
|
278
280
|
output_task = builder.type.to_s.sub '_', ':'
|
@@ -281,7 +283,9 @@ module Releasy
|
|
281
283
|
packagers.each do |packager|
|
282
284
|
packager.send :generate_tasks, output_task, builder.send(:folder), @deployers
|
283
285
|
|
284
|
-
|
286
|
+
unless @deployers.empty?
|
287
|
+
task "deploy:#{output_task}:#{packager.type}" => @deployers.map {|d| "deploy:#{output_task}:#{packager.type}:#{d.type}" }
|
288
|
+
end
|
285
289
|
end
|
286
290
|
|
287
291
|
@deployers.each do |deployer|
|
@@ -292,13 +296,13 @@ module Releasy
|
|
292
296
|
|
293
297
|
case output_task
|
294
298
|
when /^windows:/
|
295
|
-
windows_tasks <<
|
296
|
-
top_level_tasks <<
|
299
|
+
windows_tasks << output_task
|
300
|
+
top_level_tasks << 'windows'
|
297
301
|
when /^osx:/
|
298
|
-
osx_tasks <<
|
299
|
-
top_level_tasks <<
|
302
|
+
osx_tasks << output_task
|
303
|
+
top_level_tasks << 'osx'
|
300
304
|
else
|
301
|
-
top_level_tasks <<
|
305
|
+
top_level_tasks << output_task
|
302
306
|
end
|
303
307
|
end
|
304
308
|
|
@@ -306,44 +310,45 @@ module Releasy
|
|
306
310
|
unless windows_tasks.empty?
|
307
311
|
task "package:windows" => windows_tasks.map {|t| "package:#{t}" }
|
308
312
|
|
309
|
-
generate_deploy_tasks
|
313
|
+
generate_deploy_tasks windows_tasks
|
310
314
|
end
|
311
315
|
|
312
316
|
# OS X tasks.
|
313
317
|
unless osx_tasks.empty?
|
314
318
|
task "package:osx" => osx_tasks.map {|t| "package:#{t}" }
|
315
319
|
|
316
|
-
generate_deploy_tasks
|
320
|
+
generate_deploy_tasks osx_tasks
|
317
321
|
end
|
318
322
|
|
319
323
|
# Top level tasks.
|
320
324
|
desc "Package #{description}"
|
321
325
|
task "package" => top_level_tasks.map {|t| "package:#{t}" }
|
322
326
|
|
323
|
-
|
324
|
-
desc "Deploy #{description}"
|
325
|
-
task "deploy" => top_level_tasks.map {|t| "deploy:#{t}" }
|
326
|
-
|
327
|
-
generate_deploy_tasks "", top_level_tasks
|
328
|
-
end
|
327
|
+
generate_deploy_tasks top_level_tasks
|
329
328
|
|
330
329
|
self
|
331
330
|
end
|
332
331
|
|
333
332
|
protected
|
334
|
-
def generate_deploy_tasks(
|
335
|
-
|
333
|
+
def generate_deploy_tasks(tasks)
|
334
|
+
return if @deployers.empty?
|
336
335
|
|
337
|
-
|
338
|
-
|
336
|
+
# Work out the namespace first. If there isn't one, then make a described (root) deploy task.
|
337
|
+
tasks.first =~ /(.*):.*/
|
338
|
+
namespace = $1
|
339
|
+
deploy_task = namespace ? "deploy:#{namespace}" : 'deploy'
|
339
340
|
|
340
|
-
|
341
|
-
|
342
|
-
|
341
|
+
unless namespace
|
342
|
+
desc "Deploy #{description}"
|
343
|
+
task 'deploy' => tasks.map {|t| "deploy:#{t}" }
|
344
|
+
end
|
343
345
|
|
344
|
-
|
345
|
-
|
346
|
-
|
346
|
+
@deployers.each do |d|
|
347
|
+
task "#{deploy_task}:#{d.type}" => tasks.map {|t| "deploy:#{t}:#{d.type}" }
|
348
|
+
end
|
349
|
+
|
350
|
+
tasks.each do |t|
|
351
|
+
task "deploy:#{t}" => @deployers.map {|d| "deploy:#{t}:#{d.type}" }
|
347
352
|
end
|
348
353
|
end
|
349
354
|
|
data/lib/releasy/version.rb
CHANGED
@@ -94,7 +94,7 @@ context Releasy::Deployers::Github do
|
|
94
94
|
should "expect an Net::GitHub::Upload to be created and used to upload" do
|
95
95
|
stub_file_size
|
96
96
|
mock(Net::GitHub::Upload).new :login => "test_user", :token => "0" * 32 do
|
97
|
-
mock!.
|
97
|
+
mock!.upload_async :repos => "test_app", :file => "file.zip", :description => "Test App 0.1", :replace => false, :upload_timeout => 3600
|
98
98
|
end
|
99
99
|
|
100
100
|
topic.send :deploy, "file.zip"
|
@@ -105,7 +105,7 @@ context Releasy::Deployers::Github do
|
|
105
105
|
should "expect an Net::GitHub::Upload to be created and exit (not forcing replacement and file already exists)" do
|
106
106
|
stub_file_size
|
107
107
|
mock(Net::GitHub::Upload).new :login => "test_user", :token => "0" * 32 do
|
108
|
-
mock!.
|
108
|
+
mock!.upload_async :repos => "test_app", :file => "file.zip", :description => "Test App 0.1", :replace => false, :upload_timeout => 3600 do
|
109
109
|
raise "file already exists"
|
110
110
|
end
|
111
111
|
end
|
@@ -120,7 +120,7 @@ context Releasy::Deployers::Github do
|
|
120
120
|
should "expect an Net::GitHub::Upload to be created and used to upload (forcing replacement)" do
|
121
121
|
stub_file_size
|
122
122
|
mock(Net::GitHub::Upload).new :login => "test_user", :token => "0" * 32 do
|
123
|
-
mock!.
|
123
|
+
mock!.upload_async :repos => "test_app", :file => "file.zip", :description => "Test App 0.1", :replace => true, :upload_timeout => 3600
|
124
124
|
end
|
125
125
|
|
126
126
|
topic.replace!
|
@@ -2,6 +2,8 @@ require File.expand_path("../teststrap", File.dirname(__FILE__))
|
|
2
2
|
|
3
3
|
# Change directory into the project, since that is where we work from normally.
|
4
4
|
|
5
|
+
folder_base = "pkg/test_project_2a_v0_1_5"
|
6
|
+
|
5
7
|
# @author Bil Bas (Spooner)
|
6
8
|
context Releasy::Project do
|
7
9
|
teardown do
|
@@ -79,6 +81,8 @@ context Releasy::Project do
|
|
79
81
|
|
80
82
|
context "defined" do
|
81
83
|
setup do
|
84
|
+
stub(Releasy).win_platform?.returns true
|
85
|
+
|
82
86
|
Releasy::Project.new do
|
83
87
|
name "Test Project - (2a)"
|
84
88
|
version "v0.1.5"
|
@@ -88,21 +92,20 @@ context Releasy::Project do
|
|
88
92
|
exclude_encoding
|
89
93
|
|
90
94
|
add_build :source
|
95
|
+
|
91
96
|
add_build :osx_app do
|
92
|
-
|
93
|
-
extension ".tgz"
|
94
|
-
end
|
95
|
-
wrapper Dir["../wrappers/gosu-mac-wrapper-*.tar.gz"].first
|
97
|
+
wrapper "../wrappers/gosu-mac-wrapper-0.7.41.tar.gz"
|
96
98
|
url "org.url.app"
|
97
99
|
end
|
98
|
-
|
99
|
-
|
100
|
-
end
|
100
|
+
|
101
|
+
add_build :windows_installer
|
101
102
|
|
102
103
|
files source_files
|
103
104
|
|
104
105
|
add_link "www.frog.com", "Frog"
|
105
106
|
add_link "www2.fish.com", "Fish"
|
107
|
+
|
108
|
+
add_deploy :github
|
106
109
|
end
|
107
110
|
end
|
108
111
|
|
@@ -119,44 +122,79 @@ context Releasy::Project do
|
|
119
122
|
asserts(:folder_base).equals "pkg/test_project_2a_v0_1_5"
|
120
123
|
asserts(:links).equals "www.frog.com" => "Frog", "www2.fish.com" => "Fish"
|
121
124
|
|
122
|
-
asserts(:active_builders).size
|
125
|
+
asserts(:active_builders).size 3
|
123
126
|
asserts("source active_packagers") { topic.send(:active_packagers, topic.send(:active_builders).find {|b| b.type == :source }) }.size 2
|
124
|
-
asserts("osx app active_packagers") { topic.send(:active_packagers, topic.send(:active_builders).find {|b| b.type == :osx_app }) }.size
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
127
|
+
asserts("osx app active_packagers") { topic.send(:active_packagers, topic.send(:active_builders).find {|b| b.type == :osx_app }) }.size 2
|
128
|
+
asserts("Windows standalone active_packagers") { topic.send(:active_packagers, topic.send(:active_builders).find {|b| b.type == :windows_installer }) }.size 2
|
129
|
+
|
130
|
+
context "adding builds and packages" do
|
131
|
+
asserts "#add_build yields an instance_eval-ed Releasy::DSLWrapper" do
|
132
|
+
correct = false
|
133
|
+
topic.add_build :windows_standalone do
|
134
|
+
correct = (is_a?(Releasy::DSLWrapper) and owner.is_a?(Releasy::Builders::WindowsStandalone))
|
135
|
+
end
|
136
|
+
correct
|
133
137
|
end
|
134
|
-
correct
|
135
|
-
end
|
136
138
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
139
|
+
asserts "#add_package yields an instance_eval-ed Releasy::DSLWrapper" do
|
140
|
+
correct = false
|
141
|
+
topic.add_package :tar_gz do
|
142
|
+
correct = (is_a?(Releasy::DSLWrapper) and owner.is_a?(Releasy::Packagers::TarGzip))
|
143
|
+
end
|
144
|
+
correct
|
141
145
|
end
|
142
|
-
correct
|
143
146
|
end
|
144
147
|
|
145
148
|
context "#generate_archive_tasks" do
|
146
149
|
asserts(:generate_archive_tasks).equals { topic }
|
147
150
|
|
148
|
-
should "call generate_tasks on all packagers" do
|
151
|
+
should "call #generate_tasks on all packagers" do
|
149
152
|
topic.send(:active_builders).each do |builder|
|
150
|
-
topic.send(:active_packagers, builder).each
|
153
|
+
topic.send(:active_packagers, builder).each do |packager|
|
154
|
+
mock(packager).generate_tasks(builder.type.to_s.sub('_', ':'), builder.send(:folder), satisfy {|a| a.size == 1 and a.first.is_a? Releasy::Deployers::Github })
|
155
|
+
end
|
151
156
|
end
|
152
157
|
topic.send :generate_archive_tasks
|
153
158
|
end
|
154
159
|
end
|
155
160
|
|
161
|
+
context "#generate_deploy_tasks" do
|
162
|
+
context "without namespace" do
|
163
|
+
setup do
|
164
|
+
Rake::Task.clear
|
165
|
+
topic.send :generate_deploy_tasks, %w[a b]
|
166
|
+
end
|
167
|
+
|
168
|
+
tasks = [
|
169
|
+
[ :Task, "deploy", %w[deploy:a deploy:b] ],
|
170
|
+
[ :Task, "deploy:github", %w[deploy:a:github deploy:b:github] ],
|
171
|
+
[ :Task, "deploy:a", %w[deploy:a:github] ],
|
172
|
+
[ :Task, "deploy:b", %w[deploy:b:github] ],
|
173
|
+
]
|
174
|
+
|
175
|
+
test_tasks tasks
|
176
|
+
end
|
177
|
+
|
178
|
+
context "with namespace" do
|
179
|
+
setup do
|
180
|
+
Rake::Task.clear
|
181
|
+
topic.send :generate_deploy_tasks, %w[c:a c:b]
|
182
|
+
end
|
183
|
+
|
184
|
+
tasks = [
|
185
|
+
[ :Task, "deploy:c:github", %w[deploy:c:a:github deploy:c:b:github] ],
|
186
|
+
[ :Task, "deploy:c:a", %w[deploy:c:a:github] ],
|
187
|
+
[ :Task, "deploy:c:b", %w[deploy:c:b:github] ],
|
188
|
+
]
|
189
|
+
|
190
|
+
test_tasks tasks
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
156
194
|
context "#generate_tasks" do
|
157
195
|
asserts(:generate_tasks).equals { topic }
|
158
196
|
|
159
|
-
should "call generate_tasks on all builders" do
|
197
|
+
should "call #generate_tasks on all builders" do
|
160
198
|
topic.send(:active_builders) {|b| mock(b).generate_tasks }
|
161
199
|
topic.send :generate_tasks
|
162
200
|
end
|
@@ -165,6 +203,77 @@ context Releasy::Project do
|
|
165
203
|
mock(topic).generate_archive_tasks
|
166
204
|
topic.send :generate_tasks
|
167
205
|
end
|
206
|
+
|
207
|
+
context "generated tasks" do
|
208
|
+
tasks = [
|
209
|
+
[ :Task, "deploy", %w[deploy:source deploy:osx deploy:windows] ],
|
210
|
+
[ :Task, "deploy:github", %w[deploy:source:github deploy:osx:github deploy:windows:github] ],
|
211
|
+
[ :Task, "deploy:source", %w[deploy:source:github] ],
|
212
|
+
|
213
|
+
[ :Task, "deploy:source:github", %w[deploy:source:zip:github deploy:source:7z:github] ],
|
214
|
+
[ :Task, "deploy:source:zip", %w[deploy:source:zip:github] ],
|
215
|
+
[ :Task, "deploy:source:zip:github", %w[package:source:zip] ],
|
216
|
+
[ :Task, "deploy:source:7z", %w[deploy:source:7z:github] ],
|
217
|
+
[ :Task, "deploy:source:7z:github", %w[package:source:7z] ],
|
218
|
+
|
219
|
+
[ :Task, "deploy:osx", %w[deploy:osx:github] ],
|
220
|
+
[ :Task, "deploy:osx:app", %w[deploy:osx:app:github] ],
|
221
|
+
[ :Task, "deploy:osx:github", %w[deploy:osx:app:github] ],
|
222
|
+
[ :Task, "deploy:osx:app:github", %w[deploy:osx:app:zip:github deploy:osx:app:7z:github] ],
|
223
|
+
[ :Task, "deploy:osx:app:zip", %w[deploy:osx:app:zip:github] ],
|
224
|
+
[ :Task, "deploy:osx:app:zip:github", %w[package:osx:app:zip] ],
|
225
|
+
[ :Task, "deploy:osx:app:7z", %w[deploy:osx:app:7z:github] ],
|
226
|
+
[ :Task, "deploy:osx:app:7z:github", %w[package:osx:app:7z] ],
|
227
|
+
|
228
|
+
[ :Task, "deploy:windows", %w[deploy:windows:github] ],
|
229
|
+
[ :Task, "deploy:windows:installer", %w[deploy:windows:installer:github] ],
|
230
|
+
[ :Task, "deploy:windows:github", %w[deploy:windows:installer:github] ],
|
231
|
+
[ :Task, "deploy:windows:installer:github", %w[deploy:windows:installer:zip:github deploy:windows:installer:7z:github] ],
|
232
|
+
[ :Task, "deploy:windows:installer:zip", %w[deploy:windows:installer:zip:github] ],
|
233
|
+
[ :Task, "deploy:windows:installer:zip:github", %w[package:windows:installer:zip] ],
|
234
|
+
[ :Task, "deploy:windows:installer:7z", %w[deploy:windows:installer:7z:github] ],
|
235
|
+
[ :Task, "deploy:windows:installer:7z:github", %w[package:windows:installer:7z] ],
|
236
|
+
|
237
|
+
[ :Task, "package", %w[package:source package:osx package:windows] ],
|
238
|
+
|
239
|
+
[ :Task, "package:source", %w[package:source:7z package:source:zip] ],
|
240
|
+
[ :Task, "package:source:zip", ["#{folder_base}_SOURCE.zip"] ],
|
241
|
+
[ :Task, "package:source:7z", ["#{folder_base}_SOURCE.7z"] ],
|
242
|
+
|
243
|
+
[ :Task, "package:osx", %w[package:osx:app] ],
|
244
|
+
[ :Task, "package:osx:app", %w[package:osx:app:7z package:osx:app:zip] ],
|
245
|
+
[ :Task, "package:osx:app:zip", ["#{folder_base}_OSX.zip"] ],
|
246
|
+
[ :Task, "package:osx:app:7z", ["#{folder_base}_OSX.7z"] ],
|
247
|
+
|
248
|
+
[ :Task, "package:windows", %w[package:windows:installer] ],
|
249
|
+
[ :Task, "package:windows:installer", %w[package:windows:installer:7z package:windows:installer:zip] ],
|
250
|
+
[ :Task, "package:windows:installer:zip", ["#{folder_base}_WIN32_INSTALLER.zip"] ],
|
251
|
+
[ :Task, "package:windows:installer:7z", ["#{folder_base}_WIN32_INSTALLER.7z"] ],
|
252
|
+
|
253
|
+
[ :Task, "build", %w[build:source build:osx build:windows] ],
|
254
|
+
[ :Task, "build:source", ["#{folder_base}_SOURCE"] ],
|
255
|
+
[ :Task, "build:osx", %w[build:osx:app] ],
|
256
|
+
[ :Task, "build:osx:app", ["#{folder_base}_OSX"] ],
|
257
|
+
[ :Task, "build:windows", %w[build:windows:installer] ],
|
258
|
+
[ :Task, "build:windows:installer", ["#{folder_base}_WIN32_INSTALLER"] ],
|
259
|
+
|
260
|
+
[ :FileCreationTask, 'pkg', [] ],
|
261
|
+
|
262
|
+
[ :FileCreationTask, "#{folder_base}_SOURCE", source_files ],
|
263
|
+
[ :FileTask, "#{folder_base}_SOURCE.7z", ["#{folder_base}_SOURCE"] ],
|
264
|
+
[ :FileTask, "#{folder_base}_SOURCE.zip", ["#{folder_base}_SOURCE"] ],
|
265
|
+
|
266
|
+
[ :FileCreationTask, "#{folder_base}_OSX", source_files + ["../wrappers/gosu-mac-wrapper-0.7.41.tar.gz"] ],
|
267
|
+
[ :FileTask, "#{folder_base}_OSX.7z", ["#{folder_base}_OSX" ] ],
|
268
|
+
[ :FileTask, "#{folder_base}_OSX.zip", ["#{folder_base}_OSX"] ],
|
269
|
+
|
270
|
+
[ :FileCreationTask, "#{folder_base}_WIN32_INSTALLER", source_files ],
|
271
|
+
[ :FileTask, "#{folder_base}_WIN32_INSTALLER.7z", ["#{folder_base}_WIN32_INSTALLER"] ],
|
272
|
+
[ :FileTask, "#{folder_base}_WIN32_INSTALLER.zip", ["#{folder_base}_WIN32_INSTALLER"] ],
|
273
|
+
]
|
274
|
+
|
275
|
+
test_tasks tasks
|
276
|
+
end
|
168
277
|
end
|
169
278
|
|
170
279
|
context "defined with Object#tap-like syntax" do
|
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: releasy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Bil Bas (Spooner)
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ocra
|
16
|
-
requirement: &
|
16
|
+
requirement: &22502412 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 1.3.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *22502412
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &22500432 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.9.2.2
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *22500432
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: cri
|
38
|
-
requirement: &
|
38
|
+
requirement: &22498248 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 2.1.0
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *22498248
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: thor
|
49
|
-
requirement: &
|
49
|
+
requirement: &21878016 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.14.6
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *21878016
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: net-github-upload
|
60
|
-
requirement: &
|
60
|
+
requirement: &21877176 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 0.0.7
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *21877176
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: riot
|
71
|
-
requirement: &
|
71
|
+
requirement: &21876108 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 0.12.5
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *21876108
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rr
|
82
|
-
requirement: &
|
82
|
+
requirement: &21874980 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 1.0.4
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *21874980
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: yard
|
93
|
-
requirement: &
|
93
|
+
requirement: &22417668 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: 0.7.4
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *22417668
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: redcarpet
|
104
|
-
requirement: &
|
104
|
+
requirement: &22430232 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ~>
|
@@ -109,7 +109,7 @@ dependencies:
|
|
109
109
|
version: 2.0.1
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *22430232
|
113
113
|
description: ! 'Releasy helps to make Ruby application releases simpler, by creating
|
114
114
|
and archiving source folders, Windows folders,
|
115
115
|
|
@@ -220,13 +220,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
220
220
|
version: '0'
|
221
221
|
segments:
|
222
222
|
- 0
|
223
|
-
hash:
|
223
|
+
hash: -77117219
|
224
224
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
225
225
|
none: false
|
226
226
|
requirements:
|
227
|
-
- - ! '
|
227
|
+
- - ! '>='
|
228
228
|
- !ruby/object:Gem::Version
|
229
|
-
version:
|
229
|
+
version: '0'
|
230
|
+
segments:
|
231
|
+
- 0
|
232
|
+
hash: -77117219
|
230
233
|
requirements:
|
231
234
|
- 7z (optional; used to generate archives)
|
232
235
|
- InnoSetup (optional on Windows; used to make Win32 installer)
|