dply 0.2.19 → 0.3.0
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.
- 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
|