vx-builder 0.0.28 → 0.0.29
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vx/builder/build_configuration/artifacts.rb +38 -0
- data/lib/vx/builder/build_configuration.rb +8 -5
- data/lib/vx/builder/script/artifacts.rb +111 -0
- data/lib/vx/builder/script/script.rb +1 -1
- data/lib/vx/builder/script.rb +7 -0
- data/lib/vx/builder/task.rb +9 -8
- data/lib/vx/builder/version.rb +1 -1
- data/spec/fixtures/travis.yml +4 -0
- data/spec/lib/builder/build_configuration_spec.rb +11 -1
- data/spec/lib/builder/script/artifacts_spec.rb +18 -0
- data/spec/support/create.rb +3 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f04d4731464414b121f1418f4fada916c797e3b
|
4
|
+
data.tar.gz: 1d7c01fe5104d38d215cfb806245943376d8d39a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 54df9e7aa3c473ae2564e07b4f8bf4acd6917d98c46bdd551bdbddda5c88b22bd2d5501891f66a0e8f916f84b2763336e85e6f0e862ff16594bdcaeb51c0bbb6
|
7
|
+
data.tar.gz: 527e9b0e283e7976ed50e04b7dede18412345711165f9bfbb9098624c823c282b31a507e3a5d68586e0693d816081152b440a8ae368afb283a2f1fcb268c2098
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Vx
|
2
|
+
module Builder
|
3
|
+
class BuildConfiguration
|
4
|
+
class Artifacts
|
5
|
+
|
6
|
+
attr_reader :attributes
|
7
|
+
|
8
|
+
def initialize(new_env)
|
9
|
+
normalize_attributes(new_env)
|
10
|
+
end
|
11
|
+
|
12
|
+
def artifacts
|
13
|
+
@attributes
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def normalize_attributes(new_env)
|
19
|
+
|
20
|
+
@attributes =
|
21
|
+
case new_env
|
22
|
+
when Array
|
23
|
+
new_env.map(&:to_s)
|
24
|
+
else
|
25
|
+
Array(new_env).map(&:to_s)
|
26
|
+
end
|
27
|
+
|
28
|
+
@attributes.map! do |attr|
|
29
|
+
attr.gsub(/^\.*(\/)/, '')
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
@@ -37,13 +37,15 @@ module Vx
|
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
|
-
attr_reader :env, :cache
|
40
|
+
attr_reader :env, :cache, :artifacts
|
41
41
|
|
42
42
|
def initialize(new_attributes = {}, matrix_attributes = {})
|
43
43
|
new_attributes = {} unless new_attributes.is_a?(Hash)
|
44
44
|
|
45
|
-
@env
|
46
|
-
@cache
|
45
|
+
@env = Env.new(new_attributes["env"])
|
46
|
+
@cache = Cache.new(new_attributes["cache"])
|
47
|
+
@artifacts = Artifacts.new(new_attributes["artifacts"])
|
48
|
+
|
47
49
|
@matrix_attributes = matrix_attributes
|
48
50
|
|
49
51
|
build_attributes new_attributes
|
@@ -68,8 +70,9 @@ module Vx
|
|
68
70
|
end
|
69
71
|
|
70
72
|
def to_hash
|
71
|
-
attributes.merge("env"
|
72
|
-
.merge("cache"
|
73
|
+
attributes.merge("env" => env.attributes)
|
74
|
+
.merge("cache" => cache.attributes)
|
75
|
+
.merge("artifacts" => artifacts.attributes)
|
73
76
|
end
|
74
77
|
|
75
78
|
def to_yaml
|
@@ -0,0 +1,111 @@
|
|
1
|
+
module Vx
|
2
|
+
module Builder
|
3
|
+
class Script
|
4
|
+
|
5
|
+
Artifacts = Struct.new(:app) do
|
6
|
+
|
7
|
+
include Helper::TraceShCommand
|
8
|
+
|
9
|
+
FIND='find . -type f -path "./%s" | sed "s/^\.\///g"'
|
10
|
+
|
11
|
+
def call(env)
|
12
|
+
rs = app.call env
|
13
|
+
|
14
|
+
if enabled?(env)
|
15
|
+
env.after_success << "echo"
|
16
|
+
env.source.artifacts.attributes.map{|a| compile(a) }.each do |artifact|
|
17
|
+
find = FIND % artifact
|
18
|
+
prefix = env.task.artifacts_url_prefix
|
19
|
+
cmd = %{
|
20
|
+
for i in $(#{find}) ; do
|
21
|
+
echo "upload artifact $i"
|
22
|
+
curl -s -S -X PUT -T $i #{prefix}/$i > /dev/null
|
23
|
+
done
|
24
|
+
}
|
25
|
+
env.after_success << cmd
|
26
|
+
end
|
27
|
+
env.after_success << "echo"
|
28
|
+
end
|
29
|
+
|
30
|
+
rs
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def compile(artifact)
|
36
|
+
case
|
37
|
+
when artifact.end_with?("/")
|
38
|
+
"#{artifact}*"
|
39
|
+
else
|
40
|
+
artifact
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def enabled?(env)
|
45
|
+
!env.source.artifacts.attributes.empty? &&
|
46
|
+
env.task.artifacts_url_prefix
|
47
|
+
end
|
48
|
+
|
49
|
+
def casher_cmd
|
50
|
+
"test -f #{CASHER_BIN} && #{config.casher_ruby} #{CASHER_BIN}"
|
51
|
+
end
|
52
|
+
|
53
|
+
def assign_url_to_env(env)
|
54
|
+
urls = []
|
55
|
+
branch = env.task.branch
|
56
|
+
if branch != 'master'
|
57
|
+
urls << url_for(env, branch)
|
58
|
+
end
|
59
|
+
urls << url_for(env, 'master')
|
60
|
+
|
61
|
+
env.cache_fetch_url = urls
|
62
|
+
env.cache_push_url = url_for(env, branch)
|
63
|
+
env
|
64
|
+
end
|
65
|
+
|
66
|
+
def url_for(env, branch)
|
67
|
+
name = branch
|
68
|
+
|
69
|
+
key =
|
70
|
+
if env.cache_key.empty?
|
71
|
+
"cache"
|
72
|
+
else
|
73
|
+
env.cache_key.join("-").downcase.gsub(/[^a-z0-9_\-.]/, '-')
|
74
|
+
end
|
75
|
+
|
76
|
+
"#{env.task.cache_url_prefix}/#{name}/#{key}.tgz"
|
77
|
+
end
|
78
|
+
|
79
|
+
def prepare(env)
|
80
|
+
cmd = %{
|
81
|
+
export CASHER_DIR=$HOME/.casher &&
|
82
|
+
( mkdir -p $CASHER_DIR/bin &&
|
83
|
+
/usr/bin/curl #{CASHER_URL} -s -o #{CASHER_BIN} &&
|
84
|
+
chmod +x #{CASHER_BIN} ) ||
|
85
|
+
true
|
86
|
+
}.gsub(/\n/, ' ').gsub(/ +/, ' ')
|
87
|
+
env.init << cmd
|
88
|
+
end
|
89
|
+
|
90
|
+
def fetch(env)
|
91
|
+
urls = env.cache_fetch_url.join(" ")
|
92
|
+
env.init << "#{casher_cmd} fetch #{urls} || true"
|
93
|
+
end
|
94
|
+
|
95
|
+
def add(env)
|
96
|
+
env.cached_directories.each do |d|
|
97
|
+
env.init << "#{casher_cmd} add #{d} || true"
|
98
|
+
end
|
99
|
+
env.init << "unset CASHER_DIR"
|
100
|
+
end
|
101
|
+
|
102
|
+
def push(env)
|
103
|
+
if env.cache_push_url
|
104
|
+
env.after_script << "#{casher_cmd} push #{env.cache_push_url}"
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
data/lib/vx/builder/script.rb
CHANGED
@@ -14,11 +14,13 @@ module Vx
|
|
14
14
|
autoload :Databases, File.expand_path("../script/databases", __FILE__)
|
15
15
|
autoload :Cache, File.expand_path("../script/cache", __FILE__)
|
16
16
|
autoload :Services, File.expand_path("../script/services", __FILE__)
|
17
|
+
autoload :Artifacts, File.expand_path("../script/artifacts", __FILE__)
|
17
18
|
|
18
19
|
include Common::Helper::Middlewares
|
19
20
|
|
20
21
|
middlewares do
|
21
22
|
use Builder::Script::Cache
|
23
|
+
use Builder::Script::Artifacts
|
22
24
|
use Builder::Script::Env
|
23
25
|
use Builder::Script::Services
|
24
26
|
use Builder::Script::Prepare
|
@@ -70,6 +72,10 @@ module Vx
|
|
70
72
|
a = []
|
71
73
|
a << "\n# script"
|
72
74
|
a += env.script
|
75
|
+
|
76
|
+
a << "\n# after success"
|
77
|
+
a += env.after_success
|
78
|
+
|
73
79
|
a.join("\n")
|
74
80
|
end
|
75
81
|
|
@@ -95,6 +101,7 @@ module Vx
|
|
95
101
|
|
96
102
|
before_script: [],
|
97
103
|
script: [],
|
104
|
+
after_success: [],
|
98
105
|
after_script: [],
|
99
106
|
|
100
107
|
source: source,
|
data/lib/vx/builder/task.rb
CHANGED
@@ -3,16 +3,17 @@ module Vx
|
|
3
3
|
class Task
|
4
4
|
|
5
5
|
attr_reader :name, :src, :sha, :deploy_key, :branch, :pull_request_id,
|
6
|
-
:cache_url_prefix
|
6
|
+
:cache_url_prefix, :artifacts_url_prefix
|
7
7
|
|
8
8
|
def initialize(name, src, sha, options = {})
|
9
|
-
@name
|
10
|
-
@src
|
11
|
-
@sha
|
12
|
-
@deploy_key
|
13
|
-
@branch
|
14
|
-
@pull_request_id
|
15
|
-
@cache_url_prefix
|
9
|
+
@name = name
|
10
|
+
@src = src
|
11
|
+
@sha = sha
|
12
|
+
@deploy_key = options[:deploy_key]
|
13
|
+
@branch = options[:branch]
|
14
|
+
@pull_request_id = options[:pull_request_id]
|
15
|
+
@cache_url_prefix = options[:cache_url_prefix]
|
16
|
+
@artifacts_url_prefix = options[:artifacts_url_prefix]
|
16
17
|
|
17
18
|
validate!
|
18
19
|
end
|
data/lib/vx/builder/version.rb
CHANGED
data/spec/fixtures/travis.yml
CHANGED
@@ -42,7 +42,8 @@ describe Vx::Builder::BuildConfiguration do
|
|
42
42
|
"rvm" => ["2.0.0"],
|
43
43
|
"scala" => ['2.10.3'],
|
44
44
|
"script" => ["RAILS_ENV=test ls -1 && echo DONE!"],
|
45
|
-
"services" => ['rabbitmq']
|
45
|
+
"services" => ['rabbitmq'],
|
46
|
+
"artifacts" => ["app/foo.txt", "app/*.txt", "app/"]
|
46
47
|
}
|
47
48
|
) }
|
48
49
|
end
|
@@ -96,4 +97,13 @@ describe Vx::Builder::BuildConfiguration do
|
|
96
97
|
end
|
97
98
|
end
|
98
99
|
|
100
|
+
context "artifacts" do
|
101
|
+
subject { config.artifacts }
|
102
|
+
|
103
|
+
context "when is empty" do
|
104
|
+
let(:content) { {} }
|
105
|
+
its(:attributes) { should eq [] }
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
99
109
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Vx::Builder::Script::Artifacts do
|
4
|
+
let(:app) { ->(env) { 0 } }
|
5
|
+
let(:script) { described_class.new app }
|
6
|
+
let(:task) { }
|
7
|
+
let(:env) { create :env }
|
8
|
+
let(:run) { script.call env }
|
9
|
+
subject { run }
|
10
|
+
|
11
|
+
it { should eq 0 }
|
12
|
+
|
13
|
+
it "should create upload script" do
|
14
|
+
subject
|
15
|
+
expect(env.after_success).to_not be_empty
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
data/spec/support/create.rb
CHANGED
@@ -13,7 +13,8 @@ def create(name, options = {})
|
|
13
13
|
msg.sha,
|
14
14
|
deploy_key: msg.deploy_key,
|
15
15
|
branch: msg.branch,
|
16
|
-
cache_url_prefix: "http://example.com/"
|
16
|
+
cache_url_prefix: "http://example.com/",
|
17
|
+
artifacts_url_prefix: "http://example.com/"
|
17
18
|
)
|
18
19
|
|
19
20
|
when :source
|
@@ -30,6 +31,7 @@ def create(name, options = {})
|
|
30
31
|
script: [],
|
31
32
|
after_script: [],
|
32
33
|
source: options[:source] || create(:source),
|
34
|
+
after_success: [],
|
33
35
|
task: create(:task),
|
34
36
|
cache_key: [],
|
35
37
|
cached_directories: []
|
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.0.
|
4
|
+
version: 0.0.29
|
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-02-
|
11
|
+
date: 2014-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: vx-common
|
@@ -124,6 +124,7 @@ files:
|
|
124
124
|
- Rakefile
|
125
125
|
- lib/vx/builder.rb
|
126
126
|
- lib/vx/builder/build_configuration.rb
|
127
|
+
- lib/vx/builder/build_configuration/artifacts.rb
|
127
128
|
- lib/vx/builder/build_configuration/cache.rb
|
128
129
|
- lib/vx/builder/build_configuration/env.rb
|
129
130
|
- lib/vx/builder/configuration.rb
|
@@ -131,6 +132,7 @@ files:
|
|
131
132
|
- lib/vx/builder/helper/trace_sh_command.rb
|
132
133
|
- lib/vx/builder/matrix.rb
|
133
134
|
- lib/vx/builder/script.rb
|
135
|
+
- lib/vx/builder/script/artifacts.rb
|
134
136
|
- lib/vx/builder/script/cache.rb
|
135
137
|
- lib/vx/builder/script/clojure.rb
|
136
138
|
- lib/vx/builder/script/env.rb
|
@@ -150,6 +152,7 @@ files:
|
|
150
152
|
- spec/lib/builder/build_configuration_spec.rb
|
151
153
|
- spec/lib/builder/configuration_spec.rb
|
152
154
|
- spec/lib/builder/matrix_spec.rb
|
155
|
+
- spec/lib/builder/script/artifacts_spec.rb
|
153
156
|
- spec/lib/builder/script/cache_spec.rb
|
154
157
|
- spec/lib/builder/script/clojure_spec.rb
|
155
158
|
- spec/lib/builder/script/env_spec.rb
|
@@ -197,6 +200,7 @@ test_files:
|
|
197
200
|
- spec/lib/builder/build_configuration_spec.rb
|
198
201
|
- spec/lib/builder/configuration_spec.rb
|
199
202
|
- spec/lib/builder/matrix_spec.rb
|
203
|
+
- spec/lib/builder/script/artifacts_spec.rb
|
200
204
|
- spec/lib/builder/script/cache_spec.rb
|
201
205
|
- spec/lib/builder/script/clojure_spec.rb
|
202
206
|
- spec/lib/builder/script/env_spec.rb
|