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