evrone-ci-router 0.2.0.pre6 → 0.2.0.pre7

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: 5b94c8376879d91b2de864073f24bc5d589bccfd
4
- data.tar.gz: 368d854de16ce106accf64c68fa0dc7e09095e39
3
+ metadata.gz: 0648af88fd7d60a34190b8b1cf1a3a7a36ecc057
4
+ data.tar.gz: b828184375819d2be53ebfd0f7562612447053ce
5
5
  SHA512:
6
- metadata.gz: ab083e25b26e0aedd1b4097ac21e670457ad7683eca48e70c61006f1c66da815e60b211bf5c96a6bed65c9ccda17ef54688d160a08d277464f364eda083fe41f
7
- data.tar.gz: 54f17cc8e86715801242e2f0a3f20d80a8ff1b63efd85e7f99966666e63dc220844d7a49ff1b6bc3d164a6ff986d7f4445808210a6373e4848765d8249015e47
6
+ metadata.gz: fb9ca8359cf42faa0325cf0fca81475286afcef9429c774e00ecde969a1665bb77dbbf68b57c2e268fbbc505c6028164fd65cd6e12cbd041ac4b6edc30ca327e
7
+ data.tar.gz: a34b90f5c682d12d5ae5034b9783faeaf428dbb9b8233c257a782a91185be77558e05fb4c9e5706ce8ea41bb28a6f6fd1d117377869437cf879ab6462526306f
data/Gemfile CHANGED
@@ -2,6 +2,7 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in evrone-ci-job.gemspec
4
4
  gemspec
5
+
5
6
  gem 'evrone-ci-common', path: File.expand_path("../../common", __FILE__)
6
7
  gem 'evrone-ci-message', path: File.expand_path("../../message", __FILE__)
7
8
 
@@ -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.1.1'
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"
@@ -6,9 +6,10 @@ module Evrone
6
6
  class Router
7
7
  class Build
8
8
 
9
- STARTED = 2
10
- FINISHED = 3
11
- FAILED = 5
9
+ INITIALIED = 0
10
+ STARTED = 2
11
+ FINISHED = 3
12
+ FAILED = 5
12
13
 
13
14
  include Router::Helper::Logger
14
15
  include Router::Helper::Config
@@ -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
- read_configuration v
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.generic'
12
+ queue 'ci.worker.builds'
12
13
  ack true
13
14
 
14
15
  model Message::PerformBuild
15
16
 
16
17
  def perform(message)
17
- build = Build.new message
18
- _ = Thread.current[:consumer_id] || 0
19
-
20
- Router.new(build).perform
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
 
@@ -0,0 +1,16 @@
1
+ require 'evrone/common/amqp'
2
+
3
+ module Evrone
4
+ module CI
5
+ class Router
6
+ class JobStatusConsumer
7
+
8
+ include Evrone::Common::AMQP::Consumer
9
+
10
+ exchange 'ci.jobs.status'
11
+
12
+ end
13
+ end
14
+ end
15
+ end
16
+
@@ -1,64 +1,3 @@
1
- require 'evrone/common/amqp'
1
+ require 'evrone/ci/common/amqp'
2
2
 
3
- module Evrone::CI::Router::AMQP
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 << trace_sh_command('export BUNDLE_GEMFILE=${PWD}/Gemfile')
16
- i << trace_sh_command('export GEM_HOME=$HOME/cached/rubygems')
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.last
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/^\*/ /' |
@@ -1,7 +1,7 @@
1
1
  module Evrone
2
2
  module CI
3
3
  class Router
4
- VERSION = "0.2.0.pre6"
4
+ VERSION = "0.2.0.pre7"
5
5
  end
6
6
  end
7
7
  end
@@ -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("BUILD #{build.message.id}") do
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
@@ -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.pre6
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-10-08 00:00:00.000000000 Z
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.pre6
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.pre6
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.pre6
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.pre6
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.1.1
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.1.1
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.0.2
201
+ rubygems_version: 2.1.9
201
202
  signing_key:
202
203
  specification_version: 4
203
204
  summary: ci router