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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +3 -2
  3. data/lib/vx/builder/build_configuration.rb +2 -0
  4. data/lib/vx/builder/script_builder_v2/base.rb +67 -0
  5. data/lib/vx/builder/script_builder_v2/cache.rb +62 -0
  6. data/lib/vx/builder/script_builder_v2/clojure.rb +35 -0
  7. data/lib/vx/builder/script_builder_v2/clone.rb +43 -0
  8. data/lib/vx/builder/script_builder_v2/defaults.rb +44 -0
  9. data/lib/vx/builder/script_builder_v2/deploy.rb +40 -0
  10. data/lib/vx/builder/script_builder_v2/env.rb +65 -0
  11. data/lib/vx/builder/script_builder_v2/go.rb +64 -0
  12. data/lib/vx/builder/script_builder_v2/java.rb +36 -0
  13. data/lib/vx/builder/script_builder_v2/nodejs.rb +58 -0
  14. data/lib/vx/builder/script_builder_v2/python.rb +69 -0
  15. data/lib/vx/builder/script_builder_v2/ruby.rb +87 -0
  16. data/lib/vx/builder/script_builder_v2/rust.rb +48 -0
  17. data/lib/vx/builder/script_builder_v2/scala.rb +52 -0
  18. data/lib/vx/builder/script_builder_v2/services.rb +25 -0
  19. data/lib/vx/builder/script_builder_v2.rb +158 -0
  20. data/lib/vx/builder/templates/script_builder_v2/to_script.erb +29 -0
  21. data/lib/vx/builder/version.rb +1 -1
  22. data/lib/vx/builder.rb +5 -0
  23. data/spec/fixtures/script_builder_v2/simple.sh +15 -0
  24. data/spec/fixtures/script_builder_v2/simple.yml +89 -0
  25. data/spec/integration/script_builder_v2/clojure_spec.rb +41 -0
  26. data/spec/integration/script_builder_v2/go_spec.rb +54 -0
  27. data/spec/integration/script_builder_v2/nodejs_spec.rb +63 -0
  28. data/spec/integration/script_builder_v2/python_spec.rb +43 -0
  29. data/spec/integration/script_builder_v2/ruby_spec.rb +141 -0
  30. data/spec/integration/script_builder_v2/rust_spec.rb +41 -0
  31. data/spec/lib/builder/build_configuration_spec.rb +1 -0
  32. data/spec/lib/builder/script_builder_v2_spec.rb +52 -0
  33. data/spec/lib/builder/task_spec.rb +1 -1
  34. data/spec/support/create.rb +1 -1
  35. 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 $?
@@ -1,5 +1,5 @@
1
1
  module Vx
2
2
  module Builder
3
- VERSION = "0.5.54"
3
+ VERSION = "0.5.55"
4
4
  end
5
5
  end
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