vx-builder 0.5.7 → 0.5.8

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 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