vx-builder 0.1.8 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/lib/vx/builder/build_configuration.rb +9 -6
- data/lib/vx/builder/build_configuration/deploy.rb +22 -13
- data/lib/vx/builder/build_configuration/deploy/provider.rb +58 -0
- data/lib/vx/builder/configuration.rb +1 -1
- data/lib/vx/builder/matrix.rb +14 -0
- data/lib/vx/builder/script.rb +32 -7
- data/lib/vx/builder/script/artifacts.rb +1 -3
- data/lib/vx/builder/script/base.rb +56 -0
- data/lib/vx/builder/script/clojure.rb +5 -9
- data/lib/vx/builder/script/deploy.rb +40 -0
- data/lib/vx/builder/script/env.rb +1 -3
- data/lib/vx/builder/script/java.rb +5 -5
- data/lib/vx/builder/script/ruby.rb +20 -15
- data/lib/vx/builder/script/scala.rb +11 -13
- data/lib/vx/builder/script/script.rb +19 -8
- data/lib/vx/builder/script/services.rb +1 -3
- data/lib/vx/builder/task.rb +5 -0
- data/lib/vx/builder/version.rb +1 -1
- data/spec/fixtures/integration/ruby/deploy/config.yml +12 -0
- data/spec/fixtures/integration/ruby/deploy/d.after_script.sh +10 -0
- data/spec/fixtures/integration/ruby/deploy/d.before_script.sh +61 -0
- data/spec/fixtures/integration/ruby/deploy/d.script.sh +4 -0
- data/spec/fixtures/integration/ruby/language/after_script.sh +10 -0
- data/spec/fixtures/integration/ruby/language/before_script.sh +59 -0
- data/spec/fixtures/integration/ruby/language/config.yml +1 -0
- data/spec/fixtures/integration/ruby/language/script.sh +8 -0
- data/spec/fixtures/integration/ruby/matrix/0.after_script.sh +10 -0
- data/spec/fixtures/integration/ruby/matrix/0.before_script.sh +61 -0
- data/spec/fixtures/integration/ruby/matrix/0.script.sh +6 -0
- data/spec/fixtures/integration/ruby/matrix/1.after_script.sh +10 -0
- data/spec/fixtures/integration/ruby/matrix/1.before_script.sh +61 -0
- data/spec/fixtures/integration/ruby/matrix/1.script.sh +6 -0
- data/spec/fixtures/integration/ruby/matrix/config.yml +11 -0
- data/spec/fixtures/integration/ruby/matrix/d.after_script.sh +10 -0
- data/spec/fixtures/integration/ruby/matrix/d.before_script.sh +59 -0
- data/spec/fixtures/integration/ruby/matrix/d.script.sh +4 -0
- data/spec/fixtures/travis.yml +3 -0
- data/spec/integration/ruby_spec.rb +159 -0
- data/spec/lib/builder/build_configuration_spec.rb +31 -0
- data/spec/lib/builder/matrix_spec.rb +59 -0
- data/spec/lib/builder/task_spec.rb +2 -1
- data/spec/support/create.rb +14 -11
- data/vx-builder.gemspec +1 -1
- metadata +48 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4f388f5d51a408009ccf40e8f4d3d7a335e64e49
|
4
|
+
data.tar.gz: 90887f071d58925f1c82395380b43d6d20368cb7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0f5f92fb3b91936043982b9f5c532d6058465f9f5b4df6f707e6fa358bb55157afedb5226b8c4e44de0732986bf78fae85009359a3dcdefe5f7d690e332a3d15
|
7
|
+
data.tar.gz: 46de92052fb9323fa78825693d568b78da5b03d2ce5e85ad0008ce4adadce5e9eb9c78e798f8185a809725ce3e89edc15b82be4b6c6b2dc46896faf5eadc5385
|
data/.travis.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
|
3
|
-
Dir[File.expand_path("../build_configuration
|
3
|
+
Dir[File.expand_path("../build_configuration/**/*.rb", __FILE__)].each do |f|
|
4
4
|
require f
|
5
5
|
end
|
6
6
|
|
@@ -23,6 +23,9 @@ module Vx
|
|
23
23
|
before_script
|
24
24
|
script
|
25
25
|
after_success
|
26
|
+
|
27
|
+
before_deploy
|
28
|
+
after_deploy
|
26
29
|
}
|
27
30
|
|
28
31
|
class << self
|
@@ -38,7 +41,7 @@ module Vx
|
|
38
41
|
end
|
39
42
|
end
|
40
43
|
|
41
|
-
attr_reader :env, :cache, :artifacts, :deploy
|
44
|
+
attr_reader :env, :cache, :artifacts, :deploy, :attributes
|
42
45
|
|
43
46
|
def initialize(new_attributes = {}, matrix_attributes = {})
|
44
47
|
new_attributes = {} unless new_attributes.is_a?(Hash)
|
@@ -70,6 +73,10 @@ module Vx
|
|
70
73
|
!deploy.attributes.empty?
|
71
74
|
end
|
72
75
|
|
76
|
+
def deploy_attributes= (val)
|
77
|
+
@deploy = Deploy.new(val)
|
78
|
+
end
|
79
|
+
|
73
80
|
# for tests
|
74
81
|
def matrix_id
|
75
82
|
matrix_attributes.to_a.map{|i| i.join(":") }.sort.join(", ")
|
@@ -106,10 +113,6 @@ module Vx
|
|
106
113
|
|
107
114
|
private
|
108
115
|
|
109
|
-
def attributes
|
110
|
-
@attributes
|
111
|
-
end
|
112
|
-
|
113
116
|
def build_attributes(new_attributes)
|
114
117
|
@attributes = ATTRIBUTES.inject({}) do |ac, attribute_name|
|
115
118
|
attribute = new_attributes[attribute_name]
|
@@ -6,17 +6,22 @@ module Vx
|
|
6
6
|
attr_reader :attributes
|
7
7
|
|
8
8
|
def initialize(new_env)
|
9
|
-
|
9
|
+
normalize(new_env)
|
10
|
+
end
|
11
|
+
|
12
|
+
def attributes
|
13
|
+
@attributes
|
10
14
|
end
|
11
15
|
|
12
16
|
def providers
|
13
|
-
@providers
|
17
|
+
@providers ||= @attributes.map do |a|
|
18
|
+
Deploy::Provider.new(a)
|
19
|
+
end
|
14
20
|
end
|
15
|
-
alias :attributes :providers
|
16
21
|
|
17
22
|
private
|
18
23
|
|
19
|
-
def
|
24
|
+
def normalize(new_env)
|
20
25
|
attrs =
|
21
26
|
case new_env
|
22
27
|
when Array
|
@@ -24,22 +29,26 @@ module Vx
|
|
24
29
|
when Hash
|
25
30
|
[new_env]
|
26
31
|
when String
|
27
|
-
[
|
32
|
+
[new_env]
|
28
33
|
else
|
29
34
|
[]
|
30
35
|
end
|
31
36
|
|
32
|
-
|
37
|
+
normalize_each(attrs)
|
33
38
|
end
|
34
39
|
|
35
|
-
def
|
36
|
-
@
|
40
|
+
def normalize_each(new_env)
|
41
|
+
@attributes = []
|
37
42
|
new_env.each do |env|
|
38
|
-
case
|
39
|
-
when
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
+
case env
|
44
|
+
when Hash
|
45
|
+
if env["provider"]
|
46
|
+
@attributes.push env
|
47
|
+
else
|
48
|
+
@attributes.push env.merge("provider" => "shell")
|
49
|
+
end
|
50
|
+
when String
|
51
|
+
@attributes.push("provider" => "shell", "command" => env)
|
43
52
|
end
|
44
53
|
end
|
45
54
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Vx
|
2
|
+
module Builder
|
3
|
+
class BuildConfiguration
|
4
|
+
class Deploy
|
5
|
+
|
6
|
+
class Provider
|
7
|
+
|
8
|
+
attr_reader :name, :options, :on
|
9
|
+
|
10
|
+
def initialize(new_attributes)
|
11
|
+
normalize new_attributes.dup
|
12
|
+
end
|
13
|
+
|
14
|
+
def branch?(branch)
|
15
|
+
return true if on.empty?
|
16
|
+
on.include?(branch)
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_hash
|
20
|
+
options.merge(
|
21
|
+
"provider" => @name,
|
22
|
+
"branch" => on
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
def shell?
|
27
|
+
@name == 'shell'
|
28
|
+
end
|
29
|
+
|
30
|
+
def command
|
31
|
+
Array(options["command"])
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def normalize(new_attributes)
|
37
|
+
@name = new_attributes.delete("provider")
|
38
|
+
@on = new_attributes.delete("branch")
|
39
|
+
@options = new_attributes
|
40
|
+
|
41
|
+
@on =
|
42
|
+
case @on
|
43
|
+
when String
|
44
|
+
[@on]
|
45
|
+
when Array
|
46
|
+
@on.map(&:to_s)
|
47
|
+
else
|
48
|
+
[]
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
data/lib/vx/builder/matrix.rb
CHANGED
@@ -24,6 +24,20 @@ module Vx
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
+
def deploy_configuration(branch)
|
28
|
+
return unless build_configuration.deploy?
|
29
|
+
|
30
|
+
availabled_providers = build_configuration.deploy.providers.select do |provider|
|
31
|
+
provider.branch?(branch)
|
32
|
+
end
|
33
|
+
|
34
|
+
unless availabled_providers.empty?
|
35
|
+
build_configurations.first.dup.tap do |config|
|
36
|
+
config.deploy_attributes = availabled_providers.map(&:to_hash)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
27
41
|
def attributes_for_new_build_configurations_with_merged_env
|
28
42
|
attrs = attributes_for_new_build_configurations
|
29
43
|
attrs = [{}] if attrs.empty?
|
data/lib/vx/builder/script.rb
CHANGED
@@ -4,6 +4,7 @@ module Vx
|
|
4
4
|
module Builder
|
5
5
|
class Script
|
6
6
|
|
7
|
+
autoload :Base, File.expand_path("../script/base", __FILE__)
|
7
8
|
autoload :Env, File.expand_path("../script/env", __FILE__)
|
8
9
|
autoload :Ruby, File.expand_path("../script/ruby", __FILE__)
|
9
10
|
autoload :Java, File.expand_path("../script/java", __FILE__)
|
@@ -15,6 +16,7 @@ module Vx
|
|
15
16
|
autoload :Cache, File.expand_path("../script/cache", __FILE__)
|
16
17
|
autoload :Services, File.expand_path("../script/services", __FILE__)
|
17
18
|
autoload :Artifacts, File.expand_path("../script/artifacts", __FILE__)
|
19
|
+
autoload :Deploy, File.expand_path("../script/deploy", __FILE__)
|
18
20
|
|
19
21
|
include Common::Helper::Middlewares
|
20
22
|
|
@@ -28,6 +30,7 @@ module Vx
|
|
28
30
|
use Builder::Script::Scala
|
29
31
|
use Builder::Script::Clojure
|
30
32
|
use Builder::Script::Ruby
|
33
|
+
use Builder::Script::Deploy
|
31
34
|
use Builder::Script::Script
|
32
35
|
end
|
33
36
|
|
@@ -56,8 +59,13 @@ module Vx
|
|
56
59
|
a << "\n# install"
|
57
60
|
a += env.install
|
58
61
|
|
59
|
-
|
62
|
+
if deploy?
|
63
|
+
a << "\n# before deploy"
|
64
|
+
else
|
65
|
+
a << "\n# before script"
|
66
|
+
end
|
60
67
|
a += env.before_script
|
68
|
+
|
61
69
|
a.join("\n")
|
62
70
|
end
|
63
71
|
|
@@ -65,22 +73,36 @@ module Vx
|
|
65
73
|
a = []
|
66
74
|
a << "\n# after script init"
|
67
75
|
a += env.after_script_init
|
68
|
-
|
76
|
+
|
77
|
+
if deploy?
|
78
|
+
a << "\n# after deploy"
|
79
|
+
else
|
80
|
+
a << "\n# after script"
|
81
|
+
end
|
69
82
|
a += env.after_script
|
70
83
|
a.join("\n")
|
71
84
|
end
|
72
85
|
|
73
86
|
def to_script
|
74
87
|
a = []
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
88
|
+
if deploy?
|
89
|
+
a << "\n# deploy"
|
90
|
+
a += env.deploy
|
91
|
+
else
|
92
|
+
a << "\n# script"
|
93
|
+
a += env.script
|
94
|
+
|
95
|
+
a << "\n# after success"
|
96
|
+
a += env.after_success
|
97
|
+
end
|
80
98
|
|
81
99
|
a.join("\n")
|
82
100
|
end
|
83
101
|
|
102
|
+
def deploy?
|
103
|
+
task.deploy?
|
104
|
+
end
|
105
|
+
|
84
106
|
private
|
85
107
|
|
86
108
|
def env
|
@@ -108,6 +130,9 @@ module Vx
|
|
108
130
|
after_script_init: [],
|
109
131
|
after_script: [],
|
110
132
|
|
133
|
+
before_deploy: [],
|
134
|
+
deploy: [],
|
135
|
+
|
111
136
|
source: source,
|
112
137
|
task: task,
|
113
138
|
cache_key: [],
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Vx
|
2
|
+
module Builder
|
3
|
+
class Script
|
4
|
+
|
5
|
+
Base = Struct.new(:app) do
|
6
|
+
|
7
|
+
include Helper::TraceShCommand
|
8
|
+
|
9
|
+
def do_cache_key(env)
|
10
|
+
yield env.cache_key
|
11
|
+
end
|
12
|
+
|
13
|
+
def do_script(env)
|
14
|
+
if env.source.script.empty?
|
15
|
+
yield env.script
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def do_cached_directories(env)
|
20
|
+
if env.source.cached_directories != false
|
21
|
+
yield env.cached_directories
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def do_announce(env)
|
26
|
+
yield env.announce
|
27
|
+
end
|
28
|
+
|
29
|
+
def do_before_install(env)
|
30
|
+
yield env.before_install
|
31
|
+
end
|
32
|
+
|
33
|
+
def do_install(env)
|
34
|
+
yield env.install
|
35
|
+
end
|
36
|
+
|
37
|
+
def do_before_deploy(env)
|
38
|
+
yield env.before_deploy
|
39
|
+
end
|
40
|
+
|
41
|
+
def do_after_deploy(env)
|
42
|
+
yield env.after_deploy
|
43
|
+
end
|
44
|
+
|
45
|
+
def do_deploy(env)
|
46
|
+
yield env.deploy
|
47
|
+
end
|
48
|
+
|
49
|
+
def deploy?
|
50
|
+
env.task.deploy?
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -2,24 +2,20 @@ module Vx
|
|
2
2
|
module Builder
|
3
3
|
class Script
|
4
4
|
|
5
|
-
Clojure
|
6
|
-
|
7
|
-
include Helper::TraceShCommand
|
5
|
+
class Clojure < Base
|
8
6
|
|
9
7
|
def call(env)
|
10
8
|
if enabled?(env)
|
11
|
-
env
|
9
|
+
do_announce(env) do |i|
|
12
10
|
i << trace_sh_command("lein version")
|
13
11
|
end
|
14
12
|
|
15
|
-
env
|
13
|
+
do_install(env) do |i|
|
16
14
|
i << trace_sh_command("lein deps")
|
17
15
|
end
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
i << trace_sh_command("lein test")
|
22
|
-
end
|
17
|
+
do_script(env) do |i|
|
18
|
+
i << trace_sh_command("lein test")
|
23
19
|
end
|
24
20
|
end
|
25
21
|
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Vx
|
2
|
+
module Builder
|
3
|
+
class Script
|
4
|
+
|
5
|
+
class Deploy < Base
|
6
|
+
|
7
|
+
def call(env)
|
8
|
+
if enabled?(env)
|
9
|
+
env.source.deploy.providers.each do |provider|
|
10
|
+
if provider.shell?
|
11
|
+
deploy_using_shell(env, provider)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
do_before_deploy(env) do |i|
|
17
|
+
i += env.source.before_deploy
|
18
|
+
end
|
19
|
+
|
20
|
+
app.call(env)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def enabled?(env)
|
26
|
+
env.task.deploy? && env.source.deploy?
|
27
|
+
end
|
28
|
+
|
29
|
+
def deploy_using_shell(env, provider)
|
30
|
+
do_deploy(env) do |i|
|
31
|
+
provider.command.each do |cmd|
|
32
|
+
i << trace_sh_command(cmd)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|