releasy 0.2.0 → 0.2.2
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/.yardopts +3 -1
- data/CHANGELOG.md +9 -0
- data/README.md +114 -41
- data/Rakefile +1 -1
- data/bin/7z_sfx_LICENSE.txt +56 -0
- data/bin/7za.exe +0 -0
- data/bin/7za_exe_LICENSE.txt +29 -0
- data/lib/releasy.rb +4 -1
- data/lib/releasy/builders/builder.rb +14 -6
- data/lib/releasy/builders/ocra_builder.rb +4 -2
- data/lib/releasy/builders/osx_app.rb +18 -6
- data/lib/releasy/builders/source.rb +9 -2
- data/lib/releasy/builders/windows_folder.rb +12 -3
- data/lib/releasy/builders/windows_installer.rb +2 -3
- data/lib/releasy/builders/windows_standalone.rb +13 -3
- data/lib/releasy/builders/windows_wrapped.rb +14 -4
- data/lib/releasy/cli/install_sfx.rb +1 -1
- data/lib/releasy/deployers.rb +1 -1
- data/lib/releasy/deployers/deployer.rb +22 -1
- data/lib/releasy/deployers/github.rb +31 -124
- data/lib/releasy/deployers/local.rb +55 -0
- data/lib/releasy/deployers/rsync.rb +59 -0
- data/lib/releasy/mixins/has_packagers.rb +1 -1
- data/lib/releasy/mixins/utilities.rb +34 -0
- data/lib/releasy/packagers/dmg.rb +17 -0
- data/lib/releasy/packagers/exe.rb +18 -1
- data/lib/releasy/packagers/packager.rb +22 -6
- data/lib/releasy/packagers/seven_zip.rb +17 -0
- data/lib/releasy/packagers/tar_bzip2.rb +19 -0
- data/lib/releasy/packagers/tar_gzip.rb +19 -0
- data/lib/releasy/packagers/tar_packager.rb +2 -1
- data/lib/releasy/packagers/zip.rb +17 -0
- data/lib/releasy/project.rb +45 -4
- data/lib/releasy/version.rb +1 -1
- data/releasy.gemspec +1 -1
- data/test/releasy/builders/data/Main.rb +3 -2
- data/test/releasy/builders/helpers/builder_helper.rb +35 -0
- data/test/releasy/builders/helpers/ocra_builder_helper.rb +31 -0
- data/test/releasy/builders/helpers/windows_builder_helper.rb +25 -0
- data/test/releasy/builders/osx_app_test.rb +6 -4
- data/test/releasy/builders/source_test.rb +7 -4
- data/test/releasy/builders/windows_folder_test.rb +3 -1
- data/test/releasy/builders/windows_installer_test.rb +6 -4
- data/test/releasy/builders/windows_standalone_test.rb +6 -4
- data/test/releasy/builders/windows_wrapped_test.rb +3 -1
- data/test/releasy/cli/install_sfx_test.rb +1 -1
- data/test/releasy/deployers/github_test.rb +30 -32
- data/test/releasy/deployers/local_test.rb +93 -0
- data/test/releasy/deployers/rsync_test.rb +55 -0
- data/test/releasy/integration/source_test.rb +6 -6
- data/test/releasy/mixins/utilities_test.rb +50 -0
- data/test/releasy/packagers/packager_test.rb +79 -0
- data/test/releasy/packagers_test.rb +12 -6
- data/test/releasy/project_test.rb +5 -5
- data/test/teststrap.rb +6 -0
- data/test/yard_test.rb +1 -1
- metadata +40 -28
- data/lib/releasy/mixins/exec.rb +0 -14
- data/test/releasy/builders/ocra_builder_test.rb +0 -37
- data/test/releasy/builders/windows_builder_test.rb +0 -26
data/lib/releasy/version.rb
CHANGED
data/releasy.gemspec
CHANGED
@@ -29,7 +29,7 @@ END
|
|
29
29
|
s.add_runtime_dependency('rake', '~> 0.9.2.2')
|
30
30
|
s.add_runtime_dependency('cri', '~> 2.1.0')
|
31
31
|
s.add_runtime_dependency('thor', '~> 0.14.6') # Only needed in Ruby 1.8, since it provides HashWithIndifferentAccess.
|
32
|
-
s.add_runtime_dependency('net-github-upload', '~> 0.0.
|
32
|
+
s.add_runtime_dependency('net-github-upload', '~> 0.0.8')
|
33
33
|
|
34
34
|
s.add_development_dependency('riot', '~> 0.12.5')
|
35
35
|
s.add_development_dependency('rr', '~> 1.0.4')
|
@@ -6,7 +6,8 @@ OSX_EXECUTABLE_FOLDER = File.expand_path("../../..", __FILE__)
|
|
6
6
|
|
7
7
|
# Really hacky fudge-fix for something oddly missing in the .app.
|
8
8
|
class Encoding
|
9
|
-
UTF_7 = UTF_16BE = UTF_16LE = UTF_32BE = UTF_32LE = Encoding.list.first
|
9
|
+
BINARY = UTF_7 = UTF_16BE = UTF_16LE = UTF_32BE = UTF_32LE = Encoding.list.first
|
10
10
|
end
|
11
11
|
|
12
|
-
|
12
|
+
Dir.chdir 'application'
|
13
|
+
load 'bin/test_app'
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require File.expand_path("helper", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
def acts_like_a_builder
|
4
|
+
context Releasy::Builders::Builder do
|
5
|
+
asserts_topic.kind_of Releasy::Builders::Builder
|
6
|
+
|
7
|
+
asserts_topic.respond_to :setup
|
8
|
+
asserts_topic.respond_to :task_group
|
9
|
+
asserts_topic.respond_to :folder
|
10
|
+
|
11
|
+
asserts(:type).equals { topic.class::TYPE }
|
12
|
+
asserts(:suffix).equals { topic.class::DEFAULT_FOLDER_SUFFIX }
|
13
|
+
asserts("valid_for_platform? returns a Boolean") { [true, false].include? topic.valid_for_platform? }
|
14
|
+
|
15
|
+
asserts(:project).is_a? Releasy::Project
|
16
|
+
asserts(:suffix).is_a? String
|
17
|
+
|
18
|
+
asserts(:suffix=, 5).raises TypeError
|
19
|
+
|
20
|
+
context "#suffix=" do
|
21
|
+
hookup { topic.suffix = "hello" }
|
22
|
+
asserts(:suffix).equals "hello"
|
23
|
+
end
|
24
|
+
|
25
|
+
context "#copy_files_relative" do
|
26
|
+
should "copy files to their relative directories" do
|
27
|
+
mock(topic).mkdir_p "d/.", :verbose => false
|
28
|
+
mock(topic).cp "a", "d/.", :verbose => false
|
29
|
+
mock(topic).mkdir_p "d/b", :verbose => false
|
30
|
+
mock(topic).cp "b/c", "d/b", :verbose => false
|
31
|
+
topic.send :copy_files_relative, %w[a b/c], 'd'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.expand_path("windows_builder_helper", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
def acts_like_an_ocra_builder
|
4
|
+
acts_like_a_windows_builder
|
5
|
+
|
6
|
+
context Releasy::Builders::OcraBuilder do
|
7
|
+
asserts_topic.kind_of Releasy::Builders::OcraBuilder
|
8
|
+
asserts(:ocra_parameters).equals ""
|
9
|
+
asserts(:icon).nil
|
10
|
+
asserts("setting incorrect icon") { topic.icon = "frog.png" }.raises ArgumentError, /icon must be a .ico file/
|
11
|
+
asserts(:ocra_command).raises Releasy::ConfigError, /Unless the executable file extension is .rbw or .rb, then #executable_type must be explicitly :windows or :console/
|
12
|
+
|
13
|
+
context "#icon=" do
|
14
|
+
hookup { topic.icon = "icon.ico" }
|
15
|
+
asserts(:icon).equals "icon.ico"
|
16
|
+
end
|
17
|
+
|
18
|
+
context "#ocra_command" do
|
19
|
+
hookup do
|
20
|
+
topic.exclude_encoding
|
21
|
+
topic.ocra_parameters = "--wobble"
|
22
|
+
topic.project.executable = source_files.first
|
23
|
+
topic.executable_type = :console
|
24
|
+
topic.icon = "icon.ico"
|
25
|
+
end
|
26
|
+
|
27
|
+
helper(:command) { %[ocra "bin/test_app" --console --no-enc --wobble --icon "icon.ico" "lib/test_app.rb" "lib/test_app/stuff.rb" "README.txt" "LICENSE.txt" "Gemfile.lock" "Gemfile"] }
|
28
|
+
asserts(:ocra_command).equals { %[bundle exec #{command}] }
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.expand_path("builder_helper", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
def acts_like_a_windows_builder
|
4
|
+
acts_like_a_builder
|
5
|
+
|
6
|
+
context Releasy::Builders::WindowsBuilder do
|
7
|
+
asserts_topic.kind_of Releasy::Builders::WindowsBuilder
|
8
|
+
context "#executable_type undefined and Project#executable doesn't have meaningful extension" do
|
9
|
+
hookup { topic.project.executable = "fred" }
|
10
|
+
asserts(:effective_executable_type).raises Releasy::ConfigError, /Unless the executable file extension is .rbw or .rb, then #executable_type must be explicitly :windows or :console/
|
11
|
+
end
|
12
|
+
|
13
|
+
context "valid" do
|
14
|
+
hookup { topic.executable_type = :console }
|
15
|
+
|
16
|
+
asserts(:effective_executable_type).equals :console
|
17
|
+
asserts(:encoding_excluded?).equals false
|
18
|
+
|
19
|
+
context "exclude_encoding" do
|
20
|
+
hookup { topic.exclude_encoding }
|
21
|
+
asserts(:encoding_excluded?).equals true
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.expand_path("helpers/
|
1
|
+
require File.expand_path("helpers/builder_helper", File.dirname(__FILE__))
|
2
2
|
|
3
3
|
folder = File.join(output_path, "test_app_0_1_OSX")
|
4
4
|
app_folder = File.join(folder, "Test App.app")
|
@@ -17,6 +17,8 @@ if osx_app_wrapper
|
|
17
17
|
Dir.chdir project_path
|
18
18
|
end
|
19
19
|
|
20
|
+
acts_like_a_builder
|
21
|
+
|
20
22
|
asserts(:folder_suffix).equals "OSX"
|
21
23
|
asserts(:encoding_excluded?).equals false
|
22
24
|
asserts(:icon=, "test_app.ico").raises ArgumentError, /icon must be a .icns file/
|
@@ -69,9 +71,9 @@ if osx_app_wrapper
|
|
69
71
|
context "tasks" do
|
70
72
|
tasks = [
|
71
73
|
[ :Task, "build:osx:app", [folder] ],
|
72
|
-
[ :
|
73
|
-
[ :
|
74
|
-
[ :
|
74
|
+
[ :FileTask, '..', [] ], # byproduct of using #directory
|
75
|
+
[ :FileTask, output_path, [] ], # byproduct of using #directory
|
76
|
+
[ :FileTask, folder, source_files + [osx_app_wrapper]],
|
75
77
|
]
|
76
78
|
|
77
79
|
test_tasks tasks
|
@@ -1,4 +1,5 @@
|
|
1
|
-
require File.expand_path("helpers/
|
1
|
+
require File.expand_path("helpers/builder_helper", File.dirname(__FILE__))
|
2
|
+
|
2
3
|
|
3
4
|
folder = File.join(output_path, "test_app_0_1_SOURCE")
|
4
5
|
context Releasy::Builders::Source do
|
@@ -13,6 +14,8 @@ context Releasy::Builders::Source do
|
|
13
14
|
Dir.chdir project_path
|
14
15
|
end
|
15
16
|
|
17
|
+
acts_like_a_builder
|
18
|
+
|
16
19
|
context "valid" do
|
17
20
|
hookup do
|
18
21
|
|
@@ -25,9 +28,9 @@ context Releasy::Builders::Source do
|
|
25
28
|
context "tasks" do
|
26
29
|
tasks = [
|
27
30
|
[ :Task, "build:source", [folder] ],
|
28
|
-
[ :
|
29
|
-
[ :
|
30
|
-
[ :
|
31
|
+
[ :FileTask, '..', [] ], # byproduct of using #directory
|
32
|
+
[ :FileTask, output_path, [] ], # byproduct of using #directory
|
33
|
+
[ :FileTask, folder, source_files ],
|
31
34
|
]
|
32
35
|
|
33
36
|
test_tasks tasks
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.expand_path("helpers/
|
1
|
+
require File.expand_path("helpers/ocra_builder_helper", File.dirname(__FILE__))
|
2
2
|
|
3
3
|
folder = File.join(output_path, "test_app_0_1_WIN32")
|
4
4
|
|
@@ -12,6 +12,8 @@ context Releasy::Builders::WindowsFolder do
|
|
12
12
|
|
13
13
|
hookup { Dir.chdir project_path }
|
14
14
|
|
15
|
+
acts_like_an_ocra_builder
|
16
|
+
|
15
17
|
context "valid" do
|
16
18
|
if Gem.win_platform?
|
17
19
|
context "on Windows" do
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.expand_path("helpers/
|
1
|
+
require File.expand_path("helpers/ocra_builder_helper", File.dirname(__FILE__))
|
2
2
|
|
3
3
|
folder = File.join(output_path, "test_app_0_1_WIN32_INSTALLER")
|
4
4
|
|
@@ -12,6 +12,8 @@ context Releasy::Builders::WindowsInstaller do
|
|
12
12
|
|
13
13
|
hookup { Dir.chdir project_path }
|
14
14
|
|
15
|
+
acts_like_an_ocra_builder
|
16
|
+
|
15
17
|
context "valid" do
|
16
18
|
if Gem.win_platform?
|
17
19
|
context "on Windows" do
|
@@ -36,9 +38,9 @@ context Releasy::Builders::WindowsInstaller do
|
|
36
38
|
context "tasks" do
|
37
39
|
tasks = [
|
38
40
|
[ :Task, "build:windows:installer", [folder] ],
|
39
|
-
[ :
|
40
|
-
[ :
|
41
|
-
[ :
|
41
|
+
[ :FileTask, '..', [] ], # byproduct of using #directory
|
42
|
+
[ :FileTask, output_path, [] ], # byproduct of using #directory
|
43
|
+
[ :FileTask, folder, source_files ],
|
42
44
|
]
|
43
45
|
|
44
46
|
test_tasks tasks
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.expand_path("helpers/
|
1
|
+
require File.expand_path("helpers/ocra_builder_helper", File.dirname(__FILE__))
|
2
2
|
|
3
3
|
folder = File.join(output_path, "test_app_0_1_WIN32_EXE")
|
4
4
|
|
@@ -12,6 +12,8 @@ context Releasy::Builders::WindowsStandalone do
|
|
12
12
|
|
13
13
|
hookup { Dir.chdir project_path }
|
14
14
|
|
15
|
+
acts_like_an_ocra_builder
|
16
|
+
|
15
17
|
context "valid" do
|
16
18
|
if Gem.win_platform?
|
17
19
|
context "on Windows" do
|
@@ -31,9 +33,9 @@ context Releasy::Builders::WindowsStandalone do
|
|
31
33
|
context "tasks" do
|
32
34
|
tasks = [
|
33
35
|
[ :Task, "build:windows:standalone", [folder] ],
|
34
|
-
[ :
|
35
|
-
[ :
|
36
|
-
[ :
|
36
|
+
[ :FileTask, '..', [] ], # byproduct of using #directory
|
37
|
+
[ :FileTask, output_path, [] ], # byproduct of using #directory
|
38
|
+
[ :FileTask, folder, source_files ],
|
37
39
|
]
|
38
40
|
|
39
41
|
test_tasks tasks
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.expand_path("helpers/
|
1
|
+
require File.expand_path("helpers/windows_builder_helper", File.dirname(__FILE__))
|
2
2
|
|
3
3
|
Dir[File.expand_path("wrappers/ruby-*.7z", $original_path)].each do |path_to_ruby_dist|
|
4
4
|
ruby_version = path_to_ruby_dist[/\d\.\d\.\d-p\d+/]
|
@@ -17,6 +17,8 @@ Dir[File.expand_path("wrappers/ruby-*.7z", $original_path)].each do |path_to_rub
|
|
17
17
|
Dir.chdir project_path
|
18
18
|
end
|
19
19
|
|
20
|
+
acts_like_a_windows_builder
|
21
|
+
|
20
22
|
asserts(:wrapper).nil
|
21
23
|
asserts(:folder_suffix).equals "WIN32"
|
22
24
|
asserts(:generate_tasks).raises Releasy::ConfigError, /wrapper not set/
|
@@ -79,7 +79,7 @@ context "releasy install-sfx" do
|
|
79
79
|
stub(File).exists?("/usr/lib/p7zip/7z.sfx").returns false
|
80
80
|
stub(FileUtils).cp(File.expand_path("bin/7z.sfx"), "/usr/lib/p7zip", :verbose => true) { raise Errno::ENOENT }
|
81
81
|
any_instance_of(Cri::CommandDSL) do |o|
|
82
|
-
mock(o).
|
82
|
+
mock(o).system(%[sudo cp "#{File.expand_path('bin/7z.sfx')}" "/usr/lib/p7zip"]) do
|
83
83
|
stub(File).exists?("/usr/lib/p7zip/7z.sfx").returns true
|
84
84
|
end
|
85
85
|
end
|
@@ -3,10 +3,8 @@ require 'net/github-upload' # Because this isn't otherwise loaded until it is ne
|
|
3
3
|
|
4
4
|
context Releasy::Deployers::Github do
|
5
5
|
setup do
|
6
|
-
|
7
|
-
|
8
|
-
stub(github, :`).with("git config github.token").returns "0" * 32
|
9
|
-
end
|
6
|
+
stub(Kernel, :`).with("git config github.user").returns "test_user"
|
7
|
+
stub(Kernel, :`).with("git config github.token").returns "0" * 32
|
10
8
|
|
11
9
|
Releasy::Deployers::Github.new new_project
|
12
10
|
end
|
@@ -20,15 +18,14 @@ context Releasy::Deployers::Github do
|
|
20
18
|
Dir.chdir project_path
|
21
19
|
end
|
22
20
|
|
21
|
+
asserts(:type).equals :github
|
23
22
|
asserts(:user).equals "test_user"
|
24
23
|
asserts(:token).equals "0" * 32
|
25
24
|
asserts(:description).equals "Test App 0.1"
|
26
25
|
|
27
26
|
context "repository not configured" do
|
28
27
|
setup do
|
29
|
-
|
30
|
-
mock(github, :`).with("git config remote.origin.url").returns { raise Errno::ENOENT }
|
31
|
-
end
|
28
|
+
mock(Kernel, :`).with("git config remote.origin.url").returns { raise Errno::ENOENT }
|
32
29
|
|
33
30
|
Releasy::Deployers::Github.new new_project
|
34
31
|
end
|
@@ -38,9 +35,7 @@ context Releasy::Deployers::Github do
|
|
38
35
|
|
39
36
|
context "repository configured" do
|
40
37
|
setup do
|
41
|
-
|
42
|
-
mock(github, :`).with("git config remote.origin.url").returns "git@github.com:test_user/test-app.git"
|
43
|
-
end
|
38
|
+
mock(Kernel, :`).with("git config remote.origin.url").returns "git@github.com:test_user/test-app.git"
|
44
39
|
|
45
40
|
Releasy::Deployers::Github.new new_project
|
46
41
|
end
|
@@ -50,10 +45,8 @@ context Releasy::Deployers::Github do
|
|
50
45
|
|
51
46
|
context "user not configured" do
|
52
47
|
setup do
|
53
|
-
|
54
|
-
|
55
|
-
mock(github, :`).with("git config github.token").returns "0" * 32
|
56
|
-
end
|
48
|
+
mock(Kernel, :`).with("git config github.user").returns { raise Errno::ENOENT }
|
49
|
+
mock(Kernel, :`).with("git config github.token").returns "0" * 32
|
57
50
|
|
58
51
|
Releasy::Deployers::Github.new new_project
|
59
52
|
end
|
@@ -65,10 +58,9 @@ context Releasy::Deployers::Github do
|
|
65
58
|
|
66
59
|
context "token not configured" do
|
67
60
|
setup do
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
end
|
61
|
+
mock(Kernel, :`).with("git config github.user").returns "test_user"
|
62
|
+
mock(Kernel, :`).with("git config github.token").returns { raise Errno::ENOENT }
|
63
|
+
|
72
64
|
Releasy::Deployers::Github.new new_project
|
73
65
|
end
|
74
66
|
|
@@ -89,12 +81,9 @@ context Releasy::Deployers::Github do
|
|
89
81
|
end
|
90
82
|
|
91
83
|
context "#deploy" do
|
92
|
-
|
93
|
-
|
94
|
-
should "expect an Net::GitHub::Upload to be created and used to upload" do
|
95
|
-
stub_file_size
|
84
|
+
should "upload the file if it doesn't exist on the server" do
|
96
85
|
mock(Net::GitHub::Upload).new :login => "test_user", :token => "0" * 32 do
|
97
|
-
mock!.
|
86
|
+
mock!.upload :repos => "test_app", :file => "file.zip", :description => "Test App 0.1", :replace => false, :upload_timeout => 3600
|
98
87
|
end
|
99
88
|
|
100
89
|
topic.send :deploy, "file.zip"
|
@@ -102,25 +91,34 @@ context Releasy::Deployers::Github do
|
|
102
91
|
true
|
103
92
|
end
|
104
93
|
|
105
|
-
should "
|
106
|
-
stub_file_size
|
94
|
+
should "give a warning if the file already exists and not in replacement mode" do
|
107
95
|
mock(Net::GitHub::Upload).new :login => "test_user", :token => "0" * 32 do
|
108
|
-
mock!.
|
109
|
-
raise "file already
|
96
|
+
mock!.upload :repos => "test_app", :file => "file.zip", :description => "Test App 0.1", :replace => false, :upload_timeout => 3600 do
|
97
|
+
raise "file 'file.zip' is already uploaded. please try different name"
|
110
98
|
end
|
111
99
|
end
|
112
|
-
|
113
|
-
mock(topic).exit(1)
|
100
|
+
mock(topic).warn "Skipping 'file.zip' as it is already uploaded. Use #replace! to force uploading"
|
114
101
|
|
115
102
|
topic.send :deploy, "file.zip"
|
116
103
|
|
117
104
|
true
|
118
105
|
end
|
119
106
|
|
120
|
-
|
121
|
-
|
107
|
+
asserts "errors other than file already exists" do
|
108
|
+
mock(Net::GitHub::Upload).new :login => "test_user", :token => "0" * 32 do
|
109
|
+
mock!.upload :repos => "test_app", :file => "file.zip", :description => "Test App 0.1", :replace => false, :upload_timeout => 3600 do
|
110
|
+
raise "something else happened"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
dont_allow(topic).warn anything
|
115
|
+
|
116
|
+
topic.send :deploy, "file.zip"
|
117
|
+
end.raises RuntimeError, "something else happened"
|
118
|
+
|
119
|
+
should "upload the file if it exists on the server and in replacement mode" do
|
122
120
|
mock(Net::GitHub::Upload).new :login => "test_user", :token => "0" * 32 do
|
123
|
-
mock!.
|
121
|
+
mock!.upload :repos => "test_app", :file => "file.zip", :description => "Test App 0.1", :replace => true, :upload_timeout => 3600
|
124
122
|
end
|
125
123
|
|
126
124
|
topic.replace!
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require File.expand_path("helpers/helper", File.dirname(__FILE__))
|
2
|
+
|
3
|
+
context Releasy::Deployers::Local do
|
4
|
+
setup do
|
5
|
+
Releasy::Deployers::Local.new new_project
|
6
|
+
end
|
7
|
+
|
8
|
+
teardown do
|
9
|
+
Dir.chdir $original_path
|
10
|
+
Rake::Task.clear
|
11
|
+
end
|
12
|
+
|
13
|
+
hookup do
|
14
|
+
Dir.chdir project_path
|
15
|
+
end
|
16
|
+
|
17
|
+
asserts(:type).equals :local
|
18
|
+
asserts(:path).nil
|
19
|
+
asserts(:path=, 5).raises TypeError, /path must be a String/
|
20
|
+
|
21
|
+
context "#path=" do
|
22
|
+
hookup { topic.path = "fish" }
|
23
|
+
asserts(:path).equals "fish"
|
24
|
+
end
|
25
|
+
|
26
|
+
context "valid" do
|
27
|
+
context "#generate_tasks" do
|
28
|
+
hookup { topic.send :generate_tasks, "source:7z", "SOURCE.7z", ".7z" }
|
29
|
+
tasks = [
|
30
|
+
[ :Task, "deploy:source:7z:local", %w[package:source:7z] ],
|
31
|
+
]
|
32
|
+
|
33
|
+
test_tasks tasks
|
34
|
+
end
|
35
|
+
|
36
|
+
context "#deploy" do
|
37
|
+
context "without #path" do
|
38
|
+
asserts(:deploy, "file.zip").raises Releasy::ConfigError, /#path must be set/
|
39
|
+
end
|
40
|
+
|
41
|
+
context "valid" do
|
42
|
+
hookup { topic.path = "fish" }
|
43
|
+
|
44
|
+
should "create directory and copy file if directory doesn't exist" do
|
45
|
+
stub(File).exists?("fish").returns false
|
46
|
+
stub(File).exists?("fish/file.zip").returns false
|
47
|
+
|
48
|
+
mock(topic).mkdir_p("fish", :verbose => false)
|
49
|
+
mock(topic).cp("file.zip", "fish", :verbose => false, :force => false)
|
50
|
+
topic.send :deploy, "file.zip"
|
51
|
+
|
52
|
+
true
|
53
|
+
end
|
54
|
+
|
55
|
+
should "copy file to directory if directory exists" do
|
56
|
+
stub(File).exists?("fish").returns true
|
57
|
+
stub(File).exists?("fish/file.zip").returns false
|
58
|
+
|
59
|
+
mock(topic).cp("file.zip", "fish", :verbose => false, :force => false)
|
60
|
+
topic.send :deploy, "file.zip"
|
61
|
+
|
62
|
+
true
|
63
|
+
end
|
64
|
+
|
65
|
+
should "copy file forcefully if destination file is older" do
|
66
|
+
stub(File).exists?("fish").returns true
|
67
|
+
stub(File).exists?("fish/file.zip").returns true
|
68
|
+
stub(File).ctime("fish/file.zip").returns 0
|
69
|
+
stub(File).ctime("file.zip").returns 1
|
70
|
+
|
71
|
+
mock(topic).cp("file.zip", "fish", :verbose => false, :force => true)
|
72
|
+
topic.send :deploy, "file.zip"
|
73
|
+
|
74
|
+
true
|
75
|
+
end
|
76
|
+
|
77
|
+
should "not copy file if destination file is not older" do
|
78
|
+
stub(File).exists?("fish").returns true
|
79
|
+
stub(File).exists?("fish/file.zip").returns true
|
80
|
+
stub(File).ctime("fish/file.zip").returns 1
|
81
|
+
stub(File).ctime("file.zip").returns 1
|
82
|
+
|
83
|
+
dont_allow(topic).cp
|
84
|
+
mock(topic).warn "Skipping 'file.zip' because it already exists in 'fish'"
|
85
|
+
topic.send :deploy, "file.zip"
|
86
|
+
|
87
|
+
true
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|