octokit 5.0.0 → 5.1.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/lib/octokit/client/actions_workflow_jobs.rb +61 -0
- data/lib/octokit/client/actions_workflow_runs.rb +15 -1
- data/lib/octokit/client/actions_workflows.rb +22 -0
- data/lib/octokit/client/apps.rb +15 -15
- data/lib/octokit/client/pub_sub_hubbub.rb +7 -7
- data/lib/octokit/client/repositories.rb +1 -3
- data/lib/octokit/client/reviews.rb +2 -2
- data/lib/octokit/client/search.rb +14 -0
- data/lib/octokit/client.rb +2 -0
- data/lib/octokit/configurable.rb +2 -4
- data/lib/octokit/connection.rb +1 -1
- data/lib/octokit/default.rb +18 -18
- data/lib/octokit/error.rb +21 -14
- data/lib/octokit/middleware/follow_redirects.rb +1 -1
- data/lib/octokit/rate_limit.rb +1 -1
- data/lib/octokit/repository.rb +1 -0
- data/lib/octokit/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: abc3f58113bc1ba895a10399af08ffa4cb77046d7ec70b58772fd562a7136f7c
|
4
|
+
data.tar.gz: ccb63539ce291e0146c604643445ca0a4013d6329f6345f3dee4a92d01206970
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca2ff431a0b98c1e38ec32c6fe46c405d5f741a97b33b3288bf44c1cb6641da1ddbd91988114f2174a0740c75c5ab4a63b2b61111a77dfe06ce77ea2b02280dd
|
7
|
+
data.tar.gz: 83638f66161513b9f437906515e3f83bc205b1003d9c7fa11d96579d3bab05b19adfd2969c4b59f44d568b9924c75f16fd5aee91b907d6dc3d655e816a9317b4
|
@@ -0,0 +1,61 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Octokit
|
4
|
+
class Client
|
5
|
+
# Methods for the Actions Workflows jobs API
|
6
|
+
#
|
7
|
+
# @see https://docs.github.com/rest/actions/workflow-jobs
|
8
|
+
module ActionsWorkflowJobs
|
9
|
+
# Get a job for a workflow run
|
10
|
+
#
|
11
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
12
|
+
# @param job_id [Integer, String] Id of the job
|
13
|
+
#
|
14
|
+
# @return [Sawyer::Resource] Job information
|
15
|
+
# @see https://docs.github.com/rest/actions/workflow-jobs#get-a-job-for-a-workflow-run
|
16
|
+
def workflow_run_job(repo, job_id, options = {})
|
17
|
+
get "#{Repository.path repo}/actions/jobs/#{job_id}", options
|
18
|
+
end
|
19
|
+
|
20
|
+
# Download job logs for a workflow run
|
21
|
+
#
|
22
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
23
|
+
# @param job_id [Integer, String] Id of the job
|
24
|
+
#
|
25
|
+
# @return [String] URL to the archived log files of the job
|
26
|
+
# @see https://docs.github.com/rest/actions/workflow-jobs#download-job-logs-for-a-workflow-run
|
27
|
+
def workflow_run_job_logs(repo, job_id, options = {})
|
28
|
+
url = "#{Repository.path repo}/actions/jobs/#{job_id}/logs"
|
29
|
+
|
30
|
+
response = client_without_redirects.head(url, options)
|
31
|
+
response.headers['Location']
|
32
|
+
end
|
33
|
+
|
34
|
+
# List jobs for a workflow run attempt
|
35
|
+
#
|
36
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
37
|
+
# @param run_id [Integer, String] Id of the workflow run
|
38
|
+
# @param attempt_number [Integer, String] Attempt number of the workflow run
|
39
|
+
#
|
40
|
+
# @return [Sawyer::Resource] Jobs information
|
41
|
+
# @see https://docs.github.com/rest/actions/workflow-jobs#list-jobs-for-a-workflow-run-attempt
|
42
|
+
def workflow_run_attempt_jobs(repo, run_id, attempt_number, options = {})
|
43
|
+
paginate "#{Repository.path repo}/actions/runs/#{run_id}/attempts/#{attempt_number}/jobs", options
|
44
|
+
end
|
45
|
+
alias list_workflow_run_attempt_jobs workflow_run_attempt_jobs
|
46
|
+
|
47
|
+
# List jobs for a workflow run
|
48
|
+
#
|
49
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
50
|
+
# @param run_id [Integer, String] Id of the workflow run
|
51
|
+
# @option options [String] :filter Optional filtering by a `completed_at` timestamp
|
52
|
+
#
|
53
|
+
# @return [Sawyer::Resource] Jobs information
|
54
|
+
# @see https://docs.github.com/rest/actions/workflow-jobs#list-jobs-for-a-workflow-run
|
55
|
+
def workflow_run_jobs(repo, run_id, options = {})
|
56
|
+
paginate "#{Repository.path repo}/actions/runs/#{run_id}/jobs", options
|
57
|
+
end
|
58
|
+
alias list_workflow_run_jobs workflow_run_jobs
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -2,6 +2,9 @@
|
|
2
2
|
|
3
3
|
module Octokit
|
4
4
|
class Client
|
5
|
+
# Methods for the Actions Workflows runs API
|
6
|
+
#
|
7
|
+
# @see https://docs.github.com/rest/actions/workflow-runs
|
5
8
|
module ActionsWorkflowRuns
|
6
9
|
# List all runs for a repository workflow
|
7
10
|
#
|
@@ -92,7 +95,7 @@ module Octokit
|
|
92
95
|
response.headers['Location']
|
93
96
|
end
|
94
97
|
|
95
|
-
#
|
98
|
+
# Delete all log files of a workflow run
|
96
99
|
#
|
97
100
|
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
98
101
|
# @param id [Integer] Id of a workflow run
|
@@ -102,6 +105,17 @@ module Octokit
|
|
102
105
|
def delete_workflow_run_logs(repo, id, options = {})
|
103
106
|
boolean_from_response :delete, "#{Repository.path repo}/actions/runs/#{id}/logs", options
|
104
107
|
end
|
108
|
+
|
109
|
+
# Get workflow run usage
|
110
|
+
#
|
111
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
112
|
+
# @param id [Integer] Id of a workflow run
|
113
|
+
#
|
114
|
+
# @return [Sawyer::Resource] Run usage
|
115
|
+
# @see https://developer.github.com/v3/actions/workflow-runs/#get-workflow-run-usage
|
116
|
+
def workflow_run_usage(repo, id, options = {})
|
117
|
+
get "#{Repository.path repo}/actions/runs/#{id}/timing", options
|
118
|
+
end
|
105
119
|
end
|
106
120
|
end
|
107
121
|
end
|
@@ -39,6 +39,28 @@ module Octokit
|
|
39
39
|
def workflow_dispatch(repo, id, ref, options = {})
|
40
40
|
boolean_from_response :post, "#{Repository.path repo}/actions/workflows/#{id}/dispatches", options.merge({ ref: ref })
|
41
41
|
end
|
42
|
+
|
43
|
+
# Enable a workflow
|
44
|
+
#
|
45
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
46
|
+
# @param id [Integer, String] Id or file name of the workflow
|
47
|
+
#
|
48
|
+
# @return [Boolean] True if workflow was enabled, false otherwise
|
49
|
+
# @see https://docs.github.com/en/rest/actions/workflows#enable-a-workflow
|
50
|
+
def workflow_enable(repo, id, options = {})
|
51
|
+
boolean_from_response :put, "#{Repository.path repo}/actions/workflows/#{id}/enable", options
|
52
|
+
end
|
53
|
+
|
54
|
+
# Disable a workflow
|
55
|
+
#
|
56
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
57
|
+
# @param id [Integer, String] Id or file name of the workflow
|
58
|
+
#
|
59
|
+
# @return [Boolean] True if workflow was disabled, false otherwise
|
60
|
+
# @see https://docs.github.com/en/rest/actions/workflows#disable-a-workflow
|
61
|
+
def workflow_disable(repo, id, options = {})
|
62
|
+
boolean_from_response :put, "#{Repository.path repo}/actions/workflows/#{id}/disable", options
|
63
|
+
end
|
42
64
|
end
|
43
65
|
end
|
44
66
|
end
|
data/lib/octokit/client/apps.rb
CHANGED
@@ -29,9 +29,9 @@ module Octokit
|
|
29
29
|
|
30
30
|
def find_integration_installations(options = {})
|
31
31
|
octokit_warn(
|
32
|
-
'Deprecated: Octokit::Client::Apps#find_integration_installations '\
|
33
|
-
'method is deprecated. Please update your call to use '\
|
34
|
-
'Octokit::Client::Apps#find_app_installations before the next major '\
|
32
|
+
'Deprecated: Octokit::Client::Apps#find_integration_installations ' \
|
33
|
+
'method is deprecated. Please update your call to use ' \
|
34
|
+
'Octokit::Client::Apps#find_app_installations before the next major ' \
|
35
35
|
'Octokit version update.'
|
36
36
|
)
|
37
37
|
find_app_installations(options)
|
@@ -76,9 +76,9 @@ module Octokit
|
|
76
76
|
|
77
77
|
def create_integration_installation_access_token(installation, options = {})
|
78
78
|
octokit_warn(
|
79
|
-
'Deprecated: Octokit::Client::Apps#create_integration_installation_access_token '\
|
80
|
-
'method is deprecated. Please update your call to use '\
|
81
|
-
'Octokit::Client::Apps#create_app_installation_access_token before the next major '\
|
79
|
+
'Deprecated: Octokit::Client::Apps#create_integration_installation_access_token ' \
|
80
|
+
'method is deprecated. Please update your call to use ' \
|
81
|
+
'Octokit::Client::Apps#create_app_installation_access_token before the next major ' \
|
82
82
|
'Octokit version update.'
|
83
83
|
)
|
84
84
|
create_app_installation_access_token(installation, options)
|
@@ -136,9 +136,9 @@ module Octokit
|
|
136
136
|
|
137
137
|
def list_integration_installation_repositories(options = {})
|
138
138
|
octokit_warn(
|
139
|
-
'Deprecated: Octokit::Client::Apps#list_integration_installation_repositories '\
|
140
|
-
'method is deprecated. Please update your call to use '\
|
141
|
-
'Octokit::Client::Apps#list_app_installation_repositories before the next major '\
|
139
|
+
'Deprecated: Octokit::Client::Apps#list_integration_installation_repositories ' \
|
140
|
+
'method is deprecated. Please update your call to use ' \
|
141
|
+
'Octokit::Client::Apps#list_app_installation_repositories before the next major ' \
|
142
142
|
'Octokit version update.'
|
143
143
|
)
|
144
144
|
list_app_installation_repositories(options)
|
@@ -160,9 +160,9 @@ module Octokit
|
|
160
160
|
|
161
161
|
def add_repository_to_integration_installation(installation, repo, options = {})
|
162
162
|
octokit_warn(
|
163
|
-
'Deprecated: Octokit::Client::Apps#add_repository_to_integration_installation '\
|
164
|
-
'method is deprecated. Please update your call to use '\
|
165
|
-
'Octokit::Client::Apps#add_repository_to_app_installation before the next major '\
|
163
|
+
'Deprecated: Octokit::Client::Apps#add_repository_to_integration_installation ' \
|
164
|
+
'method is deprecated. Please update your call to use ' \
|
165
|
+
'Octokit::Client::Apps#add_repository_to_app_installation before the next major ' \
|
166
166
|
'Octokit version update.'
|
167
167
|
)
|
168
168
|
add_repository_to_app_installation(installation, repo, options)
|
@@ -184,9 +184,9 @@ module Octokit
|
|
184
184
|
|
185
185
|
def remove_repository_from_integration_installation(installation, repo, options = {})
|
186
186
|
octokit_warn(
|
187
|
-
'Deprecated: Octokit::Client::Apps#remove_repository_from_integration_installation '\
|
188
|
-
'method is deprecated. Please update your call to use '\
|
189
|
-
'Octokit::Client::Apps#remove_repository_from_app_installation before the next major '\
|
187
|
+
'Deprecated: Octokit::Client::Apps#remove_repository_from_integration_installation ' \
|
188
|
+
'method is deprecated. Please update your call to use ' \
|
189
|
+
'Octokit::Client::Apps#remove_repository_from_app_installation before the next major ' \
|
190
190
|
'Octokit version update.'
|
191
191
|
)
|
192
192
|
remove_repository_from_app_installation(installation, repo, options)
|
@@ -18,11 +18,11 @@ module Octokit
|
|
18
18
|
# client.subscribe("https://github.com/joshk/devise_imapable/events/push", "github://Email?address=josh.kalderimis@gmail.com")
|
19
19
|
def subscribe(topic, callback, secret = nil)
|
20
20
|
options = {
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
'hub.callback': callback,
|
22
|
+
'hub.mode': 'subscribe',
|
23
|
+
'hub.topic': topic
|
24
24
|
}
|
25
|
-
options.merge!(
|
25
|
+
options.merge!('hub.secret': secret) unless secret.nil?
|
26
26
|
|
27
27
|
response = pub_sub_hubbub_request(options)
|
28
28
|
|
@@ -40,9 +40,9 @@ module Octokit
|
|
40
40
|
# client.unsubscribe("https://github.com/joshk/devise_imapable/events/push", "github://Email?address=josh.kalderimis@gmail.com")
|
41
41
|
def unsubscribe(topic, callback)
|
42
42
|
options = {
|
43
|
-
|
44
|
-
|
45
|
-
|
43
|
+
'hub.callback': callback,
|
44
|
+
'hub.mode': 'unsubscribe',
|
45
|
+
'hub.topic': topic
|
46
46
|
}
|
47
47
|
response = pub_sub_hubbub_request(options)
|
48
48
|
|
@@ -13,9 +13,7 @@ module Octokit
|
|
13
13
|
# @return [Boolean]
|
14
14
|
def repository?(repo, options = {})
|
15
15
|
!!repository(repo, options)
|
16
|
-
rescue Octokit::InvalidRepository
|
17
|
-
false
|
18
|
-
rescue Octokit::NotFound
|
16
|
+
rescue Octokit::InvalidRepository, Octokit::NotFound
|
19
17
|
false
|
20
18
|
end
|
21
19
|
|
@@ -161,7 +161,7 @@ module Octokit
|
|
161
161
|
# TODO(5.0): remove deprecated behavior
|
162
162
|
if reviewers.is_a?(Array)
|
163
163
|
octokit_warn(
|
164
|
-
'Deprecated: Octokit::Client#request_pull_request_review '\
|
164
|
+
'Deprecated: Octokit::Client#request_pull_request_review ' \
|
165
165
|
"no longer takes a separate :reviewers argument.\n" \
|
166
166
|
'Please update your call to pass :reviewers and :team_reviewers as part of the options hash.'
|
167
167
|
)
|
@@ -194,7 +194,7 @@ module Octokit
|
|
194
194
|
# TODO(5.0): remove deprecated behavior
|
195
195
|
if !reviewers.empty? && !options.empty?
|
196
196
|
octokit_warn(
|
197
|
-
'Deprecated: Octokit::Client#delete_pull_request_review_request '\
|
197
|
+
'Deprecated: Octokit::Client#delete_pull_request_review_request ' \
|
198
198
|
"no longer takes a separate :reviewers argument.\n" \
|
199
199
|
'Please update your call to pass :reviewers and :team_reviewers as part of the options hash.'
|
200
200
|
)
|
@@ -64,6 +64,20 @@ module Octokit
|
|
64
64
|
end
|
65
65
|
alias search_repos search_repositories
|
66
66
|
|
67
|
+
# Search topics
|
68
|
+
#
|
69
|
+
# @param query [String] Search term and qualifiers
|
70
|
+
# @param options [Hash] Sort and pagination options
|
71
|
+
# @option options [String] :sort Sort field
|
72
|
+
# @option options [String] :order Sort order (asc or desc)
|
73
|
+
# @option options [Integer] :page Page of paginated results
|
74
|
+
# @option options [Integer] :per_page Number of items per page
|
75
|
+
# @return [Sawyer::Resource] Search results object
|
76
|
+
# @see https://developer.github.com/v3/search/#search-topics
|
77
|
+
def search_topics(query, options = {})
|
78
|
+
search 'search/topics', query, options
|
79
|
+
end
|
80
|
+
|
67
81
|
# Search users
|
68
82
|
#
|
69
83
|
# @param query [String] Search term and qualifiers
|
data/lib/octokit/client.rb
CHANGED
@@ -14,6 +14,7 @@ require 'octokit/organization'
|
|
14
14
|
require 'octokit/preview'
|
15
15
|
require 'octokit/client/actions_secrets'
|
16
16
|
require 'octokit/client/actions_workflows'
|
17
|
+
require 'octokit/client/actions_workflow_jobs'
|
17
18
|
require 'octokit/client/actions_workflow_runs'
|
18
19
|
require 'octokit/client/apps'
|
19
20
|
require 'octokit/client/authorizations'
|
@@ -93,6 +94,7 @@ module Octokit
|
|
93
94
|
include Octokit::Client::Gitignore
|
94
95
|
include Octokit::Client::Hooks
|
95
96
|
include Octokit::Client::ActionsWorkflows
|
97
|
+
include Octokit::Client::ActionsWorkflowJobs
|
96
98
|
include Octokit::Client::ActionsWorkflowRuns
|
97
99
|
include Octokit::Client::Apps
|
98
100
|
include Octokit::Client::Issues
|
data/lib/octokit/configurable.rb
CHANGED
@@ -134,9 +134,7 @@ module Octokit
|
|
134
134
|
end
|
135
135
|
|
136
136
|
def login
|
137
|
-
@login ||=
|
138
|
-
user.login if token_authenticated?
|
139
|
-
end
|
137
|
+
@login ||= (user.login if token_authenticated?)
|
140
138
|
end
|
141
139
|
|
142
140
|
def netrc?
|
@@ -146,7 +144,7 @@ module Octokit
|
|
146
144
|
private
|
147
145
|
|
148
146
|
def options
|
149
|
-
|
147
|
+
Octokit::Configurable.keys.map { |key| [key, instance_variable_get(:"@#{key}")] }.to_h
|
150
148
|
end
|
151
149
|
|
152
150
|
def fetch_client_id_and_secret(overrides = {})
|
data/lib/octokit/connection.rb
CHANGED
@@ -201,7 +201,7 @@ module Octokit
|
|
201
201
|
end
|
202
202
|
query = options.delete(:query)
|
203
203
|
opts = { query: options }
|
204
|
-
opts[:query].merge!(query) if query
|
204
|
+
opts[:query].merge!(query) if query.is_a?(Hash)
|
205
205
|
opts[:headers] = headers unless headers.empty?
|
206
206
|
|
207
207
|
opts
|
data/lib/octokit/default.rb
CHANGED
@@ -49,55 +49,55 @@ module Octokit
|
|
49
49
|
# Configuration options
|
50
50
|
# @return [Hash]
|
51
51
|
def options
|
52
|
-
|
52
|
+
Octokit::Configurable.keys.map { |key| [key, send(key)] }.to_h
|
53
53
|
end
|
54
54
|
|
55
55
|
# Default access token from ENV
|
56
56
|
# @return [String]
|
57
57
|
def access_token
|
58
|
-
ENV
|
58
|
+
ENV.fetch('OCTOKIT_ACCESS_TOKEN', nil)
|
59
59
|
end
|
60
60
|
|
61
61
|
# Default API endpoint from ENV or {API_ENDPOINT}
|
62
62
|
# @return [String]
|
63
63
|
def api_endpoint
|
64
|
-
ENV
|
64
|
+
ENV.fetch('OCTOKIT_API_ENDPOINT') { API_ENDPOINT }
|
65
65
|
end
|
66
66
|
|
67
67
|
# Default pagination preference from ENV
|
68
68
|
# @return [String]
|
69
69
|
def auto_paginate
|
70
|
-
ENV
|
70
|
+
ENV.fetch('OCTOKIT_AUTO_PAGINATE', nil)
|
71
71
|
end
|
72
72
|
|
73
73
|
# Default bearer token from ENV
|
74
74
|
# @return [String]
|
75
75
|
def bearer_token
|
76
|
-
ENV
|
76
|
+
ENV.fetch('OCTOKIT_BEARER_TOKEN', nil)
|
77
77
|
end
|
78
78
|
|
79
79
|
# Default OAuth app key from ENV
|
80
80
|
# @return [String]
|
81
81
|
def client_id
|
82
|
-
ENV
|
82
|
+
ENV.fetch('OCTOKIT_CLIENT_ID', nil)
|
83
83
|
end
|
84
84
|
|
85
85
|
# Default OAuth app secret from ENV
|
86
86
|
# @return [String]
|
87
87
|
def client_secret
|
88
|
-
ENV
|
88
|
+
ENV.fetch('OCTOKIT_SECRET', nil)
|
89
89
|
end
|
90
90
|
|
91
91
|
# Default management console password from ENV
|
92
92
|
# @return [String]
|
93
93
|
def management_console_password
|
94
|
-
ENV
|
94
|
+
ENV.fetch('OCTOKIT_ENTERPRISE_MANAGEMENT_CONSOLE_PASSWORD', nil)
|
95
95
|
end
|
96
96
|
|
97
97
|
# Default management console endpoint from ENV
|
98
98
|
# @return [String]
|
99
99
|
def management_console_endpoint
|
100
|
-
ENV
|
100
|
+
ENV.fetch('OCTOKIT_ENTERPRISE_MANAGEMENT_CONSOLE_ENDPOINT', nil)
|
101
101
|
end
|
102
102
|
|
103
103
|
# Default options for Faraday::Connection
|
@@ -114,13 +114,13 @@ module Octokit
|
|
114
114
|
# Default media type from ENV or {MEDIA_TYPE}
|
115
115
|
# @return [String]
|
116
116
|
def default_media_type
|
117
|
-
ENV
|
117
|
+
ENV.fetch('OCTOKIT_DEFAULT_MEDIA_TYPE') { MEDIA_TYPE }
|
118
118
|
end
|
119
119
|
|
120
120
|
# Default GitHub username for Basic Auth from ENV
|
121
121
|
# @return [String]
|
122
122
|
def login
|
123
|
-
ENV
|
123
|
+
ENV.fetch('OCTOKIT_LOGIN', nil)
|
124
124
|
end
|
125
125
|
|
126
126
|
# Default middleware stack for Faraday::Connection
|
@@ -133,13 +133,13 @@ module Octokit
|
|
133
133
|
# Default GitHub password for Basic Auth from ENV
|
134
134
|
# @return [String]
|
135
135
|
def password
|
136
|
-
ENV
|
136
|
+
ENV.fetch('OCTOKIT_PASSWORD', nil)
|
137
137
|
end
|
138
138
|
|
139
139
|
# Default pagination page size from ENV
|
140
140
|
# @return [Integer] Page size
|
141
141
|
def per_page
|
142
|
-
page_size = ENV
|
142
|
+
page_size = ENV.fetch('OCTOKIT_PER_PAGE', nil)
|
143
143
|
|
144
144
|
page_size&.to_i
|
145
145
|
end
|
@@ -147,7 +147,7 @@ module Octokit
|
|
147
147
|
# Default proxy server URI for Faraday connection from ENV
|
148
148
|
# @return [String]
|
149
149
|
def proxy
|
150
|
-
ENV
|
150
|
+
ENV.fetch('OCTOKIT_PROXY', nil)
|
151
151
|
end
|
152
152
|
|
153
153
|
# Default SSL verify mode from ENV
|
@@ -162,25 +162,25 @@ module Octokit
|
|
162
162
|
# Default User-Agent header string from ENV or {USER_AGENT}
|
163
163
|
# @return [String]
|
164
164
|
def user_agent
|
165
|
-
ENV
|
165
|
+
ENV.fetch('OCTOKIT_USER_AGENT') { USER_AGENT }
|
166
166
|
end
|
167
167
|
|
168
168
|
# Default web endpoint from ENV or {WEB_ENDPOINT}
|
169
169
|
# @return [String]
|
170
170
|
def web_endpoint
|
171
|
-
ENV
|
171
|
+
ENV.fetch('OCTOKIT_WEB_ENDPOINT') { WEB_ENDPOINT }
|
172
172
|
end
|
173
173
|
|
174
174
|
# Default behavior for reading .netrc file
|
175
175
|
# @return [Boolean]
|
176
176
|
def netrc
|
177
|
-
ENV
|
177
|
+
ENV.fetch('OCTOKIT_NETRC', false)
|
178
178
|
end
|
179
179
|
|
180
180
|
# Default path for .netrc file
|
181
181
|
# @return [String]
|
182
182
|
def netrc_file
|
183
|
-
ENV
|
183
|
+
ENV.fetch('OCTOKIT_NETRC_FILE') { File.join(Dir.home.to_s, '.netrc') }
|
184
184
|
end
|
185
185
|
end
|
186
186
|
end
|
data/lib/octokit/error.rb
CHANGED
@@ -4,6 +4,7 @@ module Octokit
|
|
4
4
|
# Custom error class for rescuing from all GitHub errors
|
5
5
|
class Error < StandardError
|
6
6
|
attr_reader :context
|
7
|
+
|
7
8
|
# Returns the appropriate Octokit::Error subclass based
|
8
9
|
# on status and response message
|
9
10
|
#
|
@@ -57,7 +58,9 @@ module Octokit
|
|
57
58
|
|
58
59
|
# Returns most appropriate error for 401 HTTP status code
|
59
60
|
# @private
|
61
|
+
# rubocop:disable Naming/VariableNumber
|
60
62
|
def self.error_for_401(headers)
|
63
|
+
# rubocop:enbale Naming/VariableNumber
|
61
64
|
if Octokit::OneTimePasswordRequired.required_header(headers)
|
62
65
|
Octokit::OneTimePasswordRequired
|
63
66
|
else
|
@@ -68,27 +71,27 @@ module Octokit
|
|
68
71
|
# Returns most appropriate error for 403 HTTP status code
|
69
72
|
# @private
|
70
73
|
def self.error_for_403(body)
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
+
# rubocop:enable Naming/VariableNumber
|
75
|
+
case body
|
76
|
+
when /rate limit exceeded/i, /exceeded a secondary rate limit/i
|
74
77
|
Octokit::TooManyRequests
|
75
|
-
|
78
|
+
when /login attempts exceeded/i
|
76
79
|
Octokit::TooManyLoginAttempts
|
77
|
-
|
80
|
+
when /returns blobs up to [0-9]+ MB/i
|
78
81
|
Octokit::TooLargeContent
|
79
|
-
|
82
|
+
when /abuse/i
|
80
83
|
Octokit::AbuseDetected
|
81
|
-
|
84
|
+
when /repository access blocked/i
|
82
85
|
Octokit::RepositoryUnavailable
|
83
|
-
|
86
|
+
when /email address must be verified/i
|
84
87
|
Octokit::UnverifiedEmail
|
85
|
-
|
88
|
+
when /account was suspended/i
|
86
89
|
Octokit::AccountSuspended
|
87
|
-
|
90
|
+
when /billing issue/i
|
88
91
|
Octokit::BillingIssue
|
89
|
-
|
92
|
+
when /Resource protected by organization SAML enforcement/i
|
90
93
|
Octokit::SAMLProtected
|
91
|
-
|
94
|
+
when /suspended your access|This installation has been suspended/i
|
92
95
|
Octokit::InstallationSuspended
|
93
96
|
else
|
94
97
|
Octokit::Forbidden
|
@@ -97,7 +100,9 @@ module Octokit
|
|
97
100
|
|
98
101
|
# Return most appropriate error for 404 HTTP status code
|
99
102
|
# @private
|
103
|
+
# rubocop:disable Naming/VariableNumber
|
100
104
|
def self.error_for_404(body)
|
105
|
+
# rubocop:enable Naming/VariableNumber
|
101
106
|
if body =~ /Branch not protected/i
|
102
107
|
Octokit::BranchNotProtected
|
103
108
|
else
|
@@ -107,7 +112,9 @@ module Octokit
|
|
107
112
|
|
108
113
|
# Return most appropriate error for 422 HTTP status code
|
109
114
|
# @private
|
115
|
+
# rubocop:disable Naming/VariableNumber
|
110
116
|
def self.error_for_422(body)
|
117
|
+
# rubocop:enable Naming/VariableNumber
|
111
118
|
if body =~ /PullRequestReviewComment/i && body =~ /(commit_id|end_commit_oid) is not part of the pull request/i
|
112
119
|
Octokit::CommitIsNotPartOfPullRequest
|
113
120
|
elsif body =~ /Path diff too large/i
|
@@ -120,7 +127,7 @@ module Octokit
|
|
120
127
|
# Array of validation errors
|
121
128
|
# @return [Array<Hash>] Error info
|
122
129
|
def errors
|
123
|
-
if data
|
130
|
+
if data.is_a?(Hash)
|
124
131
|
data[:errors] || []
|
125
132
|
else
|
126
133
|
[]
|
@@ -196,7 +203,7 @@ module Octokit
|
|
196
203
|
return nil if @response.nil?
|
197
204
|
|
198
205
|
message = +"#{@response[:method].to_s.upcase} "
|
199
|
-
message << redact_url(@response[:url].to_s.dup)
|
206
|
+
message << "#{redact_url(@response[:url].to_s.dup)}: "
|
200
207
|
message << "#{@response[:status]} - "
|
201
208
|
message << response_message.to_s unless response_message.nil?
|
202
209
|
message << response_error.to_s unless response_error.nil?
|
@@ -127,7 +127,7 @@ module Octokit
|
|
127
127
|
# risk double-escaping.
|
128
128
|
def safe_escape(uri)
|
129
129
|
uri.to_s.gsub(URI_UNSAFE) do |match|
|
130
|
-
|
130
|
+
"%#{match.unpack('H2' * match.bytesize).join('%').upcase}"
|
131
131
|
end
|
132
132
|
end
|
133
133
|
end
|
data/lib/octokit/rate_limit.rb
CHANGED
@@ -20,7 +20,7 @@ module Octokit
|
|
20
20
|
# @return [RateLimit]
|
21
21
|
def self.from_response(response)
|
22
22
|
info = new
|
23
|
-
if response
|
23
|
+
if response.respond_to?(:headers) && !response.headers.nil?
|
24
24
|
info.limit = (response.headers['X-RateLimit-Limit'] || 1).to_i
|
25
25
|
info.remaining = (response.headers['X-RateLimit-Remaining'] || 1).to_i
|
26
26
|
info.resets_at = Time.at((response.headers['X-RateLimit-Reset'] || Time.now).to_i)
|
data/lib/octokit/repository.rb
CHANGED
data/lib/octokit/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: octokit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Wynn Netherland
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-07-
|
13
|
+
date: 2022-07-13 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -86,6 +86,7 @@ files:
|
|
86
86
|
- lib/octokit/authentication.rb
|
87
87
|
- lib/octokit/client.rb
|
88
88
|
- lib/octokit/client/actions_secrets.rb
|
89
|
+
- lib/octokit/client/actions_workflow_jobs.rb
|
89
90
|
- lib/octokit/client/actions_workflow_runs.rb
|
90
91
|
- lib/octokit/client/actions_workflows.rb
|
91
92
|
- lib/octokit/client/apps.rb
|