evrone-ci-router 0.2.0.pre6 → 0.2.0.pre7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/evrone-ci-router.gemspec +1 -1
- data/lib/evrone/ci/router/build.rb +4 -3
- data/lib/evrone/ci/router/cli.rb +6 -13
- data/lib/evrone/ci/router/consumers/builds_consumer.rb +6 -5
- data/lib/evrone/ci/router/consumers/job_status_consumer.rb +16 -0
- data/lib/evrone/ci/router/initializers/amqp.rb +2 -63
- data/lib/evrone/ci/router/script_builder/ruby.rb +16 -3
- data/lib/evrone/ci/router/version.rb +1 -1
- data/lib/evrone/ci/router.rb +19 -1
- data/spec/lib/router_spec.rb +10 -0
- metadata +10 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0648af88fd7d60a34190b8b1cf1a3a7a36ecc057
|
4
|
+
data.tar.gz: b828184375819d2be53ebfd0f7562612447053ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb9ca8359cf42faa0325cf0fca81475286afcef9429c774e00ecde969a1665bb77dbbf68b57c2e268fbbc505c6028164fd65cd6e12cbd041ac4b6edc30ca327e
|
7
|
+
data.tar.gz: a34b90f5c682d12d5ae5034b9783faeaf428dbb9b8233c257a782a91185be77558e05fb4c9e5706ce8ea41bb28a6f6fd1d117377869437cf879ab6462526306f
|
data/Gemfile
CHANGED
data/evrone-ci-router.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_runtime_dependency 'evrone-ci-common', "= #{Evrone::CI::Router::VERSION}"
|
22
22
|
spec.add_runtime_dependency 'evrone-ci-message', "= #{Evrone::CI::Router::VERSION}"
|
23
|
-
spec.add_runtime_dependency 'evrone-common-amqp', '~> 0.
|
23
|
+
spec.add_runtime_dependency 'evrone-common-amqp', '~> 0.2.4'
|
24
24
|
spec.add_runtime_dependency 'hashr', '= 0.0.22'
|
25
25
|
|
26
26
|
spec.add_development_dependency "bundler", "~> 1.3"
|
data/lib/evrone/ci/router/cli.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'optparse'
|
2
2
|
require 'evrone/common/amqp'
|
3
|
+
require 'evrone/ci/common/env_file'
|
3
4
|
|
4
5
|
module Evrone
|
5
6
|
module CI
|
@@ -8,6 +9,7 @@ module Evrone
|
|
8
9
|
|
9
10
|
include Helper::Config
|
10
11
|
include Helper::Logger
|
12
|
+
include Common::EnvFile
|
11
13
|
|
12
14
|
def initialize
|
13
15
|
@options = {}
|
@@ -35,27 +37,18 @@ module Evrone
|
|
35
37
|
opts.on("-w", "--workers NUM", "Number of workers, default 1") do |v|
|
36
38
|
@options[:workers] = v.to_i
|
37
39
|
end
|
38
|
-
opts.on("-c", "--config FILE", "Path to configuration file") do |v|
|
39
|
-
|
40
|
+
opts.on("-c", "--config FILE", "Path to configuration file, default /etc/evrone/ci") do |v|
|
41
|
+
@options[:config] = v
|
40
42
|
end
|
41
43
|
end.parse!
|
42
44
|
|
45
|
+
read_env_file @options.delete(:config)
|
46
|
+
|
43
47
|
@options.each_pair do |k,v|
|
44
48
|
config.public_send("#{k}=", v)
|
45
49
|
end
|
46
50
|
end
|
47
51
|
|
48
|
-
def read_configuration(file)
|
49
|
-
file = File.expand_path(file)
|
50
|
-
buf = File.read(file)
|
51
|
-
|
52
|
-
buf.split("\n").each do |line|
|
53
|
-
puts line
|
54
|
-
env, value = line.split("=").map(&:strip)
|
55
|
-
ENV[env] = value
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
52
|
end
|
60
53
|
end
|
61
54
|
end
|
@@ -6,18 +6,19 @@ module Evrone
|
|
6
6
|
class BuildsConsumer
|
7
7
|
|
8
8
|
include Evrone::Common::AMQP::Consumer
|
9
|
+
include Helper::Logger
|
9
10
|
|
10
11
|
exchange 'ci.builds'
|
11
|
-
queue 'ci.worker.builds
|
12
|
+
queue 'ci.worker.builds'
|
12
13
|
ack true
|
13
14
|
|
14
15
|
model Message::PerformBuild
|
15
16
|
|
16
17
|
def perform(message)
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
logger.tagged self.class.consumer_id do
|
19
|
+
build = Build.new message
|
20
|
+
Router.new(build).perform
|
21
|
+
end
|
21
22
|
ack!
|
22
23
|
end
|
23
24
|
|
@@ -1,64 +1,3 @@
|
|
1
|
-
require 'evrone/common/amqp'
|
1
|
+
require 'evrone/ci/common/amqp'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
Base = Struct.new("Subscribing", :app) do
|
6
|
-
include Evrone::CI::Router::Helper::Logger
|
7
|
-
|
8
|
-
def consumer_name
|
9
|
-
Thread.current[:consumer_name]
|
10
|
-
end
|
11
|
-
|
12
|
-
def consumer_id
|
13
|
-
Thread.current[:consumer_id]
|
14
|
-
end
|
15
|
-
|
16
|
-
def consumer_tag
|
17
|
-
consumer_id ? "#{consumer_name.split('::').last} #{consumer_id}" : consumer_name
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
class Subscribing < Base
|
22
|
-
def call(env)
|
23
|
-
logger.tagged(consumer_tag) do
|
24
|
-
logger.warn "subsribing #{env[:exchange].name}"
|
25
|
-
rs = app.call env
|
26
|
-
logger.warn "shutdown"
|
27
|
-
rs
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
class Recieving < Base
|
33
|
-
def call(env)
|
34
|
-
logger.warn "payload recieved #{env[:payload].inspect[0...60]}..."
|
35
|
-
rs = app.call env
|
36
|
-
logger.warn "commit message"
|
37
|
-
rs
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
class Publishing < Base
|
42
|
-
def call(env)
|
43
|
-
app.call env
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
Evrone::Common::AMQP.configure do |c|
|
49
|
-
c.subscribing do
|
50
|
-
use Evrone::CI::Router::AMQP::Subscribing
|
51
|
-
end
|
52
|
-
|
53
|
-
c.recieving do
|
54
|
-
use Evrone::CI::Router::AMQP::Recieving
|
55
|
-
end
|
56
|
-
|
57
|
-
c.publishing do
|
58
|
-
use Evrone::CI::Router::AMQP::Publishing
|
59
|
-
end
|
60
|
-
|
61
|
-
c.content_type = 'application/x-protobuf'
|
62
|
-
c.logger = nil
|
63
|
-
c.url = Evrone::CI::Router.config.amqp_url
|
64
|
-
end
|
3
|
+
Evrone::CI::Common::AMQP.setup(Evrone::CI::Router.logger, url: Evrone::CI::Router.config.amqp_url)
|
@@ -5,6 +5,10 @@ module Evrone
|
|
5
5
|
|
6
6
|
Ruby = Struct.new(:app) do
|
7
7
|
|
8
|
+
ALIASES = {
|
9
|
+
'1.8.7' => "system"
|
10
|
+
}
|
11
|
+
|
8
12
|
include Helper::TraceShCommand
|
9
13
|
|
10
14
|
def call(env)
|
@@ -12,8 +16,8 @@ module Evrone
|
|
12
16
|
env.before_install.tap do |i|
|
13
17
|
i << 'eval "$(rbenv init -)" || true'
|
14
18
|
i << "rbenv shell #{make_rbenv_version_command env}"
|
15
|
-
i <<
|
16
|
-
i <<
|
19
|
+
i << 'export BUNDLE_GEMFILE=${PWD}/Gemfile'
|
20
|
+
i << 'export GEM_HOME=$HOME/cached/rubygems'
|
17
21
|
end
|
18
22
|
|
19
23
|
env.announce.tap do |a|
|
@@ -34,10 +38,19 @@ module Evrone
|
|
34
38
|
private
|
35
39
|
|
36
40
|
def rvm(env)
|
37
|
-
env.travis.rvm.
|
41
|
+
env.travis.rvm.first
|
38
42
|
end
|
39
43
|
|
40
44
|
def make_rbenv_version_command(env)
|
45
|
+
select_rbenv_version_by_aliases(env) ||
|
46
|
+
select_rbenv_version(env)
|
47
|
+
end
|
48
|
+
|
49
|
+
def select_rbenv_version_by_aliases(env)
|
50
|
+
ALIASES[rvm(env)]
|
51
|
+
end
|
52
|
+
|
53
|
+
def select_rbenv_version(env)
|
41
54
|
%{
|
42
55
|
$(rbenv versions |
|
43
56
|
sed -e 's/^\*/ /' |
|
data/lib/evrone/ci/router.rb
CHANGED
@@ -6,6 +6,8 @@ require 'thread'
|
|
6
6
|
require 'bundler'
|
7
7
|
Bundler.require :default
|
8
8
|
|
9
|
+
require 'evrone/ci/common/error_notifier'
|
10
|
+
|
9
11
|
require File.expand_path("../..", __FILE__) + "/ci/router/ext/string.rb"
|
10
12
|
require File.expand_path("../..", __FILE__) + "/ci/router/ext/array.rb"
|
11
13
|
|
@@ -24,6 +26,7 @@ module Evrone
|
|
24
26
|
autoload :BuildStatusConsumer, File.expand_path("../router/consumers/build_status_consumer", __FILE__)
|
25
27
|
autoload :BuildsConsumer, File.expand_path("../router/consumers/builds_consumer", __FILE__)
|
26
28
|
autoload :JobsConsumer, File.expand_path("../router/consumers/jobs_consumer", __FILE__)
|
29
|
+
autoload :JobStatusConsumer, File.expand_path("../router/consumers/job_status_consumer", __FILE__)
|
27
30
|
|
28
31
|
module Helper
|
29
32
|
autoload :Config, File.expand_path("../router/helper/config", __FILE__)
|
@@ -96,6 +99,8 @@ module Evrone
|
|
96
99
|
message = build.to_perform_job_message travis, number
|
97
100
|
logger.info "delivery job #{message.id}.#{number} #{travis.to_matrix_s}"
|
98
101
|
JobsConsumer.publish message
|
102
|
+
|
103
|
+
publish_job_status_message build, travis, number
|
99
104
|
end
|
100
105
|
|
101
106
|
true
|
@@ -107,7 +112,7 @@ module Evrone
|
|
107
112
|
end
|
108
113
|
|
109
114
|
def log_build
|
110
|
-
logger.tagged("
|
115
|
+
logger.tagged("build #{build.message.id}") do
|
111
116
|
logger.info "starting build"
|
112
117
|
rs = yield
|
113
118
|
logger.info "done build"
|
@@ -122,6 +127,7 @@ module Evrone
|
|
122
127
|
rs = yield
|
123
128
|
rescue Exception => e
|
124
129
|
logger.error("ERROR: #{e.inspect}\n BACKTRACE:\n#{e.backtrace.map{|i| " #{i}" }.join("\n")}")
|
130
|
+
Common::ErrorNotifier.notify(e)
|
125
131
|
end
|
126
132
|
|
127
133
|
if rs
|
@@ -140,6 +146,18 @@ module Evrone
|
|
140
146
|
BuildStatusConsumer.publish message
|
141
147
|
end
|
142
148
|
|
149
|
+
def publish_job_status_message(build, travis, job_number)
|
150
|
+
message = Message::JobStatus.new(
|
151
|
+
build_id: build.message.id,
|
152
|
+
job_id: job_number,
|
153
|
+
status: Build::INITIALIED,
|
154
|
+
tm: Time.now.to_i,
|
155
|
+
matrix: travis.matrix_keys
|
156
|
+
)
|
157
|
+
logger.info "delivery job status #{message.inspect}"
|
158
|
+
JobStatusConsumer.publish message
|
159
|
+
end
|
160
|
+
|
143
161
|
end
|
144
162
|
end
|
145
163
|
end
|
data/spec/lib/router_spec.rb
CHANGED
@@ -65,6 +65,16 @@ describe Evrone::CI::Router do
|
|
65
65
|
expect(messages).to have(1).item
|
66
66
|
expect(message.job_id).to eq 1
|
67
67
|
end
|
68
|
+
|
69
|
+
it "should publish job_status message with status = INITIALIZED" do
|
70
|
+
expect {
|
71
|
+
subject
|
72
|
+
}.to change(Evrone::CI::Router::JobStatusConsumer.messages, :count).by(1)
|
73
|
+
message = Evrone::CI::Router::JobStatusConsumer.messages.last
|
74
|
+
expect(message.build_id).to eq build.message.id
|
75
|
+
expect(message.job_id).to eq 1
|
76
|
+
expect(message.status).to eq 0
|
77
|
+
end
|
68
78
|
end
|
69
79
|
|
70
80
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: evrone-ci-router
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.0.
|
4
|
+
version: 0.2.0.pre7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitry Galinsky
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: evrone-ci-common
|
@@ -16,42 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.2.0.
|
19
|
+
version: 0.2.0.pre7
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.2.0.
|
26
|
+
version: 0.2.0.pre7
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: evrone-ci-message
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.2.0.
|
33
|
+
version: 0.2.0.pre7
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.2.0.
|
40
|
+
version: 0.2.0.pre7
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: evrone-common-amqp
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ~>
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.2.4
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: 0.2.4
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: hashr
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -147,6 +147,7 @@ files:
|
|
147
147
|
- lib/evrone/ci/router/consumers/build_logs_consumer.rb
|
148
148
|
- lib/evrone/ci/router/consumers/build_status_consumer.rb
|
149
149
|
- lib/evrone/ci/router/consumers/builds_consumer.rb
|
150
|
+
- lib/evrone/ci/router/consumers/job_status_consumer.rb
|
150
151
|
- lib/evrone/ci/router/consumers/jobs_consumer.rb
|
151
152
|
- lib/evrone/ci/router/ext/array.rb
|
152
153
|
- lib/evrone/ci/router/ext/string.rb
|
@@ -197,7 +198,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
197
198
|
version: 1.3.1
|
198
199
|
requirements: []
|
199
200
|
rubyforge_project:
|
200
|
-
rubygems_version: 2.
|
201
|
+
rubygems_version: 2.1.9
|
201
202
|
signing_key:
|
202
203
|
specification_version: 4
|
203
204
|
summary: ci router
|