entitlements-github-plugin 1.2.4 → 1.2.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 071c51c88ea969a0054354c03b389caa59e505d54a2fb75bcbdc9e85a6422101
4
- data.tar.gz: 207da4d9282f67aab20d0cdc2d70b7c167744b193f78010c6404f8de53923801
3
+ metadata.gz: e8b4641323dd4da38ecb87c7f94eacecdfc20508dfdeb0e1b02030c31fe67ab7
4
+ data.tar.gz: c9180370314b8e80b776ecc554fba1310cc690a246ddc1ac99509263dbb01547
5
5
  SHA512:
6
- metadata.gz: 06d52ba0138200f3fde882c0b346850cd9d01c216aba74b565a87b960c8aa72aea1ac081de1e7414e2f2e38bdc025856449a276a5fcc3fd76a1f0013630273a9
7
- data.tar.gz: 7aa06883ee15010437d009b96ac5831e5ca9cb1585e96b6f11ec626d3e43761343b0d21bb1907260a3faf3e76f0e2f18e716dc2db231e2182b59efa8f028b57a
6
+ metadata.gz: a0311bcc81ebeac4a1ea1852962bf5a7b592771e2ed11ab1955e199bf5d935d5117e7632167d6bcda55d6b979167faa1cba79744282e55957e011975816b8417
7
+ data.tar.gz: 6de304801162205be96002493fedff35431cc37823fdc0b6f80933731fd89ae7ce15cf820be1a8e82dbb77a607e50a0900cba9604872566fac8b829d01c58fc2
@@ -104,7 +104,8 @@ module Entitlements
104
104
  # Returns an Entitlements::Models::Group object.
105
105
  Contract String => Entitlements::Models::Group
106
106
  def role_to_group(role)
107
- members = github.org_members.keys.select { |username| github.org_members[username] == role }
107
+ org_members = github.org_members
108
+ members = org_members.select { |_, member_role| member_role == role }.keys
108
109
  Entitlements::Models::Group.new(
109
110
  dn: role_dn(role),
110
111
  members: Set.new(members),
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative "../config/retry"
4
4
 
5
+ require "faraday/net_http_persistent"
5
6
  require "net/http"
6
7
  require "octokit"
7
8
  require "uri"
@@ -169,6 +170,9 @@ module Entitlements
169
170
  def octokit
170
171
  @octokit ||= begin
171
172
  client = Octokit::Client.new(access_token: token)
173
+ middleware = Octokit::Default.middleware.dup
174
+ middleware.adapter :net_http_persistent
175
+ client.middleware = middleware
172
176
  client.api_endpoint = addr if addr
173
177
  client.auto_paginate = true
174
178
  client.per_page = 100
@@ -388,23 +392,29 @@ module Entitlements
388
392
  return { code: response.code.to_i, data: { "body" => response.body } }
389
393
  end
390
394
 
391
- begin
392
- data = JSON.parse(response.body)
393
- if data.key?("errors")
394
- # Synthesized 500 below triggers a retry, so log at WARN. Note: some GraphQL
395
- # `errors` are permanent (bad query, auth, schema). The retry wrapper's final
396
- # "Giving up" ERROR will surface persistent cases.
397
- Entitlements.logger.warn "Errors reported: #{data['errors'].inspect}"
398
- return { code: 500, data: }
399
- end
400
- { code: response.code.to_i, data: }
401
- rescue JSON::ParserError => e
402
- # JSON parse errors mean the API returned something we can't interpret. The
403
- # synthesized 500 below triggers a retry, but the cause is more likely a real
404
- # protocol/server problem than a transient network blip, so log at ERROR.
405
- Entitlements.logger.error "#{e.class} #{e.message}: #{response.body.inspect}"
406
- { code: 500, data: { "body" => response.body } }
395
+ data = JSON.parse(response.body)
396
+ if data.key?("errors")
397
+ # Synthesized 500 below triggers a retry, so log at WARN. Note: some GraphQL
398
+ # `errors` are permanent (bad query, auth, schema). The retry wrapper's final
399
+ # "Giving up" ERROR will surface persistent cases.
400
+ Entitlements.logger.warn "Errors reported: #{data['errors'].inspect}"
401
+ return { code: 500, data: }
407
402
  end
403
+
404
+ { code: response.code.to_i, data: }
405
+
406
+ rescue Net::ReadTimeout => e
407
+ # Defend against network blips, those can be safely retried via the
408
+ # synthesized 500 below, so log at WARN.
409
+ reset_graphql_http
410
+ Entitlements.logger.warn "#{e.class} #{e.message}"
411
+ { code: 500, data: nil }
412
+ rescue JSON::ParserError => e
413
+ # JSON parse errors mean the API returned something we can't interpret. The
414
+ # synthesized 500 below triggers a retry, but the cause is more likely a real
415
+ # protocol/server problem than a transient network blip, so log at ERROR.
416
+ Entitlements.logger.error "#{e.class} #{e.message}: #{response.body.inspect}"
417
+ { code: 500, data: { "body" => response.body } }
408
418
  rescue => e
409
419
  # Catch-all for any unexpected exception (network blip OR local code bug).
410
420
  # We retry below via the synthesized 500, but log at ERROR because this
data/lib/version.rb CHANGED
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Entitlements
4
4
  module Version
5
- VERSION = "1.2.4"
5
+ VERSION = "1.2.6"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: entitlements-github-plugin
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.4
4
+ version: 1.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - GitHub, Inc. Security Ops
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-09-09 00:00:00.000000000 Z
11
+ date: 2026-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: contracts
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: faraday-net_http_persistent
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.3'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.3'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: faraday-retry
43
57
  requirement: !ruby/object:Gem::Requirement