vx-builder 0.5.7 → 0.5.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ba86114fa99943a307bd7b20133b78ba92148ebc
4
- data.tar.gz: 2c41e9961a06061ce599857c0bfbf598563976bf
3
+ metadata.gz: e7647e4914da11ea8c22467ba56c5079d2026b4a
4
+ data.tar.gz: 2a0e59c11041a965a4d7fd6390a5108a08f389a2
5
5
  SHA512:
6
- metadata.gz: a75a7fe79db808467433e22266532a3d5bdef1aa7f054f2f551bd96bdcc38555328467ef9471f42b43b2cc54b5ecbe9e5c8a75bdf8badb1eb134d58555d7882c
7
- data.tar.gz: ffbfcbab3ab5c3efbf90342921de18bd638d6e79b7d87757501e8607516e02c30a052c8b7f75ccb06869fe9a9ef501367dce23917d57ca222e7e247c61e4ab86
6
+ metadata.gz: b4d3c4ed7867c76fdcb1bc91db22fb8a298969f2c59a743d69595a1a61d1af2c5a5c79f426d552f8a4be33b28b440d7ad488a90d1062184f6b0a147c02091365
7
+ data.tar.gz: 80dadcc01f7164a4b54b246343175194d583e5f156242e07ecea17c35ac264146fe648e49e8fa2c0f9b86b7668c5eb52c0898df7211598f66f4b88202315d7f3
data/.travis.yml CHANGED
@@ -1,7 +1,10 @@
1
1
  rvm:
2
2
  - 2.0.0
3
- - 2.1.2
3
+ - 2.1.3
4
+
5
+ env:
6
+ global:
7
+ - 'VX_BUILDER_REAL=1'
4
8
 
5
9
  script:
6
10
  - bundle exec rspec spec/
7
- - bundle exec rspec spec/ -t "real"
@@ -0,0 +1,30 @@
1
+ #!/bin/bash
2
+
3
+ i=0
4
+ files=()
5
+
6
+ BLACK="\033[30m"
7
+ RED="\033[31m"
8
+ GREEN="\033[32m"
9
+ YELLOW="\033[33m"
10
+ BLUE="\033[34m"
11
+ PINK="\033[35m"
12
+ CYAN="\033[36m"
13
+ WHITE="\033[37m"
14
+ NORMAL="\033[0;39m"
15
+
16
+ JOBS=${CI_PARALLEL_JOBS:-1}
17
+ JOB_NUMBER=${CI_PARALLEL_JOB_NUMBER:-0}
18
+
19
+ for file in $(find ./spec -name "*_spec.rb" | sort)
20
+ do
21
+ if [ $(($i % $JOBS)) -eq $JOB_NUMBER ]
22
+ then
23
+ files+=" $file"
24
+ fi
25
+ ((i++))
26
+ done
27
+
28
+ echo -e "${GREEN}Parallel running $((${JOB_NUMBER} + 1)) of ${JOBS} ${NORMAL}"
29
+ echo "bundle exec rspec $@ ${files[@]}"
30
+ exec bundle exec rspec $@ ${files[@]}
@@ -42,6 +42,9 @@ module Vx
42
42
 
43
43
  before_deploy
44
44
  after_deploy
45
+
46
+ parallel
47
+ parallel_job_number
45
48
  }
46
49
 
47
50
  class << self
@@ -63,16 +66,16 @@ module Vx
63
66
  def initialize(new_attributes = {}, matrix_attributes = {})
64
67
  new_attributes = {} unless new_attributes.is_a?(Hash)
65
68
 
66
- @env = Env.new new_attributes.delete("env")
67
- @cache = Cache.new new_attributes.delete("cache")
68
- @vexor = Vexor.new new_attributes.delete("vexor")
69
- @matrix = Matrix.new new_attributes.delete("matrix")
69
+ @env = Env.new new_attributes.delete("env")
70
+ @cache = Cache.new new_attributes.delete("cache")
71
+ @vexor = Vexor.new new_attributes.delete("vexor")
72
+ @matrix = Matrix.new new_attributes.delete("matrix")
70
73
 
71
- @deploy = Deploy.new new_attributes.delete("deploy")
72
- @deploy_modules = new_attributes.delete("deploy_modules") || []
73
- @deploy_modules = Deploy.restore_modules(@deploy_modules)
74
+ @deploy = Deploy.new new_attributes.delete("deploy")
75
+ @deploy_modules = new_attributes.delete("deploy_modules") || []
76
+ @deploy_modules = Deploy.restore_modules(@deploy_modules)
74
77
 
75
- @matrix_attributes = matrix_attributes
78
+ @matrix_attributes = matrix_attributes
76
79
 
77
80
  build_attributes new_attributes
78
81
  end
@@ -137,11 +140,27 @@ module Vx
137
140
  @attributes["language"].first
138
141
  end
139
142
 
143
+ def parallel
144
+ @attributes["parallel"].first.to_i
145
+ end
146
+
147
+ def parallel?
148
+ parallel > 0
149
+ end
150
+
151
+ def parallel_job_number
152
+ @attributes["parallel_job_number"].first.to_i
153
+ end
154
+
155
+ def parallel_job_number?
156
+ parallel_job_number > 0
157
+ end
158
+
140
159
  def cached_directories
141
160
  cache.enabled? and cache.directories
142
161
  end
143
162
 
144
- (ATTRIBUTES - %w{ language }).each do |attr|
163
+ (ATTRIBUTES - %w{ language parallel parallel_job_number }).each do |attr|
145
164
  define_method attr do
146
165
  attributes[attr]
147
166
  end
@@ -22,7 +22,7 @@ module Vx
22
22
  def build
23
23
  @build ||= begin
24
24
  new_attributes = build_configuration.to_hash.dup
25
- build_configurations = attributes_for_new_build_configurations_with_merged_env.map do |matrix_attributes|
25
+ build_configurations = attributes_for_new_build_configurations_with_parallel.map do |matrix_attributes|
26
26
  BuildConfiguration.new(
27
27
  new_attributes.merge(matrix_attributes),
28
28
  matrix_attributes
@@ -37,6 +37,21 @@ module Vx
37
37
  end
38
38
  end
39
39
 
40
+ def attributes_for_new_build_configurations_with_parallel
41
+ new_attrs = []
42
+ attrs = attributes_for_new_build_configurations_with_merged_env
43
+ if build_configuration.parallel?
44
+ attrs.each do |attr|
45
+ 1.upto(build_configuration.parallel) do |n|
46
+ new_attrs << attr.merge("parallel_job_number" => n - 1)
47
+ end
48
+ end
49
+ new_attrs
50
+ else
51
+ attrs
52
+ end
53
+ end
54
+
40
55
  def attributes_for_new_build_configurations_with_merged_env
41
56
  attrs = attributes_for_new_build_configurations
42
57
  attrs = [{}] if attrs.empty?
@@ -5,6 +5,7 @@ module Vx
5
5
  Base = Struct.new(:app) do
6
6
 
7
7
  include Helper::TraceShCommand
8
+ include Common::Helper::UploadShCommand
8
9
  include Helper::VxvmInstall
9
10
 
10
11
  def do_cache_key(env)
@@ -0,0 +1,22 @@
1
+ module Vx
2
+ module Builder
3
+ class ScriptBuilder
4
+
5
+ class Parallel < Base
6
+
7
+ def call(env)
8
+ if env.source.parallel?
9
+ env.init << trace_sh_command("export CI_PARALLEL_JOBS=#{env.source.parallel}")
10
+
11
+ if env.source.parallel_job_number?
12
+ env.init << trace_sh_command("export CI_PARALLEL_JOB_NUMBER=#{env.source.parallel_job_number}")
13
+ end
14
+ end
15
+
16
+ app.call(env)
17
+ end
18
+
19
+ end
20
+ end
21
+ end
22
+ end
@@ -30,6 +30,13 @@ module Vx
30
30
  i << "mkdir -p #{data_path}"
31
31
  i << "mkdir -p #{repo_path}"
32
32
 
33
+ %w{ vx_parallel_rspec }.each do |bin|
34
+ src = File.expand_path("../../../../../bin/#{bin}", __FILE__)
35
+ dst = "$(pwd)/bin/#{bin.sub("vx_", "")}"
36
+ i << upload_sh_command(dst, File.read(src))
37
+ i << "chmod 0750 #{dst}"
38
+ end
39
+
33
40
  if deploy_key
34
41
  i << upload_sh_command(key_file, deploy_key)
35
42
  i << "chmod 0600 #{key_file}"
@@ -20,6 +20,7 @@ module Vx
20
20
  autoload :Deploy, File.expand_path("../script_builder/deploy", __FILE__)
21
21
  autoload :Timeouts, File.expand_path("../script_builder/timeouts", __FILE__)
22
22
  autoload :Defaults, File.expand_path("../script_builder/defaults", __FILE__)
23
+ autoload :Parallel, File.expand_path("../script_builder/parallel", __FILE__)
23
24
 
24
25
  include Common::Helper::Middlewares
25
26
 
@@ -27,6 +28,7 @@ module Vx
27
28
  use Builder::ScriptBuilder::Timeouts
28
29
  use Builder::ScriptBuilder::Cache
29
30
  use Builder::ScriptBuilder::Env
31
+ use Builder::ScriptBuilder::Parallel
30
32
  use Builder::ScriptBuilder::Services
31
33
  use Builder::ScriptBuilder::Prepare
32
34
 
@@ -1,5 +1,5 @@
1
1
  module Vx
2
2
  module Builder
3
- VERSION = "0.5.7"
3
+ VERSION = "0.5.8"
4
4
  end
5
5
  end
@@ -17,6 +17,8 @@ export PATH=$VX_ROOT/bin:$PATH
17
17
  mkdir -p $VX_ROOT/bin
18
18
  mkdir -p ${VX_ROOT}/data/vexor/vx-test-repo
19
19
  mkdir -p ${VX_ROOT}/code/vexor/vx-test-repo
20
+ (echo IyEvYmluL2Jhc2gKCmk9MApmaWxlcz0oKQoKQkxBQ0s9IlwwMzNbMzBtIgpSRUQ9IlwwMzNbMzFtIgpHUkVFTj0iXDAzM1szMm0iCllFTExPVz0iXDAzM1szM20iCkJMVUU9IlwwMzNbMzRtIgpQSU5LPSJcMDMzWzM1bSIKQ1lBTj0iXDAzM1szNm0iCldISVRFPSJcMDMzWzM3bSIKTk9STUFMPSJcMDMzWzA7MzltIgoKSk9CUz0ke0NJX1BBUkFMTEVMX0pPQlM6LTF9CkpPQl9OVU1CRVI9JHtDSV9QQVJBTExFTF9KT0JfTlVNQkVSOi0wfQoKZm9yIGZpbGUgaW4gJChmaW5kIC4vc3BlYyAtbmFtZSAiKl9zcGVjLnJiIiB8IHNvcnQpCmRvCiAgaWYgWyAkKCgkaSAlICRKT0JTKSkgLWVxICRKT0JfTlVNQkVSIF0KICB0aGVuCiAgICBmaWxlcys9IiAkZmlsZSIKICBmaQogICgoaSsrKSkKZG9uZQoKZWNobyAtZSAiJHtHUkVFTn1QYXJhbGxlbCBydW5uaW5nICQoKCR7Sk9CX05VTUJFUn0gKyAxKSkgb2YgJHtKT0JTfSAke05PUk1BTH0iCmVjaG8gImJ1bmRsZSBleGVjIHJzcGVjICRAICR7ZmlsZXNbQF19IgpleGVjIGJ1bmRsZSBleGVjIHJzcGVjICRAICR7ZmlsZXNbQF19Cg== | base64 --decode) > $(pwd)/bin/parallel_rspec
21
+ chmod 0750 $(pwd)/bin/parallel_rspec
20
22
  (echo LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBcE1rYW0rbWh3Q2RDUWRxdHU3VTlwNVZSRm1rcmJpOUhhQTN2YWdwaE12eXJ5V3F4CkM5c1krYW44akNOUlVwZWx5ako4ZjZiNi9WNWg0V2NubHdwT3ZWR0duczRIT2JuWWo4OUdLb0JGK1FwVDI4bXAKQ01pMGt6SE5TV01SWmcvZDl4M0FmMmNESWdKaGdHS2RLTGhPYitTSjJpUnpLQTZ5d215TlRyVUI0dEpocGdKLwpQQTFsR2xZWGtHYWQyS1JBZmc3bVRjdVFycUxKNHFpMlhkZ0FIY3RJU045d1VkYkUxeDVIRlB5enVrd0t1QkFFCmg3bTZWVnJKenNrS05yQnN1T1ZTWnVRNnJ2OVRpcVdYVnBBWGdyV3ZLenRsZjNTTkF0dG1BQmI1ZDJ1UE9hMisKcmVDV0V6SGJXT0ZnTVFEUXNYc1MzcnFDM2Z6dzRWTUtSUXdYSVFJREFRQUJBb0lCQURnWk9wVFBrY0JmM1IrYwpPYjhJY1lmbXZtYzV3STVQVENqeGJZc1ZJNGYvR3VDRUVPZnZXKzVLMzI0NTY4cUpVK2lsRFZ0TDFuQ0JQQ05IClFlUWFuem0yVW5VbndLLzNRL0daWjlLNlBwZ00yd1djL28yOS9qT0tKZEFSQ1BCTkFJekxOU2hxUWxmR3BialcKV1podVBrMjdhTzY1ci9aNElvVXIvV05KSGU1QWt2NUZNZnNlQVoremxBSEEzMlFxTmdnT2VpdDY1R2lvMmNJdQpZREtJNU5yMWlpU3EzSk1mRVp2bWMvNVFlZFU5VTdESWVOV3dqaThwR3pGa0Y4eGh1NkV5OWhwR1IyVTdnRXFSCitkeVNud2k4K3Fhc3BvZjhyZ3VHZVNVWlZtb1RHbWZZVUVuejFacEpWYVFpQUJrYVZYd0FEYWhodmU4dGQxVHIKN2gxYitRMENnWUVBMXZEcDdPa2xXeXZGaWVQWXU0cmxubWpWS052NmtiVVVMdE9peDl5S1diQXBZNmxqcFloUwp5aWdpcVY2amlWb3JDMUNsY1hQV3BXc0hvc2QrcDZEUmFhME1pcUQyV0pQU1huZENvbUdSc09yQ2VPN0RyTFdsClVDUkhsMU9sY1JIY3V4U3FWREgrQ0NxVytOQzRKeFVLYzIyT3pJK2thS1RydWozczlYa2VmSU1DZ1lFQXhFTjYKQjd4QU5ZOWNlYjFYb2V2M1o3QVdJaExQUThHUFozS1NTbXoxWmRwMTFNTm91eFJKQnpEUzRrNjRRdjJuNDRKUApVK2tiWFNqdm5DeUlUQ2pUZXZESXNLeEh0TzB3T0xFd0I1TENCenBKVEVzandHWmNUUDBBT3Y2ZHF3SndMUHBtCnlzaVRyTEZCSDVTZFZzVE10OFVKRnhaMzNzRFdIWnZTbzBwMjFJc0NnWUI2ODhyTWs3Mmp2cEU4UkpMcERSWTIKbkg4NjVVTWJjSHNBSWw0ZWQrRElWMFlGMVpMRDBReVN5WXl5V0FteWUxcmVHUjdhbkVudnpCN05GZE0wcm9DOApNNXBWL3FlTW1kcWY0UmJEN280NXBzRGlEcXJ1TStaQnhzOFJHRzh1RStxeE5hd05oNTlxS25xOEVDRVhjaWpOClNLR0VFTE1halNTdkg5ZFp3QlFaWXdLQmdRQ2NCaGlJOWJzRjJVWm04WU10RW0zSVhFLzhIbi92R1gxcmU4V1kKclM0WkhxYjEwYkw4cG8rM3k3U2FmSUkzbjNkTWdsZVdHWWJMZExPbnNDOWFmRXBEUGhBTmc2Z3R5VEhBbi92Uwp5WFMrVWpQYkZ4RUE3MThKUlVoZG5mU3g4bXBERjMySVVCUTJBV1FJT3hrcDFhSDVwZ1luK0pDcTRScFd4MzJZCm1xWUZLUUtCZ1FDYkVzdllsZmVXSkRpK0NCSCt6aGZrZldJWTlTaXl1SEVVUWE0aE5iYVMvRGtETWdxTjU4Q3UKOGdYR1NmdEVpVGNMYXQwYTBQNnZlYWNnUEt1aEFIZTFLN2g4NCtSMHJFL2N2MVFUQnBXMzhSUWdhYkxzK2V4eQpqeUY1UjFOSEkvTFhzREJOYWlSMDVzclhkaVNadW1MMGF3WDdyaUM0RHpJazZaWllSZGJuYlE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= | base64 --decode) > ${VX_ROOT}/data/vexor/vx-test-repo/key
21
23
  chmod 0600 ${VX_ROOT}/data/vexor/vx-test-repo/key
22
24
  export VX_PRIVATE_KEY=${VX_ROOT}/data/vexor/vx-test-repo/key
@@ -21,6 +21,8 @@ export PATH=$VX_ROOT/bin:$PATH
21
21
  mkdir -p $VX_ROOT/bin
22
22
  mkdir -p ${VX_ROOT}/data/vexor/vx-test-repo
23
23
  mkdir -p ${VX_ROOT}/code/vexor/vx-test-repo
24
+ (echo IyEvYmluL2Jhc2gKCmk9MApmaWxlcz0oKQoKQkxBQ0s9IlwwMzNbMzBtIgpSRUQ9IlwwMzNbMzFtIgpHUkVFTj0iXDAzM1szMm0iCllFTExPVz0iXDAzM1szM20iCkJMVUU9IlwwMzNbMzRtIgpQSU5LPSJcMDMzWzM1bSIKQ1lBTj0iXDAzM1szNm0iCldISVRFPSJcMDMzWzM3bSIKTk9STUFMPSJcMDMzWzA7MzltIgoKSk9CUz0ke0NJX1BBUkFMTEVMX0pPQlM6LTF9CkpPQl9OVU1CRVI9JHtDSV9QQVJBTExFTF9KT0JfTlVNQkVSOi0wfQoKZm9yIGZpbGUgaW4gJChmaW5kIC4vc3BlYyAtbmFtZSAiKl9zcGVjLnJiIiB8IHNvcnQpCmRvCiAgaWYgWyAkKCgkaSAlICRKT0JTKSkgLWVxICRKT0JfTlVNQkVSIF0KICB0aGVuCiAgICBmaWxlcys9IiAkZmlsZSIKICBmaQogICgoaSsrKSkKZG9uZQoKZWNobyAtZSAiJHtHUkVFTn1QYXJhbGxlbCBydW5uaW5nICQoKCR7Sk9CX05VTUJFUn0gKyAxKSkgb2YgJHtKT0JTfSAke05PUk1BTH0iCmVjaG8gImJ1bmRsZSBleGVjIHJzcGVjICRAICR7ZmlsZXNbQF19IgpleGVjIGJ1bmRsZSBleGVjIHJzcGVjICRAICR7ZmlsZXNbQF19Cg== | base64 --decode) > $(pwd)/bin/parallel_rspec
25
+ chmod 0750 $(pwd)/bin/parallel_rspec
24
26
  (echo LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBcE1rYW0rbWh3Q2RDUWRxdHU3VTlwNVZSRm1rcmJpOUhhQTN2YWdwaE12eXJ5V3F4CkM5c1krYW44akNOUlVwZWx5ako4ZjZiNi9WNWg0V2NubHdwT3ZWR0duczRIT2JuWWo4OUdLb0JGK1FwVDI4bXAKQ01pMGt6SE5TV01SWmcvZDl4M0FmMmNESWdKaGdHS2RLTGhPYitTSjJpUnpLQTZ5d215TlRyVUI0dEpocGdKLwpQQTFsR2xZWGtHYWQyS1JBZmc3bVRjdVFycUxKNHFpMlhkZ0FIY3RJU045d1VkYkUxeDVIRlB5enVrd0t1QkFFCmg3bTZWVnJKenNrS05yQnN1T1ZTWnVRNnJ2OVRpcVdYVnBBWGdyV3ZLenRsZjNTTkF0dG1BQmI1ZDJ1UE9hMisKcmVDV0V6SGJXT0ZnTVFEUXNYc1MzcnFDM2Z6dzRWTUtSUXdYSVFJREFRQUJBb0lCQURnWk9wVFBrY0JmM1IrYwpPYjhJY1lmbXZtYzV3STVQVENqeGJZc1ZJNGYvR3VDRUVPZnZXKzVLMzI0NTY4cUpVK2lsRFZ0TDFuQ0JQQ05IClFlUWFuem0yVW5VbndLLzNRL0daWjlLNlBwZ00yd1djL28yOS9qT0tKZEFSQ1BCTkFJekxOU2hxUWxmR3BialcKV1podVBrMjdhTzY1ci9aNElvVXIvV05KSGU1QWt2NUZNZnNlQVoremxBSEEzMlFxTmdnT2VpdDY1R2lvMmNJdQpZREtJNU5yMWlpU3EzSk1mRVp2bWMvNVFlZFU5VTdESWVOV3dqaThwR3pGa0Y4eGh1NkV5OWhwR1IyVTdnRXFSCitkeVNud2k4K3Fhc3BvZjhyZ3VHZVNVWlZtb1RHbWZZVUVuejFacEpWYVFpQUJrYVZYd0FEYWhodmU4dGQxVHIKN2gxYitRMENnWUVBMXZEcDdPa2xXeXZGaWVQWXU0cmxubWpWS052NmtiVVVMdE9peDl5S1diQXBZNmxqcFloUwp5aWdpcVY2amlWb3JDMUNsY1hQV3BXc0hvc2QrcDZEUmFhME1pcUQyV0pQU1huZENvbUdSc09yQ2VPN0RyTFdsClVDUkhsMU9sY1JIY3V4U3FWREgrQ0NxVytOQzRKeFVLYzIyT3pJK2thS1RydWozczlYa2VmSU1DZ1lFQXhFTjYKQjd4QU5ZOWNlYjFYb2V2M1o3QVdJaExQUThHUFozS1NTbXoxWmRwMTFNTm91eFJKQnpEUzRrNjRRdjJuNDRKUApVK2tiWFNqdm5DeUlUQ2pUZXZESXNLeEh0TzB3T0xFd0I1TENCenBKVEVzandHWmNUUDBBT3Y2ZHF3SndMUHBtCnlzaVRyTEZCSDVTZFZzVE10OFVKRnhaMzNzRFdIWnZTbzBwMjFJc0NnWUI2ODhyTWs3Mmp2cEU4UkpMcERSWTIKbkg4NjVVTWJjSHNBSWw0ZWQrRElWMFlGMVpMRDBReVN5WXl5V0FteWUxcmVHUjdhbkVudnpCN05GZE0wcm9DOApNNXBWL3FlTW1kcWY0UmJEN280NXBzRGlEcXJ1TStaQnhzOFJHRzh1RStxeE5hd05oNTlxS25xOEVDRVhjaWpOClNLR0VFTE1halNTdkg5ZFp3QlFaWXdLQmdRQ2NCaGlJOWJzRjJVWm04WU10RW0zSVhFLzhIbi92R1gxcmU4V1kKclM0WkhxYjEwYkw4cG8rM3k3U2FmSUkzbjNkTWdsZVdHWWJMZExPbnNDOWFmRXBEUGhBTmc2Z3R5VEhBbi92Uwp5WFMrVWpQYkZ4RUE3MThKUlVoZG5mU3g4bXBERjMySVVCUTJBV1FJT3hrcDFhSDVwZ1luK0pDcTRScFd4MzJZCm1xWUZLUUtCZ1FDYkVzdllsZmVXSkRpK0NCSCt6aGZrZldJWTlTaXl1SEVVUWE0aE5iYVMvRGtETWdxTjU4Q3UKOGdYR1NmdEVpVGNMYXQwYTBQNnZlYWNnUEt1aEFIZTFLN2g4NCtSMHJFL2N2MVFUQnBXMzhSUWdhYkxzK2V4eQpqeUY1UjFOSEkvTFhzREJOYWlSMDVzclhkaVNadW1MMGF3WDdyaUM0RHpJazZaWllSZGJuYlE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= | base64 --decode) > ${VX_ROOT}/data/vexor/vx-test-repo/key
25
27
  chmod 0600 ${VX_ROOT}/data/vexor/vx-test-repo/key
26
28
  export VX_PRIVATE_KEY=${VX_ROOT}/data/vexor/vx-test-repo/key
@@ -17,6 +17,8 @@ export PATH=$VX_ROOT/bin:$PATH
17
17
  mkdir -p $VX_ROOT/bin
18
18
  mkdir -p ${VX_ROOT}/data/vexor/vx-test-repo
19
19
  mkdir -p ${VX_ROOT}/code/vexor/vx-test-repo
20
+ (echo IyEvYmluL2Jhc2gKCmk9MApmaWxlcz0oKQoKQkxBQ0s9IlwwMzNbMzBtIgpSRUQ9IlwwMzNbMzFtIgpHUkVFTj0iXDAzM1szMm0iCllFTExPVz0iXDAzM1szM20iCkJMVUU9IlwwMzNbMzRtIgpQSU5LPSJcMDMzWzM1bSIKQ1lBTj0iXDAzM1szNm0iCldISVRFPSJcMDMzWzM3bSIKTk9STUFMPSJcMDMzWzA7MzltIgoKSk9CUz0ke0NJX1BBUkFMTEVMX0pPQlM6LTF9CkpPQl9OVU1CRVI9JHtDSV9QQVJBTExFTF9KT0JfTlVNQkVSOi0wfQoKZm9yIGZpbGUgaW4gJChmaW5kIC4vc3BlYyAtbmFtZSAiKl9zcGVjLnJiIiB8IHNvcnQpCmRvCiAgaWYgWyAkKCgkaSAlICRKT0JTKSkgLWVxICRKT0JfTlVNQkVSIF0KICB0aGVuCiAgICBmaWxlcys9IiAkZmlsZSIKICBmaQogICgoaSsrKSkKZG9uZQoKZWNobyAtZSAiJHtHUkVFTn1QYXJhbGxlbCBydW5uaW5nICQoKCR7Sk9CX05VTUJFUn0gKyAxKSkgb2YgJHtKT0JTfSAke05PUk1BTH0iCmVjaG8gImJ1bmRsZSBleGVjIHJzcGVjICRAICR7ZmlsZXNbQF19IgpleGVjIGJ1bmRsZSBleGVjIHJzcGVjICRAICR7ZmlsZXNbQF19Cg== | base64 --decode) > $(pwd)/bin/parallel_rspec
21
+ chmod 0750 $(pwd)/bin/parallel_rspec
20
22
  (echo LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBcE1rYW0rbWh3Q2RDUWRxdHU3VTlwNVZSRm1rcmJpOUhhQTN2YWdwaE12eXJ5V3F4CkM5c1krYW44akNOUlVwZWx5ako4ZjZiNi9WNWg0V2NubHdwT3ZWR0duczRIT2JuWWo4OUdLb0JGK1FwVDI4bXAKQ01pMGt6SE5TV01SWmcvZDl4M0FmMmNESWdKaGdHS2RLTGhPYitTSjJpUnpLQTZ5d215TlRyVUI0dEpocGdKLwpQQTFsR2xZWGtHYWQyS1JBZmc3bVRjdVFycUxKNHFpMlhkZ0FIY3RJU045d1VkYkUxeDVIRlB5enVrd0t1QkFFCmg3bTZWVnJKenNrS05yQnN1T1ZTWnVRNnJ2OVRpcVdYVnBBWGdyV3ZLenRsZjNTTkF0dG1BQmI1ZDJ1UE9hMisKcmVDV0V6SGJXT0ZnTVFEUXNYc1MzcnFDM2Z6dzRWTUtSUXdYSVFJREFRQUJBb0lCQURnWk9wVFBrY0JmM1IrYwpPYjhJY1lmbXZtYzV3STVQVENqeGJZc1ZJNGYvR3VDRUVPZnZXKzVLMzI0NTY4cUpVK2lsRFZ0TDFuQ0JQQ05IClFlUWFuem0yVW5VbndLLzNRL0daWjlLNlBwZ00yd1djL28yOS9qT0tKZEFSQ1BCTkFJekxOU2hxUWxmR3BialcKV1podVBrMjdhTzY1ci9aNElvVXIvV05KSGU1QWt2NUZNZnNlQVoremxBSEEzMlFxTmdnT2VpdDY1R2lvMmNJdQpZREtJNU5yMWlpU3EzSk1mRVp2bWMvNVFlZFU5VTdESWVOV3dqaThwR3pGa0Y4eGh1NkV5OWhwR1IyVTdnRXFSCitkeVNud2k4K3Fhc3BvZjhyZ3VHZVNVWlZtb1RHbWZZVUVuejFacEpWYVFpQUJrYVZYd0FEYWhodmU4dGQxVHIKN2gxYitRMENnWUVBMXZEcDdPa2xXeXZGaWVQWXU0cmxubWpWS052NmtiVVVMdE9peDl5S1diQXBZNmxqcFloUwp5aWdpcVY2amlWb3JDMUNsY1hQV3BXc0hvc2QrcDZEUmFhME1pcUQyV0pQU1huZENvbUdSc09yQ2VPN0RyTFdsClVDUkhsMU9sY1JIY3V4U3FWREgrQ0NxVytOQzRKeFVLYzIyT3pJK2thS1RydWozczlYa2VmSU1DZ1lFQXhFTjYKQjd4QU5ZOWNlYjFYb2V2M1o3QVdJaExQUThHUFozS1NTbXoxWmRwMTFNTm91eFJKQnpEUzRrNjRRdjJuNDRKUApVK2tiWFNqdm5DeUlUQ2pUZXZESXNLeEh0TzB3T0xFd0I1TENCenBKVEVzandHWmNUUDBBT3Y2ZHF3SndMUHBtCnlzaVRyTEZCSDVTZFZzVE10OFVKRnhaMzNzRFdIWnZTbzBwMjFJc0NnWUI2ODhyTWs3Mmp2cEU4UkpMcERSWTIKbkg4NjVVTWJjSHNBSWw0ZWQrRElWMFlGMVpMRDBReVN5WXl5V0FteWUxcmVHUjdhbkVudnpCN05GZE0wcm9DOApNNXBWL3FlTW1kcWY0UmJEN280NXBzRGlEcXJ1TStaQnhzOFJHRzh1RStxeE5hd05oNTlxS25xOEVDRVhjaWpOClNLR0VFTE1halNTdkg5ZFp3QlFaWXdLQmdRQ2NCaGlJOWJzRjJVWm04WU10RW0zSVhFLzhIbi92R1gxcmU4V1kKclM0WkhxYjEwYkw4cG8rM3k3U2FmSUkzbjNkTWdsZVdHWWJMZExPbnNDOWFmRXBEUGhBTmc2Z3R5VEhBbi92Uwp5WFMrVWpQYkZ4RUE3MThKUlVoZG5mU3g4bXBERjMySVVCUTJBV1FJT3hrcDFhSDVwZ1luK0pDcTRScFd4MzJZCm1xWUZLUUtCZ1FDYkVzdllsZmVXSkRpK0NCSCt6aGZrZldJWTlTaXl1SEVVUWE0aE5iYVMvRGtETWdxTjU4Q3UKOGdYR1NmdEVpVGNMYXQwYTBQNnZlYWNnUEt1aEFIZTFLN2g4NCtSMHJFL2N2MVFUQnBXMzhSUWdhYkxzK2V4eQpqeUY1UjFOSEkvTFhzREJOYWlSMDVzclhkaVNadW1MMGF3WDdyaUM0RHpJazZaWllSZGJuYlE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= | base64 --decode) > ${VX_ROOT}/data/vexor/vx-test-repo/key
21
23
  chmod 0600 ${VX_ROOT}/data/vexor/vx-test-repo/key
22
24
  export VX_PRIVATE_KEY=${VX_ROOT}/data/vexor/vx-test-repo/key
@@ -17,6 +17,8 @@ export PATH=$VX_ROOT/bin:$PATH
17
17
  mkdir -p $VX_ROOT/bin
18
18
  mkdir -p ${VX_ROOT}/data/vexor/vx-test-repo
19
19
  mkdir -p ${VX_ROOT}/code/vexor/vx-test-repo
20
+ (echo IyEvYmluL2Jhc2gKCmk9MApmaWxlcz0oKQoKQkxBQ0s9IlwwMzNbMzBtIgpSRUQ9IlwwMzNbMzFtIgpHUkVFTj0iXDAzM1szMm0iCllFTExPVz0iXDAzM1szM20iCkJMVUU9IlwwMzNbMzRtIgpQSU5LPSJcMDMzWzM1bSIKQ1lBTj0iXDAzM1szNm0iCldISVRFPSJcMDMzWzM3bSIKTk9STUFMPSJcMDMzWzA7MzltIgoKSk9CUz0ke0NJX1BBUkFMTEVMX0pPQlM6LTF9CkpPQl9OVU1CRVI9JHtDSV9QQVJBTExFTF9KT0JfTlVNQkVSOi0wfQoKZm9yIGZpbGUgaW4gJChmaW5kIC4vc3BlYyAtbmFtZSAiKl9zcGVjLnJiIiB8IHNvcnQpCmRvCiAgaWYgWyAkKCgkaSAlICRKT0JTKSkgLWVxICRKT0JfTlVNQkVSIF0KICB0aGVuCiAgICBmaWxlcys9IiAkZmlsZSIKICBmaQogICgoaSsrKSkKZG9uZQoKZWNobyAtZSAiJHtHUkVFTn1QYXJhbGxlbCBydW5uaW5nICQoKCR7Sk9CX05VTUJFUn0gKyAxKSkgb2YgJHtKT0JTfSAke05PUk1BTH0iCmVjaG8gImJ1bmRsZSBleGVjIHJzcGVjICRAICR7ZmlsZXNbQF19IgpleGVjIGJ1bmRsZSBleGVjIHJzcGVjICRAICR7ZmlsZXNbQF19Cg== | base64 --decode) > $(pwd)/bin/parallel_rspec
21
+ chmod 0750 $(pwd)/bin/parallel_rspec
20
22
  (echo LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBcE1rYW0rbWh3Q2RDUWRxdHU3VTlwNVZSRm1rcmJpOUhhQTN2YWdwaE12eXJ5V3F4CkM5c1krYW44akNOUlVwZWx5ako4ZjZiNi9WNWg0V2NubHdwT3ZWR0duczRIT2JuWWo4OUdLb0JGK1FwVDI4bXAKQ01pMGt6SE5TV01SWmcvZDl4M0FmMmNESWdKaGdHS2RLTGhPYitTSjJpUnpLQTZ5d215TlRyVUI0dEpocGdKLwpQQTFsR2xZWGtHYWQyS1JBZmc3bVRjdVFycUxKNHFpMlhkZ0FIY3RJU045d1VkYkUxeDVIRlB5enVrd0t1QkFFCmg3bTZWVnJKenNrS05yQnN1T1ZTWnVRNnJ2OVRpcVdYVnBBWGdyV3ZLenRsZjNTTkF0dG1BQmI1ZDJ1UE9hMisKcmVDV0V6SGJXT0ZnTVFEUXNYc1MzcnFDM2Z6dzRWTUtSUXdYSVFJREFRQUJBb0lCQURnWk9wVFBrY0JmM1IrYwpPYjhJY1lmbXZtYzV3STVQVENqeGJZc1ZJNGYvR3VDRUVPZnZXKzVLMzI0NTY4cUpVK2lsRFZ0TDFuQ0JQQ05IClFlUWFuem0yVW5VbndLLzNRL0daWjlLNlBwZ00yd1djL28yOS9qT0tKZEFSQ1BCTkFJekxOU2hxUWxmR3BialcKV1podVBrMjdhTzY1ci9aNElvVXIvV05KSGU1QWt2NUZNZnNlQVoremxBSEEzMlFxTmdnT2VpdDY1R2lvMmNJdQpZREtJNU5yMWlpU3EzSk1mRVp2bWMvNVFlZFU5VTdESWVOV3dqaThwR3pGa0Y4eGh1NkV5OWhwR1IyVTdnRXFSCitkeVNud2k4K3Fhc3BvZjhyZ3VHZVNVWlZtb1RHbWZZVUVuejFacEpWYVFpQUJrYVZYd0FEYWhodmU4dGQxVHIKN2gxYitRMENnWUVBMXZEcDdPa2xXeXZGaWVQWXU0cmxubWpWS052NmtiVVVMdE9peDl5S1diQXBZNmxqcFloUwp5aWdpcVY2amlWb3JDMUNsY1hQV3BXc0hvc2QrcDZEUmFhME1pcUQyV0pQU1huZENvbUdSc09yQ2VPN0RyTFdsClVDUkhsMU9sY1JIY3V4U3FWREgrQ0NxVytOQzRKeFVLYzIyT3pJK2thS1RydWozczlYa2VmSU1DZ1lFQXhFTjYKQjd4QU5ZOWNlYjFYb2V2M1o3QVdJaExQUThHUFozS1NTbXoxWmRwMTFNTm91eFJKQnpEUzRrNjRRdjJuNDRKUApVK2tiWFNqdm5DeUlUQ2pUZXZESXNLeEh0TzB3T0xFd0I1TENCenBKVEVzandHWmNUUDBBT3Y2ZHF3SndMUHBtCnlzaVRyTEZCSDVTZFZzVE10OFVKRnhaMzNzRFdIWnZTbzBwMjFJc0NnWUI2ODhyTWs3Mmp2cEU4UkpMcERSWTIKbkg4NjVVTWJjSHNBSWw0ZWQrRElWMFlGMVpMRDBReVN5WXl5V0FteWUxcmVHUjdhbkVudnpCN05GZE0wcm9DOApNNXBWL3FlTW1kcWY0UmJEN280NXBzRGlEcXJ1TStaQnhzOFJHRzh1RStxeE5hd05oNTlxS25xOEVDRVhjaWpOClNLR0VFTE1halNTdkg5ZFp3QlFaWXdLQmdRQ2NCaGlJOWJzRjJVWm04WU10RW0zSVhFLzhIbi92R1gxcmU4V1kKclM0WkhxYjEwYkw4cG8rM3k3U2FmSUkzbjNkTWdsZVdHWWJMZExPbnNDOWFmRXBEUGhBTmc2Z3R5VEhBbi92Uwp5WFMrVWpQYkZ4RUE3MThKUlVoZG5mU3g4bXBERjMySVVCUTJBV1FJT3hrcDFhSDVwZ1luK0pDcTRScFd4MzJZCm1xWUZLUUtCZ1FDYkVzdllsZmVXSkRpK0NCSCt6aGZrZldJWTlTaXl1SEVVUWE0aE5iYVMvRGtETWdxTjU4Q3UKOGdYR1NmdEVpVGNMYXQwYTBQNnZlYWNnUEt1aEFIZTFLN2g4NCtSMHJFL2N2MVFUQnBXMzhSUWdhYkxzK2V4eQpqeUY1UjFOSEkvTFhzREJOYWlSMDVzclhkaVNadW1MMGF3WDdyaUM0RHpJazZaWllSZGJuYlE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= | base64 --decode) > ${VX_ROOT}/data/vexor/vx-test-repo/key
21
23
  chmod 0600 ${VX_ROOT}/data/vexor/vx-test-repo/key
22
24
  export VX_PRIVATE_KEY=${VX_ROOT}/data/vexor/vx-test-repo/key
@@ -17,6 +17,8 @@ export PATH=$VX_ROOT/bin:$PATH
17
17
  mkdir -p $VX_ROOT/bin
18
18
  mkdir -p ${VX_ROOT}/data/vexor/vx-test-repo
19
19
  mkdir -p ${VX_ROOT}/code/vexor/vx-test-repo
20
+ (echo IyEvYmluL2Jhc2gKCmk9MApmaWxlcz0oKQoKQkxBQ0s9IlwwMzNbMzBtIgpSRUQ9IlwwMzNbMzFtIgpHUkVFTj0iXDAzM1szMm0iCllFTExPVz0iXDAzM1szM20iCkJMVUU9IlwwMzNbMzRtIgpQSU5LPSJcMDMzWzM1bSIKQ1lBTj0iXDAzM1szNm0iCldISVRFPSJcMDMzWzM3bSIKTk9STUFMPSJcMDMzWzA7MzltIgoKSk9CUz0ke0NJX1BBUkFMTEVMX0pPQlM6LTF9CkpPQl9OVU1CRVI9JHtDSV9QQVJBTExFTF9KT0JfTlVNQkVSOi0wfQoKZm9yIGZpbGUgaW4gJChmaW5kIC4vc3BlYyAtbmFtZSAiKl9zcGVjLnJiIiB8IHNvcnQpCmRvCiAgaWYgWyAkKCgkaSAlICRKT0JTKSkgLWVxICRKT0JfTlVNQkVSIF0KICB0aGVuCiAgICBmaWxlcys9IiAkZmlsZSIKICBmaQogICgoaSsrKSkKZG9uZQoKZWNobyAtZSAiJHtHUkVFTn1QYXJhbGxlbCBydW5uaW5nICQoKCR7Sk9CX05VTUJFUn0gKyAxKSkgb2YgJHtKT0JTfSAke05PUk1BTH0iCmVjaG8gImJ1bmRsZSBleGVjIHJzcGVjICRAICR7ZmlsZXNbQF19IgpleGVjIGJ1bmRsZSBleGVjIHJzcGVjICRAICR7ZmlsZXNbQF19Cg== | base64 --decode) > $(pwd)/bin/parallel_rspec
21
+ chmod 0750 $(pwd)/bin/parallel_rspec
20
22
  (echo LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBcE1rYW0rbWh3Q2RDUWRxdHU3VTlwNVZSRm1rcmJpOUhhQTN2YWdwaE12eXJ5V3F4CkM5c1krYW44akNOUlVwZWx5ako4ZjZiNi9WNWg0V2NubHdwT3ZWR0duczRIT2JuWWo4OUdLb0JGK1FwVDI4bXAKQ01pMGt6SE5TV01SWmcvZDl4M0FmMmNESWdKaGdHS2RLTGhPYitTSjJpUnpLQTZ5d215TlRyVUI0dEpocGdKLwpQQTFsR2xZWGtHYWQyS1JBZmc3bVRjdVFycUxKNHFpMlhkZ0FIY3RJU045d1VkYkUxeDVIRlB5enVrd0t1QkFFCmg3bTZWVnJKenNrS05yQnN1T1ZTWnVRNnJ2OVRpcVdYVnBBWGdyV3ZLenRsZjNTTkF0dG1BQmI1ZDJ1UE9hMisKcmVDV0V6SGJXT0ZnTVFEUXNYc1MzcnFDM2Z6dzRWTUtSUXdYSVFJREFRQUJBb0lCQURnWk9wVFBrY0JmM1IrYwpPYjhJY1lmbXZtYzV3STVQVENqeGJZc1ZJNGYvR3VDRUVPZnZXKzVLMzI0NTY4cUpVK2lsRFZ0TDFuQ0JQQ05IClFlUWFuem0yVW5VbndLLzNRL0daWjlLNlBwZ00yd1djL28yOS9qT0tKZEFSQ1BCTkFJekxOU2hxUWxmR3BialcKV1podVBrMjdhTzY1ci9aNElvVXIvV05KSGU1QWt2NUZNZnNlQVoremxBSEEzMlFxTmdnT2VpdDY1R2lvMmNJdQpZREtJNU5yMWlpU3EzSk1mRVp2bWMvNVFlZFU5VTdESWVOV3dqaThwR3pGa0Y4eGh1NkV5OWhwR1IyVTdnRXFSCitkeVNud2k4K3Fhc3BvZjhyZ3VHZVNVWlZtb1RHbWZZVUVuejFacEpWYVFpQUJrYVZYd0FEYWhodmU4dGQxVHIKN2gxYitRMENnWUVBMXZEcDdPa2xXeXZGaWVQWXU0cmxubWpWS052NmtiVVVMdE9peDl5S1diQXBZNmxqcFloUwp5aWdpcVY2amlWb3JDMUNsY1hQV3BXc0hvc2QrcDZEUmFhME1pcUQyV0pQU1huZENvbUdSc09yQ2VPN0RyTFdsClVDUkhsMU9sY1JIY3V4U3FWREgrQ0NxVytOQzRKeFVLYzIyT3pJK2thS1RydWozczlYa2VmSU1DZ1lFQXhFTjYKQjd4QU5ZOWNlYjFYb2V2M1o3QVdJaExQUThHUFozS1NTbXoxWmRwMTFNTm91eFJKQnpEUzRrNjRRdjJuNDRKUApVK2tiWFNqdm5DeUlUQ2pUZXZESXNLeEh0TzB3T0xFd0I1TENCenBKVEVzandHWmNUUDBBT3Y2ZHF3SndMUHBtCnlzaVRyTEZCSDVTZFZzVE10OFVKRnhaMzNzRFdIWnZTbzBwMjFJc0NnWUI2ODhyTWs3Mmp2cEU4UkpMcERSWTIKbkg4NjVVTWJjSHNBSWw0ZWQrRElWMFlGMVpMRDBReVN5WXl5V0FteWUxcmVHUjdhbkVudnpCN05GZE0wcm9DOApNNXBWL3FlTW1kcWY0UmJEN280NXBzRGlEcXJ1TStaQnhzOFJHRzh1RStxeE5hd05oNTlxS25xOEVDRVhjaWpOClNLR0VFTE1halNTdkg5ZFp3QlFaWXdLQmdRQ2NCaGlJOWJzRjJVWm04WU10RW0zSVhFLzhIbi92R1gxcmU4V1kKclM0WkhxYjEwYkw4cG8rM3k3U2FmSUkzbjNkTWdsZVdHWWJMZExPbnNDOWFmRXBEUGhBTmc2Z3R5VEhBbi92Uwp5WFMrVWpQYkZ4RUE3MThKUlVoZG5mU3g4bXBERjMySVVCUTJBV1FJT3hrcDFhSDVwZ1luK0pDcTRScFd4MzJZCm1xWUZLUUtCZ1FDYkVzdllsZmVXSkRpK0NCSCt6aGZrZldJWTlTaXl1SEVVUWE0aE5iYVMvRGtETWdxTjU4Q3UKOGdYR1NmdEVpVGNMYXQwYTBQNnZlYWNnUEt1aEFIZTFLN2g4NCtSMHJFL2N2MVFUQnBXMzhSUWdhYkxzK2V4eQpqeUY1UjFOSEkvTFhzREJOYWlSMDVzclhkaVNadW1MMGF3WDdyaUM0RHpJazZaWllSZGJuYlE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= | base64 --decode) > ${VX_ROOT}/data/vexor/vx-test-repo/key
21
23
  chmod 0600 ${VX_ROOT}/data/vexor/vx-test-repo/key
22
24
  export VX_PRIVATE_KEY=${VX_ROOT}/data/vexor/vx-test-repo/key
@@ -17,6 +17,8 @@ export PATH=$VX_ROOT/bin:$PATH
17
17
  mkdir -p $VX_ROOT/bin
18
18
  mkdir -p ${VX_ROOT}/data/vexor/vx-test-repo
19
19
  mkdir -p ${VX_ROOT}/code/vexor/vx-test-repo
20
+ (echo IyEvYmluL2Jhc2gKCmk9MApmaWxlcz0oKQoKQkxBQ0s9IlwwMzNbMzBtIgpSRUQ9IlwwMzNbMzFtIgpHUkVFTj0iXDAzM1szMm0iCllFTExPVz0iXDAzM1szM20iCkJMVUU9IlwwMzNbMzRtIgpQSU5LPSJcMDMzWzM1bSIKQ1lBTj0iXDAzM1szNm0iCldISVRFPSJcMDMzWzM3bSIKTk9STUFMPSJcMDMzWzA7MzltIgoKSk9CUz0ke0NJX1BBUkFMTEVMX0pPQlM6LTF9CkpPQl9OVU1CRVI9JHtDSV9QQVJBTExFTF9KT0JfTlVNQkVSOi0wfQoKZm9yIGZpbGUgaW4gJChmaW5kIC4vc3BlYyAtbmFtZSAiKl9zcGVjLnJiIiB8IHNvcnQpCmRvCiAgaWYgWyAkKCgkaSAlICRKT0JTKSkgLWVxICRKT0JfTlVNQkVSIF0KICB0aGVuCiAgICBmaWxlcys9IiAkZmlsZSIKICBmaQogICgoaSsrKSkKZG9uZQoKZWNobyAtZSAiJHtHUkVFTn1QYXJhbGxlbCBydW5uaW5nICQoKCR7Sk9CX05VTUJFUn0gKyAxKSkgb2YgJHtKT0JTfSAke05PUk1BTH0iCmVjaG8gImJ1bmRsZSBleGVjIHJzcGVjICRAICR7ZmlsZXNbQF19IgpleGVjIGJ1bmRsZSBleGVjIHJzcGVjICRAICR7ZmlsZXNbQF19Cg== | base64 --decode) > $(pwd)/bin/parallel_rspec
21
+ chmod 0750 $(pwd)/bin/parallel_rspec
20
22
  (echo LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBcE1rYW0rbWh3Q2RDUWRxdHU3VTlwNVZSRm1rcmJpOUhhQTN2YWdwaE12eXJ5V3F4CkM5c1krYW44akNOUlVwZWx5ako4ZjZiNi9WNWg0V2NubHdwT3ZWR0duczRIT2JuWWo4OUdLb0JGK1FwVDI4bXAKQ01pMGt6SE5TV01SWmcvZDl4M0FmMmNESWdKaGdHS2RLTGhPYitTSjJpUnpLQTZ5d215TlRyVUI0dEpocGdKLwpQQTFsR2xZWGtHYWQyS1JBZmc3bVRjdVFycUxKNHFpMlhkZ0FIY3RJU045d1VkYkUxeDVIRlB5enVrd0t1QkFFCmg3bTZWVnJKenNrS05yQnN1T1ZTWnVRNnJ2OVRpcVdYVnBBWGdyV3ZLenRsZjNTTkF0dG1BQmI1ZDJ1UE9hMisKcmVDV0V6SGJXT0ZnTVFEUXNYc1MzcnFDM2Z6dzRWTUtSUXdYSVFJREFRQUJBb0lCQURnWk9wVFBrY0JmM1IrYwpPYjhJY1lmbXZtYzV3STVQVENqeGJZc1ZJNGYvR3VDRUVPZnZXKzVLMzI0NTY4cUpVK2lsRFZ0TDFuQ0JQQ05IClFlUWFuem0yVW5VbndLLzNRL0daWjlLNlBwZ00yd1djL28yOS9qT0tKZEFSQ1BCTkFJekxOU2hxUWxmR3BialcKV1podVBrMjdhTzY1ci9aNElvVXIvV05KSGU1QWt2NUZNZnNlQVoremxBSEEzMlFxTmdnT2VpdDY1R2lvMmNJdQpZREtJNU5yMWlpU3EzSk1mRVp2bWMvNVFlZFU5VTdESWVOV3dqaThwR3pGa0Y4eGh1NkV5OWhwR1IyVTdnRXFSCitkeVNud2k4K3Fhc3BvZjhyZ3VHZVNVWlZtb1RHbWZZVUVuejFacEpWYVFpQUJrYVZYd0FEYWhodmU4dGQxVHIKN2gxYitRMENnWUVBMXZEcDdPa2xXeXZGaWVQWXU0cmxubWpWS052NmtiVVVMdE9peDl5S1diQXBZNmxqcFloUwp5aWdpcVY2amlWb3JDMUNsY1hQV3BXc0hvc2QrcDZEUmFhME1pcUQyV0pQU1huZENvbUdSc09yQ2VPN0RyTFdsClVDUkhsMU9sY1JIY3V4U3FWREgrQ0NxVytOQzRKeFVLYzIyT3pJK2thS1RydWozczlYa2VmSU1DZ1lFQXhFTjYKQjd4QU5ZOWNlYjFYb2V2M1o3QVdJaExQUThHUFozS1NTbXoxWmRwMTFNTm91eFJKQnpEUzRrNjRRdjJuNDRKUApVK2tiWFNqdm5DeUlUQ2pUZXZESXNLeEh0TzB3T0xFd0I1TENCenBKVEVzandHWmNUUDBBT3Y2ZHF3SndMUHBtCnlzaVRyTEZCSDVTZFZzVE10OFVKRnhaMzNzRFdIWnZTbzBwMjFJc0NnWUI2ODhyTWs3Mmp2cEU4UkpMcERSWTIKbkg4NjVVTWJjSHNBSWw0ZWQrRElWMFlGMVpMRDBReVN5WXl5V0FteWUxcmVHUjdhbkVudnpCN05GZE0wcm9DOApNNXBWL3FlTW1kcWY0UmJEN280NXBzRGlEcXJ1TStaQnhzOFJHRzh1RStxeE5hd05oNTlxS25xOEVDRVhjaWpOClNLR0VFTE1halNTdkg5ZFp3QlFaWXdLQmdRQ2NCaGlJOWJzRjJVWm04WU10RW0zSVhFLzhIbi92R1gxcmU4V1kKclM0WkhxYjEwYkw4cG8rM3k3U2FmSUkzbjNkTWdsZVdHWWJMZExPbnNDOWFmRXBEUGhBTmc2Z3R5VEhBbi92Uwp5WFMrVWpQYkZ4RUE3MThKUlVoZG5mU3g4bXBERjMySVVCUTJBV1FJT3hrcDFhSDVwZ1luK0pDcTRScFd4MzJZCm1xWUZLUUtCZ1FDYkVzdllsZmVXSkRpK0NCSCt6aGZrZldJWTlTaXl1SEVVUWE0aE5iYVMvRGtETWdxTjU4Q3UKOGdYR1NmdEVpVGNMYXQwYTBQNnZlYWNnUEt1aEFIZTFLN2g4NCtSMHJFL2N2MVFUQnBXMzhSUWdhYkxzK2V4eQpqeUY1UjFOSEkvTFhzREJOYWlSMDVzclhkaVNadW1MMGF3WDdyaUM0RHpJazZaWllSZGJuYlE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= | base64 --decode) > ${VX_ROOT}/data/vexor/vx-test-repo/key
21
23
  chmod 0600 ${VX_ROOT}/data/vexor/vx-test-repo/key
22
24
  export VX_PRIVATE_KEY=${VX_ROOT}/data/vexor/vx-test-repo/key
@@ -38,6 +38,8 @@ env:
38
38
  global: 'global'
39
39
  matrix: 'matrix'
40
40
 
41
+ parallel: 3
42
+
41
43
  cache:
42
44
  directories:
43
45
  - ~/.cache
@@ -14,6 +14,7 @@ describe "(integration) ruby" do
14
14
  after { FileUtils.rm_rf(path) }
15
15
 
16
16
  def write_script_to_filter(prefix, script)
17
+ =begin
17
18
  File.open(fixture_path("integration/ruby/#{prefix}before_script.sh"), 'w') do |io|
18
19
  io << script.to_before_script
19
20
  end
@@ -23,6 +24,7 @@ describe "(integration) ruby" do
23
24
  File.open(fixture_path("integration/ruby/#{prefix}script.sh"), 'w') do |io|
24
25
  io << script.to_script
25
26
  end
27
+ =end
26
28
  end
27
29
 
28
30
  def build(file, options = {})
@@ -113,4 +115,24 @@ describe "(integration) ruby" do
113
115
  end
114
116
  end
115
117
 
118
+ it "should succesfuly run lang/ruby with parallel_rspec", real: true do
119
+ file = {"language" => "ruby", "parallel" => 3, "script" => "parallel_rspec"}.to_yaml
120
+ task = create(
121
+ :task,
122
+ sha: "HEAD",
123
+ branch: "lang/ruby"
124
+ )
125
+
126
+ b = build(file, task: task)
127
+ Dir.chdir(path) do
128
+ File.open("script.sh", "w") do |io|
129
+ io.write "set -e\n"
130
+ io.write b.scripts[0].to_before_script
131
+ io.write b.scripts[0].to_script
132
+ end
133
+ system("env", "-", "USER=$USER", "HOME=#{path}", "bash", "script.sh" )
134
+ expect($?.to_i).to eq 0
135
+ end
136
+ end
137
+
116
138
  end
@@ -53,7 +53,9 @@ describe Vx::Builder::BuildConfiguration do
53
53
  "bundler_args" => ["--without development"],
54
54
  "before_deploy" => ["echo before deploy"],
55
55
  "after_deploy" => ["echo after deploy"],
56
- "matrix" => {"exclude"=>[{"rvm"=>2.1}]}
56
+ "matrix" => {"exclude"=>[{"rvm"=>2.1}]},
57
+ "parallel" => [3],
58
+ "parallel_job_number" => []
57
59
  }
58
60
  ) }
59
61
  end
@@ -59,6 +59,37 @@ describe Vx::Builder::MatrixBuilder do
59
59
  expect(configurations.map(&:env_matrix)).to eq [["B=backend"], ["B=frontend"], ["B=backend"]]
60
60
  end
61
61
 
62
+ it "should generate parallel jobs" do
63
+ yaml = YAML.load %{
64
+ env:
65
+ global:
66
+ - FOO=BAR
67
+ matrix:
68
+ - B=frontend
69
+ - B=backend
70
+ rvm:
71
+ - 2.0
72
+ - 2.1
73
+ parallel: 3
74
+ }
75
+ configurations = create_matrix(yaml)
76
+ expect(configurations).to have(4 * 3).items
77
+ parallel_attrs = [
78
+ [{"matrix"=>["B=backend"], "global"=>["FOO=BAR"]}, [2.0], 3, 0],
79
+ [{"matrix"=>["B=backend"], "global"=>["FOO=BAR"]}, [2.0], 3, 1],
80
+ [{"matrix"=>["B=backend"], "global"=>["FOO=BAR"]}, [2.0], 3, 2],
81
+ [{"matrix"=>["B=frontend"], "global"=>["FOO=BAR"]}, [2.0], 3, 0],
82
+ [{"matrix"=>["B=frontend"], "global"=>["FOO=BAR"]}, [2.0], 3, 1],
83
+ [{"matrix"=>["B=frontend"], "global"=>["FOO=BAR"]}, [2.0], 3, 2],
84
+ [{"matrix"=>["B=backend"], "global"=>["FOO=BAR"]}, [2.1], 3, 0],
85
+ [{"matrix"=>["B=backend"], "global"=>["FOO=BAR"]}, [2.1], 3, 1],
86
+ [{"matrix"=>["B=backend"], "global"=>["FOO=BAR"]}, [2.1], 3, 2],
87
+ [{"matrix"=>["B=frontend"], "global"=>["FOO=BAR"]}, [2.1], 3, 0],
88
+ [{"matrix"=>["B=frontend"], "global"=>["FOO=BAR"]}, [2.1], 3, 1],
89
+ [{"matrix"=>["B=frontend"], "global"=>["FOO=BAR"]}, [2.1], 3, 2]]
90
+ expect(configurations.map{|i| [i.env.attributes, i.rvm, i.parallel, i.parallel_job_number] }).to eq parallel_attrs
91
+ end
92
+
62
93
  it "should generate 12 configurations" do
63
94
  expect(create_matrix).to have(12).items
64
95
  end
@@ -26,7 +26,20 @@ describe Vx::Builder::ScriptBuilder do
26
26
  expect(simple_script.vexor.timeout).to be_nil
27
27
  expect(simple_script.vexor.read_timeout).to be_nil
28
28
  end
29
+ end
29
30
 
31
+ context "parallel" do
32
+ it "should create parallel jobs" do
33
+ matrix = Vx::Builder::MatrixBuilder.new(source)
34
+ configurations = matrix.build
35
+ configuration = configurations[1]
36
+ expect(configuration.parallel).to eq 3
37
+ expect(configuration.parallel_job_number).to eq 1
38
+ parallel_script = described_class.new task, configuration
39
+ content = parallel_script.to_before_script
40
+ expect(content).to match("CI_PARALLEL_JOBS\=3")
41
+ expect(content).to match("CI_PARALLEL_JOB_NUMBER\=1")
42
+ end
30
43
  end
31
44
 
32
45
  context "#to_before_script" do
data/spec/spec_helper.rb CHANGED
@@ -9,7 +9,9 @@ Dir[File.expand_path("../..", __FILE__) + "/spec/support/**/*.rb"].each {|f| req
9
9
  RSpec.configure do |config|
10
10
  config.mock_with :rr
11
11
 
12
- config.filter_run_excluding real: true
12
+ unless ENV['VX_BUILDER_REAL']
13
+ config.filter_run_excluding real: true
14
+ end
13
15
 
14
16
  config.before(:each) do
15
17
  Vx::Builder.reset_config!
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vx-builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.7
4
+ version: 0.5.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Galinsky
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-27 00:00:00.000000000 Z
11
+ date: 2014-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: vx-common
@@ -111,7 +111,8 @@ dependencies:
111
111
  description: ' Write a gem description'
112
112
  email:
113
113
  - dima.exe@gmail.com
114
- executables: []
114
+ executables:
115
+ - vx_parallel_rspec
115
116
  extensions: []
116
117
  extra_rdoc_files: []
117
118
  files:
@@ -122,6 +123,7 @@ files:
122
123
  - LICENSE.txt
123
124
  - README.md
124
125
  - Rakefile
126
+ - bin/vx_parallel_rspec
125
127
  - lib/vx/builder.rb
126
128
  - lib/vx/builder/build_configuration.rb
127
129
  - lib/vx/builder/build_configuration/cache.rb
@@ -147,6 +149,7 @@ files:
147
149
  - lib/vx/builder/script_builder/go.rb
148
150
  - lib/vx/builder/script_builder/java.rb
149
151
  - lib/vx/builder/script_builder/nodejs.rb
152
+ - lib/vx/builder/script_builder/parallel.rb
150
153
  - lib/vx/builder/script_builder/prepare.rb
151
154
  - lib/vx/builder/script_builder/ruby.rb
152
155
  - lib/vx/builder/script_builder/rust.rb