dply 0.2.19 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rspec +4 -0
- data/Rakefile +0 -14
- data/TODO +0 -1
- data/code_dump/old_remote_task.rb +2 -0
- data/{dev_bin → dev_exe}/dplyr +0 -0
- data/{dev_bin → dev_exe}/drake +1 -1
- data/dply.gemspec +2 -2
- data/{bin → exe}/dplyr +0 -0
- data/{bin → exe}/drake +12 -14
- data/lib/dply/TEST_TODO +50 -0
- data/lib/dply/app_config.rb +108 -0
- data/lib/dply/base_config.rb +110 -0
- data/lib/dply/build.rb +17 -11
- data/lib/dply/build_config.rb +28 -96
- data/lib/dply/bundle.rb +7 -30
- data/lib/dply/cli/build.rb +5 -12
- data/lib/dply/cli/ctl.rb +7 -8
- data/lib/dply/cli/deploy.rb +6 -10
- data/lib/dply/cli/devbuild.rb +6 -10
- data/lib/dply/cli/install_pkgs.rb +2 -3
- data/lib/dply/cli/run.rb +27 -0
- data/lib/dply/cli/status.rb +1 -2
- data/lib/dply/cli/task.rb +6 -12
- data/lib/dply/code_archive.rb +123 -0
- data/lib/dply/command.rb +57 -0
- data/lib/dply/config_downloader.rb +3 -2
- data/lib/dply/curl.rb +1 -5
- data/lib/dply/custom_logger.rb +18 -1
- data/lib/dply/deplist.rb +16 -48
- data/lib/dply/deploy_config.rb +34 -0
- data/lib/dply/elf.rb +60 -0
- data/lib/dply/env.rb +9 -0
- data/lib/dply/git.rb +15 -8
- data/lib/dply/helper.rb +21 -33
- data/lib/dply/linker.rb +27 -27
- data/lib/dply/lock.rb +2 -9
- data/lib/dply/logger.rb +1 -1
- data/lib/dply/pkgs.rb +9 -11
- data/lib/dply/release.rb +2 -2
- data/lib/dply/{archive.rb → remote_archive.rb} +1 -1
- data/lib/dply/repo.rb +3 -3
- data/lib/dply/rpm.rb +12 -20
- data/lib/dply/scripts/depcheck.rb +4 -0
- data/lib/dply/shared_dirs.rb +1 -1
- data/lib/dply/strategy/archive.rb +15 -22
- data/lib/dply/strategy/base.rb +82 -0
- data/lib/dply/strategy/git.rb +18 -19
- data/lib/dply/task_dsl.rb +101 -0
- data/lib/dply/util.rb +75 -0
- data/lib/dply/venv.rb +53 -0
- data/lib/dply/version.rb +1 -1
- data/lib/dply/yum.rb +21 -31
- data/lib/dplyr/consul.rb +1 -1
- data/spec/dply/base_config_spec.rb +178 -0
- data/spec/dply/bundle_spec.rb +100 -0
- data/spec/dply/command_spec.rb +190 -0
- data/spec/dply/curl_spec.rb +41 -0
- data/spec/dply/deplist_spec.rb +48 -0
- data/spec/dply/elf_spec.rb +64 -0
- data/spec/dply/env_spec.rb +57 -0
- data/spec/dply/git_spec.rb +136 -0
- data/spec/dply/helper_spec.rb +168 -0
- data/spec/dply/linker_spec.rb +81 -0
- data/spec/dply/lock_spec.rb +24 -0
- data/spec/dply/pkgs_spec.rb +105 -0
- data/spec/dply/repo_spec.rb +58 -0
- data/spec/dply/rpm_spec.rb +32 -0
- data/spec/dply/yum_spec.rb +29 -0
- data/spec/integration/archive_flow_spec.rb +87 -0
- data/spec/integration/git_flow_spec.rb +63 -0
- data/spec/repo.rb +27 -0
- data/spec/spec_helper.rb +44 -0
- data/spec/test_data/build.tar.gz +0 -0
- data/spec/test_data/build.tar.gz.md5 +1 -0
- data/spec/test_data/bundle/gems_installed/Gemfile +1 -0
- data/spec/test_data/bundle/gems_not_installed/Gemfile +2 -0
- data/spec/test_data/bundle/no_gemfile/.gitkeep +0 -0
- data/spec/test_data/command/test.rb +7 -0
- data/spec/test_data/elf/elf +0 -0
- data/spec/test_data/elf/libpgtypes.so.3 +0 -0
- data/spec/test_data/elf/not_elf +1 -0
- data/spec/test_data/sample_repo/.dply.lock +0 -0
- data/spec/test_data/sample_repo/Gemfile +2 -0
- data/spec/test_data/sample_repo/Rakefile +3 -0
- data/spec/test_data/sample_repo/app.rb +1 -0
- data/spec/test_data/sample_repo/dply/app.rb +33 -0
- data/spec/test_data/sample_repo/lib/libacl.so.1 +0 -0
- data/spec/test_data/sample_repo/pkgs.yml +2 -0
- data/spec/webserver.rb +21 -0
- metadata +96 -28
- data/lib/dply/cli/app_task.rb +0 -38
- data/lib/dply/config.rb +0 -120
- data/lib/dply/config_struct.rb +0 -52
- data/lib/dply/rakelib/drake.rake +0 -33
- data/lib/dply/tasks.rb +0 -136
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'dply/linker'
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
module Dply
|
5
|
+
describe Linker do
|
6
|
+
|
7
|
+
before :all do
|
8
|
+
FileUtils.rm_rf "tmp/linker"
|
9
|
+
FileUtils.mkdir_p "tmp/linker"
|
10
|
+
end
|
11
|
+
|
12
|
+
def new_work_dir
|
13
|
+
d = Dir.mktmpdir nil, "tmp/linker"
|
14
|
+
Dir.chdir d do
|
15
|
+
FileUtils.mkdir ["src", "src/dir1", "src/dir2", "dest", "dest/config"]
|
16
|
+
FileUtils.touch ["src/file1", "src/file2"]
|
17
|
+
end
|
18
|
+
"#{Dir.pwd}/#{d}"
|
19
|
+
end
|
20
|
+
|
21
|
+
def linker(map:, work_dir:)
|
22
|
+
src = "#{work_dir}/src"
|
23
|
+
dest = "#{work_dir}/dest"
|
24
|
+
Linker.new src, dest, map: map
|
25
|
+
end
|
26
|
+
|
27
|
+
let(:map) do
|
28
|
+
{
|
29
|
+
"config/1" => "file1",
|
30
|
+
"file2" => "file2",
|
31
|
+
"tmp" => "dir1",
|
32
|
+
"log" => "dir2"
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
36
|
+
describe ".new" do
|
37
|
+
it "doesn't accept relative path for src_dir" do
|
38
|
+
expect { Linker.new("tmp", "/tmp", map: {}) }.to raise_error(Dply::Error)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "doesn't accept relative path for dest_dir" do
|
42
|
+
expect { Linker.new("/tmp", "tmp", map: {}) }.to raise_error(Dply::Error)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "doesn't accept relative paths in map" do
|
46
|
+
expect { Linker.new("/tmp", "/tmp/1", map: {"/a" => "b"}) }.to raise_error(Dply::Error)
|
47
|
+
expect { Linker.new("/tmp", "/tmp/1", map: {"a" => "/b"}) }.to raise_error(Dply::Error)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "#create_symlinks" do
|
52
|
+
|
53
|
+
it "creates expected symlinks" do
|
54
|
+
work_dir = new_work_dir
|
55
|
+
linker = linker(map: map, work_dir: work_dir)
|
56
|
+
linker.create_symlinks
|
57
|
+
map.each do |k, v|
|
58
|
+
dpath = Pathname.new("#{work_dir}/dest/#{k}").realpath
|
59
|
+
spath = Pathname.new("#{work_dir}/src/#{v}")
|
60
|
+
expect(dpath).to eq(spath)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
it "errors out if link target already exists" do
|
65
|
+
work_dir = new_work_dir
|
66
|
+
FileUtils.touch "#{work_dir}/dest/tmp"
|
67
|
+
linker = linker(map: map, work_dir: work_dir)
|
68
|
+
expect { linker.create_symlinks }.to raise_error(Dply::Error)
|
69
|
+
end
|
70
|
+
|
71
|
+
it "errors out if link source doesn't exist" do
|
72
|
+
work_dir = new_work_dir
|
73
|
+
FileUtils.touch "#{work_dir}/dest/tmp"
|
74
|
+
map = { "log" => "non_existent" }
|
75
|
+
linker = linker(map: map, work_dir: work_dir)
|
76
|
+
expect { linker.create_symlinks }.to raise_error(Dply::Error)
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'dply/lock'
|
2
|
+
|
3
|
+
module Dply
|
4
|
+
describe Lock do
|
5
|
+
describe "#acquire" do
|
6
|
+
it "acquires an exclusive lock(flock) on the given dir" do
|
7
|
+
lock = Lock.new("tmp")
|
8
|
+
lock.acquire
|
9
|
+
other_lock = Lock.new("tmp")
|
10
|
+
expect { other_lock.acquire }.to raise_error(Error, /exclusive lock/)
|
11
|
+
end
|
12
|
+
|
13
|
+
specify "lock survives GC" do
|
14
|
+
GC.start(full_mark: true, immediate_sweep: true)
|
15
|
+
lock = Lock.new("tmp")
|
16
|
+
lock.acquire
|
17
|
+
|
18
|
+
GC.start(full_mark: true, immediate_sweep: true)
|
19
|
+
other_lock = Lock.new("tmp")
|
20
|
+
expect { other_lock.acquire }.to raise_error(Error, /exclusive lock/)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require 'dply/pkgs'
|
2
|
+
|
3
|
+
module Dply
|
4
|
+
describe Pkgs do
|
5
|
+
|
6
|
+
before :all do
|
7
|
+
FileUtils.rm_rf "tmp/pkgs"
|
8
|
+
FileUtils.mkdir_p "tmp/pkgs"
|
9
|
+
end
|
10
|
+
|
11
|
+
def build_yml(file, data)
|
12
|
+
case data
|
13
|
+
when Hash
|
14
|
+
File.write file, YAML.dump(data)
|
15
|
+
else
|
16
|
+
File.write file, data
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def pkgs_yml(data, &block)
|
21
|
+
d = Dir.mktmpdir nil, "tmp/pkgs"
|
22
|
+
file = "p.yml"
|
23
|
+
Dir.chdir(d) do
|
24
|
+
build_yml file, data
|
25
|
+
yield file
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def new_data
|
30
|
+
{"build_pkgs" => ["b1"], "pkgs" => ["p1", "p2"]}
|
31
|
+
end
|
32
|
+
|
33
|
+
INVALID_PKG_NAMES = [
|
34
|
+
"a1.rpm",
|
35
|
+
"a1*.pm",
|
36
|
+
"http://a.co/rpm",
|
37
|
+
"/a/b"
|
38
|
+
]
|
39
|
+
|
40
|
+
describe ".new" do
|
41
|
+
it "reads pkg lists from given pkgs_yml to all/build/runtime" do
|
42
|
+
pkgs_yml(new_data) do |f|
|
43
|
+
pkgs = Pkgs.new f
|
44
|
+
expect(pkgs.build).to eq(["b1"])
|
45
|
+
expect(pkgs.runtime).to eq(["p1", "p2"])
|
46
|
+
expect(pkgs.all.sort).to eq(["b1", "p1", "p2"])
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
INVALID_PKG_NAMES.each do |i|
|
51
|
+
it "raises error for pkg name #{i}" do
|
52
|
+
d1 = new_data
|
53
|
+
d1["build_pkgs"] << i
|
54
|
+
pkgs_yml(d1) do |f|
|
55
|
+
expect { Pkgs.new f}.to raise_error(Error)
|
56
|
+
end
|
57
|
+
|
58
|
+
d2 = new_data
|
59
|
+
d2["pkgs"] << i
|
60
|
+
pkgs_yml(d2) do |f|
|
61
|
+
expect { Pkgs.new f}.to raise_error(Error)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
subject(:pkgs) { pkgs_yml(new_data) { |f| Pkgs.new f } }
|
68
|
+
|
69
|
+
describe "#install" do
|
70
|
+
context "when build_mode: true" do
|
71
|
+
it "installs all the packages" do
|
72
|
+
expect(Yum).to receive(:install).with(pkgs.all)
|
73
|
+
expect(pkgs.all.size).to eq(3)
|
74
|
+
pkgs.install build_mode: true
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context "when build_mode: false" do
|
79
|
+
it "installs only the runtime packages" do
|
80
|
+
expect(Yum).to receive(:install).with(pkgs.runtime)
|
81
|
+
expect(pkgs.runtime.size).to eq(2)
|
82
|
+
pkgs.install build_mode: false
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
describe "#installed?" do
|
88
|
+
context "when build_mode: true" do
|
89
|
+
it "returns install status" do
|
90
|
+
expect(Yum).to receive(:installed?).with(pkgs.all).and_return(:status)
|
91
|
+
expect(pkgs.all.size).to eq(3)
|
92
|
+
expect(pkgs.installed? build_mode: true).to eq(:status)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context "when build_mode: false" do
|
97
|
+
it "returns install status" do
|
98
|
+
expect(Yum).to receive(:installed?).with(pkgs.runtime).and_return(:status)
|
99
|
+
expect(pkgs.runtime.size).to eq(2)
|
100
|
+
expect(pkgs.installed? build_mode: false).to eq(:status)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'dply/repo'
|
2
|
+
require 'repo'
|
3
|
+
|
4
|
+
module Dply
|
5
|
+
describe Repo do
|
6
|
+
|
7
|
+
before :all do
|
8
|
+
@work_dir = "tmp/repo"
|
9
|
+
@source_repo = "#{Dir.pwd}/tmp/repo.git"
|
10
|
+
FileUtils.rm_rf @work_dir
|
11
|
+
FileUtils.mkdir_p @work_dir
|
12
|
+
end
|
13
|
+
|
14
|
+
def source_repo
|
15
|
+
@source_repo
|
16
|
+
end
|
17
|
+
|
18
|
+
def tmp_dir(&block)
|
19
|
+
d = Dir.mktmpdir nil, "#{Dir.pwd}/#{@work_dir}"
|
20
|
+
Dir.chdir(d) { yield d }
|
21
|
+
end
|
22
|
+
|
23
|
+
subject(:repo) { Repo.new "repo", source_repo, mirror: nil }
|
24
|
+
|
25
|
+
describe ".create" do
|
26
|
+
it "creates the repo from the given upstream" do
|
27
|
+
tmp_dir do |d|
|
28
|
+
suppress_output { repo.create }
|
29
|
+
expect(File).to exist("repo/.git")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
it "throws an error if a different git repo already exists at [dir]" do
|
34
|
+
tmp_dir do |d|
|
35
|
+
FileUtils.mkdir "repo"
|
36
|
+
Dir.chdir "repo" do
|
37
|
+
system! "touch a"
|
38
|
+
system! "git init"
|
39
|
+
system! "git add a; git commit -m 'commit'"
|
40
|
+
system! "git remote add origin /some/other/upstream"
|
41
|
+
end
|
42
|
+
expect { repo.create }.to raise_error(Error)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
it "clones repo from a mirror if specified" do
|
47
|
+
upstream = "/some/upstream.git"
|
48
|
+
repo = Repo.new "repo", upstream, mirror: source_repo
|
49
|
+
tmp_dir do
|
50
|
+
suppress_output { repo.create }
|
51
|
+
Dir.chdir "repo" do
|
52
|
+
expect(Git.remote_url).to eq(upstream)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'dply/rpm'
|
2
|
+
|
3
|
+
module Dply
|
4
|
+
describe Rpm do
|
5
|
+
|
6
|
+
def test_cases
|
7
|
+
{
|
8
|
+
"libc.so.6" => [ "glibc" ],
|
9
|
+
"libacl.so.1" => ["libacl"],
|
10
|
+
"libattr.so.1" => ["libattr"]
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_64bit(lib)
|
15
|
+
"#{lib}()(64bit)"
|
16
|
+
end
|
17
|
+
|
18
|
+
subject(:rpm) { Rpm }
|
19
|
+
|
20
|
+
describe ".libs_pkgs_map" do
|
21
|
+
it "returns the map of lib => [list of pkgs] which provide that lib" do
|
22
|
+
test_cases = test_cases()
|
23
|
+
libs = test_cases.keys.map { |i| to_64bit i }
|
24
|
+
map = rpm.libs_pkgs_map libs
|
25
|
+
test_cases.keys.each do |i|
|
26
|
+
lib = to_64bit(i)
|
27
|
+
expect(map[lib]).to eq(test_cases[i])
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'dply/yum'
|
2
|
+
|
3
|
+
module Dply
|
4
|
+
describe Yum do
|
5
|
+
|
6
|
+
describe ".install" do
|
7
|
+
it "installs the missing packages" do
|
8
|
+
expect(Yum).to receive(:cmd).with(["yum", "install", "-y", "xyz"])
|
9
|
+
expect { Yum.install(["glibc", "xyz"]) }.to raise_error(Error)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "doesn't do anything if packages are already installed" do
|
13
|
+
expect(Yum).not_to receive(:cmd).with(array_including("yum", "install"))
|
14
|
+
Yum.install(["glibc", "bash"])
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
describe ".installed?" do
|
20
|
+
it "returns true if all pkgs are installed" do
|
21
|
+
expect(Yum.installed? ["glibc", "bash"]).to eq(true)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "returns false if some pkgs are not installed" do
|
25
|
+
expect(Yum.installed? ["glibc", "xyz"]).to eq(false)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'repo'
|
2
|
+
|
3
|
+
describe "archive flow" do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
@work_dir = "tmp/archive_flow"
|
7
|
+
@repo_dir = "tmp/repo.git"
|
8
|
+
@build_dir = "#{@work_dir}/build"
|
9
|
+
@deploy_dir = "#{@work_dir}/deploy"
|
10
|
+
@drake = "#{Dir.pwd}/dev_exe/drake"
|
11
|
+
FileUtils.rm_rf @work_dir
|
12
|
+
FileUtils.mkdir_p @work_dir
|
13
|
+
|
14
|
+
puts "=="* 40
|
15
|
+
build_archive
|
16
|
+
deploy_archive
|
17
|
+
puts "=="* 40
|
18
|
+
end
|
19
|
+
|
20
|
+
def system!(command)
|
21
|
+
status = system command
|
22
|
+
raise "error in '#{command}'" if not status
|
23
|
+
end
|
24
|
+
|
25
|
+
def build_config
|
26
|
+
<<~CONFIG
|
27
|
+
repo "#{Dir.pwd}/#{@repo_dir}"
|
28
|
+
dir_map({
|
29
|
+
"tmp" => "tmp",
|
30
|
+
"log" => "log"
|
31
|
+
})
|
32
|
+
CONFIG
|
33
|
+
end
|
34
|
+
|
35
|
+
def deploy_config
|
36
|
+
<<~CONFIG
|
37
|
+
name "test"
|
38
|
+
repo "http://127.0.0.1:8000/#{@build_dir}/build"
|
39
|
+
strategy :archive
|
40
|
+
branch "master"
|
41
|
+
|
42
|
+
build_url do
|
43
|
+
"\#{repo}/\#{name}-\#{revision}-\#{branch}.tar.gz"
|
44
|
+
end
|
45
|
+
|
46
|
+
dir_map ({
|
47
|
+
"log" => "log",
|
48
|
+
"tmp" => "tmp",
|
49
|
+
})
|
50
|
+
CONFIG
|
51
|
+
end
|
52
|
+
|
53
|
+
def build_archive
|
54
|
+
FileUtils.mkdir @build_dir
|
55
|
+
File.write "#{@build_dir}/build.rb", build_config
|
56
|
+
Dir.chdir @build_dir do
|
57
|
+
system! "#{@drake} build -r 0"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def deploy_archive
|
62
|
+
FileUtils.mkdir @deploy_dir
|
63
|
+
IO.write "#{@deploy_dir}/deploy.rb", deploy_config
|
64
|
+
Dir.chdir @deploy_dir do
|
65
|
+
system! "#{@drake} deploy -r 0"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
specify "app is deployed" do
|
70
|
+
Dir.chdir @deploy_dir do
|
71
|
+
expect(File).to exist("current")
|
72
|
+
expect(File.directory?("current")).to be(true)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
specify "bundler installs the gems" do
|
77
|
+
Dir.chdir @deploy_dir do
|
78
|
+
expect(File).to exist("current/vendor/bundle/ruby")
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
specify "reload works" do
|
83
|
+
Dir.chdir @deploy_dir do
|
84
|
+
system! "#{@drake} reload"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'repo'
|
2
|
+
|
3
|
+
describe "git flow" do
|
4
|
+
|
5
|
+
before :all do
|
6
|
+
@work_dir = "tmp/git_flow"
|
7
|
+
@repo_dir = "#{Dir.pwd}/tmp/repo.git"
|
8
|
+
@deploy_dir = "#{@work_dir}/deploy"
|
9
|
+
@drake = "#{Dir.pwd}/dev_exe/drake"
|
10
|
+
FileUtils.rm_rf @work_dir
|
11
|
+
FileUtils.mkdir_p @work_dir
|
12
|
+
|
13
|
+
puts "=="* 40
|
14
|
+
deploy_git
|
15
|
+
puts "==" * 40
|
16
|
+
end
|
17
|
+
|
18
|
+
def system!(command)
|
19
|
+
status = system command
|
20
|
+
raise "error in '#{command}'" if not status
|
21
|
+
end
|
22
|
+
|
23
|
+
def deploy_config
|
24
|
+
<<~CONFIG
|
25
|
+
name "test"
|
26
|
+
repo "#{@repo_dir}"
|
27
|
+
strategy :git
|
28
|
+
branch "master"
|
29
|
+
|
30
|
+
dir_map ({
|
31
|
+
"log" => "log",
|
32
|
+
"tmp" => "tmp"
|
33
|
+
})
|
34
|
+
CONFIG
|
35
|
+
end
|
36
|
+
|
37
|
+
def deploy_git
|
38
|
+
FileUtils.mkdir @deploy_dir
|
39
|
+
IO.write "#{@deploy_dir}/deploy.rb", deploy_config
|
40
|
+
Dir.chdir @deploy_dir do
|
41
|
+
system! "#{@drake} deploy"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
specify "app is deployed" do
|
46
|
+
Dir.chdir @deploy_dir do
|
47
|
+
expect(File).to exist("current")
|
48
|
+
expect(File.directory?("current")).to be(true)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
specify "bundler installs the gems" do
|
53
|
+
Dir.chdir @deploy_dir do
|
54
|
+
expect(File).to exist("current/vendor/bundle/ruby")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
specify "reload works" do
|
59
|
+
Dir.chdir @deploy_dir do
|
60
|
+
system! "#{@drake} reload"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|