buildkit 1.3.0 → 1.4.0
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/.rubocop.yml +8 -2
- data/.travis.yml +1 -1
- data/buildkit.gemspec +2 -4
- data/lib/buildkit/client.rb +42 -6
- data/lib/buildkit/client/artifacts.rb +10 -0
- data/lib/buildkit/header_link_parser.rb +26 -0
- data/lib/buildkit/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6bfeb459ca2ab1b4f33f68b3af71c8e5000a3c1d
|
4
|
+
data.tar.gz: 627be0e606c9781b8a1378630abceb8954ec49ae
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ef6f8e563bccf36437c2def7676473a124a5f7a4a3cb9ef6f8cfaea8bf424d4a72c933c52714756928bbd14aed289cd17afc45aaed6fea1f7ff75502b2d445a
|
7
|
+
data.tar.gz: 733f57b132f8788603b8e618448769967c5f78daa5524ed8abc5b5e425d2b1199609b5fd62bdd222a313a3874d007da022802edd3026c7548d7402bc8a0399fe
|
data/.rubocop.yml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
inherit_from: .rubocop_todo.yml
|
2
2
|
|
3
3
|
AllCops:
|
4
|
-
TargetRubyVersion: 2.
|
4
|
+
TargetRubyVersion: 2.2
|
5
5
|
|
6
6
|
Metrics/LineLength:
|
7
7
|
Max: 120
|
@@ -9,6 +9,9 @@ Metrics/LineLength:
|
|
9
9
|
Metrics/MethodLength:
|
10
10
|
Max: 25
|
11
11
|
|
12
|
+
Metrics/ClassLength:
|
13
|
+
Enabled: false
|
14
|
+
|
12
15
|
Metrics/BlockLength:
|
13
16
|
Enabled: false # RSpec ... :facepalm:
|
14
17
|
|
@@ -39,7 +42,10 @@ Style/PerlBackrefs:
|
|
39
42
|
Style/SpaceInsideHashLiteralBraces:
|
40
43
|
EnforcedStyle: no_space
|
41
44
|
|
42
|
-
Style/
|
45
|
+
Style/TrailingCommaInArrayLiteral:
|
46
|
+
EnforcedStyleForMultiline: comma
|
47
|
+
|
48
|
+
Style/TrailingCommaInHashLiteral:
|
43
49
|
EnforcedStyleForMultiline: comma
|
44
50
|
|
45
51
|
Style/TrailingCommaInArguments:
|
data/.travis.yml
CHANGED
data/buildkit.gemspec
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
lib = File.expand_path('../lib', __FILE__)
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
4
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
3
|
require 'buildkit/version'
|
6
4
|
|
@@ -19,7 +17,7 @@ Gem::Specification.new do |spec|
|
|
19
17
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
18
|
spec.require_paths = ['lib']
|
21
19
|
|
22
|
-
spec.required_ruby_version = '>= 2.
|
20
|
+
spec.required_ruby_version = '>= 2.2'
|
23
21
|
|
24
22
|
spec.add_dependency 'sawyer', '~> 0.6'
|
25
23
|
spec.add_development_dependency 'bundler'
|
data/lib/buildkit/client.rb
CHANGED
@@ -6,6 +6,7 @@ require 'buildkit/client/pipelines'
|
|
6
6
|
require 'buildkit/client/jobs'
|
7
7
|
require 'buildkit/client/artifacts'
|
8
8
|
require 'buildkit/response/raise_error'
|
9
|
+
require 'buildkit/header_link_parser'
|
9
10
|
|
10
11
|
module Buildkit
|
11
12
|
class Client
|
@@ -15,6 +16,7 @@ module Buildkit
|
|
15
16
|
include Pipelines
|
16
17
|
include Jobs
|
17
18
|
include Artifacts
|
19
|
+
include HeaderLinkParser
|
18
20
|
|
19
21
|
DEFAULT_ENDPOINT = 'https://api.buildkite.com/v2/'.freeze
|
20
22
|
|
@@ -24,6 +26,8 @@ module Buildkit
|
|
24
26
|
# In Faraday 0.9, Faraday::Builder was renamed to Faraday::RackBuilder
|
25
27
|
RACK_BUILDER_CLASS = defined?(Faraday::RackBuilder) ? Faraday::RackBuilder : Faraday::Builder
|
26
28
|
|
29
|
+
attr_accessor :auto_paginate
|
30
|
+
|
27
31
|
class << self
|
28
32
|
def build_middleware
|
29
33
|
RACK_BUILDER_CLASS.new do |builder|
|
@@ -36,10 +40,11 @@ module Buildkit
|
|
36
40
|
|
37
41
|
def initialize(endpoint: ENV.fetch('BUILDKITE_API_ENDPOINT', DEFAULT_ENDPOINT),
|
38
42
|
token: ENV.fetch('BUILDKITE_API_TOKEN'),
|
39
|
-
middleware: self.class.build_middleware)
|
43
|
+
middleware: self.class.build_middleware, auto_paginate: false)
|
40
44
|
@middleware = middleware
|
41
45
|
@endpoint = endpoint
|
42
46
|
@token = token
|
47
|
+
@auto_paginate = auto_paginate
|
43
48
|
end
|
44
49
|
|
45
50
|
# Make a HTTP GET request
|
@@ -48,7 +53,11 @@ module Buildkit
|
|
48
53
|
# @param options [Hash] Query and header params for request
|
49
54
|
# @return [Sawyer::Resource]
|
50
55
|
def get(url, options = {})
|
51
|
-
|
56
|
+
if @auto_paginate
|
57
|
+
paginate :get, url, parse_query_and_convenience_headers(options)
|
58
|
+
else
|
59
|
+
request :get, url, parse_query_and_convenience_headers(options)
|
60
|
+
end
|
52
61
|
end
|
53
62
|
|
54
63
|
# Make a HTTP POST request
|
@@ -109,19 +118,46 @@ module Buildkit
|
|
109
118
|
|
110
119
|
def request(method, path, data, options = {})
|
111
120
|
if data.is_a?(Hash)
|
112
|
-
options
|
113
|
-
options[:headers] = data.delete(:headers) || {}
|
121
|
+
options = extract_query_and_headers_from data
|
114
122
|
if accept = data.delete(:accept)
|
115
123
|
options[:headers][:accept] = accept
|
116
124
|
end
|
117
125
|
end
|
118
126
|
|
119
|
-
@last_response = response = sawyer_agent.call(method, URI::
|
127
|
+
@last_response = response = sawyer_agent.call(method, URI::DEFAULT_PARSER.escape(path.to_s), data, options)
|
120
128
|
response.data
|
121
129
|
end
|
122
130
|
|
131
|
+
def extract_query_and_headers_from(data)
|
132
|
+
{
|
133
|
+
query: data.delete(:query) || {},
|
134
|
+
headers: data.delete(:headers) || {},
|
135
|
+
}
|
136
|
+
end
|
137
|
+
|
138
|
+
def paginate(method, path, data, options = {})
|
139
|
+
response = []
|
140
|
+
loop do
|
141
|
+
request method, path, data, options
|
142
|
+
response.concat @last_response.data
|
143
|
+
|
144
|
+
link_header = parse_link_header(@last_response.headers[:link])
|
145
|
+
break if link_header[:next].nil?
|
146
|
+
path = next_page(link_header[:next])
|
147
|
+
end
|
148
|
+
response
|
149
|
+
end
|
150
|
+
|
151
|
+
def next_page(next_page)
|
152
|
+
build_path URI(next_page)
|
153
|
+
end
|
154
|
+
|
155
|
+
def build_path(uri)
|
156
|
+
"#{uri.path}?#{uri.query}"
|
157
|
+
end
|
158
|
+
|
123
159
|
def sawyer_agent
|
124
|
-
@
|
160
|
+
@sawyer_agent ||= Sawyer::Agent.new(@endpoint, sawyer_options) do |http|
|
125
161
|
http.headers[:accept] = 'application/json'
|
126
162
|
http.headers[:content_type] = 'application/json'
|
127
163
|
http.headers[:user_agent] = "Buildkit v#{Buildkit::VERSION}"
|
@@ -13,6 +13,16 @@ module Buildkit
|
|
13
13
|
def artifacts(org, pipeline, build, options = {})
|
14
14
|
get("/v2/organizations/#{org}/pipelines/#{pipeline}/builds/#{build}/artifacts", options)
|
15
15
|
end
|
16
|
+
|
17
|
+
# List all artifacts for a job
|
18
|
+
#
|
19
|
+
# @return [Array<Sawyer::Resource>] Array of hashes representing Buildkite artifacts.
|
20
|
+
# @see https://buildkite.com/docs/rest-api/artifacts#list-artifacts-for-a-job
|
21
|
+
# @example
|
22
|
+
# Buildkit.job_artifacts('my-great-org', 'great-pipeline', 42, '76365070-34d5-4104-8b91-952780f8029f')
|
23
|
+
def job_artifacts(org, pipeline, build, job, options = {})
|
24
|
+
get("/v2/organizations/#{org}/pipelines/#{pipeline}/builds/#{build}/jobs/#{job}/artifacts", options)
|
25
|
+
end
|
16
26
|
end
|
17
27
|
end
|
18
28
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module HeaderLinkParser
|
2
|
+
module_function
|
3
|
+
|
4
|
+
def parse_link_header(link_header)
|
5
|
+
{}.tap do |hash_link|
|
6
|
+
link_header.split(',').each do |link|
|
7
|
+
link_obj = LinkParser.new(link)
|
8
|
+
hash_link[link_obj.name] = link_obj.link
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class LinkParser
|
14
|
+
def initialize(value)
|
15
|
+
@value = value
|
16
|
+
end
|
17
|
+
|
18
|
+
def name
|
19
|
+
@name ||= @value[/rel="(.*)"/, 1].to_sym
|
20
|
+
end
|
21
|
+
|
22
|
+
def link
|
23
|
+
@link ||= @value[/<(.+)>/, 1]
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/buildkit/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: buildkit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jean Boussier
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sawyer
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- lib/buildkit/client/organizations.rb
|
67
67
|
- lib/buildkit/client/pipelines.rb
|
68
68
|
- lib/buildkit/error.rb
|
69
|
+
- lib/buildkit/header_link_parser.rb
|
69
70
|
- lib/buildkit/response/raise_error.rb
|
70
71
|
- lib/buildkit/version.rb
|
71
72
|
homepage: https://github.com/shopify/buildkit
|
@@ -80,7 +81,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
80
81
|
requirements:
|
81
82
|
- - ">="
|
82
83
|
- !ruby/object:Gem::Version
|
83
|
-
version: '2.
|
84
|
+
version: '2.2'
|
84
85
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
86
|
requirements:
|
86
87
|
- - ">="
|