evrone-ci-router 0.2.0.pre0 → 0.2.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/bin/evrone-ci-router +5 -0
  3. data/fixtures/jobs_publisher +13 -0
  4. data/lib/evrone/ci/router.rb +112 -37
  5. data/lib/evrone/ci/router/build.rb +29 -3
  6. data/lib/evrone/ci/router/build_matrix.rb +7 -1
  7. data/lib/evrone/ci/router/cli.rb +67 -0
  8. data/lib/evrone/ci/router/configuration.rb +7 -1
  9. data/lib/evrone/ci/router/consumers/builds_consumer.rb +1 -1
  10. data/lib/evrone/ci/router/initializers/amqp.rb +2 -1
  11. data/lib/evrone/ci/router/{queue.rb → script_builder.rb} +10 -6
  12. data/lib/evrone/ci/router/{middleware/travis → script_builder}/env.rb +1 -1
  13. data/lib/evrone/ci/router/{middleware/travis → script_builder}/ruby.rb +1 -1
  14. data/lib/evrone/ci/router/{middleware/travis → script_builder}/script.rb +1 -1
  15. data/lib/evrone/ci/router/travis.rb +2 -2
  16. data/lib/evrone/ci/router/version.rb +1 -1
  17. data/spec/lib/build_matrix_spec.rb +13 -2
  18. data/spec/lib/build_spec.rb +33 -0
  19. data/spec/lib/configuration_spec.rb +4 -2
  20. data/spec/lib/router_spec.rb +116 -0
  21. data/spec/lib/{queue_spec.rb → script_builder_spec.rb} +7 -7
  22. data/spec/lib/travis_spec.rb +2 -2
  23. metadata +18 -38
  24. data/bin/cli +0 -3
  25. data/bin/git_ssh +0 -3
  26. data/bin/jobs_publisher +0 -12
  27. data/bin/workers +0 -13
  28. data/lib/evrone/ci/router/middleware/create_build_matrix.rb +0 -54
  29. data/lib/evrone/ci/router/middleware/create_dirs.rb +0 -25
  30. data/lib/evrone/ci/router/middleware/fetch_commit_info.rb +0 -22
  31. data/lib/evrone/ci/router/middleware/fetch_source.rb +0 -36
  32. data/lib/evrone/ci/router/middleware/log_build.rb +0 -24
  33. data/lib/evrone/ci/router/middleware/update_build_status.rb +0 -75
  34. data/spec/lib/middleware/create_build_matrix_spec.rb +0 -73
  35. data/spec/lib/middleware/create_dirs_spec.rb +0 -26
  36. data/spec/lib/middleware/fetch_commit_info_spec.rb +0 -23
  37. data/spec/lib/middleware/fetch_source_spec.rb +0 -27
  38. data/spec/lib/middleware/log_build_spec.rb +0 -14
  39. data/spec/lib/middleware/update_build_status_spec.rb +0 -70
@@ -1,7 +1,7 @@
1
1
  module Evrone
2
2
  module CI
3
3
  class Router
4
- module Middleware::Travis
4
+ class ScriptBuilder
5
5
 
6
6
  Env = Struct.new(:app) do
7
7
 
@@ -1,7 +1,7 @@
1
1
  module Evrone
2
2
  module CI
3
3
  class Router
4
- module Middleware::Travis
4
+ class ScriptBuilder
5
5
 
6
6
  Ruby = Struct.new(:app) do
7
7
 
@@ -1,7 +1,7 @@
1
1
  module Evrone
2
2
  module CI
3
3
  class Router
4
- module Middleware::Travis
4
+ class ScriptBuilder
5
5
 
6
6
  Script = Struct.new(:app) do
7
7
 
@@ -37,8 +37,8 @@ module Evrone
37
37
  @to_matrix_s ||= matrix_keys.join(", ")
38
38
  end
39
39
 
40
- def to_queue
41
- Queue.new(self)
40
+ def to_script_builder
41
+ ScriptBuilder.new(self)
42
42
  end
43
43
 
44
44
  def env
@@ -1,7 +1,7 @@
1
1
  module Evrone
2
2
  module CI
3
3
  class Router
4
- VERSION = "0.2.0.pre0"
4
+ VERSION = "0.2.0.pre1"
5
5
  end
6
6
  end
7
7
  end
@@ -5,7 +5,9 @@ describe Evrone::CI::Router::BuildMatrix do
5
5
  let(:attributes) { {
6
6
  env: %w{ FOO=1 BAR=2 },
7
7
  rvm: %w{ 1.8.7 1.9.3 2.0.0 },
8
- scala: %w{ 2.9.2 2.10.1 }
8
+ scala: %w{ 2.9.2 2.10.1 },
9
+ before_script: "echo before_script",
10
+ script: "echo script"
9
11
  } }
10
12
  let(:travis) { create :travis, attributes: attributes }
11
13
  let(:matrix) { described_class.new travis }
@@ -27,8 +29,17 @@ describe Evrone::CI::Router::BuildMatrix do
27
29
  end
28
30
 
29
31
  context 'travises' do
32
+ subject { matrix.travises }
33
+
34
+ it "should copy script from source" do
35
+ expect(subject.map(&:script).uniq).to eq [["echo script"]]
36
+ end
37
+
38
+ it "should copy before_script from source" do
39
+ expect(subject.map(&:before_script).uniq).to eq [["echo before_script"]]
40
+ end
41
+
30
42
  context "values" do
31
- subject { matrix.travises }
32
43
 
33
44
  it { should have(12).items }
34
45
 
@@ -26,6 +26,39 @@ describe Evrone::CI::Router::Build do
26
26
  its(:log) { should eq data }
27
27
  end
28
28
 
29
+ context "to_build_status_message" do
30
+ subject { build.to_build_status_message Evrone::CI::Router::Build::STARTED }
31
+
32
+ before do
33
+ build.matrix = ["rvm"]
34
+ build.jobs_count = 1
35
+ end
36
+
37
+ it { should be_an_instance_of(Evrone::CI::Message::BuildStatus) }
38
+ its(:build_id) { should eq build.message.id }
39
+ its(:status) { should eq 2 }
40
+ its(:tm) { should be }
41
+ its(:tm_usec) { should be }
42
+ its(:matrix) { should eq %w{ rvm } }
43
+ its(:jobs_count) { should eq 1 }
44
+
45
+ context "when commit_info exists" do
46
+ before do
47
+ build.commit_info = OpenStruct.new(
48
+ author: "author",
49
+ email: "email",
50
+ sha: 'sha',
51
+ message: "message"
52
+ )
53
+ end
54
+
55
+ its(:commit_author) { should eq 'author' }
56
+ its(:commit_author_email) { should eq 'email' }
57
+ its(:commit_sha) { should eq 'sha' }
58
+ its(:commit_message) { should eq 'message' }
59
+ end
60
+ end
61
+
29
62
  context "add_to_output" do
30
63
  let(:data) { 'data' }
31
64
  let(:messages) { Evrone::CI::Router::BuildLogsConsumer.messages }
@@ -16,7 +16,9 @@ describe Evrone::CI::Router::Configuration do
16
16
  c.amqp_url = "2"
17
17
  end
18
18
  }
19
- its(:timeout) { should eq 1 }
20
- its(:amqp_url) { should eq "2" }
19
+ its(:timeout) { should eq 1 }
20
+ its(:amqp_url) { should eq "2" }
21
+ its(:workers) { should eq 1 }
22
+ its(:repo_dir_name) { should eq 'repo' }
21
23
  end
22
24
  end
@@ -0,0 +1,116 @@
1
+ require 'spec_helper'
2
+ require 'fileutils'
3
+ require 'pathname'
4
+
5
+ describe Evrone::CI::Router do
6
+ let(:build) { create :build }
7
+ let(:path_prefix) { '/tmp/.test' }
8
+ let(:router) { described_class.new build, path_prefix }
9
+ subject { router }
10
+
11
+ before do
12
+ FileUtils.rm_rf path_prefix
13
+ end
14
+
15
+ after do
16
+ FileUtils.rm_rf path_prefix
17
+ end
18
+
19
+ context "just created" do
20
+ its(:build) { should eq build }
21
+ its("path_prefix.to_s") { should eq path_prefix }
22
+ its("repo_dir.to_s") { should eq "/tmp/.test/repo/evrone/test-repo" }
23
+ end
24
+
25
+ context "#perform" do
26
+ subject { router.perform }
27
+ it { should be_true }
28
+ end
29
+
30
+ context "#update_build_status" do
31
+ let(:messages) { Evrone::CI::Router::BuildStatusConsumer.messages }
32
+ let(:first_message) { messages.first }
33
+ let(:last_message) { messages.last }
34
+
35
+ it "should delivery STARTED and FINISHED when success" do
36
+ router.update_build_status { true }
37
+ expect(messages).to have(2).items
38
+ expect(first_message.status).to eq Evrone::CI::Router::Build::STARTED
39
+ expect(last_message.status).to eq Evrone::CI::Router::Build::FINISHED
40
+ end
41
+
42
+ it "should delivery STARTED and FAILED when failed" do
43
+ router.update_build_status { false }
44
+ expect(messages).to have(2).items
45
+ expect(first_message.status).to eq Evrone::CI::Router::Build::STARTED
46
+ expect(last_message.status).to eq Evrone::CI::Router::Build::FAILED
47
+ end
48
+
49
+ it "should delivery STARTED and FAILED when exception raised" do
50
+ router.update_build_status { raise "Ignore Me" }
51
+ expect(messages).to have(2).items
52
+ expect(first_message.status).to eq Evrone::CI::Router::Build::STARTED
53
+ expect(last_message.status).to eq Evrone::CI::Router::Build::FAILED
54
+ end
55
+ end
56
+
57
+ context "#create_repo_dir" do
58
+ subject { router.create_repo_dir }
59
+ it "should create directory inside path_prefix" do
60
+ expect(subject).to be_true
61
+ expect(router.repo_dir).to be_directory
62
+ end
63
+ end
64
+
65
+ context "#fetch_repo" do
66
+ subject { router.fetch_repo }
67
+ it "should fetch repo" do
68
+ expect(subject).to be_true
69
+ expect(router.repo_dir.join(".git")).to be_directory
70
+ end
71
+ end
72
+
73
+ context "#assign_commit_info" do
74
+ subject { router.assign_commit_info }
75
+ before { mock_repo_dir }
76
+
77
+ it "should assign commit information to build" do
78
+ expect(subject).to be_true
79
+ expect(router.build.commit_info.marshal_dump).to eq(
80
+ :sha=>"687753389908e70801dd4ff5448be908642055c6",
81
+ :author=>"Dmitry Galinsky",
82
+ :email=>"dima.exe@gmail.com",
83
+ :message=>"test commit #3"
84
+ )
85
+ end
86
+ end
87
+
88
+ context "#load_travis" do
89
+ subject { router.load_travis }
90
+ before { mock_repo_dir }
91
+ it "should build new travis instance from .travis.yml" do
92
+ expect(subject).to be_true
93
+ expect(router.travis).to be
94
+ end
95
+ end
96
+
97
+ context "#create_and_delivery_build_matrix" do
98
+ let(:messages) { Evrone::CI::Router::JobsConsumer.messages }
99
+ let(:message) { messages.first }
100
+ subject { router.create_and_delivery_build_matrix }
101
+ before do
102
+ stub(router).travis { create :travis }
103
+ end
104
+
105
+ it "should create build matrix from source travis and delivery its to jobs" do
106
+ expect(subject).to be_true
107
+ expect(messages).to have(1).item
108
+ expect(message.job_id).to eq 1
109
+ end
110
+ end
111
+
112
+ def mock_repo_dir
113
+ stub(router).repo_dir { Pathname.new fixture_path("repo") }
114
+ end
115
+
116
+ end
@@ -1,10 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Evrone::CI::Router::Queue do
3
+ describe Evrone::CI::Router::ScriptBuilder do
4
4
  let(:travis) { create :travis }
5
- let(:queue) { described_class.new travis }
5
+ let(:script_builder) { described_class.new travis }
6
6
  let(:expected_before_script) {
7
- s = ["set -e"]
7
+ s = []
8
8
  s << "export LC_ALL=en_US.UTF8"
9
9
  s << "eval \"$(rbenv init -)\" || true"
10
10
  s << %{
@@ -28,22 +28,22 @@ describe Evrone::CI::Router::Queue do
28
28
  s.join("\n")
29
29
  }
30
30
  let(:expected_script) {
31
- s = ["set -e"]
31
+ s = []
32
32
  trace s, "RAILS_ENV=test ls -1 && echo DONE!"
33
33
  s.join("\n")
34
34
  }
35
- subject { queue }
35
+ subject { script_builder }
36
36
 
37
37
  its(:travis) { should eq travis }
38
38
 
39
39
  context "to_before_script" do
40
- subject { queue.to_before_script }
40
+ subject { script_builder.to_before_script }
41
41
 
42
42
  it { should eq expected_before_script }
43
43
  end
44
44
 
45
45
  context "to_script" do
46
- subject { queue.to_script }
46
+ subject { script_builder.to_script }
47
47
 
48
48
  it { should eq expected_script }
49
49
  end
@@ -63,8 +63,8 @@ describe Evrone::CI::Router::Travis do
63
63
  end
64
64
  end
65
65
 
66
- context "to_queue" do
67
- subject { travis.to_queue }
66
+ context "to_script_builder" do
67
+ subject { travis.to_script_builder }
68
68
  it { should be }
69
69
  end
70
70
 
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.pre0
4
+ version: 0.2.0.pre1
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-09-30 00:00:00.000000000 Z
11
+ date: 2013-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: evrone-ci-common
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.0.pre0
19
+ version: 0.2.0.pre1
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.pre0
26
+ version: 0.2.0.pre1
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.pre0
33
+ version: 0.2.0.pre1
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.pre0
40
+ version: 0.2.0.pre1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: evrone-common-amqp
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -126,10 +126,7 @@ description: ' ci router '
126
126
  email:
127
127
  - dima.exe@gmail.com
128
128
  executables:
129
- - cli
130
- - git_ssh
131
- - jobs_publisher
132
- - workers
129
+ - evrone-ci-router
133
130
  extensions: []
134
131
  extra_rdoc_files: []
135
132
  files:
@@ -138,15 +135,14 @@ files:
138
135
  - Gemfile
139
136
  - README.md
140
137
  - Rakefile
141
- - bin/cli
142
- - bin/git_ssh
143
- - bin/jobs_publisher
144
- - bin/workers
138
+ - bin/evrone-ci-router
145
139
  - evrone-ci-router.gemspec
140
+ - fixtures/jobs_publisher
146
141
  - fixtures/travis.yml
147
142
  - lib/evrone/ci/router.rb
148
143
  - lib/evrone/ci/router/build.rb
149
144
  - lib/evrone/ci/router/build_matrix.rb
145
+ - lib/evrone/ci/router/cli.rb
150
146
  - lib/evrone/ci/router/configuration.rb
151
147
  - lib/evrone/ci/router/consumers/build_logs_consumer.rb
152
148
  - lib/evrone/ci/router/consumers/build_status_consumer.rb
@@ -158,29 +154,18 @@ files:
158
154
  - lib/evrone/ci/router/helper/logger.rb
159
155
  - lib/evrone/ci/router/helper/trace_sh_command.rb
160
156
  - lib/evrone/ci/router/initializers/amqp.rb
161
- - lib/evrone/ci/router/middleware/create_build_matrix.rb
162
- - lib/evrone/ci/router/middleware/create_dirs.rb
163
- - lib/evrone/ci/router/middleware/fetch_commit_info.rb
164
- - lib/evrone/ci/router/middleware/fetch_source.rb
165
- - lib/evrone/ci/router/middleware/log_build.rb
166
- - lib/evrone/ci/router/middleware/travis/env.rb
167
- - lib/evrone/ci/router/middleware/travis/ruby.rb
168
- - lib/evrone/ci/router/middleware/travis/script.rb
169
- - lib/evrone/ci/router/middleware/update_build_status.rb
170
- - lib/evrone/ci/router/queue.rb
157
+ - lib/evrone/ci/router/script_builder.rb
158
+ - lib/evrone/ci/router/script_builder/env.rb
159
+ - lib/evrone/ci/router/script_builder/ruby.rb
160
+ - lib/evrone/ci/router/script_builder/script.rb
171
161
  - lib/evrone/ci/router/travis.rb
172
162
  - lib/evrone/ci/router/travis/serializable.rb
173
163
  - lib/evrone/ci/router/version.rb
174
164
  - spec/lib/build_matrix_spec.rb
175
165
  - spec/lib/build_spec.rb
176
166
  - spec/lib/configuration_spec.rb
177
- - spec/lib/middleware/create_build_matrix_spec.rb
178
- - spec/lib/middleware/create_dirs_spec.rb
179
- - spec/lib/middleware/fetch_commit_info_spec.rb
180
- - spec/lib/middleware/fetch_source_spec.rb
181
- - spec/lib/middleware/log_build_spec.rb
182
- - spec/lib/middleware/update_build_status_spec.rb
183
- - spec/lib/queue_spec.rb
167
+ - spec/lib/router_spec.rb
168
+ - spec/lib/script_builder_spec.rb
184
169
  - spec/lib/travis_spec.rb
185
170
  - spec/spec_helper.rb
186
171
  - spec/support/create.rb
@@ -214,13 +199,8 @@ test_files:
214
199
  - spec/lib/build_matrix_spec.rb
215
200
  - spec/lib/build_spec.rb
216
201
  - spec/lib/configuration_spec.rb
217
- - spec/lib/middleware/create_build_matrix_spec.rb
218
- - spec/lib/middleware/create_dirs_spec.rb
219
- - spec/lib/middleware/fetch_commit_info_spec.rb
220
- - spec/lib/middleware/fetch_source_spec.rb
221
- - spec/lib/middleware/log_build_spec.rb
222
- - spec/lib/middleware/update_build_status_spec.rb
223
- - spec/lib/queue_spec.rb
202
+ - spec/lib/router_spec.rb
203
+ - spec/lib/script_builder_spec.rb
224
204
  - spec/lib/travis_spec.rb
225
205
  - spec/spec_helper.rb
226
206
  - spec/support/create.rb
data/bin/cli DELETED
@@ -1,3 +0,0 @@
1
- #!/bin/bash
2
-
3
- bundle exec pry -r$(pwd)/lib/evrone/ci/worker.rb
@@ -1,3 +0,0 @@
1
- #!/bin/sh
2
-
3
- exec /usr/bin/ssh -A -o StrictHostKeyChecking=no "$@"
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require File.expand_path("../../lib/evrone/ci/router", __FILE__)
4
-
5
- require File.expand_path("../../spec/support/fixture", __FILE__)
6
- require File.expand_path("../../spec/support/create", __FILE__)
7
-
8
- require 'evrone/ci/message/testing'
9
-
10
- include Evrone::CI
11
-
12
- Router::BuildsConsumer.publish Message::PerformBuild.test_message