gordon 0.0.21 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +85 -12
- data/gordon.gemspec +2 -0
- data/lib/gordon/application/factory.rb +1 -1
- data/lib/gordon/application/templates/java_standalone_app.rb +43 -0
- data/lib/gordon/cli.rb +6 -2
- data/lib/gordon/cookbook.rb +29 -0
- data/lib/gordon/cooker.rb +19 -16
- data/lib/gordon/cookery/dependency_resolver.rb +29 -15
- data/lib/gordon/cookery/http_server.rb +3 -1
- data/lib/gordon/cookery/standalone.rb +3 -1
- data/lib/gordon/cookery/web_server.rb +3 -1
- data/lib/gordon/env_vars.rb +14 -14
- data/lib/gordon/options.rb +28 -2
- data/lib/gordon/version.rb +1 -1
- data/lib/gordon.rb +1 -0
- data/spec/gordon/application/factory_spec.rb +49 -3
- data/spec/gordon/application/templates/java_standalone_app_spec.rb +16 -0
- data/spec/gordon/cli_spec.rb +41 -20
- data/spec/gordon/cookbook_spec.rb +56 -0
- data/spec/gordon/cooker_spec.rb +20 -19
- data/spec/gordon/cookery/dependency_resolver_spec.rb +48 -16
- data/spec/gordon/cookery/http_server_spec.rb +3 -2
- data/spec/gordon/cookery/standalone_spec.rb +7 -6
- data/spec/gordon/cookery/web_server_spec.rb +3 -2
- data/spec/gordon/env_vars_spec.rb +28 -23
- data/spec/gordon/options_spec.rb +68 -2
- data/spec/gordon/process_spec.rb +1 -1
- data/spec/spec_helper.rb +7 -0
- metadata +37 -3
data/spec/gordon/cli_spec.rb
CHANGED
@@ -2,18 +2,38 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Gordon::CLI do
|
4
4
|
describe 'running a recipe' do
|
5
|
-
|
6
|
-
|
5
|
+
let(:options) { instance_double Gordon::Options }
|
6
|
+
let(:recipe) { instance_double Gordon::Recipe }
|
7
|
+
let(:cooker) { instance_double Gordon::Cooker }
|
8
|
+
let(:recipes) { [ recipe ] }
|
9
|
+
|
10
|
+
before :each do
|
7
11
|
expect(options).to receive(:app_source=).with(Dir.pwd)
|
8
12
|
expect(options).to receive(:output_dir=).with(Dir.pwd)
|
13
|
+
|
9
14
|
expect(Gordon::Options).to receive(:new).and_return(options)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'cooks a single recipe based on options' do
|
18
|
+
expect(Gordon::Cookbook).to receive(:exists?).and_return(false)
|
19
|
+
expect(Gordon::Cookbook).to_not receive(:read_and_merge_with)
|
10
20
|
|
11
|
-
recipe = instance_double Gordon::Recipe
|
12
21
|
expect(Gordon::Recipe).to receive(:new).with(options).and_return(recipe)
|
22
|
+
expect(Gordon::Cooker).to receive(:new).with(recipes).and_return(cooker)
|
23
|
+
|
24
|
+
expect(cooker).to receive(:cook)
|
25
|
+
|
26
|
+
described_class.run
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'cooks a list of recipes based on cookbook file' do
|
30
|
+
expect(Gordon::Cookbook).to receive(:exists?).and_return(true)
|
31
|
+
expect(Gordon::Cookbook).to receive(:read_and_merge_with).with(options).and_return(recipes)
|
32
|
+
|
33
|
+
expect(Gordon::Recipe).to_not receive(:new)
|
34
|
+
expect(Gordon::Cooker).to receive(:new).with(recipes).and_return(cooker)
|
13
35
|
|
14
|
-
cooker = instance_double Gordon::Cooker
|
15
36
|
expect(cooker).to receive(:cook)
|
16
|
-
expect(Gordon::Cooker).to receive(:new).with(recipe).and_return(cooker)
|
17
37
|
|
18
38
|
described_class.run
|
19
39
|
end
|
@@ -24,21 +44,22 @@ describe Gordon::CLI do
|
|
24
44
|
|
25
45
|
let(:options_map) do
|
26
46
|
[
|
27
|
-
[ %w(-N --app-name),
|
28
|
-
[ %w(-D --app-description),
|
29
|
-
[ %w(-G --app-homepage),
|
30
|
-
[ %w(-V --app-version),
|
31
|
-
[ %w(-S --app-source),
|
32
|
-
[ %w(-
|
33
|
-
[ %w(-
|
34
|
-
[ %w(-
|
35
|
-
[ %w(-
|
36
|
-
[ %w(-
|
37
|
-
[ %w(-
|
38
|
-
[ %w(-
|
39
|
-
[ %w(-
|
40
|
-
[ %w(-
|
41
|
-
[ %w(-
|
47
|
+
[ %w(-N --app-name), "gordon" ],
|
48
|
+
[ %w(-D --app-description), "a packager" ],
|
49
|
+
[ %w(-G --app-homepage), "https://github.com/salizzar/gordon" ],
|
50
|
+
[ %w(-V --app-version), Gordon::VERSION ],
|
51
|
+
[ %w(-S --app-source), "." ],
|
52
|
+
[ %w(-E --app-source-excludes), %(an path) ],
|
53
|
+
[ %w(-T --app-type), "web" ],
|
54
|
+
[ %w(-X --runtime-name), "ruby" ],
|
55
|
+
[ %w(-R --runtime-version), "2.2.0" ],
|
56
|
+
[ %w(-H --http-server-type), "nginx" ],
|
57
|
+
[ %w(-W --web-server-type), "unicorn" ],
|
58
|
+
[ %w(-I --init-type), "systemd" ],
|
59
|
+
[ %w(-P --package-type), "rpm" ],
|
60
|
+
[ %w(-O --output-dir), "pkg" ],
|
61
|
+
[ %w(-d --debug), true ],
|
62
|
+
[ %w(-t --trace), true ],
|
42
63
|
]
|
43
64
|
end
|
44
65
|
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Gordon::Cookbook do
|
4
|
+
let(:path) { File.join(Dir.pwd, 'gordon.yml') }
|
5
|
+
|
6
|
+
context 'checking if file exists' do
|
7
|
+
it 'returns true when exists' do
|
8
|
+
expect(File).to receive(:exists?).with(path).and_return(true)
|
9
|
+
|
10
|
+
expect(described_class.exists?).to be_truthy
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'returns false otherwise' do
|
14
|
+
expect(File).to receive(:exists?).with(path).and_return(false)
|
15
|
+
|
16
|
+
expect(described_class.exists?).to be_falsey
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'reading and merging with main options' do
|
21
|
+
let(:content) do
|
22
|
+
%{
|
23
|
+
recipes:
|
24
|
+
- app_name: gordon
|
25
|
+
app_description: some description
|
26
|
+
app_homepage: https://github.com/salizzar/gordon
|
27
|
+
app_version: <%= 1 + 1 %>.0.0
|
28
|
+
app_type: web
|
29
|
+
app_source: .
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
let(:result) { ERB.new(content).result }
|
34
|
+
let(:yaml) { YAML.load(result) }
|
35
|
+
|
36
|
+
let(:main_options) { instance_double(Gordon::Options) }
|
37
|
+
let(:recipe) { instance_double(Gordon::Recipe) }
|
38
|
+
let(:recipes) { [ recipe ] }
|
39
|
+
|
40
|
+
it 'renders gordon yaml file and returns a list of recipes' do
|
41
|
+
expect(File).to receive(:read).with(path).and_return(content)
|
42
|
+
|
43
|
+
erb = instance_double(ERB)
|
44
|
+
expect(erb).to receive(:result).and_return(result)
|
45
|
+
expect(ERB).to receive(:new).with(content).and_return(erb)
|
46
|
+
expect(YAML).to receive(:load).with(result).and_return(yaml)
|
47
|
+
|
48
|
+
option = instance_double(Gordon::Options)
|
49
|
+
expect(Gordon::Options).to receive(:from).with(main_options, yaml['recipes'].first).and_return(option)
|
50
|
+
expect(Gordon::Recipe).to receive(:new).with(option).and_return(recipe)
|
51
|
+
|
52
|
+
expect(described_class.read_and_merge_with(main_options)).to eq(recipes)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
data/spec/gordon/cooker_spec.rb
CHANGED
@@ -3,28 +3,29 @@ require 'spec_helper'
|
|
3
3
|
describe Gordon::Cooker do
|
4
4
|
let(:options) do
|
5
5
|
attrs = {
|
6
|
-
app_type:
|
7
|
-
app_name:
|
8
|
-
app_description:
|
9
|
-
app_homepage:
|
10
|
-
app_version:
|
11
|
-
app_source:
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
6
|
+
app_type: "web",
|
7
|
+
app_name: "gordon",
|
8
|
+
app_description: "a packager",
|
9
|
+
app_homepage: "https://github.com/salizzar/gordon",
|
10
|
+
app_version: Gordon::VERSION,
|
11
|
+
app_source: ".",
|
12
|
+
app_source_excludes: %w(an path),
|
13
|
+
runtime_name: "ruby",
|
14
|
+
runtime_version: "2.2.0",
|
15
|
+
http_server_type: "nginx",
|
16
|
+
web_server_type: "unicorn",
|
17
|
+
init_type: "systemd",
|
18
|
+
package_type: "rpm",
|
19
|
+
output_dir: "pkg",
|
20
|
+
debug: true,
|
21
|
+
trace: true,
|
21
22
|
}
|
22
23
|
|
23
24
|
instance_double(Gordon::Options, attrs)
|
24
25
|
end
|
25
26
|
|
26
|
-
let(:
|
27
|
-
instance_double(Gordon::Recipe, options: options, application_template_path: '/a/path')
|
27
|
+
let(:recipes) do
|
28
|
+
[ instance_double(Gordon::Recipe, options: options, application_template_path: '/a/path') ]
|
28
29
|
end
|
29
30
|
|
30
31
|
let(:env_vars) do
|
@@ -36,7 +37,7 @@ describe Gordon::Cooker do
|
|
36
37
|
File.join(described_class::FPM_COOKERY_WORKING_DIR, app_name)
|
37
38
|
end
|
38
39
|
|
39
|
-
subject { described_class.new(
|
40
|
+
subject { described_class.new(recipes) }
|
40
41
|
|
41
42
|
before :each do
|
42
43
|
allow(subject).to receive(:debug)
|
@@ -67,7 +68,7 @@ describe Gordon::Cooker do
|
|
67
68
|
#{File.expand_path(working_path)}
|
68
69
|
--no-deps
|
69
70
|
package
|
70
|
-
#{
|
71
|
+
#{recipes[0].application_template_path}
|
71
72
|
}
|
72
73
|
|
73
74
|
expect(Gordon::Process).to receive(:run).with(package_command.join " ")
|
@@ -43,16 +43,48 @@ describe Gordon::Cookery::DependencyResolver do
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
-
context 'given a java
|
47
|
-
it '
|
46
|
+
context 'given a java app' do
|
47
|
+
it 'handles Oracle JRE 7 package' do
|
48
|
+
allow(env_vars).to receive(:http_server_type).and_return("apache")
|
49
|
+
expect(env_vars).to receive(:runtime_name).and_return("oracle-jre")
|
50
|
+
allow(env_vars).to receive(:runtime_version).and_return("1.7.0_80")
|
51
|
+
allow(env_vars).to receive(:web_server_type).and_return("tomcat")
|
52
|
+
expect(env_vars).to receive(:init_type).and_return("")
|
53
|
+
|
54
|
+
expected = [
|
55
|
+
"jre = 1.7.0_80",
|
56
|
+
"httpd",
|
57
|
+
"tomcat",
|
58
|
+
]
|
59
|
+
|
60
|
+
expect(subject.resolve_dependencies(env_vars, :centos)).to eq(expected)
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'handles Oracle JRE 8 package' do
|
64
|
+
allow(env_vars).to receive(:http_server_type).and_return("apache")
|
65
|
+
expect(env_vars).to receive(:runtime_name).and_return("oracle-jre")
|
66
|
+
allow(env_vars).to receive(:runtime_version).and_return("1.8.0_45")
|
67
|
+
allow(env_vars).to receive(:web_server_type).and_return("tomcat")
|
68
|
+
expect(env_vars).to receive(:init_type).and_return("")
|
69
|
+
|
70
|
+
expected = [
|
71
|
+
"jre1.8.0_45",
|
72
|
+
"httpd",
|
73
|
+
"tomcat",
|
74
|
+
]
|
75
|
+
|
76
|
+
expect(subject.resolve_dependencies(env_vars, :centos)).to eq(expected)
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'handles Oracle JDK 7 package' do
|
48
80
|
allow(env_vars).to receive(:http_server_type).and_return("apache")
|
49
|
-
expect(env_vars).to receive(:runtime_name).and_return("
|
50
|
-
allow(env_vars).to receive(:runtime_version).and_return("1.7.
|
81
|
+
expect(env_vars).to receive(:runtime_name).and_return("oracle-jdk")
|
82
|
+
allow(env_vars).to receive(:runtime_version).and_return("1.7.0_80")
|
51
83
|
allow(env_vars).to receive(:web_server_type).and_return("tomcat")
|
52
84
|
expect(env_vars).to receive(:init_type).and_return("")
|
53
85
|
|
54
86
|
expected = [
|
55
|
-
"
|
87
|
+
"jdk = 1.7.0_80",
|
56
88
|
"httpd",
|
57
89
|
"tomcat",
|
58
90
|
]
|
@@ -60,15 +92,15 @@ describe Gordon::Cookery::DependencyResolver do
|
|
60
92
|
expect(subject.resolve_dependencies(env_vars, :centos)).to eq(expected)
|
61
93
|
end
|
62
94
|
|
63
|
-
it 'handles
|
95
|
+
it 'handles Oracle JDK 8 package' do
|
64
96
|
allow(env_vars).to receive(:http_server_type).and_return("apache")
|
65
|
-
expect(env_vars).to receive(:runtime_name).and_return("
|
66
|
-
allow(env_vars).to receive(:runtime_version).and_return("1.8.
|
97
|
+
expect(env_vars).to receive(:runtime_name).and_return("oracle-jdk")
|
98
|
+
allow(env_vars).to receive(:runtime_version).and_return("1.8.0_45")
|
67
99
|
allow(env_vars).to receive(:web_server_type).and_return("tomcat")
|
68
100
|
expect(env_vars).to receive(:init_type).and_return("")
|
69
101
|
|
70
102
|
expected = [
|
71
|
-
"
|
103
|
+
"jdk1.8.0_45",
|
72
104
|
"httpd",
|
73
105
|
"tomcat",
|
74
106
|
]
|
@@ -78,8 +110,8 @@ describe Gordon::Cookery::DependencyResolver do
|
|
78
110
|
|
79
111
|
it 'handles OpenJDK package name for centos' do
|
80
112
|
allow(env_vars).to receive(:http_server_type).and_return("apache")
|
81
|
-
expect(env_vars).to receive(:runtime_name).and_return("
|
82
|
-
allow(env_vars).to receive(:runtime_version).and_return("1.7.
|
113
|
+
expect(env_vars).to receive(:runtime_name).and_return("openjdk")
|
114
|
+
allow(env_vars).to receive(:runtime_version).and_return("1.7.0_80")
|
83
115
|
allow(env_vars).to receive(:web_server_type).and_return("tomcat")
|
84
116
|
expect(env_vars).to receive(:init_type).and_return("")
|
85
117
|
|
@@ -92,10 +124,10 @@ describe Gordon::Cookery::DependencyResolver do
|
|
92
124
|
expect(subject.resolve_dependencies(env_vars, :centos)).to eq(expected)
|
93
125
|
end
|
94
126
|
|
95
|
-
it 'assigns
|
127
|
+
it 'assigns oracle-jre to OpenJDK for debian' do
|
96
128
|
allow(env_vars).to receive(:http_server_type).and_return("apache")
|
97
|
-
expect(env_vars).to receive(:runtime_name).and_return("
|
98
|
-
allow(env_vars).to receive(:runtime_version).and_return("1.7.
|
129
|
+
expect(env_vars).to receive(:runtime_name).and_return("oracle-jre")
|
130
|
+
allow(env_vars).to receive(:runtime_version).and_return("1.7.0_80")
|
99
131
|
allow(env_vars).to receive(:web_server_type).and_return("tomcat")
|
100
132
|
expect(env_vars).to receive(:init_type).and_return("")
|
101
133
|
|
@@ -110,8 +142,8 @@ describe Gordon::Cookery::DependencyResolver do
|
|
110
142
|
|
111
143
|
it 'handles OpenJDK package name for debian' do
|
112
144
|
allow(env_vars).to receive(:http_server_type).and_return("apache")
|
113
|
-
expect(env_vars).to receive(:runtime_name).and_return("
|
114
|
-
allow(env_vars).to receive(:runtime_version).and_return("1.7.
|
145
|
+
expect(env_vars).to receive(:runtime_name).and_return("openjdk")
|
146
|
+
allow(env_vars).to receive(:runtime_version).and_return("1.7.0_80")
|
115
147
|
allow(env_vars).to receive(:web_server_type).and_return("tomcat")
|
116
148
|
expect(env_vars).to receive(:init_type).and_return("")
|
117
149
|
|
@@ -9,7 +9,8 @@ describe Gordon::Cookery::HttpServer do
|
|
9
9
|
|
10
10
|
let(:app_name) { "gordon" }
|
11
11
|
let(:http_server_type) { :apache }
|
12
|
-
let(:
|
12
|
+
let(:attributes) { { app_name: app_name, app_source_excludes: %w(something), http_server_type: http_server_type } }
|
13
|
+
let(:env_vars) { double Gordon::EnvVars, attributes }
|
13
14
|
let(:skeleton) { Gordon::Skeleton::Types::Apache.new }
|
14
15
|
let(:all_files) { %w(index.php pimp_my_system.php) }
|
15
16
|
let(:blacklist) { %w(.git) }
|
@@ -20,7 +21,7 @@ describe Gordon::Cookery::HttpServer do
|
|
20
21
|
|
21
22
|
describe 'installing files' do
|
22
23
|
it 'install files based on http server path' do
|
23
|
-
expect(subject).to receive(:all_files_except_blacklisted).with(blacklist).and_return(all_files)
|
24
|
+
expect(subject).to receive(:all_files_except_blacklisted).with(blacklist, attributes[:app_source_excludes]).and_return(all_files)
|
24
25
|
|
25
26
|
installer = double 'a path helper'
|
26
27
|
expect(subject).to receive(:root).with(skeleton.path).and_return(installer)
|
@@ -7,11 +7,12 @@ describe Gordon::Cookery::Standalone do
|
|
7
7
|
end.new
|
8
8
|
end
|
9
9
|
|
10
|
-
let(:app_name)
|
11
|
-
let(:
|
12
|
-
let(:
|
13
|
-
let(:
|
14
|
-
let(:
|
10
|
+
let(:app_name) { "gordon" }
|
11
|
+
let(:attributes) { { app_name: app_name, app_source_excludes: %w(something) } }
|
12
|
+
let(:env_vars) { instance_double Gordon::EnvVars, attributes }
|
13
|
+
let(:skeleton) { Gordon::Skeleton::Types::Misc.new }
|
14
|
+
let(:all_files) { %w(.bundle app config lib .ruby-version .ruby-gemset) }
|
15
|
+
let(:blacklist) { %w(.git) }
|
15
16
|
|
16
17
|
before :each do
|
17
18
|
expect(Gordon::Skeleton::Types::Misc).to receive(:new).and_return(skeleton)
|
@@ -19,7 +20,7 @@ describe Gordon::Cookery::Standalone do
|
|
19
20
|
|
20
21
|
describe 'installing files' do
|
21
22
|
it 'install all files based on misc skeleton' do
|
22
|
-
expect(subject).to receive(:all_files_except_blacklisted).with(blacklist).and_return(all_files)
|
23
|
+
expect(subject).to receive(:all_files_except_blacklisted).with(blacklist, attributes[:app_source_excludes]).and_return(all_files)
|
23
24
|
|
24
25
|
installer = double 'a path helper'
|
25
26
|
expect(subject).to receive(:root).with(skeleton.path(app_name)).and_return(installer)
|
@@ -9,7 +9,8 @@ describe Gordon::Cookery::WebServer do
|
|
9
9
|
|
10
10
|
let(:app_name) { "gordon" }
|
11
11
|
let(:web_server_type) { :tomcat }
|
12
|
-
let(:
|
12
|
+
let(:attributes) { { app_name: app_name, app_source_excludes: %w(something), web_server_type: web_server_type } }
|
13
|
+
let(:env_vars) { double Gordon::EnvVars, attributes }
|
13
14
|
let(:skeleton) { Gordon::Skeleton::Types::Tomcat.new }
|
14
15
|
let(:all_files) { %w(gordon.war) }
|
15
16
|
let(:blacklist) { %w(gordon.class) }
|
@@ -20,7 +21,7 @@ describe Gordon::Cookery::WebServer do
|
|
20
21
|
|
21
22
|
describe 'installing web server files' do
|
22
23
|
it 'install files based on web server path' do
|
23
|
-
expect(subject).to receive(:all_files_except_blacklisted).with(blacklist).and_return(all_files)
|
24
|
+
expect(subject).to receive(:all_files_except_blacklisted).with(blacklist, attributes[:app_source_excludes]).and_return(all_files)
|
24
25
|
|
25
26
|
installer = double 'a path helper'
|
26
27
|
expect(subject).to receive(:root).with(skeleton.path).and_return(installer)
|
@@ -3,17 +3,18 @@ require 'spec_helper'
|
|
3
3
|
describe Gordon::EnvVars do
|
4
4
|
let(:attributes) do
|
5
5
|
{
|
6
|
-
app_type:
|
7
|
-
app_name:
|
8
|
-
app_description:
|
9
|
-
app_homepage:
|
10
|
-
app_version:
|
11
|
-
app_source:
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
6
|
+
app_type: "web",
|
7
|
+
app_name: "xirubiru",
|
8
|
+
app_description: "a nice description",
|
9
|
+
app_homepage: "http://some.github.repo",
|
10
|
+
app_version: "2.0.0",
|
11
|
+
app_source: ".",
|
12
|
+
app_source_excludes: %w(one two three),
|
13
|
+
runtime_name: "ruby",
|
14
|
+
runtime_version: "2.2.0",
|
15
|
+
http_server_type: "nginx",
|
16
|
+
web_server_type: "tomcat",
|
17
|
+
init_type: "systemd",
|
17
18
|
}
|
18
19
|
end
|
19
20
|
|
@@ -28,6 +29,7 @@ describe Gordon::EnvVars do
|
|
28
29
|
"GORDON_APP_HOMEPAGE='#{options.app_homepage}'",
|
29
30
|
"GORDON_APP_VERSION='#{options.app_version}'",
|
30
31
|
"GORDON_APP_SOURCE='#{File.expand_path(options.app_source)}'",
|
32
|
+
"GORDON_APP_SOURCE_EXCLUDES='#{options.app_source_excludes.map{ |path| File.expand_path(path) }.join(",") }'",
|
31
33
|
"GORDON_RUNTIME_NAME='#{options.runtime_name}'",
|
32
34
|
"GORDON_RUNTIME_VERSION='#{options.runtime_version}'",
|
33
35
|
"GORDON_HTTP_SERVER_TYPE='#{options.http_server_type}'",
|
@@ -42,24 +44,27 @@ describe Gordon::EnvVars do
|
|
42
44
|
describe 'loading from environment' do
|
43
45
|
it 'returns a instance with all specified values' do
|
44
46
|
env = {
|
45
|
-
'GORDON_APP_TYPE'
|
46
|
-
'GORDON_APP_NAME'
|
47
|
-
'GORDON_APP_DESCRIPTION'
|
48
|
-
'GORDON_APP_HOMEPAGE'
|
49
|
-
'GORDON_APP_VERSION'
|
50
|
-
'GORDON_APP_SOURCE'
|
51
|
-
'
|
52
|
-
'
|
53
|
-
'
|
54
|
-
'
|
55
|
-
'
|
47
|
+
'GORDON_APP_TYPE' => options.app_type,
|
48
|
+
'GORDON_APP_NAME' => options.app_name,
|
49
|
+
'GORDON_APP_DESCRIPTION' => options.app_description,
|
50
|
+
'GORDON_APP_HOMEPAGE' => options.app_homepage,
|
51
|
+
'GORDON_APP_VERSION' => options.app_version,
|
52
|
+
'GORDON_APP_SOURCE' => options.app_source,
|
53
|
+
'GORDON_APP_SOURCE_EXCLUDES' => options.app_source_excludes.join(","),
|
54
|
+
'GORDON_RUNTIME_NAME' => options.runtime_name,
|
55
|
+
'GORDON_RUNTIME_VERSION' => options.runtime_version,
|
56
|
+
'GORDON_HTTP_SERVER_TYPE' => options.http_server_type,
|
57
|
+
'GORDON_WEB_SERVER_TYPE' => options.web_server_type,
|
58
|
+
'GORDON_INIT_TYPE' => options.init_type,
|
56
59
|
}
|
57
60
|
|
58
61
|
env.each_pair { |k, v| expect(ENV).to receive(:[]).with(k).and_return(v.to_s) }
|
59
62
|
|
60
63
|
described_class.load.tap do |env_vars|
|
61
64
|
env.each_pair do |k, v|
|
62
|
-
|
65
|
+
expected = k == 'GORDON_APP_SOURCE_EXCLUDES' ? options.app_source_excludes : v.to_s
|
66
|
+
|
67
|
+
expect(env_vars.send(k.gsub(/GORDON_/, '').downcase)).to eq(expected)
|
63
68
|
end
|
64
69
|
end
|
65
70
|
end
|
data/spec/gordon/options_spec.rb
CHANGED
@@ -1,8 +1,74 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Gordon::Options do
|
4
|
-
|
5
|
-
|
4
|
+
let(:main_option_attributes) do
|
5
|
+
{
|
6
|
+
app_name: 'a-test',
|
7
|
+
app_description: 'a description',
|
8
|
+
app_homepage: 'https://github.com/salizzar/gordon',
|
9
|
+
app_version: Gordon::VERSION,
|
10
|
+
app_source: '.',
|
11
|
+
app_source_excludes: %w(something),
|
12
|
+
app_type: 'web',
|
13
|
+
runtime_name: 'ruby',
|
14
|
+
runtime_version: '2.2.2',
|
15
|
+
http_server_type: 'nginx',
|
16
|
+
web_server_type: nil,
|
17
|
+
init_type: 'systemd',
|
18
|
+
package_type: 'rpm',
|
19
|
+
output_dir: 'pkg',
|
20
|
+
debug: false,
|
21
|
+
trace: true,
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
let(:recipe) do
|
26
|
+
{
|
27
|
+
'app_name' => 'xirubiru',
|
28
|
+
'app_description' => 'another description',
|
29
|
+
'app_homepage' => 'https://github.com/salizzar/xirubiru',
|
30
|
+
'app_version' => '1.0.1',
|
31
|
+
'app_source' => '/tmp',
|
32
|
+
'app_source_excludes' => %w(something),
|
33
|
+
'app_type' => 'standalone',
|
34
|
+
'runtime_name' => 'ruby',
|
35
|
+
'runtime_version' => '2.2.1',
|
36
|
+
'http_server_type' => nil,
|
37
|
+
'web_server_type' => nil,
|
38
|
+
'init_type' => 'systemd',
|
39
|
+
'package_type' => 'rpm',
|
40
|
+
'output_dir' => 'pkg',
|
41
|
+
'debug' => true,
|
42
|
+
'trace' => false,
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
let(:main_options) { instance_double(described_class, main_option_attributes) }
|
47
|
+
|
48
|
+
describe 'returning instance based on main options and a recipe' do
|
49
|
+
it 'priorizes main options instead of recipe' do
|
50
|
+
instance = described_class.from(main_options, recipe)
|
51
|
+
|
52
|
+
main_option_attributes.delete_if do |(k, _)|
|
53
|
+
[ :app_source, :app_source_excludes ].include?(k)
|
54
|
+
end.each do |(k, v)|
|
55
|
+
expect(instance.send(k)).to eq(v)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'priorizes app source from recipe instead of main option' do
|
60
|
+
instance = described_class.from(main_options, recipe)
|
61
|
+
|
62
|
+
expect(instance.app_source).to eq(recipe['app_source'])
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'merges app source excludes values from main options and recipes' do
|
66
|
+
instance = described_class.from(main_options, recipe)
|
67
|
+
|
68
|
+
expected = (main_option_attributes[:app_source_excludes].to_a + recipe['app_source_excludes'].to_a).flatten
|
69
|
+
|
70
|
+
expect(instance.app_source_excludes).to eq(expected)
|
71
|
+
end
|
6
72
|
end
|
7
73
|
end
|
8
74
|
|
data/spec/gordon/process_spec.rb
CHANGED
@@ -18,7 +18,7 @@ describe Gordon::Process do
|
|
18
18
|
it 'raises error if call returns one' do
|
19
19
|
expect(Process).to receive(:wait2).with(pid).and_return([ pid, 1 ])
|
20
20
|
|
21
|
-
expect{ described_class.run(command) }.to raise_error
|
21
|
+
expect{ described_class.run(command) }.to raise_error(SystemCallError)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gordon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcelo Pinheiro
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -38,6 +38,34 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: byebug
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: simplecov
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: fpm-cookery
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -85,11 +113,13 @@ files:
|
|
85
113
|
- gordon.gemspec
|
86
114
|
- lib/gordon.rb
|
87
115
|
- lib/gordon/application/factory.rb
|
116
|
+
- lib/gordon/application/templates/java_standalone_app.rb
|
88
117
|
- lib/gordon/application/templates/java_web_app.rb
|
89
118
|
- lib/gordon/application/templates/ruby_standalone_app.rb
|
90
119
|
- lib/gordon/application/templates/ruby_web_app.rb
|
91
120
|
- lib/gordon/application/types.rb
|
92
121
|
- lib/gordon/cli.rb
|
122
|
+
- lib/gordon/cookbook.rb
|
93
123
|
- lib/gordon/cooker.rb
|
94
124
|
- lib/gordon/cookery/application_user.rb
|
95
125
|
- lib/gordon/cookery/common.rb
|
@@ -112,11 +142,13 @@ files:
|
|
112
142
|
- lib/gordon/skeleton/types.rb
|
113
143
|
- lib/gordon/version.rb
|
114
144
|
- spec/gordon/application/factory_spec.rb
|
145
|
+
- spec/gordon/application/templates/java_standalone_app_spec.rb
|
115
146
|
- spec/gordon/application/templates/java_web_app_spec.rb
|
116
147
|
- spec/gordon/application/templates/ruby_standalone_app_spec.rb
|
117
148
|
- spec/gordon/application/templates/ruby_web_app_spec.rb
|
118
149
|
- spec/gordon/application/types_spec.rb
|
119
150
|
- spec/gordon/cli_spec.rb
|
151
|
+
- spec/gordon/cookbook_spec.rb
|
120
152
|
- spec/gordon/cooker_spec.rb
|
121
153
|
- spec/gordon/cookery/application_user_spec.rb
|
122
154
|
- spec/gordon/cookery/common_spec.rb
|
@@ -156,17 +188,19 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
156
188
|
version: '0'
|
157
189
|
requirements: []
|
158
190
|
rubyforge_project:
|
159
|
-
rubygems_version: 2.4.
|
191
|
+
rubygems_version: 2.4.8
|
160
192
|
signing_key:
|
161
193
|
specification_version: 4
|
162
194
|
summary: A tool to create application OS packages
|
163
195
|
test_files:
|
164
196
|
- spec/gordon/application/factory_spec.rb
|
197
|
+
- spec/gordon/application/templates/java_standalone_app_spec.rb
|
165
198
|
- spec/gordon/application/templates/java_web_app_spec.rb
|
166
199
|
- spec/gordon/application/templates/ruby_standalone_app_spec.rb
|
167
200
|
- spec/gordon/application/templates/ruby_web_app_spec.rb
|
168
201
|
- spec/gordon/application/types_spec.rb
|
169
202
|
- spec/gordon/cli_spec.rb
|
203
|
+
- spec/gordon/cookbook_spec.rb
|
170
204
|
- spec/gordon/cooker_spec.rb
|
171
205
|
- spec/gordon/cookery/application_user_spec.rb
|
172
206
|
- spec/gordon/cookery/common_spec.rb
|