larrow-runner 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +25 -0
  3. data/.rspec +2 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +3 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +80 -0
  8. data/Rakefile +2 -0
  9. data/bin/larrow +4 -0
  10. data/larrow-runner.gemspec +42 -0
  11. data/lib/larrow/runner/cli/build.rb +41 -0
  12. data/lib/larrow/runner/cli/main.rb +35 -0
  13. data/lib/larrow/runner/cli/tools.rb +34 -0
  14. data/lib/larrow/runner/cli.rb +11 -0
  15. data/lib/larrow/runner/errors.rb +1 -0
  16. data/lib/larrow/runner/helper.rb +0 -0
  17. data/lib/larrow/runner/logger.rb +69 -0
  18. data/lib/larrow/runner/manager.rb +114 -0
  19. data/lib/larrow/runner/manifest/adapter/blank.rb +8 -0
  20. data/lib/larrow/runner/manifest/adapter/larrow.rb +32 -0
  21. data/lib/larrow/runner/manifest/adapter/travis.rb +73 -0
  22. data/lib/larrow/runner/manifest/base_loader.rb +21 -0
  23. data/lib/larrow/runner/manifest/configuration.rb +126 -0
  24. data/lib/larrow/runner/manifest.rb +48 -0
  25. data/lib/larrow/runner/model/app.rb +62 -0
  26. data/lib/larrow/runner/model/node.rb +73 -0
  27. data/lib/larrow/runner/service/cloud.rb +54 -0
  28. data/lib/larrow/runner/service/executor.rb +56 -0
  29. data/lib/larrow/runner/service.rb +8 -0
  30. data/lib/larrow/runner/session.rb +64 -0
  31. data/lib/larrow/runner/vcs/base.rb +17 -0
  32. data/lib/larrow/runner/vcs/file_system.rb +58 -0
  33. data/lib/larrow/runner/vcs/github.rb +48 -0
  34. data/lib/larrow/runner/vcs.rb +20 -0
  35. data/lib/larrow/runner/version.rb +5 -0
  36. data/lib/larrow/runner.rb +34 -0
  37. data/spec/fixtures/travis_erlang.yml +8 -0
  38. data/spec/fixtures/travis_ruby.yml +9 -0
  39. data/spec/integration/build_cmds_spec.rb +18 -0
  40. data/spec/integration/test_cmds_spec.rb +13 -0
  41. data/spec/manifest/travis_spec.rb +42 -0
  42. data/spec/model/node_spec.rb +18 -0
  43. data/spec/service/executor_spec.rb +26 -0
  44. data/spec/spec_helper.rb +10 -0
  45. data/spec/vcs/github_spec.rb +33 -0
  46. metadata +340 -0
@@ -0,0 +1,9 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1
4
+
5
+ before_script:
6
+ - ruby -v
7
+ script:
8
+ - ruby -e 'puts :hello'
9
+
@@ -0,0 +1,18 @@
1
+ require 'spec_helper.rb'
2
+ require 'larrow/qingcloud'
3
+
4
+ module Larrow
5
+ module Runner
6
+ ['git@github.com:fsword/sample_ruby.git'].each do |url|
7
+ describe "build: #{url}" do
8
+ subject{ Manager.new url }
9
+ it{ expect(subject.build_server).to be_a Model::Node }
10
+ it do
11
+ image = subject.build_image
12
+ expect(image).to be_a Qingcloud::Image
13
+ image.destroy.force
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper.rb'
2
+ require 'larrow/qingcloud'
3
+
4
+ module Larrow
5
+ module Runner
6
+ ['git@github.com:fsword/sample_ruby.git'].each do |url|
7
+ describe "test: #{url}" do
8
+ subject{ Manager.new url }
9
+ it{ expect(subject.go).not_to be_nil }
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,42 @@
1
+ require_relative '../spec_helper.rb'
2
+
3
+ module Larrow::Runner::Manifest
4
+ describe Travis do
5
+ class FileLoad
6
+ attr_accessor :filename
7
+ def initialize filename
8
+ self.filename = filename
9
+ end
10
+
11
+ def get _filename
12
+ path = File.expand_path "../../fixtures/#{filename}", __FILE__
13
+ File.read(path)
14
+ end
15
+
16
+ def source_sync_script; '' end
17
+ end
18
+
19
+ let(:erlang_conf){ Travis.new(FileLoad.new 'travis_erlang.yml').load }
20
+ let(:ruby_conf){ Travis.new(FileLoad.new 'travis_ruby.yml').load }
21
+
22
+ it 'parse the manifest file' do
23
+ expect(erlang_conf.steps[:prepare].scripts.size).to eq(1)
24
+ step = erlang_conf.steps[:functional_test]
25
+ expect(step.scripts.size).to eq(1)
26
+ expect(step.scripts.first.cmd).to eq('./rebar compile ct')
27
+ end
28
+
29
+ it 'support erlang by kerl' do
30
+ scripts = erlang_conf.steps[:init].scripts
31
+ commands = scripts.map(&:actual_command).join("\n")
32
+ expect(commands).to include('activate')
33
+ expect(commands).to include('r16')
34
+ end
35
+
36
+ it 'support ruby by rvm' do
37
+ scripts = ruby_conf.steps[:init].scripts
38
+ commands = scripts.map(&:actual_command).join("\n")
39
+ expect(commands).to include('rvm.io')
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,18 @@
1
+ require_relative '../spec_helper.rb'
2
+
3
+ module Larrow::Runner::Model
4
+ describe Node do
5
+ subject{ Node.new nil, OpenStruct.new(address: 'localhost'), `whoami`.chomp }
6
+ before do
7
+ Larrow::Runner::RunOption[:debug] = nil
8
+ end
9
+ it 'can execute' do
10
+ outputs = ""
11
+ script = OpenStruct.new(actual_command: 'pwd')
12
+ subject.execute('pwd') do |data|
13
+ outputs << data
14
+ end
15
+ expect(outputs).to include(ENV['HOME'])
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,26 @@
1
+ require_relative '../spec_helper.rb'
2
+ module Larrow::Runner::Service
3
+ describe Executor do
4
+ subject{ Executor.new 'localhost', `whoami`.chomp, 22, nil }
5
+ before do
6
+ Larrow::Runner::RunOption[:debug] = nil
7
+ end
8
+ it 'normal command run'do
9
+ outputs = ''
10
+ subject.execute('echo aaa'){|data| outputs << data}
11
+ expect(outputs).to eq "aaa\n"
12
+ end
13
+
14
+ it 'command with base dir' do
15
+ outputs = ''
16
+ subject.execute('pwd', base_dir: '/opt') do |data|
17
+ outputs << data
18
+ end
19
+ expect(outputs).to eq "/opt\n"
20
+ end
21
+
22
+ it 'fail command' do
23
+ expect(->{subject.execute('false')}).to raise_error(ExecutionError)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,10 @@
1
+ $LOAD_PATH << File.expand_path('../../lib', __FILE__)
2
+
3
+ ENV['RUN_AS'] ||= 'test'
4
+
5
+ require 'larrow/runner'
6
+ require 'pry'
7
+ require 'pry-nav'
8
+ require 'simplecov'
9
+
10
+ SimpleCov.start
@@ -0,0 +1,33 @@
1
+ require_relative '../spec_helper.rb'
2
+ module Larrow
3
+ module Runner
4
+ module Vcs
5
+ describe Github do
6
+ subject{Github.new 'https://github.com/fsword/sample_ruby.git'}
7
+ it 'split_org_and_name' do
8
+ git_url = 'git@github.com:org1/proj_name1.git'
9
+ https_url = 'https://github.com/org1/proj_name1.git'
10
+ [git_url, https_url].each do |url|
11
+ github = Github.new url
12
+ expect(github.formatted_url).to eq(git_url)
13
+ end
14
+ end
15
+
16
+ it 'get' do
17
+ expect(subject.get '/.travis.yml').not_to be_empty
18
+ end
19
+
20
+ it 'update_source' do
21
+ node = double('node')
22
+ allow(node).to(receive :execute){|cmd| cmd}
23
+ expect(subject.update_source(node,nil)).not_to be_empty
24
+ end
25
+
26
+ after do
27
+ `rm -rf sample_ruby`
28
+ `rm -rf $HOME/source`
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
metadata ADDED
@@ -0,0 +1,340 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: larrow-runner
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - fsword
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.6'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.6'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.9'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: parallel_tests
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: tilt
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2'
97
+ - !ruby/object:Gem::Dependency
98
+ name: thor
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.19'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.19'
111
+ - !ruby/object:Gem::Dependency
112
+ name: activesupport
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '4.1'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '4.1'
125
+ - !ruby/object:Gem::Dependency
126
+ name: pry
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '0.10'
132
+ - - '='
133
+ - !ruby/object:Gem::Version
134
+ version: 0.10.0
135
+ type: :runtime
136
+ prerelease: false
137
+ version_requirements: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - "~>"
140
+ - !ruby/object:Gem::Version
141
+ version: '0.10'
142
+ - - '='
143
+ - !ruby/object:Gem::Version
144
+ version: 0.10.0
145
+ - !ruby/object:Gem::Dependency
146
+ name: pry-nav
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '0.2'
152
+ - - '='
153
+ - !ruby/object:Gem::Version
154
+ version: 0.2.4
155
+ type: :runtime
156
+ prerelease: false
157
+ version_requirements: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - "~>"
160
+ - !ruby/object:Gem::Version
161
+ version: '0.2'
162
+ - - '='
163
+ - !ruby/object:Gem::Version
164
+ version: 0.2.4
165
+ - !ruby/object:Gem::Dependency
166
+ name: minitest
167
+ requirement: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - "~>"
170
+ - !ruby/object:Gem::Version
171
+ version: '5.4'
172
+ - - '='
173
+ - !ruby/object:Gem::Version
174
+ version: 5.4.1
175
+ type: :runtime
176
+ prerelease: false
177
+ version_requirements: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: '5.4'
182
+ - - '='
183
+ - !ruby/object:Gem::Version
184
+ version: 5.4.1
185
+ - !ruby/object:Gem::Dependency
186
+ name: net-ssh
187
+ requirement: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - "~>"
190
+ - !ruby/object:Gem::Version
191
+ version: '2.9'
192
+ type: :runtime
193
+ prerelease: false
194
+ version_requirements: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - "~>"
197
+ - !ruby/object:Gem::Version
198
+ version: '2.9'
199
+ - !ruby/object:Gem::Dependency
200
+ name: net-scp
201
+ requirement: !ruby/object:Gem::Requirement
202
+ requirements:
203
+ - - "~>"
204
+ - !ruby/object:Gem::Version
205
+ version: '1.2'
206
+ type: :runtime
207
+ prerelease: false
208
+ version_requirements: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - "~>"
211
+ - !ruby/object:Gem::Version
212
+ version: '1.2'
213
+ - !ruby/object:Gem::Dependency
214
+ name: faraday
215
+ requirement: !ruby/object:Gem::Requirement
216
+ requirements:
217
+ - - "~>"
218
+ - !ruby/object:Gem::Version
219
+ version: '0.9'
220
+ type: :runtime
221
+ prerelease: false
222
+ version_requirements: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - "~>"
225
+ - !ruby/object:Gem::Version
226
+ version: '0.9'
227
+ - !ruby/object:Gem::Dependency
228
+ name: larrow-qingcloud
229
+ requirement: !ruby/object:Gem::Requirement
230
+ requirements:
231
+ - - "~>"
232
+ - !ruby/object:Gem::Version
233
+ version: '0'
234
+ type: :runtime
235
+ prerelease: false
236
+ version_requirements: !ruby/object:Gem::Requirement
237
+ requirements:
238
+ - - "~>"
239
+ - !ruby/object:Gem::Version
240
+ version: '0'
241
+ - !ruby/object:Gem::Dependency
242
+ name: promising
243
+ requirement: !ruby/object:Gem::Requirement
244
+ requirements:
245
+ - - "~>"
246
+ - !ruby/object:Gem::Version
247
+ version: '0.3'
248
+ type: :runtime
249
+ prerelease: false
250
+ version_requirements: !ruby/object:Gem::Requirement
251
+ requirements:
252
+ - - "~>"
253
+ - !ruby/object:Gem::Version
254
+ version: '0.3'
255
+ description: Automatically build your app from source code
256
+ email:
257
+ - li.jianye@gmail.com
258
+ executables:
259
+ - larrow
260
+ extensions: []
261
+ extra_rdoc_files: []
262
+ files:
263
+ - ".gitignore"
264
+ - ".rspec"
265
+ - ".ruby-version"
266
+ - Gemfile
267
+ - LICENSE.txt
268
+ - README.md
269
+ - Rakefile
270
+ - bin/larrow
271
+ - larrow-runner.gemspec
272
+ - lib/larrow/runner.rb
273
+ - lib/larrow/runner/cli.rb
274
+ - lib/larrow/runner/cli/build.rb
275
+ - lib/larrow/runner/cli/main.rb
276
+ - lib/larrow/runner/cli/tools.rb
277
+ - lib/larrow/runner/errors.rb
278
+ - lib/larrow/runner/helper.rb
279
+ - lib/larrow/runner/logger.rb
280
+ - lib/larrow/runner/manager.rb
281
+ - lib/larrow/runner/manifest.rb
282
+ - lib/larrow/runner/manifest/adapter/blank.rb
283
+ - lib/larrow/runner/manifest/adapter/larrow.rb
284
+ - lib/larrow/runner/manifest/adapter/travis.rb
285
+ - lib/larrow/runner/manifest/base_loader.rb
286
+ - lib/larrow/runner/manifest/configuration.rb
287
+ - lib/larrow/runner/model/app.rb
288
+ - lib/larrow/runner/model/node.rb
289
+ - lib/larrow/runner/service.rb
290
+ - lib/larrow/runner/service/cloud.rb
291
+ - lib/larrow/runner/service/executor.rb
292
+ - lib/larrow/runner/session.rb
293
+ - lib/larrow/runner/vcs.rb
294
+ - lib/larrow/runner/vcs/base.rb
295
+ - lib/larrow/runner/vcs/file_system.rb
296
+ - lib/larrow/runner/vcs/github.rb
297
+ - lib/larrow/runner/version.rb
298
+ - spec/fixtures/travis_erlang.yml
299
+ - spec/fixtures/travis_ruby.yml
300
+ - spec/integration/build_cmds_spec.rb
301
+ - spec/integration/test_cmds_spec.rb
302
+ - spec/manifest/travis_spec.rb
303
+ - spec/model/node_spec.rb
304
+ - spec/service/executor_spec.rb
305
+ - spec/spec_helper.rb
306
+ - spec/vcs/github_spec.rb
307
+ homepage: http://github.com/fsword/larrow-core
308
+ licenses:
309
+ - MIT
310
+ metadata: {}
311
+ post_install_message:
312
+ rdoc_options: []
313
+ require_paths:
314
+ - lib
315
+ required_ruby_version: !ruby/object:Gem::Requirement
316
+ requirements:
317
+ - - ">="
318
+ - !ruby/object:Gem::Version
319
+ version: '0'
320
+ required_rubygems_version: !ruby/object:Gem::Requirement
321
+ requirements:
322
+ - - ">="
323
+ - !ruby/object:Gem::Version
324
+ version: '0'
325
+ requirements: []
326
+ rubyforge_project:
327
+ rubygems_version: 2.2.2
328
+ signing_key:
329
+ specification_version: 4
330
+ summary: Core application of larrow, CLI based
331
+ test_files:
332
+ - spec/fixtures/travis_erlang.yml
333
+ - spec/fixtures/travis_ruby.yml
334
+ - spec/integration/build_cmds_spec.rb
335
+ - spec/integration/test_cmds_spec.rb
336
+ - spec/manifest/travis_spec.rb
337
+ - spec/model/node_spec.rb
338
+ - spec/service/executor_spec.rb
339
+ - spec/spec_helper.rb
340
+ - spec/vcs/github_spec.rb