improved_jenkins_client 1.6.0 → 1.6.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 19904a21383083aac042b3519246181d77b42a0dd70a9d24681c3f1b1f4107eb
4
- data.tar.gz: 59edb7776fff8d492802d16cbc098af2b7caf6143c98f9126a480050fc5aa510
3
+ metadata.gz: 6d924687d191c069d05698fc954924efa40f1024ab280be5d7d13f434c20b680
4
+ data.tar.gz: 760ca0221281fec74064f4f151927ff765dc2f0024c155ed0bdf154f02346f9a
5
5
  SHA512:
6
- metadata.gz: 612ea06785632e4b6392bcd2b8ee6250945f3baa59f96cae4c08fe1b28dbc4d5169ab25a3fb645d857cbac1e59e8561e6617b32625aea626ab505d7a87ce8aa9
7
- data.tar.gz: 7f60050161fb200ef85ecb5d6304830dd6c9f7b339ee4fc16a727b1bcdab75efe4474cdce6181e8bc3d89428c663e77c88fd7acb6247ea53e29f91dc2ca6db20
6
+ metadata.gz: 4f46f6c49204c1ac5562d2dad223eec0411e622404f0fe6db4824a792367809b1237b202db9d6951037d4271f4434adf8c90e13dcd0d742bf428c09fc4c70f6d
7
+ data.tar.gz: c54d3c43bc7ddc242bf63081f4bde37e7b3e9700f73badbcac2681e2dbbd89e95d21eb5192b80a46aca1ad833d5bd1875c02dc6bfa12920bde4877c7b4d3d81e
@@ -8,7 +8,8 @@ Gem::Specification.new do |s|
8
8
 
9
9
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
10
10
  s.require_paths = ["lib"]
11
- s.authors = ["Kannan Manickam", "Yugabyte engineering team"]
11
+ s.authors = ["Kannan Manickam (the original jenkins_api_client gem)",
12
+ "Yugabyte Engineering Team (improvements)"]
12
13
  s.description =
13
14
  "\nThis is a simple and easy-to-use Jenkins Api client with features focused on" +
14
15
  "\nautomating Job configuration programaticaly. Based on the improved_jenkins_client with" +
@@ -18,7 +19,7 @@ Gem::Specification.new do |s|
18
19
  s.executables = ['jenkinscli']
19
20
  s.files = `git ls-files -z`.split("\x0").select { |f| f.match(%r{lib/|bin/|java_deps/|gemspec}) }
20
21
  s.require_paths = ['lib']
21
- s.homepage = 'https://github.com/yugabyte-db/improved-ruby-jenkins-client'
22
+ s.homepage = 'https://github.com/yugabyte-db/improved_jenkins_client'
22
23
  s.required_ruby_version = ::Gem::Requirement.new('~> 2.1')
23
24
  s.rubygems_version = "2.4.5.1"
24
25
  s.summary = "Improved Jenkins JSON API Client"
@@ -72,7 +72,8 @@ module JenkinsApi
72
72
  "ca_file",
73
73
  "follow_redirects",
74
74
  "identity_file",
75
- "cookies"
75
+ "cookies",
76
+ "pretty_json_responses"
76
77
  ].freeze
77
78
 
78
79
  # Initialize a Client object with Jenkins CI server credentials
@@ -106,6 +107,7 @@ module JenkinsApi
106
107
  # @option args [Fixnum] :log_level (Logger::INFO) The level for messages to be logged. Should be one of:
107
108
  # Logger::DEBUG (0), Logger::INFO (1), Logger::WARN (2), Logger::ERROR (2), Logger::FATAL (3)
108
109
  # @option args [String] :cookies Cookies to be sent with all requests in the format: name=value; name2=value2
110
+ # @option args [Boolean] :pretty_json_responses Whether to append pretty=true to most JSON GET requests.
109
111
  #
110
112
  # @return [JenkinsApi::Client] a client object to Jenkins API
111
113
  #
@@ -415,18 +417,26 @@ module JenkinsApi
415
417
  raw_response = false)
416
418
  url_prefix = "#{@jenkins_path}#{url_prefix}"
417
419
  to_get = ""
420
+
421
+
418
422
  if tree
419
423
  to_get = "#{url_prefix}#{url_suffix}?#{tree}"
424
+ query_param_separator = "&"
420
425
  else
421
426
  to_get = "#{url_prefix}#{url_suffix}"
427
+ query_param_separator = "?"
428
+ end
429
+ if @pretty_json_responses && url_suffix == "/api/json"
430
+ to_get += query_param_separator
431
+ to_get += "pretty=true"
422
432
  end
423
433
  request = Net::HTTP::Get.new(to_get)
424
434
  @logger.debug "GET #{to_get}"
425
435
  response = make_http_request(request)
426
436
  if raw_response
427
- handle_exception(response, "raw")
437
+ handle_exception(response, "raw", full_url: to_get)
428
438
  else
429
- handle_exception(response, "body", url_suffix =~ /json/)
439
+ handle_exception(response, "body", url_suffix =~ /json/, full_url: to_get)
430
440
  end
431
441
  end
432
442
 
@@ -797,8 +807,11 @@ module JenkinsApi
797
807
  # @raise [Exceptions::ApiException] Any other exception returned from
798
808
  # Jenkins that are not categorized in the API Client.
799
809
  #
800
- def handle_exception(response, to_send = "code", send_json = false)
810
+ def handle_exception(response, to_send = "code", send_json = false, full_url: nil)
801
811
  msg = "HTTP Code: #{response.code}, Response Body: #{response.body}"
812
+ unless full_url.nil?
813
+ msg += " URL: #{full_url}"
814
+ end
802
815
  @logger.debug msg
803
816
  case response.code.to_i
804
817
  # As of Jenkins version 1.519, the job builds return a 201 status code
@@ -723,14 +723,73 @@ module JenkinsApi
723
723
  # @param [String] job_name
724
724
  #
725
725
  def get_builds(job_name, options = {})
726
- @logger.info "Obtaining the build details of '#{job_name}'"
726
+ @logger.info "Obtaining the builds of job '#{job_name}'"
727
727
  url = "/job/#{path_encode job_name}"
728
728
 
729
- tree = options[:tree] || nil
729
+ tree = options[:tree]
730
730
  response_json = @client.api_get_request url, tree_string(tree)
731
731
  response_json["builds"]
732
732
  end
733
733
 
734
+ # Yields all builds using the allBuilds API endpoint.
735
+ #
736
+ # @param job_name [String] the job to retrieve builds for
737
+ # @param fields [Array] the fields to retrieve from each build. ['*'] by default, meaning all
738
+ # fields
739
+ # @param limit [Integer] the maximum total number of builds to retrieve
740
+ # @param page_size [Integer] the number of builds to retrieve at once
741
+ #
742
+ def each_build(
743
+ job_name,
744
+ fields: ['*'],
745
+ start_index: 0,
746
+ limit: nil,
747
+ page_size: 100)
748
+ unless page_size.is_a?(Integer) && page_size >= 1
749
+ raise "Invalid page size: #{page_size} (#{page_size.class}) -- must be at least one"
750
+ end
751
+ unless start_index.is_a?(Integer) && start_index >= 0
752
+ raise "Invalid start index: #{start_index} (#{start_index.class}), must be a " +
753
+ "nonnegative integer"
754
+ end
755
+ unless limit.nil? || limit.is_a?(Integer) && limit >= 0
756
+ raise "Invalid limit: #{limit} (#{limit.class}) -- must be nil or a non-negative integer"
757
+ end
758
+ unless fields.is_a?(Array) && fields.size >= 1
759
+ raise "Invalid array of fields to retrieve: #{fields} (#{fields.class}), must have at " +
760
+ "least one element"
761
+ end
762
+
763
+ start_index = 0
764
+ url = "/job/#{path_encode job_name}"
765
+ fields_str = fields.join(',')
766
+ while limit.nil? || start_index < limit do
767
+ @logger.info(
768
+ "Obtaining the build details of '#{job_name}' (fields: #{fields}) starting at " +
769
+ "index #{start_index} with page size #{page_size}")
770
+
771
+ end_index = start_index + page_size
772
+ end_index = limit if !limit.nil? && end_index > limit
773
+
774
+ break if start_index >= end_index
775
+
776
+ tree = "allBuilds[#{fields_str}]{#{start_index},#{end_index}}"
777
+ response_json = @client.api_get_request(url, tree_string(tree))
778
+ build_range = response_json["allBuilds"]
779
+
780
+ break if build_range.size == 0 # End of results.
781
+
782
+ build_range.each do |result|
783
+ yield result
784
+ end
785
+
786
+ # We got some results but less than what we asked for. This must be the last page.
787
+ break if build_range.size < end_index - start_index
788
+
789
+ start_index += page_size
790
+ end
791
+ end
792
+
734
793
  # This method maps the color to status of a job
735
794
  #
736
795
  # @param [String] color color given by the API for a job
@@ -1134,13 +1193,14 @@ module JenkinsApi
1134
1193
  #
1135
1194
  # @param [String] job_name
1136
1195
  # @param [Number] build_num
1196
+ # @param [String] tree
1137
1197
  #
1138
- def get_build_details(job_name, build_num)
1198
+ def get_build_details(job_name, build_num, tree: nil)
1139
1199
  build_num = get_current_build_number(job_name) if build_num == 0
1140
- @logger.info "Obtaining the build details of '#{job_name}'" +
1141
- " Build ##{build_num}"
1200
+ log_msg = "Obtaining the build details of '#{job_name}' Build ##{build_num}"
1201
+ log_msg += " (with tree=...)" unless tree.nil?
1142
1202
 
1143
- @client.api_get_request("/job/#{path_encode job_name}/#{build_num}/")
1203
+ @client.api_get_request("/job/#{path_encode job_name}/#{build_num}/", tree_string(tree))
1144
1204
  end
1145
1205
 
1146
1206
  # Change the description of a specific job
@@ -27,7 +27,7 @@ module JenkinsApi
27
27
  # Minor version of the gem
28
28
  MINOR = 6
29
29
  # Tiny version of the gem used for patches
30
- TINY = 0
30
+ TINY = 5
31
31
  # Used for pre-releases
32
32
  PRE = nil
33
33
  # Version String of Jenkins API Client.
metadata CHANGED
@@ -1,11 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: improved_jenkins_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.6.5
5
5
  platform: ruby
6
6
  authors:
7
- - Kannan Manickam
8
- - Yugabyte engineering team
7
+ - Kannan Manickam (the original jenkins_api_client gem)
8
+ - Yugabyte Engineering Team (improvements)
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
@@ -146,7 +146,7 @@ files:
146
146
  - lib/improved_jenkins_client/user.rb
147
147
  - lib/improved_jenkins_client/version.rb
148
148
  - lib/improved_jenkins_client/view.rb
149
- homepage: https://github.com/yugabyte-db/improved-ruby-jenkins-client
149
+ homepage: https://github.com/yugabyte-db/improved_jenkins_client
150
150
  licenses:
151
151
  - MIT
152
152
  metadata: {}
@@ -165,7 +165,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
167
  requirements: []
168
- rubygems_version: 3.1.4
168
+ rubyforge_project:
169
+ rubygems_version: 2.7.6.3
169
170
  signing_key:
170
171
  specification_version: 4
171
172
  summary: Improved Jenkins JSON API Client