buildbox 0.1.1 → 0.1.4
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.lock +1 -1
- data/lib/buildbox.rb +7 -1
- data/lib/buildbox/api.rb +2 -1
- data/lib/buildbox/cli.rb +3 -2
- data/lib/buildbox/configuration.rb +2 -2
- data/lib/buildbox/monitor.rb +7 -3
- data/lib/buildbox/runner.rb +4 -3
- data/lib/buildbox/server.rb +33 -0
- data/lib/buildbox/version.rb +1 -1
- data/lib/buildbox/worker.rb +23 -18
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1b76bf6bc33ef1f87601dedd4dc1a6eefed0ed2c
|
4
|
+
data.tar.gz: aaa97fcc886c1e55e7dd4fde4c91c2aaa514b269
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f42ebc6c4718990e2b5dfdaa67828e923e3b1ecf1f5b228262f631c0e6451e63b21aaa6e86ce85b78554a08d978b2ff89102f04da697cc548aae156ea204d53e
|
7
|
+
data.tar.gz: ff5f689b68da01fcbd56e3b9da34cdcc31d9a404b3fef28bd11f6d7d8363d7f50cd93def71b5f29eb13cba26c2d9f8c6418a0b3a60e296719db0b8bc49376194
|
data/Gemfile.lock
CHANGED
data/lib/buildbox.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'pathname'
|
2
|
+
require 'logger'
|
2
3
|
|
3
4
|
module Buildbox
|
4
5
|
autoload :API, "buildbox/api"
|
@@ -10,13 +11,18 @@ module Buildbox
|
|
10
11
|
autoload :Monitor, "buildbox/monitor"
|
11
12
|
autoload :Runner, "buildbox/runner"
|
12
13
|
autoload :Script, "buildbox/script"
|
14
|
+
autoload :Server, "buildbox/server"
|
13
15
|
autoload :UTF8, "buildbox/utf8"
|
14
16
|
autoload :Worker, "buildbox/worker"
|
15
17
|
autoload :VERSION, "buildbox/version"
|
16
18
|
|
17
19
|
def self.config
|
18
20
|
@config ||= Configuration.new.tap(&:reload)
|
19
|
-
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.logger
|
24
|
+
@logger ||= Logger.new(STDOUT).tap { |logger| logger.level = Logger::INFO }
|
25
|
+
end
|
20
26
|
|
21
27
|
def self.root_path
|
22
28
|
path = Pathname.new File.join(ENV['HOME'], ".buildbox")
|
data/lib/buildbox/api.rb
CHANGED
@@ -27,12 +27,13 @@ module Buildbox
|
|
27
27
|
@connection ||= Faraday.new(:url => @config.api_endpoint) do |faraday|
|
28
28
|
faraday.request :json
|
29
29
|
|
30
|
-
faraday.response :logger
|
30
|
+
faraday.response :logger, Buildbox.logger
|
31
31
|
faraday.response :mashify
|
32
32
|
|
33
33
|
# json needs to come after mashify as it needs to run before the mashify
|
34
34
|
# middleware.
|
35
35
|
faraday.response :json
|
36
|
+
faraday.response :raise_error
|
36
37
|
|
37
38
|
faraday.adapter Faraday.default_adapter
|
38
39
|
end
|
data/lib/buildbox/cli.rb
CHANGED
@@ -51,7 +51,7 @@ module Buildbox
|
|
51
51
|
end
|
52
52
|
|
53
53
|
if command == "worker:start"
|
54
|
-
Buildbox::
|
54
|
+
Buildbox::Server.new.start
|
55
55
|
elsif command == "worker:setup"
|
56
56
|
if @argv.length == 0
|
57
57
|
puts "No token provided"
|
@@ -59,7 +59,8 @@ module Buildbox
|
|
59
59
|
end
|
60
60
|
|
61
61
|
access_token = @argv.first
|
62
|
-
Buildbox.config.
|
62
|
+
worker_access_tokens = Buildbox.config.worker_access_tokens
|
63
|
+
Buildbox.config.update(:worker_access_tokens => worker_access_tokens << access_token)
|
63
64
|
|
64
65
|
puts "Successfully added worker access token"
|
65
66
|
puts "You can now start the worker with `buildbox worker:start`"
|
@@ -4,8 +4,8 @@ require 'json'
|
|
4
4
|
|
5
5
|
module Buildbox
|
6
6
|
class Configuration < Hashie::Dash
|
7
|
-
property :
|
8
|
-
property :api_endpoint,
|
7
|
+
property :worker_access_tokens, :default => []
|
8
|
+
property :api_endpoint, :default => "https://api.buildbox.io/v1"
|
9
9
|
|
10
10
|
def update(attributes)
|
11
11
|
attributes.each_pair { |key, value| self[key] = value }
|
data/lib/buildbox/monitor.rb
CHANGED
@@ -12,12 +12,16 @@ module Buildbox
|
|
12
12
|
|
13
13
|
def monitor
|
14
14
|
loop do
|
15
|
-
|
15
|
+
# There is an edge case where the build finishes between making the
|
16
|
+
# update_build http call, and breaking. So to make sure we're using the
|
17
|
+
# same build object throughout this call, we can just dup it.
|
18
|
+
build = @build.dup
|
19
|
+
@api.update_build(build) if build.started?
|
16
20
|
|
17
|
-
if
|
21
|
+
if build.finished?
|
18
22
|
break
|
19
23
|
else
|
20
|
-
sleep
|
24
|
+
sleep 3 # 3 seconds seems reasonable for now
|
21
25
|
end
|
22
26
|
end
|
23
27
|
end
|
data/lib/buildbox/runner.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'celluloid'
|
3
|
-
require 'tempfile'
|
4
3
|
require 'fileutils'
|
5
4
|
|
6
5
|
module Buildbox
|
@@ -29,7 +28,9 @@ module Buildbox
|
|
29
28
|
build.output = result.output
|
30
29
|
build.exit_status = result.exit_status
|
31
30
|
|
32
|
-
|
31
|
+
File.delete(script_path)
|
32
|
+
|
33
|
+
info "#{namespace} ##{@build.number} finished with exit status #{result.exit_status}"
|
33
34
|
end
|
34
35
|
|
35
36
|
private
|
@@ -45,7 +46,7 @@ module Buildbox
|
|
45
46
|
end
|
46
47
|
|
47
48
|
def script_path
|
48
|
-
@script_path ||=
|
49
|
+
@script_path ||= Buildbox.root_path.join("buildbox-#{namespace.gsub(/\//, '-')}-#{@build.number}")
|
49
50
|
end
|
50
51
|
|
51
52
|
def namespace
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Buildbox
|
2
|
+
class Server
|
3
|
+
INTERVAL = 5
|
4
|
+
|
5
|
+
def initialize(config = Buildbox.config, logger = Buildbox.logger)
|
6
|
+
@config = config
|
7
|
+
@logger = logger
|
8
|
+
end
|
9
|
+
|
10
|
+
def start
|
11
|
+
loop do
|
12
|
+
worker_access_tokens.each do |access_token|
|
13
|
+
Buildbox::Worker.new(access_token, api).work
|
14
|
+
end
|
15
|
+
|
16
|
+
@config.reload
|
17
|
+
|
18
|
+
@logger.info "Sleeping for #{INTERVAL} seconds"
|
19
|
+
sleep INTERVAL
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def api
|
26
|
+
@api ||= Buildbox::API.new
|
27
|
+
end
|
28
|
+
|
29
|
+
def worker_access_tokens
|
30
|
+
@config.worker_access_tokens
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/buildbox/version.rb
CHANGED
data/lib/buildbox/worker.rb
CHANGED
@@ -1,33 +1,38 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'celluloid'
|
3
|
+
|
1
4
|
module Buildbox
|
2
5
|
class Worker
|
3
|
-
|
6
|
+
include Celluloid::Logger
|
7
|
+
|
8
|
+
def initialize(access_token, api)
|
9
|
+
@api = api
|
4
10
|
@access_token = access_token
|
5
11
|
end
|
6
12
|
|
7
|
-
def
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
Monitor.new(build, api).async.monitor
|
12
|
-
Runner.new(build).future(:start)
|
13
|
-
end
|
14
|
-
|
15
|
-
# wait for all the running builds to finish
|
16
|
-
running_builds.map(&:value)
|
17
|
-
|
18
|
-
sleep 5
|
19
|
-
end
|
13
|
+
def work
|
14
|
+
running_builds = scheduled_builds.map do |build|
|
15
|
+
Monitor.new(build, @api).async.monitor
|
16
|
+
Runner.new(build).future(:start)
|
20
17
|
end
|
18
|
+
|
19
|
+
# wait for all the running builds to finish
|
20
|
+
running_builds.map(&:value)
|
21
21
|
end
|
22
22
|
|
23
23
|
private
|
24
24
|
|
25
|
-
def
|
26
|
-
@api
|
25
|
+
def projects
|
26
|
+
@api.worker(:access_token => @access_token, :hostname => hostname).projects
|
27
|
+
rescue Faraday::Error::ClientError
|
28
|
+
warn "Worker #{@access_token} doesn't exist"
|
29
|
+
[] # return empty array to avoid breakage
|
27
30
|
end
|
28
31
|
|
29
|
-
def
|
30
|
-
|
32
|
+
def scheduled_builds
|
33
|
+
projects.map do |project|
|
34
|
+
@api.scheduled_builds(project)
|
35
|
+
end.flatten
|
31
36
|
end
|
32
37
|
|
33
38
|
def hostname
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: buildbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Keith Pitt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-08-
|
11
|
+
date: 2013-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -107,6 +107,7 @@ files:
|
|
107
107
|
- lib/buildbox/environment.rb
|
108
108
|
- lib/buildbox/monitor.rb
|
109
109
|
- lib/buildbox/runner.rb
|
110
|
+
- lib/buildbox/server.rb
|
110
111
|
- lib/buildbox/utf8.rb
|
111
112
|
- lib/buildbox/version.rb
|
112
113
|
- lib/buildbox/worker.rb
|