vx-builder 0.5.54 → 0.5.55
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 +4 -4
- data/.travis.yml +3 -2
- data/lib/vx/builder/build_configuration.rb +2 -0
- data/lib/vx/builder/script_builder_v2/base.rb +67 -0
- data/lib/vx/builder/script_builder_v2/cache.rb +62 -0
- data/lib/vx/builder/script_builder_v2/clojure.rb +35 -0
- data/lib/vx/builder/script_builder_v2/clone.rb +43 -0
- data/lib/vx/builder/script_builder_v2/defaults.rb +44 -0
- data/lib/vx/builder/script_builder_v2/deploy.rb +40 -0
- data/lib/vx/builder/script_builder_v2/env.rb +65 -0
- data/lib/vx/builder/script_builder_v2/go.rb +64 -0
- data/lib/vx/builder/script_builder_v2/java.rb +36 -0
- data/lib/vx/builder/script_builder_v2/nodejs.rb +58 -0
- data/lib/vx/builder/script_builder_v2/python.rb +69 -0
- data/lib/vx/builder/script_builder_v2/ruby.rb +87 -0
- data/lib/vx/builder/script_builder_v2/rust.rb +48 -0
- data/lib/vx/builder/script_builder_v2/scala.rb +52 -0
- data/lib/vx/builder/script_builder_v2/services.rb +25 -0
- data/lib/vx/builder/script_builder_v2.rb +158 -0
- data/lib/vx/builder/templates/script_builder_v2/to_script.erb +29 -0
- data/lib/vx/builder/version.rb +1 -1
- data/lib/vx/builder.rb +5 -0
- data/spec/fixtures/script_builder_v2/simple.sh +15 -0
- data/spec/fixtures/script_builder_v2/simple.yml +89 -0
- data/spec/integration/script_builder_v2/clojure_spec.rb +41 -0
- data/spec/integration/script_builder_v2/go_spec.rb +54 -0
- data/spec/integration/script_builder_v2/nodejs_spec.rb +63 -0
- data/spec/integration/script_builder_v2/python_spec.rb +43 -0
- data/spec/integration/script_builder_v2/ruby_spec.rb +141 -0
- data/spec/integration/script_builder_v2/rust_spec.rb +41 -0
- data/spec/lib/builder/build_configuration_spec.rb +1 -0
- data/spec/lib/builder/script_builder_v2_spec.rb +52 -0
- data/spec/lib/builder/task_spec.rb +1 -1
- data/spec/support/create.rb +1 -1
- metadata +37 -2
@@ -0,0 +1,87 @@
|
|
1
|
+
module Vx
|
2
|
+
module Builder
|
3
|
+
class ScriptBuilderV2
|
4
|
+
|
5
|
+
class Ruby < Base
|
6
|
+
|
7
|
+
DEFAULT_RUBY = '2.0.0'
|
8
|
+
|
9
|
+
ALIASES = {
|
10
|
+
'jruby-19mode' => 'jruby'
|
11
|
+
}
|
12
|
+
|
13
|
+
def call(env)
|
14
|
+
if enabled?(env)
|
15
|
+
|
16
|
+
do_cache_key(env) do |k|
|
17
|
+
ruby_v = ruby_version(env)
|
18
|
+
k << "rvm-#{ruby_v}"
|
19
|
+
k << gemfile(env)
|
20
|
+
end
|
21
|
+
|
22
|
+
do_cached_directories(env) do |i|
|
23
|
+
i << "~/.rubygems"
|
24
|
+
end
|
25
|
+
|
26
|
+
env.stage("init").tap do |i|
|
27
|
+
if jruby?(env)
|
28
|
+
i.add_env "JRUBY_OPTS", "-Xcext.enabled=true"
|
29
|
+
end
|
30
|
+
i.add_env "RAILS_ENV", "test"
|
31
|
+
i.add_env "RACK_ENV", "test"
|
32
|
+
i.add_env "GEM_HOME", "~/.rubygems"
|
33
|
+
end
|
34
|
+
|
35
|
+
env.stage("install").tap do |i|
|
36
|
+
do_install(env) do
|
37
|
+
i.add_env "BUNDLE_GEMFILE", "${PWD}/#{gemfile(env)}"
|
38
|
+
i.add_task "ruby", "action" => "install", "ruby" => ruby_version(env)
|
39
|
+
i.add_task "ruby", "announce"
|
40
|
+
if args = env.source.bundler_args.first
|
41
|
+
i.add_task "ruby", "action" => "bundle:install", "bundler_args" => args
|
42
|
+
else
|
43
|
+
i.add_task "ruby", "bundle:install"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
env.stage("database").tap do |i|
|
49
|
+
do_database(env) do
|
50
|
+
i.add_task "ruby", "rails:database"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
env.stage("script").tap do |i|
|
55
|
+
do_script(env) do
|
56
|
+
i.add_task "ruby", "script"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
app.call(env)
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def enabled?(env)
|
68
|
+
env.source.rvm.first || env.source.language == 'ruby'
|
69
|
+
end
|
70
|
+
|
71
|
+
def ruby_version(env)
|
72
|
+
v = env.source.rvm.first
|
73
|
+
ALIASES[v] || v || DEFAULT_RUBY
|
74
|
+
end
|
75
|
+
|
76
|
+
def jruby?(env)
|
77
|
+
ruby_version(env) =~ /jruby/
|
78
|
+
end
|
79
|
+
|
80
|
+
def gemfile(env)
|
81
|
+
env.source.gemfile.first || "Gemfile"
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Vx
|
2
|
+
module Builder
|
3
|
+
class ScriptBuilderV2
|
4
|
+
|
5
|
+
class Rust < Base
|
6
|
+
|
7
|
+
DEFAULT_RUST = '0.11.0'
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
if enabled?(env)
|
11
|
+
|
12
|
+
do_cache_key(env) do |i|
|
13
|
+
i << "rust-#{rust_version env}"
|
14
|
+
end
|
15
|
+
|
16
|
+
do_install(env) do
|
17
|
+
env.stage("install").tap do |i|
|
18
|
+
i.add_task "vxvm", "rust #{rust_version(env)}"
|
19
|
+
i.add_task "shell", "git submodule init"
|
20
|
+
i.add_task "shell", "git submodule update"
|
21
|
+
i.add_task "shell", "rustc --version"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
do_script(env) do
|
26
|
+
env.stage("script").tap do |i|
|
27
|
+
i.add_task "shell", "make"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
app.call(env)
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def enabled?(env)
|
38
|
+
env.source.rust.first || env.source.language == 'rust'
|
39
|
+
end
|
40
|
+
|
41
|
+
def rust_version(env)
|
42
|
+
env.source.rust.first || DEFAULT_RUST
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Vx
|
2
|
+
module Builder
|
3
|
+
class ScriptBuilderV2
|
4
|
+
|
5
|
+
class Scala < Base
|
6
|
+
|
7
|
+
DEFAULT_SCALA = '2.10.3'
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
if enabled?(env)
|
11
|
+
do_cache_key(env) do |i|
|
12
|
+
i << "scala-#{scala env}"
|
13
|
+
end
|
14
|
+
|
15
|
+
do_cached_directories(env) do |i|
|
16
|
+
i << "~/.sbt"
|
17
|
+
i << "~/.ivy2"
|
18
|
+
end
|
19
|
+
|
20
|
+
do_install(env) do
|
21
|
+
env.stage("install").tap do |i|
|
22
|
+
i.add_task 'scala', 'action' => 'install', 'scala' => scala(env)
|
23
|
+
i.add_task 'scala', "sbt:update"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
do_script(env) do
|
28
|
+
env.stage("script").tap do |i|
|
29
|
+
i.add_task 'scala', 'sbt:test'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
app.call(env)
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def enabled?(env)
|
41
|
+
env.source.scala.first || env.source.language == 'scala'
|
42
|
+
end
|
43
|
+
|
44
|
+
def scala(env)
|
45
|
+
env.source.scala.first || DEFAULT_SCALA
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Vx
|
2
|
+
module Builder
|
3
|
+
class ScriptBuilderV2
|
4
|
+
|
5
|
+
class Services < Base
|
6
|
+
|
7
|
+
ALIASES = {
|
8
|
+
'rabbitmq' => 'rabbitmq-server'
|
9
|
+
}
|
10
|
+
|
11
|
+
def call(env)
|
12
|
+
env.stage("init").tap do |e|
|
13
|
+
srvs = env.source.services.map do |srv|
|
14
|
+
srv = ALIASES[srv] || srv
|
15
|
+
end
|
16
|
+
e.add_task "services", srvs
|
17
|
+
end
|
18
|
+
|
19
|
+
app.call(env)
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,158 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'base64'
|
3
|
+
require 'vx/common'
|
4
|
+
|
5
|
+
module Vx
|
6
|
+
module Builder
|
7
|
+
class ScriptBuilderV2
|
8
|
+
|
9
|
+
TEMPLATE_SOURCE = File.expand_path("../templates/script_builder_v2/to_script.erb", __FILE__)
|
10
|
+
TEMPLATE = ::ERB.new(File.read(TEMPLATE_SOURCE))
|
11
|
+
|
12
|
+
autoload :Base, File.expand_path("../script_builder_v2/base", __FILE__)
|
13
|
+
autoload :Env, File.expand_path("../script_builder_v2/env", __FILE__)
|
14
|
+
autoload :Ruby, File.expand_path("../script_builder_v2/ruby", __FILE__)
|
15
|
+
autoload :Go, File.expand_path("../script_builder_v2/go", __FILE__)
|
16
|
+
autoload :Nodejs, File.expand_path("../script_builder_v2/nodejs", __FILE__)
|
17
|
+
autoload :Java, File.expand_path("../script_builder_v2/java", __FILE__)
|
18
|
+
autoload :Scala, File.expand_path("../script_builder_v2/scala", __FILE__)
|
19
|
+
autoload :Clojure, File.expand_path("../script_builder_v2/clojure", __FILE__)
|
20
|
+
autoload :Rust, File.expand_path("../script_builder_v2/rust", __FILE__)
|
21
|
+
autoload :Python, File.expand_path("../script_builder_v2/python", __FILE__)
|
22
|
+
autoload :Clone, File.expand_path("../script_builder_v2/clone", __FILE__)
|
23
|
+
autoload :Databases, File.expand_path("../script_builder_v2/databases", __FILE__)
|
24
|
+
autoload :Cache, File.expand_path("../script_builder_v2/cache", __FILE__)
|
25
|
+
autoload :Services, File.expand_path("../script_builder_v2/services", __FILE__)
|
26
|
+
autoload :Deploy, File.expand_path("../script_builder_v2/deploy", __FILE__)
|
27
|
+
autoload :Defaults, File.expand_path("../script_builder_v2/defaults", __FILE__)
|
28
|
+
|
29
|
+
class Stage
|
30
|
+
attr_reader :name, :environment, :tasks, :vars, :chdir
|
31
|
+
def initialize(options = {})
|
32
|
+
@name = options[:name]
|
33
|
+
@environment = options[:environment] || {}
|
34
|
+
@tasks = []
|
35
|
+
@vars = {}
|
36
|
+
@chdir = nil
|
37
|
+
end
|
38
|
+
|
39
|
+
def add_task(name, value)
|
40
|
+
@tasks.push(name => value)
|
41
|
+
end
|
42
|
+
|
43
|
+
def tasks?
|
44
|
+
@tasks.any?
|
45
|
+
end
|
46
|
+
|
47
|
+
def add_env(name, value, options = {})
|
48
|
+
if options[:hidden]
|
49
|
+
@environment[name] = "!#{value}"
|
50
|
+
else
|
51
|
+
@environment[name] = value
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def chdir!(dir)
|
56
|
+
@chdir = dir
|
57
|
+
end
|
58
|
+
|
59
|
+
def add_var(name, value)
|
60
|
+
@vars[name] = value
|
61
|
+
end
|
62
|
+
|
63
|
+
def to_hash
|
64
|
+
h = { "name" => name }
|
65
|
+
h.merge!("chdir" => chdir) if chdir
|
66
|
+
h.merge!("vars" => vars) if vars.any?
|
67
|
+
h.merge!( "environment" => environment ) if environment.any?
|
68
|
+
h.merge!("tasks" => tasks) if tasks?
|
69
|
+
h
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
include Common::Helper::Middlewares
|
75
|
+
|
76
|
+
middlewares do
|
77
|
+
use Builder::ScriptBuilderV2::Cache
|
78
|
+
use Builder::ScriptBuilderV2::Env
|
79
|
+
use Builder::ScriptBuilderV2::Services
|
80
|
+
use Builder::ScriptBuilderV2::Clone
|
81
|
+
|
82
|
+
use Builder::ScriptBuilderV2::Java
|
83
|
+
use Builder::ScriptBuilderV2::Scala
|
84
|
+
use Builder::ScriptBuilderV2::Clojure
|
85
|
+
use Builder::ScriptBuilderV2::Ruby
|
86
|
+
use Builder::ScriptBuilderV2::Go
|
87
|
+
use Builder::ScriptBuilderV2::Nodejs
|
88
|
+
use Builder::ScriptBuilderV2::Rust
|
89
|
+
use Builder::ScriptBuilderV2::Python
|
90
|
+
|
91
|
+
use Builder::ScriptBuilderV2::Deploy
|
92
|
+
use Builder::ScriptBuilderV2::Defaults
|
93
|
+
end
|
94
|
+
|
95
|
+
attr_reader :source, :task, :stages, :cache_key
|
96
|
+
|
97
|
+
def initialize(task, source)
|
98
|
+
@source = source
|
99
|
+
@task = task
|
100
|
+
@stages = []
|
101
|
+
@cache_key = []
|
102
|
+
end
|
103
|
+
|
104
|
+
def stage(name)
|
105
|
+
found = find_stage(name)
|
106
|
+
unless found
|
107
|
+
found = Stage.new(name: name)
|
108
|
+
@stages.push found
|
109
|
+
end
|
110
|
+
found
|
111
|
+
end
|
112
|
+
|
113
|
+
def find_stage(name)
|
114
|
+
@stages.find{|i| i.name == name }
|
115
|
+
end
|
116
|
+
|
117
|
+
def to_script
|
118
|
+
@script ||=
|
119
|
+
begin
|
120
|
+
TEMPLATE.result(binding)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def to_hash
|
125
|
+
@hash ||=
|
126
|
+
begin
|
127
|
+
call_env
|
128
|
+
ordered = %w{
|
129
|
+
clone init before_install install database
|
130
|
+
before_script script after_success teardown
|
131
|
+
}.inject([]) do |a, name|
|
132
|
+
if found = find_stage(name)
|
133
|
+
a << found
|
134
|
+
end
|
135
|
+
a
|
136
|
+
end
|
137
|
+
|
138
|
+
ordered.map(&:to_hash)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
def to_yaml
|
143
|
+
to_hash.to_yaml
|
144
|
+
end
|
145
|
+
|
146
|
+
def vexor
|
147
|
+
source.vexor
|
148
|
+
end
|
149
|
+
|
150
|
+
private
|
151
|
+
|
152
|
+
def call_env
|
153
|
+
@env ||= run_middlewares(self) {|_| _ }
|
154
|
+
end
|
155
|
+
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
set -o pipefail
|
2
|
+
|
3
|
+
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
4
|
+
export LC_ALL=en_US.UTF8
|
5
|
+
export DEBIAN_FRONTEND=noninteractive
|
6
|
+
|
7
|
+
cd ~/
|
8
|
+
|
9
|
+
rm -rf ~/citool
|
10
|
+
git clone -q --depth=1 --branch=master https://github.com/vexor/vx-citool.git ~/citool || (
|
11
|
+
rs=$?
|
12
|
+
exit rs
|
13
|
+
)
|
14
|
+
|
15
|
+
<% if ENV['RAILS_ENV'] == 'test' %>
|
16
|
+
echo
|
17
|
+
|
18
|
+
echo <%= Base64.encode64(to_yaml).gsub("\n", '') %> \
|
19
|
+
| base64 --decode
|
20
|
+
|
21
|
+
echo
|
22
|
+
echo "------------------------------------------------"
|
23
|
+
echo
|
24
|
+
<% end %>
|
25
|
+
|
26
|
+
echo <%= Base64.encode64(to_yaml).gsub("\n", '') %> \
|
27
|
+
| base64 --decode | ~/citool/bin/vx-citool -
|
28
|
+
|
29
|
+
exit $?
|
data/lib/vx/builder/version.rb
CHANGED
data/lib/vx/builder.rb
CHANGED
@@ -9,6 +9,7 @@ module Vx
|
|
9
9
|
autoload :MatrixBuilder, File.expand_path("../builder/matrix_builder", __FILE__)
|
10
10
|
autoload :DeployBuilder, File.expand_path("../builder/deploy_builder", __FILE__)
|
11
11
|
autoload :ScriptBuilder, File.expand_path("../builder/script_builder", __FILE__)
|
12
|
+
autoload :ScriptBuilderV2, File.expand_path("../builder/script_builder_v2", __FILE__)
|
12
13
|
|
13
14
|
module Helper
|
14
15
|
autoload :Config, File.expand_path("../builder/helper/config", __FILE__)
|
@@ -45,5 +46,9 @@ module Vx
|
|
45
46
|
ScriptBuilder.new task, build_configuration
|
46
47
|
end
|
47
48
|
|
49
|
+
def script_v2(task, build_configuration)
|
50
|
+
ScriptBuilderV2.new task, build_configuration
|
51
|
+
end
|
52
|
+
|
48
53
|
end
|
49
54
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
2
|
+
export LC_ALL=en_US.UTF8
|
3
|
+
export DEBIAN_FRONTEND=noninteractive
|
4
|
+
|
5
|
+
cd ~/
|
6
|
+
|
7
|
+
rm -rf ~/citool
|
8
|
+
git clone -q --depth=1 --branch=master https://github.com/vexor/vx-citool.git ~/citool || (
|
9
|
+
rs=$?
|
10
|
+
exit rs
|
11
|
+
)
|
12
|
+
|
13
|
+
echo LS0tCi0gbmFtZTogY2xvbmUKICB2YXJzOgogICAgc3NoX2tleTogfAogICAgICAtLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCiAgICAgIE1JSUVwQUlCQUFLQ0FRRUFwTWthbSttaHdDZENRZHF0dTdVOXA1VlJGbWtyYmk5SGFBM3ZhZ3BoTXZ5cnlXcXgKICAgICAgQzlzWSthbjhqQ05SVXBlbHlqSjhmNmI2L1Y1aDRXY25sd3BPdlZHR25zNEhPYm5Zajg5R0tvQkYrUXBUMjhtcAogICAgICBDTWkwa3pITlNXTVJaZy9kOXgzQWYyY0RJZ0poZ0dLZEtMaE9iK1NKMmlSektBNnl3bXlOVHJVQjR0SmhwZ0ovCiAgICAgIFBBMWxHbFlYa0dhZDJLUkFmZzdtVGN1UXJxTEo0cWkyWGRnQUhjdElTTjl3VWRiRTF4NUhGUHl6dWt3S3VCQUUKICAgICAgaDdtNlZWckp6c2tLTnJCc3VPVlNadVE2cnY5VGlxV1hWcEFYZ3JXdkt6dGxmM1NOQXR0bUFCYjVkMnVQT2EyKwogICAgICByZUNXRXpIYldPRmdNUURRc1hzUzNycUMzZnp3NFZNS1JRd1hJUUlEQVFBQkFvSUJBRGdaT3BUUGtjQmYzUitjCiAgICAgIE9iOEljWWZtdm1jNXdJNVBUQ2p4YllzVkk0Zi9HdUNFRU9mdlcrNUszMjQ1NjhxSlUraWxEVnRMMW5DQlBDTkgKICAgICAgUWVRYW56bTJVblVud0svM1EvR1paOUs2UHBnTTJ3V2MvbzI5L2pPS0pkQVJDUEJOQUl6TE5TaHFRbGZHcGJqVwogICAgICBXWmh1UGsyN2FPNjVyL1o0SW9Vci9XTkpIZTVBa3Y1Rk1mc2VBWit6bEFIQTMyUXFOZ2dPZWl0NjVHaW8yY0l1CiAgICAgIFlES0k1TnIxaWlTcTNKTWZFWnZtYy81UWVkVTlVN0RJZU5Xd2ppOHBHekZrRjh4aHU2RXk5aHBHUjJVN2dFcVIKICAgICAgK2R5U253aTgrcWFzcG9mOHJndUdlU1VaVm1vVEdtZllVRW56MVpwSlZhUWlBQmthVlh3QURhaGh2ZTh0ZDFUcgogICAgICA3aDFiK1EwQ2dZRUExdkRwN09rbFd5dkZpZVBZdTRybG5talZLTnY2a2JVVUx0T2l4OXlLV2JBcFk2bGpwWWhTCiAgICAgIHlpZ2lxVjZqaVZvckMxQ2xjWFBXcFdzSG9zZCtwNkRSYWEwTWlxRDJXSlBTWG5kQ29tR1JzT3JDZU83RHJMV2wKICAgICAgVUNSSGwxT2xjUkhjdXhTcVZESCtDQ3FXK05DNEp4VUtjMjJPekkra2FLVHJ1ajNzOVhrZWZJTUNnWUVBeEVONgogICAgICBCN3hBTlk5Y2ViMVhvZXYzWjdBV0loTFBROEdQWjNLU1NtejFaZHAxMU1Ob3V4UkpCekRTNGs2NFF2Mm40NEpQCiAgICAgIFUra2JYU2p2bkN5SVRDalRldkRJc0t4SHRPMHdPTEV3QjVMQ0J6cEpURXNqd0daY1RQMEFPdjZkcXdKd0xQcG0KICAgICAgeXNpVHJMRkJINVNkVnNUTXQ4VUpGeFozM3NEV0hadlNvMHAyMUlzQ2dZQjY4OHJNazcyanZwRThSSkxwRFJZMgogICAgICBuSDg2NVVNYmNIc0FJbDRlZCtESVYwWUYxWkxEMFF5U3lZeXlXQW15ZTFyZUdSN2FuRW52ekI3TkZkTTByb0M4CiAgICAgIE01cFYvcWVNbWRxZjRSYkQ3bzQ1cHNEaURxcnVNK1pCeHM4UkdHOHVFK3F4TmF3Tmg1OXFLbnE4RUNFWGNpak4KICAgICAgU0tHRUVMTWFqU1N2SDlkWndCUVpZd0tCZ1FDY0JoaUk5YnNGMlVabThZTXRFbTNJWEUvOEhuL3ZHWDFyZThXWQogICAgICByUzRaSHFiMTBiTDhwbyszeTdTYWZJSTNuM2RNZ2xlV0dZYkxkTE9uc0M5YWZFcERQaEFOZzZndHlUSEFuL3ZTCiAgICAgIHlYUytValBiRnhFQTcxOEpSVWhkbmZTeDhtcERGMzJJVUJRMkFXUUlPeGtwMWFINXBnWW4rSkNxNFJwV3gzMlkKICAgICAgbXFZRktRS0JnUUNiRXN2WWxmZVdKRGkrQ0JIK3poZmtmV0lZOVNpeXVIRVVRYTRoTmJhUy9Ea0RNZ3FONThDdQogICAgICA4Z1hHU2Z0RWlUY0xhdDBhMFA2dmVhY2dQS3VoQUhlMUs3aDg0K1IwckUvY3YxUVRCcFczOFJRZ2FiTHMrZXh5CiAgICAgIGp5RjVSMU5ISS9MWHNEQk5haVIwNXNyWGRpU1p1bUwwYXdYN3JpQzREeklrNlpaWVJkYm5iUT09CiAgICAgIC0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCiAgdGFza3M6CiAgLSBzc2hfYWdlbnQ6CiAgICAgIGtleTogIiRzc2hfa2V5IgogIC0gZ2l0X2Nsb25lOgogICAgICByZXBvOiBnaXRAZ2l0aHViLmNvbTp2ZXhvci92eC10ZXN0LXJlcG8uZ2l0CiAgICAgIGRlc3Q6ICJ+L3ZleG9yL3Z4LXRlc3QtcmVwbyIKICAgICAgYnJhbmNoOiB0ZXN0L3B1bGwtcmVxdWVzdAogICAgICBzaGE6IDhmNTNjMDc3MDcyNjc0OTcyZTIxYzgyYTI4NmFjYzA3ZmFkYTkxZjUKLSBuYW1lOiBpbml0CiAgY2hkaXI6ICJ+L3ZleG9yL3Z4LXRlc3QtcmVwbyIKICBlbnZpcm9ubWVudDoKICAgIENJOiAnMScKICAgIENJX0pPQl9JRDogMQogICAgQ0lfSk9CX05VTUJFUjogMTAwCiAgICBDSV9CVUlMRF9JRDogMTIKICAgIENJX0JVSUxEX05VTUJFUjogMTAxCiAgICBDSV9QUk9KRUNUX05BTUU6IHZleG9yL3Z4LXRlc3QtcmVwbwogICAgQ0lfQlVJTERfU0hBOiA4ZjUzYzA3NzA3MjY3NDk3MmUyMWM4MmEyODZhY2MwN2ZhZGE5MWY1CiAgICBDSV9CUkFOQ0g6IHRlc3QvcHVsbC1yZXF1ZXN0CiAgICBESVNQTEFZOiAiOjk5IgogICAgQ0lfUEFSQUxMRUxfSk9CUzogMwogICAgQ0lfUEFSQUxMRUxfSk9CX05VTUJFUjogMAogICAgUkFJTFNfRU5WOiB0ZXN0CiAgICBSQUNLX0VOVjogdGVzdAogICAgR0VNX0hPTUU6ICJ+Ly5ydWJ5Z2VtcyIKICB0YXNrczoKICAtIHNlcnZpY2VzOgogICAgLSByYWJiaXRtcS1zZXJ2ZXIKICAtIGNhY2hlX2ZldGNoOgogICAgICB1cmw6CiAgICAgIC0gaHR0cDovL2V4YW1wbGUuY29tL3Rlc3QvcHVsbC1yZXF1ZXN0L3J2bS0yLjAuMC1nZW1maWxlLnRnegogICAgICAtIGh0dHA6Ly9leGFtcGxlLmNvbS9tYXN0ZXIvcnZtLTIuMC4wLWdlbWZpbGUudGd6CiAgLSBjYWNoZV9hZGQ6CiAgICAgIGRpcjoKICAgICAgLSAifi8uY2FjaGUiCiAgICAgIC0gIn4vLnJ1YnlnZW1zIgotIG5hbWU6IGJlZm9yZV9pbnN0YWxsCiAgdGFza3M6CiAgLSBzaGVsbDogZWNobyBiZWZvcmVfaW5zdGFsbAotIG5hbWU6IGluc3RhbGwKICB0YXNrczoKICAtIHNoZWxsOiBlY2hvIGluc3RhbGwKLSBuYW1lOiBkYXRhYmFzZQogIHRhc2tzOgogIC0gcnVieTogcmFpbHM6ZGF0YWJhc2UKLSBuYW1lOiBiZWZvcmVfc2NyaXB0CiAgdGFza3M6CiAgLSBzaGVsbDogZWNobyBiZWZvcmVfc2NyaXB0Ci0gbmFtZTogc2NyaXB0CiAgdGFza3M6CiAgLSBzaGVsbDogUkFJTFNfRU5WPXRlc3QgbHMgLTEgJiYgZWNobyBET05FIQotIG5hbWU6IGFmdGVyX3N1Y2Nlc3MKICB0YXNrczoKICAtIHNoZWxsOiBlY2hvIGFmdGVyIHN1Y2Nlc3MKLSBuYW1lOiB0ZWFyZG93bgogIHRhc2tzOgogIC0gY2FjaGVfcHVzaDoKICAgICAgdXJsOiBodHRwOi8vZXhhbXBsZS5jb20vdGVzdC9wdWxsLXJlcXVlc3QvcnZtLTIuMC4wLWdlbWZpbGUudGd6Cg== \
|
14
|
+
| base64 --decode | ~/citool/bin/vx-citool -
|
15
|
+
exit $?
|
@@ -0,0 +1,89 @@
|
|
1
|
+
---
|
2
|
+
- name: clone
|
3
|
+
vars:
|
4
|
+
ssh_key: |
|
5
|
+
-----BEGIN RSA PRIVATE KEY-----
|
6
|
+
MIIEpAIBAAKCAQEApMkam+mhwCdCQdqtu7U9p5VRFmkrbi9HaA3vagphMvyryWqx
|
7
|
+
C9sY+an8jCNRUpelyjJ8f6b6/V5h4WcnlwpOvVGGns4HObnYj89GKoBF+QpT28mp
|
8
|
+
CMi0kzHNSWMRZg/d9x3Af2cDIgJhgGKdKLhOb+SJ2iRzKA6ywmyNTrUB4tJhpgJ/
|
9
|
+
PA1lGlYXkGad2KRAfg7mTcuQrqLJ4qi2XdgAHctISN9wUdbE1x5HFPyzukwKuBAE
|
10
|
+
h7m6VVrJzskKNrBsuOVSZuQ6rv9TiqWXVpAXgrWvKztlf3SNAttmABb5d2uPOa2+
|
11
|
+
reCWEzHbWOFgMQDQsXsS3rqC3fzw4VMKRQwXIQIDAQABAoIBADgZOpTPkcBf3R+c
|
12
|
+
Ob8IcYfmvmc5wI5PTCjxbYsVI4f/GuCEEOfvW+5K324568qJU+ilDVtL1nCBPCNH
|
13
|
+
QeQanzm2UnUnwK/3Q/GZZ9K6PpgM2wWc/o29/jOKJdARCPBNAIzLNShqQlfGpbjW
|
14
|
+
WZhuPk27aO65r/Z4IoUr/WNJHe5Akv5FMfseAZ+zlAHA32QqNggOeit65Gio2cIu
|
15
|
+
YDKI5Nr1iiSq3JMfEZvmc/5QedU9U7DIeNWwji8pGzFkF8xhu6Ey9hpGR2U7gEqR
|
16
|
+
+dySnwi8+qaspof8rguGeSUZVmoTGmfYUEnz1ZpJVaQiABkaVXwADahhve8td1Tr
|
17
|
+
7h1b+Q0CgYEA1vDp7OklWyvFiePYu4rlnmjVKNv6kbUULtOix9yKWbApY6ljpYhS
|
18
|
+
yigiqV6jiVorC1ClcXPWpWsHosd+p6DRaa0MiqD2WJPSXndComGRsOrCeO7DrLWl
|
19
|
+
UCRHl1OlcRHcuxSqVDH+CCqW+NC4JxUKc22OzI+kaKTruj3s9XkefIMCgYEAxEN6
|
20
|
+
B7xANY9ceb1Xoev3Z7AWIhLPQ8GPZ3KSSmz1Zdp11MNouxRJBzDS4k64Qv2n44JP
|
21
|
+
U+kbXSjvnCyITCjTevDIsKxHtO0wOLEwB5LCBzpJTEsjwGZcTP0AOv6dqwJwLPpm
|
22
|
+
ysiTrLFBH5SdVsTMt8UJFxZ33sDWHZvSo0p21IsCgYB688rMk72jvpE8RJLpDRY2
|
23
|
+
nH865UMbcHsAIl4ed+DIV0YF1ZLD0QySyYyyWAmye1reGR7anEnvzB7NFdM0roC8
|
24
|
+
M5pV/qeMmdqf4RbD7o45psDiDqruM+ZBxs8RGG8uE+qxNawNh59qKnq8ECEXcijN
|
25
|
+
SKGEELMajSSvH9dZwBQZYwKBgQCcBhiI9bsF2UZm8YMtEm3IXE/8Hn/vGX1re8WY
|
26
|
+
rS4ZHqb10bL8po+3y7SafII3n3dMgleWGYbLdLOnsC9afEpDPhANg6gtyTHAn/vS
|
27
|
+
yXS+UjPbFxEA718JRUhdnfSx8mpDF32IUBQ2AWQIOxkp1aH5pgYn+JCq4RpWx32Y
|
28
|
+
mqYFKQKBgQCbEsvYlfeWJDi+CBH+zhfkfWIY9SiyuHEUQa4hNbaS/DkDMgqN58Cu
|
29
|
+
8gXGSftEiTcLat0a0P6veacgPKuhAHe1K7h84+R0rE/cv1QTBpW38RQgabLs+exy
|
30
|
+
jyF5R1NHI/LXsDBNaiR05srXdiSZumL0awX7riC4DzIk6ZZYRdbnbQ==
|
31
|
+
-----END RSA PRIVATE KEY-----
|
32
|
+
tasks:
|
33
|
+
- ssh_agent:
|
34
|
+
key: "$ssh_key"
|
35
|
+
- git_clone:
|
36
|
+
repo: git@github.com:vexor/vx-test-repo.git
|
37
|
+
dest: "~/vexor/vx-test-repo"
|
38
|
+
branch: test/pull-request
|
39
|
+
sha: 8f53c077072674972e21c82a286acc07fada91f5
|
40
|
+
- name: init
|
41
|
+
chdir: "~/vexor/vx-test-repo"
|
42
|
+
environment:
|
43
|
+
CI: '1'
|
44
|
+
CI_JOB_ID: 1
|
45
|
+
CI_JOB_NUMBER: 100
|
46
|
+
CI_BUILD_ID: 12
|
47
|
+
CI_BUILD_NUMBER: 101
|
48
|
+
CI_PROJECT_NAME: vexor/vx-test-repo
|
49
|
+
CI_BUILD_SHA: 8f53c077072674972e21c82a286acc07fada91f5
|
50
|
+
CI_BRANCH: test/pull-request
|
51
|
+
DISPLAY: ":99"
|
52
|
+
CI_PARALLEL_JOBS: 3
|
53
|
+
CI_PARALLEL_JOB_NUMBER: 0
|
54
|
+
RAILS_ENV: test
|
55
|
+
RACK_ENV: test
|
56
|
+
GEM_HOME: "~/.rubygems"
|
57
|
+
tasks:
|
58
|
+
- services:
|
59
|
+
- rabbitmq-server
|
60
|
+
- cache_fetch:
|
61
|
+
url:
|
62
|
+
- http://example.com/test/pull-request/rvm-2.0.0-gemfile.tgz
|
63
|
+
- http://example.com/master/rvm-2.0.0-gemfile.tgz
|
64
|
+
- cache_add:
|
65
|
+
dir:
|
66
|
+
- "~/.cache"
|
67
|
+
- "~/.rubygems"
|
68
|
+
- name: before_install
|
69
|
+
tasks:
|
70
|
+
- shell: echo before_install
|
71
|
+
- name: install
|
72
|
+
tasks:
|
73
|
+
- shell: echo install
|
74
|
+
- name: database
|
75
|
+
tasks:
|
76
|
+
- ruby: rails:database
|
77
|
+
- name: before_script
|
78
|
+
tasks:
|
79
|
+
- shell: echo before_script
|
80
|
+
- name: script
|
81
|
+
tasks:
|
82
|
+
- shell: RAILS_ENV=test ls -1 && echo DONE!
|
83
|
+
- name: after_success
|
84
|
+
tasks:
|
85
|
+
- shell: echo after success
|
86
|
+
- name: teardown
|
87
|
+
tasks:
|
88
|
+
- cache_push:
|
89
|
+
url: http://example.com/test/pull-request/rvm-2.0.0-gemfile.tgz
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'yaml'
|
3
|
+
require 'tmpdir'
|
4
|
+
require 'fileutils'
|
5
|
+
|
6
|
+
describe "(integration v2) go" do
|
7
|
+
let(:path) { Dir.tmpdir + "/vx-builder-test" }
|
8
|
+
|
9
|
+
before do
|
10
|
+
FileUtils.rm_rf(path)
|
11
|
+
FileUtils.mkdir_p(path)
|
12
|
+
end
|
13
|
+
after { FileUtils.rm_rf(path) }
|
14
|
+
|
15
|
+
def build(file, options = {})
|
16
|
+
config = Vx::Builder::BuildConfiguration.from_yaml(file)
|
17
|
+
matrix = Vx::Builder.matrix config
|
18
|
+
options[:task] ||= create(:task)
|
19
|
+
script = Vx::Builder.script_v2(options[:task], matrix.build.first)
|
20
|
+
OpenStruct.new script: script, matrix: matrix
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should succesfuly run lang/clojure", real: true do
|
24
|
+
file = {"language" => "clojure"}.to_yaml
|
25
|
+
task = create(
|
26
|
+
:task,
|
27
|
+
sha: "HEAD",
|
28
|
+
branch: "lang/clojure"
|
29
|
+
)
|
30
|
+
|
31
|
+
b = build(file, task: task)
|
32
|
+
Dir.chdir(path) do
|
33
|
+
File.open("script.sh", "w") do |io|
|
34
|
+
io.write "set -e\n"
|
35
|
+
io.write b.script.to_script
|
36
|
+
end
|
37
|
+
system("env", "-", "USER=$USER", "HOME=#{path}", "bash", "script.sh" )
|
38
|
+
expect($?.to_i).to eq 0
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'yaml'
|
3
|
+
require 'tmpdir'
|
4
|
+
require 'fileutils'
|
5
|
+
|
6
|
+
describe "(integration v2) go" do
|
7
|
+
let(:path) { Dir.tmpdir + "/vx-builder-test" }
|
8
|
+
|
9
|
+
before do
|
10
|
+
FileUtils.rm_rf(path)
|
11
|
+
FileUtils.mkdir_p(path)
|
12
|
+
end
|
13
|
+
after { FileUtils.rm_rf(path) }
|
14
|
+
|
15
|
+
def build(file, options = {})
|
16
|
+
config = Vx::Builder::BuildConfiguration.from_yaml(file)
|
17
|
+
matrix = Vx::Builder.matrix config
|
18
|
+
options[:task] ||= create(:task)
|
19
|
+
script = Vx::Builder.script_v2(options[:task], matrix.build.first)
|
20
|
+
OpenStruct.new script: script, matrix: matrix
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should generate valid yaml" do
|
24
|
+
file = {"language" => "go"}.to_yaml
|
25
|
+
task = create(
|
26
|
+
:task,
|
27
|
+
sha: "HEAD",
|
28
|
+
branch: "lang/go"
|
29
|
+
)
|
30
|
+
|
31
|
+
b = build(file, task: task)
|
32
|
+
s = b.script.to_yaml
|
33
|
+
expect(s).to match(/vxvm: go 1\.2/)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should succesfuly run lang/go", real: true do
|
37
|
+
file = {"language" => "go"}.to_yaml
|
38
|
+
task = create(
|
39
|
+
:task,
|
40
|
+
sha: "HEAD",
|
41
|
+
branch: "lang/go"
|
42
|
+
)
|
43
|
+
|
44
|
+
b = build(file, task: task)
|
45
|
+
Dir.chdir(path) do
|
46
|
+
File.open("script.sh", "w") do |io|
|
47
|
+
io.write "set -e\n"
|
48
|
+
io.write b.script.to_script
|
49
|
+
end
|
50
|
+
system("env", "-", "USER=$USER", "HOME=#{path}", "bash", "script.sh" )
|
51
|
+
expect($?.to_i).to eq 0
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|