travis 1.11.1 → 1.12.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +9 -3
- data/Rakefile +22 -20
- data/bin/travis +5 -3
- data/examples/org_overview.rb +2 -0
- data/examples/pro_auth.rb +3 -1
- data/examples/stream.rb +5 -3
- data/lib/travis/auto_login.rb +2 -0
- data/lib/travis/cli/accounts.rb +12 -9
- data/lib/travis/cli/api_command.rb +85 -81
- data/lib/travis/cli/branches.rb +8 -6
- data/lib/travis/cli/cache.rb +48 -44
- data/lib/travis/cli/cancel.rb +4 -2
- data/lib/travis/cli/command.rb +170 -142
- data/lib/travis/cli/console.rb +5 -5
- data/lib/travis/cli/disable.rb +4 -2
- data/lib/travis/cli/enable.rb +14 -12
- data/lib/travis/cli/encrypt.rb +57 -57
- data/lib/travis/cli/encrypt_file.rb +29 -18
- data/lib/travis/cli/endpoint.rb +9 -7
- data/lib/travis/cli/env.rb +13 -8
- data/lib/travis/cli/help.rb +10 -8
- data/lib/travis/cli/history.rb +19 -15
- data/lib/travis/cli/init.rb +27 -24
- data/lib/travis/cli/lint.rb +10 -8
- data/lib/travis/cli/login.rb +17 -11
- data/lib/travis/cli/logout.rb +4 -2
- data/lib/travis/cli/logs.rb +28 -19
- data/lib/travis/cli/monitor.rb +11 -8
- data/lib/travis/cli/open.rb +17 -14
- data/lib/travis/cli/parser.rb +2 -0
- data/lib/travis/cli/pubkey.rb +13 -11
- data/lib/travis/cli/raw.rb +4 -3
- data/lib/travis/cli/repo_command.rb +123 -112
- data/lib/travis/cli/report.rb +40 -33
- data/lib/travis/cli/repos.rb +14 -9
- data/lib/travis/cli/requests.rb +13 -12
- data/lib/travis/cli/restart.rb +4 -2
- data/lib/travis/cli/settings.rb +41 -35
- data/lib/travis/cli/setup/anynines.rb +7 -6
- data/lib/travis/cli/setup/appfog.rb +6 -4
- data/lib/travis/cli/setup/artifacts.rb +7 -5
- data/lib/travis/cli/setup/biicode.rb +6 -4
- data/lib/travis/cli/setup/cloud_66.rb +6 -4
- data/lib/travis/cli/setup/cloud_control.rb +8 -6
- data/lib/travis/cli/setup/cloud_files.rb +7 -5
- data/lib/travis/cli/setup/cloud_foundry.rb +9 -7
- data/lib/travis/cli/setup/code_deploy.rb +33 -29
- data/lib/travis/cli/setup/deis.rb +8 -6
- data/lib/travis/cli/setup/divshot.rb +20 -18
- data/lib/travis/cli/setup/elastic_beanstalk.rb +10 -8
- data/lib/travis/cli/setup/engine_yard.rb +9 -7
- data/lib/travis/cli/setup/gcs.rb +9 -7
- data/lib/travis/cli/setup/hackage.rb +6 -4
- data/lib/travis/cli/setup/heroku.rb +10 -4
- data/lib/travis/cli/setup/modulus.rb +5 -3
- data/lib/travis/cli/setup/ninefold.rb +7 -5
- data/lib/travis/cli/setup/nodejitsu.rb +6 -4
- data/lib/travis/cli/setup/npm.rb +6 -4
- data/lib/travis/cli/setup/open_shift.rb +8 -6
- data/lib/travis/cli/setup/opsworks.rb +24 -22
- data/lib/travis/cli/setup/pypi.rb +7 -5
- data/lib/travis/cli/setup/releases.rb +6 -6
- data/lib/travis/cli/setup/ruby_gems.rb +7 -5
- data/lib/travis/cli/setup/s3.rb +12 -8
- data/lib/travis/cli/setup/sauce_connect.rb +7 -5
- data/lib/travis/cli/setup/service.rb +36 -25
- data/lib/travis/cli/setup.rb +7 -3
- data/lib/travis/cli/show.rb +10 -8
- data/lib/travis/cli/sshkey.rb +31 -27
- data/lib/travis/cli/status.rb +5 -3
- data/lib/travis/cli/sync.rb +9 -7
- data/lib/travis/cli/token.rb +4 -2
- data/lib/travis/cli/version.rb +4 -3
- data/lib/travis/cli/whatsup.rb +10 -8
- data/lib/travis/cli/whoami.rb +2 -2
- data/lib/travis/cli.rb +39 -36
- data/lib/travis/client/account.rb +8 -6
- data/lib/travis/client/artifact.rb +16 -12
- data/lib/travis/client/auto_login.rb +7 -4
- data/lib/travis/client/broadcast.rb +2 -0
- data/lib/travis/client/build.rb +7 -3
- data/lib/travis/client/cache.rb +4 -2
- data/lib/travis/client/commit.rb +5 -2
- data/lib/travis/client/entity.rb +50 -46
- data/lib/travis/client/env_var.rb +13 -8
- data/lib/travis/client/error.rb +5 -3
- data/lib/travis/client/has_uuid.rb +3 -1
- data/lib/travis/client/job.rb +8 -3
- data/lib/travis/client/lint_result.rb +2 -0
- data/lib/travis/client/listener.rb +70 -55
- data/lib/travis/client/methods.rb +10 -5
- data/lib/travis/client/namespace.rb +20 -16
- data/lib/travis/client/not_loadable.rb +3 -1
- data/lib/travis/client/repository.rb +34 -22
- data/lib/travis/client/request.rb +5 -2
- data/lib/travis/client/restartable.rb +2 -0
- data/lib/travis/client/session.rb +118 -88
- data/lib/travis/client/settings.rb +8 -3
- data/lib/travis/client/singleton_setting.rb +2 -0
- data/lib/travis/client/ssh_key.rb +2 -0
- data/lib/travis/client/states.rb +8 -6
- data/lib/travis/client/user.rb +2 -0
- data/lib/travis/client/weak_entity.rb +6 -3
- data/lib/travis/client.rb +4 -1
- data/lib/travis/pro/auto_login.rb +2 -0
- data/lib/travis/pro.rb +2 -0
- data/lib/travis/tools/assets.rb +6 -3
- data/lib/travis/tools/completion.rb +10 -6
- data/lib/travis/tools/formatter.rb +20 -14
- data/lib/travis/tools/github.rb +59 -49
- data/lib/travis/tools/notification.rb +18 -13
- data/lib/travis/tools/safe_string.rb +4 -1
- data/lib/travis/tools/ssl_key.rb +5 -2
- data/lib/travis/tools/system.rb +11 -6
- data/lib/travis/version.rb +3 -1
- data/lib/travis.rb +3 -1
- data/spec/cli/api_command_spec.rb +11 -8
- data/spec/cli/cancel_spec.rb +2 -4
- data/spec/cli/encrypt_file_spec.rb +9 -7
- data/spec/cli/encrypt_spec.rb +19 -17
- data/spec/cli/endpoint_spec.rb +12 -10
- data/spec/cli/help_spec.rb +14 -12
- data/spec/cli/history_spec.rb +2 -0
- data/spec/cli/init_spec.rb +35 -33
- data/spec/cli/logs_spec.rb +2 -0
- data/spec/cli/open_spec.rb +6 -4
- data/spec/cli/repo_command_spec.rb +8 -4
- data/spec/cli/restart_spec.rb +2 -4
- data/spec/cli/setup/service_spec.rb +17 -18
- data/spec/cli/setup_spec.rb +2 -4
- data/spec/cli/show_spec.rb +4 -2
- data/spec/cli/status_spec.rb +7 -5
- data/spec/cli/token_spec.rb +7 -5
- data/spec/cli/version_spec.rb +2 -0
- data/spec/cli/whoami_spec.rb +9 -7
- data/spec/client/account_spec.rb +28 -20
- data/spec/client/auto_login_spec.rb +12 -9
- data/spec/client/broadcast_spec.rb +5 -3
- data/spec/client/build_spec.rb +28 -24
- data/spec/client/commit_spec.rb +17 -14
- data/spec/client/job_spec.rb +27 -23
- data/spec/client/methods_spec.rb +8 -4
- data/spec/client/namespace_spec.rb +8 -4
- data/spec/client/repository_spec.rb +33 -30
- data/spec/client/session_spec.rb +71 -67
- data/spec/client/user_spec.rb +13 -10
- data/spec/client_spec.rb +6 -4
- data/spec/pro_spec.rb +5 -3
- data/spec/spec_helper.rb +3 -1
- data/spec/support/fake_api.rb +662 -662
- data/spec/support/fake_github.rb +6 -3
- data/spec/support/helpers.rb +13 -8
- data/spec/travis_spec.rb +5 -3
- data/travis.gemspec +400 -399
- metadata +30 -50
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'travis/client'
|
2
4
|
require 'forwardable'
|
3
5
|
require 'json'
|
@@ -13,6 +15,7 @@ module Travis
|
|
13
15
|
class Listener
|
14
16
|
class Socket < PusherClient::Socket
|
15
17
|
attr_accessor :session, :signatures
|
18
|
+
|
16
19
|
def initialize(application_key, options = {})
|
17
20
|
@session = options.fetch(:session)
|
18
21
|
@signatures = {}
|
@@ -31,7 +34,10 @@ module Travis
|
|
31
34
|
|
32
35
|
def fetch_auth(*channels)
|
33
36
|
channels.select! { |c| signatures[c].nil? if c.start_with? 'private-' }
|
34
|
-
|
37
|
+
return unless channels.any?
|
38
|
+
|
39
|
+
signatures.merge! session.post_raw('/pusher/auth', channels:,
|
40
|
+
socket_id:)['channels']
|
35
41
|
end
|
36
42
|
|
37
43
|
def get_private_auth(channel)
|
@@ -40,19 +46,22 @@ module Travis
|
|
40
46
|
end
|
41
47
|
|
42
48
|
def handle_error(data)
|
43
|
-
|
49
|
+
if data.is_a? Hash
|
50
|
+
code = data['code']
|
51
|
+
message = data['message']
|
52
|
+
end
|
44
53
|
message ||= data.inspect
|
45
54
|
|
46
55
|
case code
|
47
56
|
when 4100 then reconnect(1)
|
48
57
|
when 4200, 4201, 4202 then reconnect
|
49
|
-
else raise Travis::Client::Error,
|
58
|
+
else raise Travis::Client::Error, format('Pusher error: %s (code: %p)', message, code)
|
50
59
|
end
|
51
60
|
end
|
52
61
|
|
53
62
|
def reconnect(delay = nil)
|
54
63
|
disconnect if connected
|
55
|
-
sleep delay if delay
|
64
|
+
sleep delay if delay&.positive?
|
56
65
|
connect
|
57
66
|
end
|
58
67
|
end
|
@@ -60,7 +69,7 @@ module Travis
|
|
60
69
|
EVENTS = %w[
|
61
70
|
build:created build:started build:finished
|
62
71
|
job:created job:started job:log job:finished
|
63
|
-
]
|
72
|
+
].freeze
|
64
73
|
|
65
74
|
Event = Struct.new(:type, :repository, :build, :job, :payload)
|
66
75
|
|
@@ -71,7 +80,8 @@ module Travis
|
|
71
80
|
def_delegators :listener, :disconnect, :on_connect, :subscribe
|
72
81
|
|
73
82
|
def initialize(listener, entities)
|
74
|
-
@listener
|
83
|
+
@listener = listener
|
84
|
+
@entities = Array(entities)
|
75
85
|
end
|
76
86
|
|
77
87
|
def on(*events)
|
@@ -80,11 +90,11 @@ module Travis
|
|
80
90
|
|
81
91
|
private
|
82
92
|
|
83
|
-
|
84
|
-
|
85
|
-
entities.include? event.build
|
93
|
+
def dispatch?(event)
|
94
|
+
entities.include? event.repository or
|
95
|
+
entities.include? event.build or
|
86
96
|
entities.include? event.job
|
87
|
-
|
97
|
+
end
|
88
98
|
end
|
89
99
|
|
90
100
|
attr_reader :session, :socket
|
@@ -111,15 +121,15 @@ module Travis
|
|
111
121
|
events.each { |e| @callbacks << [e, block] }
|
112
122
|
end
|
113
123
|
|
114
|
-
def on_connect
|
115
|
-
socket.bind('pusher:connection_established')
|
124
|
+
def on_connect(&block)
|
125
|
+
socket.bind('pusher:connection_established', &block)
|
116
126
|
end
|
117
127
|
|
118
128
|
def listen
|
119
129
|
@channels = default_channels if @channels.empty?
|
120
130
|
@channels.map! { |c| c.start_with?('private-') ? c : "private-#{c}" } if session.private_channels?
|
121
131
|
@channels.uniq.each { |c| socket.subscribe(c) }
|
122
|
-
@callbacks.each { |e,b| socket.bind(e) { |d| dispatch(e, d, &b) } }
|
132
|
+
@callbacks.each { |e, b| socket.bind(e) { |d| dispatch(e, d, &b) } }
|
123
133
|
socket.connect
|
124
134
|
end
|
125
135
|
|
@@ -129,55 +139,60 @@ module Travis
|
|
129
139
|
|
130
140
|
private
|
131
141
|
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
142
|
+
def dispatch(type, json)
|
143
|
+
payload = JSON.parse(json)
|
144
|
+
entities = session.load format_payload(type, payload)
|
145
|
+
yield Event.new(type, entities['repository'], entities['build'], entities['job'], payload)
|
146
|
+
end
|
137
147
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
end
|
148
|
+
def format_payload(type, payload)
|
149
|
+
case type
|
150
|
+
when 'job:log' then format_log(payload)
|
151
|
+
when /job:/ then format_job(payload)
|
152
|
+
else payload
|
144
153
|
end
|
154
|
+
end
|
145
155
|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
156
|
+
def format_job(payload)
|
157
|
+
build = { 'id' => payload['build_id'], 'repository_id' => payload['repository_id'] }
|
158
|
+
repo = { 'id' => payload['repository_id'], 'slug' => payload['repository_slug'] }
|
159
|
+
build['number'] = payload['number'][/^[^.]+/] if payload['number']
|
160
|
+
{ 'job' => payload, 'build' => build, 'repository' => repo }
|
161
|
+
end
|
152
162
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
163
|
+
def format_log(payload)
|
164
|
+
job = session.job(payload['id'])
|
165
|
+
{ 'job' => { 'id' => job.id }, 'build' => { 'id' => job.build.id },
|
166
|
+
'repository' => { 'id' => job.repository.id } }
|
167
|
+
end
|
157
168
|
|
158
|
-
|
159
|
-
|
160
|
-
session.user.channels
|
161
|
-
end
|
169
|
+
def default_channels
|
170
|
+
return ['common'] if session.access_token.nil?
|
162
171
|
|
163
|
-
|
164
|
-
|
165
|
-
encrypted = pusher_options['scheme'] != 'http'
|
166
|
-
options = { :encrypted => encrypted, :session => session }
|
167
|
-
options[:ws_host] = pusher_options['host'] if pusher_options['host']
|
168
|
-
options[:wss_port] = pusher_options['port'] if encrypted and pusher_options['port']
|
169
|
-
options[:ws_port] = pusher_options['port'] if !encrypted and pusher_options['port']
|
170
|
-
options[:ws_path] = pusher_options['path'] if pusher_options['path']
|
171
|
-
options[:ws_path] = '/' << options[:ws_path] unless options[:ws_path].nil? or options[:ws_path].start_with? '/'
|
172
|
-
options[:ssl_verify] = session.ssl.fetch(:verify, true)
|
173
|
-
options
|
174
|
-
end
|
172
|
+
session.user.channels
|
173
|
+
end
|
175
174
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
175
|
+
def pusher_options
|
176
|
+
pusher_options = session.config['pusher'] || {}
|
177
|
+
encrypted = pusher_options['scheme'] != 'http'
|
178
|
+
options = { encrypted:, session: }
|
179
|
+
options[:ws_host] = pusher_options['host'] if pusher_options['host']
|
180
|
+
options[:wss_port] = pusher_options['port'] if encrypted && pusher_options['port']
|
181
|
+
options[:ws_port] = pusher_options['port'] if !encrypted && pusher_options['port']
|
182
|
+
options[:ws_path] = pusher_options['path'] if pusher_options['path']
|
183
|
+
unless options[:ws_path].nil? || options[:ws_path].start_with?('/')
|
184
|
+
options[:ws_path] =
|
185
|
+
'/' << options[:ws_path]
|
186
|
+
end
|
187
|
+
options[:ssl_verify] = session.ssl.fetch(:verify, true)
|
188
|
+
options
|
189
|
+
end
|
190
|
+
|
191
|
+
def pusher_key
|
192
|
+
session.config.fetch('pusher').fetch('key')
|
193
|
+
rescue IndexError
|
194
|
+
raise Travis::Client::Error, "#{session.api_endpoint} is missing pusher key"
|
195
|
+
end
|
181
196
|
end
|
182
197
|
end
|
183
198
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'travis/client'
|
2
4
|
require 'yaml'
|
3
5
|
|
@@ -17,12 +19,13 @@ module Travis
|
|
17
19
|
end
|
18
20
|
|
19
21
|
def github_auth(github_token)
|
20
|
-
reply = session.post_raw(
|
21
|
-
unless reply.respond_to?(:key?) && reply.key?(
|
22
|
-
raise InvalidTokenError,
|
22
|
+
reply = session.post_raw('/auth/github', github_token:)
|
23
|
+
unless reply.respond_to?(:key?) && reply.key?('access_token')
|
24
|
+
raise InvalidTokenError,
|
25
|
+
'token is invalid, or does not have sufficient scope; see https://docs.travis-ci.com/user/github-oauth-scopes/ for more information on scope'
|
23
26
|
end
|
24
27
|
|
25
|
-
session.access_token = reply[
|
28
|
+
session.access_token = reply['access_token']
|
26
29
|
end
|
27
30
|
|
28
31
|
def explicit_api_endpoint?
|
@@ -67,7 +70,7 @@ module Travis
|
|
67
70
|
end
|
68
71
|
|
69
72
|
def accounts
|
70
|
-
session.find_many(Account, :
|
73
|
+
session.find_many(Account, all: true)
|
71
74
|
end
|
72
75
|
|
73
76
|
def broadcasts
|
@@ -78,12 +81,14 @@ module Travis
|
|
78
81
|
# btw, internally we call this reset, not restart, as it resets the state machine
|
79
82
|
# but we thought that would be too confusing
|
80
83
|
raise Error, "cannot restart a #{entity.class.one}" unless entity.restartable?
|
84
|
+
|
81
85
|
session.post_raw("/#{entity.class.many}/#{entity.id}/restart")
|
82
86
|
entity.reload
|
83
87
|
end
|
84
88
|
|
85
89
|
def cancel(entity)
|
86
90
|
raise Error, "cannot cancel a #{entity.class.one}" unless entity.cancelable?
|
91
|
+
|
87
92
|
session.post_raw("/#{entity.class.many}/#{entity.id}/cancel")
|
88
93
|
entity.reload
|
89
94
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'travis/client'
|
2
4
|
|
3
5
|
module Travis
|
@@ -7,7 +9,8 @@ module Travis
|
|
7
9
|
attr_accessor :namespace, :type
|
8
10
|
|
9
11
|
def initialize(namespace, type)
|
10
|
-
@namespace
|
12
|
+
@namespace = namespace
|
13
|
+
@type = type
|
11
14
|
end
|
12
15
|
|
13
16
|
def find_one(id = nil)
|
@@ -41,9 +44,9 @@ module Travis
|
|
41
44
|
|
42
45
|
private
|
43
46
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
+
def session
|
48
|
+
namespace.session
|
49
|
+
end
|
47
50
|
end
|
48
51
|
|
49
52
|
include Methods
|
@@ -66,20 +69,21 @@ module Travis
|
|
66
69
|
|
67
70
|
private
|
68
71
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
end
|
72
|
+
def fix_names(klass)
|
73
|
+
constants.each do |name|
|
74
|
+
const = klass.const_get(name)
|
75
|
+
klass.const_set(name, const) if const == const_get(name)
|
74
76
|
end
|
77
|
+
end
|
75
78
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
79
|
+
def delegate_session(klass)
|
80
|
+
return if [Object, Kernel].include?(klass)
|
81
|
+
|
82
|
+
klass.extend(Methods)
|
83
|
+
namespace = self
|
84
|
+
klass.define_singleton_method(:session) { namespace.session }
|
85
|
+
klass.define_singleton_method(:session=) { |value| namespace.session = value }
|
86
|
+
end
|
83
87
|
end
|
84
88
|
end
|
85
89
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'travis/client'
|
2
4
|
require 'travis/tools/ssl_key'
|
3
5
|
|
@@ -14,7 +16,7 @@ module Travis
|
|
14
16
|
|
15
17
|
def encrypt(value)
|
16
18
|
encrypted = to_rsa.public_encrypt(value)
|
17
|
-
Base64.encode64(encrypted).gsub(/\s+/,
|
19
|
+
Base64.encode64(encrypted).gsub(/\s+/, '')
|
18
20
|
end
|
19
21
|
|
20
22
|
def to_rsa
|
@@ -34,7 +36,8 @@ module Travis
|
|
34
36
|
preloadable
|
35
37
|
|
36
38
|
# @!parse attr_reader :slug, :description
|
37
|
-
attributes :slug, :active, :private, :admin, :description, :last_build_id, :last_build_number, :last_build_state,
|
39
|
+
attributes :slug, :active, :private, :admin, :description, :last_build_id, :last_build_number, :last_build_state,
|
40
|
+
:last_build_duration, :last_build_started_at, :last_build_finished_at, :github_language
|
38
41
|
inspect_info :slug
|
39
42
|
|
40
43
|
time :last_build_finished_at, :last_build_started_at
|
@@ -51,14 +54,14 @@ module Travis
|
|
51
54
|
end
|
52
55
|
|
53
56
|
def public_key
|
54
|
-
attributes[
|
57
|
+
attributes['public_key'] ||= begin
|
55
58
|
payload = session.get_raw("/repos/#{id}/key")
|
56
59
|
Key.new(payload.fetch('key'), payload['fingerprint'])
|
57
60
|
end
|
58
61
|
end
|
59
62
|
|
60
63
|
def name
|
61
|
-
slug[
|
64
|
+
slug[%r{[^/]+$}]
|
62
65
|
end
|
63
66
|
|
64
67
|
def public_key=(key)
|
@@ -75,6 +78,7 @@ module Travis
|
|
75
78
|
# @!parse attr_reader :last_build
|
76
79
|
def last_build
|
77
80
|
return unless last_build_id
|
81
|
+
|
78
82
|
attributes['last_build'] ||= begin
|
79
83
|
last_build = session.find_one(Build, last_build_id)
|
80
84
|
last_build.number = last_build_number
|
@@ -89,11 +93,12 @@ module Travis
|
|
89
93
|
|
90
94
|
def builds(params = nil)
|
91
95
|
return each_build unless params
|
92
|
-
|
96
|
+
|
97
|
+
session.find_many(Build, params.merge(repository_id: id))
|
93
98
|
end
|
94
99
|
|
95
100
|
def build(number)
|
96
|
-
builds(:
|
101
|
+
builds(number: number.to_s).first
|
97
102
|
end
|
98
103
|
|
99
104
|
def recent_builds
|
@@ -102,7 +107,8 @@ module Travis
|
|
102
107
|
|
103
108
|
def last_on_branch(name = nil)
|
104
109
|
return branch(name) if name
|
105
|
-
|
110
|
+
|
111
|
+
attributes['last_on_branch'] ||= session.get('branches', repository_id: id)['branches']
|
106
112
|
end
|
107
113
|
|
108
114
|
def branches
|
@@ -112,19 +118,24 @@ module Travis
|
|
112
118
|
def branch(name)
|
113
119
|
attributes['branches'] ||= {}
|
114
120
|
attributes['branches'][name] ||= begin
|
115
|
-
|
121
|
+
if attributes['last_on_branch']
|
122
|
+
build = attributes['last_on_branch'].detect do |b|
|
123
|
+
b.commit.branch == name.to_s
|
124
|
+
end
|
125
|
+
end
|
116
126
|
build || session.get("/repos/#{id}/branches/#{name}")['branch']
|
117
127
|
end
|
118
128
|
end
|
119
129
|
|
120
130
|
def each_build(params = nil, &block)
|
121
131
|
return enum_for(__method__, params) unless block_given?
|
132
|
+
|
122
133
|
params ||= {}
|
123
134
|
chunk = builds(params)
|
124
135
|
until chunk.empty?
|
125
136
|
chunk.each(&block)
|
126
137
|
number = chunk.last.number
|
127
|
-
chunk = number == '1' ? [] : builds(params.merge(:
|
138
|
+
chunk = number == '1' ? [] : builds(params.merge(after_number: number))
|
128
139
|
end
|
129
140
|
self
|
130
141
|
end
|
@@ -133,12 +144,12 @@ module Travis
|
|
133
144
|
build_number = number.to_s[/^\d+/] or return nil
|
134
145
|
build = build(build_number) or return nil
|
135
146
|
job = build.jobs.detect { |j| j.number == number } if number != build_number
|
136
|
-
job ||= build.jobs.first if build
|
147
|
+
job ||= build.jobs.first if build && (build.jobs.size == 1)
|
137
148
|
job
|
138
149
|
end
|
139
150
|
|
140
151
|
def set_hook(flag)
|
141
|
-
result = session.put_raw('/hooks/', :
|
152
|
+
result = session.put_raw('/hooks/', hook: { id:, active: flag })
|
142
153
|
result['result']
|
143
154
|
end
|
144
155
|
|
@@ -152,10 +163,10 @@ module Travis
|
|
152
163
|
|
153
164
|
def pusher_channels
|
154
165
|
attributes['pusher_channels'] ||= if session.private_channels?
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
166
|
+
["user-#{session.user.id}", "repo-#{id}"]
|
167
|
+
else
|
168
|
+
['common']
|
169
|
+
end
|
159
170
|
end
|
160
171
|
|
161
172
|
def member?
|
@@ -163,7 +174,7 @@ module Travis
|
|
163
174
|
end
|
164
175
|
|
165
176
|
def owner_name
|
166
|
-
slug[
|
177
|
+
slug[%r{^[^/]+}]
|
167
178
|
end
|
168
179
|
|
169
180
|
def owner
|
@@ -171,7 +182,7 @@ module Travis
|
|
171
182
|
end
|
172
183
|
|
173
184
|
def requests
|
174
|
-
attributes['requests'] ||= session.find_many(Request, :
|
185
|
+
attributes['requests'] ||= session.find_many(Request, repository_id: id)
|
175
186
|
end
|
176
187
|
|
177
188
|
def settings
|
@@ -181,7 +192,7 @@ module Travis
|
|
181
192
|
settings
|
182
193
|
end
|
183
194
|
rescue Travis::Client::NotFound
|
184
|
-
raise Travis::Client::Error,
|
195
|
+
raise Travis::Client::Error, 'not allowed to access settings'
|
185
196
|
end
|
186
197
|
|
187
198
|
def caches(params = {})
|
@@ -193,8 +204,9 @@ module Travis
|
|
193
204
|
end
|
194
205
|
|
195
206
|
def active?
|
196
|
-
# TODO remove once active is properly synced and exposed by api
|
207
|
+
# TODO: remove once active is properly synced and exposed by api
|
197
208
|
return active unless active.nil?
|
209
|
+
|
198
210
|
last_build_id?
|
199
211
|
end
|
200
212
|
|
@@ -216,9 +228,9 @@ module Travis
|
|
216
228
|
|
217
229
|
private
|
218
230
|
|
219
|
-
|
220
|
-
|
221
|
-
|
231
|
+
def state
|
232
|
+
last_build_state
|
233
|
+
end
|
222
234
|
end
|
223
235
|
end
|
224
236
|
end
|
@@ -1,10 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'travis/client/weak_entity'
|
2
4
|
|
3
5
|
module Travis
|
4
6
|
module Client
|
5
7
|
class Request < WeakEntity
|
6
8
|
# @!parse attr_reader :commit_id, :repository_id, :created_at, :owner_id, :owner_type, :event_type, :base_commit, :head_commit, :result, :message, :pull_request, :pull_request_number, :pull_request_title, :branch, :tag
|
7
|
-
attributes :commit_id, :repository_id, :created_at, :owner_id, :owner_type, :event_type, :base_commit,
|
9
|
+
attributes :commit_id, :repository_id, :created_at, :owner_id, :owner_type, :event_type, :base_commit,
|
10
|
+
:head_commit, :result, :message, :pull_request, :pull_request_number, :pull_request_title, :branch, :tag
|
8
11
|
time :created_at
|
9
12
|
|
10
13
|
# @!parse attr_reader :repository
|
@@ -29,7 +32,7 @@ module Travis
|
|
29
32
|
[
|
30
33
|
repository && repository.slug,
|
31
34
|
event_type, branch || pull_request_number, result
|
32
|
-
].compact.join(
|
35
|
+
].compact.join(' ')
|
33
36
|
end
|
34
37
|
end
|
35
38
|
end
|