octokit 4.18.0 → 4.19.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/CONTRIBUTING.md +2 -4
- data/README.md +4 -8
- data/lib/octokit/authentication.rb +1 -1
- data/lib/octokit/client.rb +6 -0
- data/lib/octokit/client/actions_secrets.rb +58 -0
- data/lib/octokit/client/actions_workflow_runs.rb +94 -0
- data/lib/octokit/client/actions_workflows.rb +43 -0
- data/lib/octokit/client/apps.rb +12 -0
- data/lib/octokit/client/authorizations.rb +1 -1
- data/lib/octokit/client/oauth_applications.rb +2 -2
- data/lib/octokit/client/organizations.rb +10 -10
- data/lib/octokit/client/repositories.rb +21 -8
- data/lib/octokit/client/users.rb +86 -0
- data/lib/octokit/connection.rb +10 -7
- data/lib/octokit/error.rb +15 -1
- data/lib/octokit/rate_limit.rb +1 -1
- data/lib/octokit/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9801b25dfdd07e517b87bdc1404ffa64fd12496b66af8bb8bc4af57f6f33483f
|
4
|
+
data.tar.gz: b082dcc32f514846b53da5aaafe7666020c9de8d590dafb6e93743767a70573b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 16595560313f6346448710adf2a0d641fe62521089ff017aff1c2f1dc6dd1d5dc06d8397e552a098cf1a6ada91edfa111863d9c4491df86d3d38d3143531a7b5
|
7
|
+
data.tar.gz: 7dc816349c9050b31e0c0d09a7e1e25b6d455d59f6ae817db2f46b16900104bcdff15d3f280352e7bcb0ca195060824094ebe09ea022c3e46b52c8f559c0cc5b
|
data/CONTRIBUTING.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
## Submitting a Pull Request
|
2
2
|
|
3
3
|
0. Read our [Code of Conduct](CODE_OF_CONDUCT.md).
|
4
|
-
1. Check out Hacking on Octokit in the
|
5
|
-
bootstrapping the project for local development.
|
4
|
+
1. Check out [Hacking on Octokit](README.md#hacking-on-octokitrb) in the
|
5
|
+
README for bootstrapping the project for local development.
|
6
6
|
2. [Fork the repository.][fork]
|
7
7
|
3. [Create a topic branch.][branch]
|
8
8
|
4. Add specs for your unimplemented feature or bug fix.
|
@@ -18,8 +18,6 @@
|
|
18
18
|
add "[ci skip]" to your commit message to avoid needless CI builds.
|
19
19
|
12. [Submit a pull request.][pr]
|
20
20
|
|
21
|
-
Please abide by
|
22
|
-
|
23
21
|
[fork]: https://help.github.com/articles/fork-a-repo
|
24
22
|
[branch]: https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/
|
25
23
|
[pr]: https://help.github.com/articles/using-pull-requests
|
data/README.md
CHANGED
@@ -651,7 +651,7 @@ to run a Ruby console to poke on Octokit, you can crank one up with:
|
|
651
651
|
|
652
652
|
script/console
|
653
653
|
|
654
|
-
Using the scripts in `./
|
654
|
+
Using the scripts in `./script` instead of `bundle exec rspec`, `bundle
|
655
655
|
console`, etc. ensures your dependencies are up-to-date.
|
656
656
|
|
657
657
|
### Code of Conduct
|
@@ -713,16 +713,12 @@ when writing new specs.
|
|
713
713
|
|
714
714
|
## Supported Ruby Versions
|
715
715
|
|
716
|
-
This library aims to support and is [tested against][
|
716
|
+
This library aims to support and is [tested against][actions] the following Ruby
|
717
717
|
implementations:
|
718
718
|
|
719
|
-
* Ruby 2.0
|
720
|
-
* Ruby 2.1
|
721
|
-
* Ruby 2.2
|
722
|
-
* Ruby 2.3
|
723
|
-
* Ruby 2.4
|
724
719
|
* Ruby 2.5
|
725
720
|
* Ruby 2.6
|
721
|
+
* Ruby 2.7
|
726
722
|
|
727
723
|
If something doesn't work on one of these Ruby versions, it's a bug.
|
728
724
|
|
@@ -737,7 +733,7 @@ implementation, you will be responsible for providing patches in a timely
|
|
737
733
|
fashion. If critical issues for a particular implementation exist at the time
|
738
734
|
of a major release, support for that Ruby version may be dropped.
|
739
735
|
|
740
|
-
[
|
736
|
+
[actions]: https://github.com/octokit/octokit.rb/actions
|
741
737
|
|
742
738
|
## Versioning
|
743
739
|
|
data/lib/octokit/client.rb
CHANGED
@@ -10,6 +10,9 @@ require 'octokit/repository'
|
|
10
10
|
require 'octokit/user'
|
11
11
|
require 'octokit/organization'
|
12
12
|
require 'octokit/preview'
|
13
|
+
require 'octokit/client/actions_secrets'
|
14
|
+
require 'octokit/client/actions_workflows'
|
15
|
+
require 'octokit/client/actions_workflow_runs'
|
13
16
|
require 'octokit/client/apps'
|
14
17
|
require 'octokit/client/authorizations'
|
15
18
|
require 'octokit/client/checks'
|
@@ -72,6 +75,7 @@ module Octokit
|
|
72
75
|
include Octokit::Connection
|
73
76
|
include Octokit::Preview
|
74
77
|
include Octokit::Warnable
|
78
|
+
include Octokit::Client::ActionsSecrets
|
75
79
|
include Octokit::Client::Authorizations
|
76
80
|
include Octokit::Client::Checks
|
77
81
|
include Octokit::Client::Commits
|
@@ -88,6 +92,8 @@ module Octokit
|
|
88
92
|
include Octokit::Client::Gists
|
89
93
|
include Octokit::Client::Gitignore
|
90
94
|
include Octokit::Client::Hooks
|
95
|
+
include Octokit::Client::ActionsWorkflows
|
96
|
+
include Octokit::Client::ActionsWorkflowRuns
|
91
97
|
include Octokit::Client::Apps
|
92
98
|
include Octokit::Client::Issues
|
93
99
|
include Octokit::Client::Labels
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Octokit
|
2
|
+
class Client
|
3
|
+
|
4
|
+
# Methods for the Actions Secrets API
|
5
|
+
#
|
6
|
+
# @see https://developer.github.com/v3/actions/secrets/
|
7
|
+
module ActionsSecrets
|
8
|
+
|
9
|
+
# Get public key for secrets encryption
|
10
|
+
#
|
11
|
+
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
12
|
+
# @return [Hash] key_id and key
|
13
|
+
# @see https://developer.github.com/v3/actions/secrets/#get-your-public-key
|
14
|
+
def get_public_key(repo)
|
15
|
+
get "#{Repository.path repo}/actions/secrets/public-key"
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
# List secrets
|
20
|
+
#
|
21
|
+
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
22
|
+
# @return [Hash] total_count and list of secrets (each item is hash with name, created_at and updated_at)
|
23
|
+
# @see https://developer.github.com/v3/actions/secrets/#list-secrets-for-a-repository
|
24
|
+
def list_secrets(repo)
|
25
|
+
paginate "#{Repository.path repo}/actions/secrets"
|
26
|
+
end
|
27
|
+
|
28
|
+
# Get a secret
|
29
|
+
#
|
30
|
+
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
31
|
+
# @param name [String] Name of secret
|
32
|
+
# @return [Hash] name, created_at and updated_at
|
33
|
+
# @see https://developer.github.com/v3/actions/secrets/#get-a-secret
|
34
|
+
def get_secret(repo, name)
|
35
|
+
get "#{Repository.path repo}/actions/secrets/#{name}"
|
36
|
+
end
|
37
|
+
|
38
|
+
# Create or update secrets
|
39
|
+
#
|
40
|
+
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
41
|
+
# @param name [String] Name of secret
|
42
|
+
# @param options [Hash] encrypted_value and key_id
|
43
|
+
# @see https://developer.github.com/v3/actions/secrets/#create-or-update-a-secret-for-a-repository
|
44
|
+
def create_or_update_secret(repo, name, options)
|
45
|
+
put "#{Repository.path repo}/actions/secrets/#{name}", options
|
46
|
+
end
|
47
|
+
|
48
|
+
# Delete a secret
|
49
|
+
#
|
50
|
+
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
51
|
+
# @param name [String] Name of secret
|
52
|
+
# @see https://developer.github.com/v3/actions/secrets/#delete-a-secret-from-a-repository
|
53
|
+
def delete_secret(repo, name)
|
54
|
+
boolean_from_response :delete, "#{Repository.path repo}/actions/secrets/#{name}"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
module Octokit
|
2
|
+
class Client
|
3
|
+
module ActionsWorkflowRuns
|
4
|
+
# List all runs for a repository workflow
|
5
|
+
#
|
6
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
7
|
+
# @param workflow [Integer, String] Id or file name of the workflow
|
8
|
+
# @option options [String] :actor Optional filtering by a user
|
9
|
+
# @option options [String] :branch Optional filtering by a branch
|
10
|
+
# @option options [String] :event Optional filtering by the event type
|
11
|
+
# @option options [String] :status Optional filtering by a status or conclusion
|
12
|
+
#
|
13
|
+
# @return [Sawyer::Resource] the total count and an array of workflows
|
14
|
+
# @see https://developer.github.com/v3/actions/workflow-runs/#list-workflow-runs
|
15
|
+
def workflow_runs(repo, workflow, options = {})
|
16
|
+
paginate "#{Repository.path repo}/actions/workflows/#{workflow}/runs", options
|
17
|
+
end
|
18
|
+
alias list_workflow_runs workflow_runs
|
19
|
+
|
20
|
+
# List all workflow runs for a repository
|
21
|
+
#
|
22
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
23
|
+
# @option options [String] :actor Optional filtering by the login of a user
|
24
|
+
# @option options [String] :branch Optional filtering by a branch
|
25
|
+
# @option options [String] :event Optional filtering by the event type (e.g. push, pull_request, issue)
|
26
|
+
# @option options [String] :status Optional filtering by a status or conclusion (e.g. success, completed...)
|
27
|
+
#
|
28
|
+
# @return [Sawyer::Resource] the total count and an array of workflows
|
29
|
+
# @see https://developer.github.com/v3/actions/workflow-runs/#list-repository-workflow-runs
|
30
|
+
def repository_workflow_runs(repo, options = {})
|
31
|
+
paginate "#{Repository.path repo}/actions/runs", options
|
32
|
+
end
|
33
|
+
alias list_repository_workflow_runs repository_workflow_runs
|
34
|
+
|
35
|
+
# Get a workflow run
|
36
|
+
#
|
37
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
38
|
+
# @param id [Integer] Id of a workflow run
|
39
|
+
#
|
40
|
+
# @return [Sawyer::Resource] Run information
|
41
|
+
# @see https://developer.github.com/v3/actions/workflow-runs/#get-a-workflow-run
|
42
|
+
def workflow_run(repo, id, options = {})
|
43
|
+
get "#{Repository.path repo}/actions/runs/#{id}", options
|
44
|
+
end
|
45
|
+
|
46
|
+
# Re-runs a workflow run
|
47
|
+
#
|
48
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
49
|
+
# @param id [Integer] Id of a workflow run
|
50
|
+
#
|
51
|
+
# @return [Boolean] Returns true if the re-run request was accepted
|
52
|
+
# @see https://developer.github.com/v3/actions/workflow-runs/#re-run-a-workflow
|
53
|
+
def rerun_workflow_run(repo, id, options = {})
|
54
|
+
boolean_from_response :post, "#{Repository.path repo}/actions/runs/#{id}/rerun", options
|
55
|
+
end
|
56
|
+
|
57
|
+
# Cancels a workflow run
|
58
|
+
#
|
59
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
60
|
+
# @param id [Integer] Id of a workflow run
|
61
|
+
#
|
62
|
+
# @return [Boolean] Returns true if the cancellation was accepted
|
63
|
+
# @see https://developer.github.com/v3/actions/workflow-runs/#cancel-a-workflow-run
|
64
|
+
def cancel_workflow_run(repo, id, options = {})
|
65
|
+
boolean_from_response :post, "#{Repository.path repo}/actions/runs/#{id}/cancel", options
|
66
|
+
end
|
67
|
+
|
68
|
+
# Get a download url for archived log files of a workflow run
|
69
|
+
#
|
70
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
71
|
+
# @param id [Integer] Id of a workflow run
|
72
|
+
#
|
73
|
+
# @return [String] URL to the archived log files of the run
|
74
|
+
# @see https://developer.github.com/v3/actions/workflow-runs/#download-workflow-run-logs
|
75
|
+
def workflow_run_logs(repo, id, options = {})
|
76
|
+
url = "#{Repository.path repo}/actions/runs/#{id}/logs"
|
77
|
+
|
78
|
+
response = client_without_redirects.head(url, options)
|
79
|
+
response.headers['Location']
|
80
|
+
end
|
81
|
+
|
82
|
+
# Delets all log files of a workflow run
|
83
|
+
#
|
84
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
85
|
+
# @param id [Integer] Id of a workflow run
|
86
|
+
#
|
87
|
+
# @return [Boolean] Returns true if the logs are deleted
|
88
|
+
# @see https://developer.github.com/v3/actions/workflow-runs/#delete-workflow-run-logs
|
89
|
+
def delete_workflow_run_logs(repo, id, options = {})
|
90
|
+
boolean_from_response :delete, "#{Repository.path repo}/actions/runs/#{id}/logs", options
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Octokit
|
2
|
+
class Client
|
3
|
+
# Methods for the Actions Workflows API
|
4
|
+
#
|
5
|
+
# @see https://developer.github.com/v3/actions/workflows
|
6
|
+
module ActionsWorkflows
|
7
|
+
|
8
|
+
# Get the workflows in a repository
|
9
|
+
#
|
10
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
11
|
+
#
|
12
|
+
# @return [Sawyer::Resource] the total count and an array of workflows
|
13
|
+
# @see https://developer.github.com/v3/actions/workflows/#list-repository-workflows
|
14
|
+
def workflows(repo, options = {})
|
15
|
+
paginate "#{Repository.path repo}/actions/workflows", options
|
16
|
+
end
|
17
|
+
alias list_workflows workflows
|
18
|
+
|
19
|
+
# Get single workflow in a repository
|
20
|
+
#
|
21
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
22
|
+
# @param id [Integer, String] Id or file name of the workflow
|
23
|
+
#
|
24
|
+
# @return [Sawyer::Resource] A single workflow
|
25
|
+
# @see https://developer.github.com/v3/actions/workflows/#get-a-workflow
|
26
|
+
def workflow(repo, id, options = {})
|
27
|
+
get "#{Repository.path repo}/actions/workflows/#{id}", options
|
28
|
+
end
|
29
|
+
|
30
|
+
# Create a workflow dispatch event
|
31
|
+
#
|
32
|
+
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
33
|
+
# @param id [Integer, String] Id or file name of the workflow
|
34
|
+
# @param ref [String] A SHA, branch name, or tag name
|
35
|
+
#
|
36
|
+
# @return [Boolean] True if event was dispatched, false otherwise
|
37
|
+
# @see https://docs.github.com/en/rest/reference/actions#create-a-workflow-dispatch-event
|
38
|
+
def workflow_dispatch(repo, id, ref, options = {})
|
39
|
+
boolean_from_response :post, "#{Repository.path repo}/actions/workflows/#{id}/dispatches", options.merge({ ref: ref })
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/octokit/client/apps.rb
CHANGED
@@ -4,6 +4,18 @@ module Octokit
|
|
4
4
|
# Methods for the Apps API
|
5
5
|
module Apps
|
6
6
|
|
7
|
+
# Get the authenticated App
|
8
|
+
#
|
9
|
+
# @param options [Hash] A customizable set of options
|
10
|
+
#
|
11
|
+
# @see https://developer.github.com/v3/apps/#get-the-authenticated-app
|
12
|
+
#
|
13
|
+
# @return [Sawyer::Resource] App information
|
14
|
+
def app(options = {})
|
15
|
+
opts = ensure_api_media_type(:integrations, options)
|
16
|
+
get "app", opts
|
17
|
+
end
|
18
|
+
|
7
19
|
# Find all installations that belong to an App
|
8
20
|
#
|
9
21
|
# @param options [Hash] A customizable set of options
|
@@ -59,7 +59,7 @@ module Octokit
|
|
59
59
|
# client = Octokit::Client.new(:login => 'ctshryock', :password => 'secret')
|
60
60
|
# client.create_authorization({:idempotent => true, :client_id => 'xxxx', :client_secret => 'yyyy', :scopes => ["user"]})
|
61
61
|
def create_authorization(options = {})
|
62
|
-
#
|
62
|
+
# Technically we can omit scopes as GitHub has a default, however the
|
63
63
|
# API will reject us if we send a POST request with an empty body.
|
64
64
|
options = options.dup
|
65
65
|
if options.delete :idempotent
|
@@ -62,7 +62,7 @@ module Octokit
|
|
62
62
|
#
|
63
63
|
# Applications can revoke (delete) a token
|
64
64
|
#
|
65
|
-
# @param
|
65
|
+
# @param access_token [String] 40 character GitHub OAuth access token
|
66
66
|
#
|
67
67
|
# @return [Boolean] Result
|
68
68
|
# @see https://developer.github.com/v3/apps/oauth_applications/#delete-an-app-token
|
@@ -93,7 +93,7 @@ module Octokit
|
|
93
93
|
#
|
94
94
|
# OAuth application owners can revoke a grant for their OAuth application and a specific user.
|
95
95
|
#
|
96
|
-
# @param
|
96
|
+
# @param access_token [String] 40 character GitHub OAuth access token
|
97
97
|
#
|
98
98
|
# @return [Boolean] Result
|
99
99
|
# @see https://developer.github.com/v3/apps/oauth_applications/#delete-an-app-token
|
@@ -690,7 +690,7 @@ module Octokit
|
|
690
690
|
|
691
691
|
# Edit an organization membership
|
692
692
|
#
|
693
|
-
# @param org [String] Organization GitHub login.
|
693
|
+
# @param org [String, Integer] Organization GitHub login or id.
|
694
694
|
# @option options [String] :role The role of the user in the organization.
|
695
695
|
# @option options [String] :state The state that the membership should be in.
|
696
696
|
# @option options [String] :user The login of the user, otherwise authenticated user.
|
@@ -701,7 +701,7 @@ module Octokit
|
|
701
701
|
options = options.dup
|
702
702
|
if user = options.delete(:user)
|
703
703
|
options.delete(:state)
|
704
|
-
put "
|
704
|
+
put "#{Organization.path(org)}/memberships/#{user}", options
|
705
705
|
else
|
706
706
|
options.delete(:role)
|
707
707
|
patch "user/memberships/orgs/#{org}", options
|
@@ -711,13 +711,13 @@ module Octokit
|
|
711
711
|
|
712
712
|
# Remove an organization membership
|
713
713
|
#
|
714
|
-
# @param org [String] Organization GitHub login.
|
714
|
+
# @param org [String, Integer] Organization GitHub login or id.
|
715
715
|
# @return [Boolean] Success
|
716
716
|
# @see https://developer.github.com/v3/orgs/members/#remove-organization-membership
|
717
717
|
def remove_organization_membership(org, options = {})
|
718
718
|
options = options.dup
|
719
719
|
user = options.delete(:user)
|
720
|
-
user && boolean_from_response(:delete, "
|
720
|
+
user && boolean_from_response(:delete, "#{Organization.path(org)}/memberships/#{user}", options)
|
721
721
|
end
|
722
722
|
alias :remove_org_membership :remove_organization_membership
|
723
723
|
|
@@ -735,7 +735,7 @@ module Octokit
|
|
735
735
|
def start_migration(org, repositories, options = {})
|
736
736
|
options = ensure_api_media_type(:migrations, options)
|
737
737
|
options[:repositories] = repositories
|
738
|
-
post "
|
738
|
+
post "#{Organization.path(org)}/migrations", options
|
739
739
|
end
|
740
740
|
|
741
741
|
# Lists the most recent migrations.
|
@@ -747,7 +747,7 @@ module Octokit
|
|
747
747
|
# @see https://developer.github.com/v3/orgs/migrations/#get-a-list-of-migrations
|
748
748
|
def migrations(org, options = {})
|
749
749
|
options = ensure_api_media_type(:migrations, options)
|
750
|
-
paginate "
|
750
|
+
paginate "#{Organization.path(org)}/migrations", options
|
751
751
|
end
|
752
752
|
|
753
753
|
# Fetches the status of a migration.
|
@@ -759,7 +759,7 @@ module Octokit
|
|
759
759
|
# @see https://developer.github.com/v3/orgs/migrations/#get-the-status-of-a-migration
|
760
760
|
def migration_status(org, id, options = {})
|
761
761
|
options = ensure_api_media_type(:migrations, options)
|
762
|
-
get "
|
762
|
+
get "#{Organization.path(org)}/migrations/#{id}", options
|
763
763
|
end
|
764
764
|
|
765
765
|
# Fetches the URL to a migration archive.
|
@@ -771,7 +771,7 @@ module Octokit
|
|
771
771
|
# @see https://developer.github.com/v3/orgs/migrations/#download-a-migration-archive
|
772
772
|
def migration_archive_url(org, id, options = {})
|
773
773
|
options = ensure_api_media_type(:migrations, options)
|
774
|
-
url = "
|
774
|
+
url = "#{Organization.path(org)}/migrations/#{id}/archive"
|
775
775
|
|
776
776
|
response = client_without_redirects(options).get(url)
|
777
777
|
response.headers['location']
|
@@ -786,7 +786,7 @@ module Octokit
|
|
786
786
|
# @see https://developer.github.com/v3/orgs/migrations/#delete-a-migration-archive
|
787
787
|
def delete_migration_archive(org, id, options = {})
|
788
788
|
options = ensure_api_media_type(:migrations, options)
|
789
|
-
delete "
|
789
|
+
delete "#{Organization.path(org)}/migrations/#{id}/archive", options
|
790
790
|
end
|
791
791
|
|
792
792
|
# Unlock a previous migration archive.
|
@@ -799,7 +799,7 @@ module Octokit
|
|
799
799
|
# @see https://developer.github.com/v3/orgs/migrations/#unlock-a-repository
|
800
800
|
def unlock_repository(org, id, repo, options = {})
|
801
801
|
options = ensure_api_media_type(:migrations, options)
|
802
|
-
delete "
|
802
|
+
delete "#{Organization.path(org)}/migrations/#{id}/repos/#{repo}/lock", options
|
803
803
|
end
|
804
804
|
end
|
805
805
|
end
|
@@ -32,7 +32,7 @@ module Octokit
|
|
32
32
|
|
33
33
|
# Edit a repository
|
34
34
|
#
|
35
|
-
# @see https://developer.github.com/v3/repos/#
|
35
|
+
# @see https://developer.github.com/v3/repos/#update-a-repository
|
36
36
|
# @param repo [String, Hash, Repository] A GitHub repository
|
37
37
|
# @param options [Hash] Repository information to update
|
38
38
|
# @option options [String] :name Name of the repo
|
@@ -429,7 +429,7 @@ module Octokit
|
|
429
429
|
# @example List topics for octokit/octokit.rb
|
430
430
|
# Octokit.topics('octokit/octokit.rb')
|
431
431
|
# @example List topics for octokit/octokit.rb
|
432
|
-
# client.topics('octokit/octokit.rb')
|
432
|
+
# client.topics('octokit/octokit.rb')
|
433
433
|
def topics(repo, options = {})
|
434
434
|
opts = ensure_api_media_type(:topics, options)
|
435
435
|
paginate "#{Repository.path repo}/topics", opts
|
@@ -586,14 +586,14 @@ module Octokit
|
|
586
586
|
#
|
587
587
|
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
588
588
|
# @param branch [String] Branch name
|
589
|
-
# @option options [Hash] :required_status_checks If not null, the following keys are required:
|
590
|
-
# <tt>:enforce_admins [boolean] Enforce required status checks for repository administrators.</tt>
|
591
|
-
# <tt>:strict [boolean] Require branches to be up to date before merging.</tt>
|
592
|
-
# <tt>:contexts [Array] The list of status checks to require in order to merge into this branch</tt>
|
589
|
+
# @option options [Hash] :required_status_checks If not null, the following keys are required:
|
590
|
+
# <tt>:enforce_admins [boolean] Enforce required status checks for repository administrators.</tt>
|
591
|
+
# <tt>:strict [boolean] Require branches to be up to date before merging.</tt>
|
592
|
+
# <tt>:contexts [Array] The list of status checks to require in order to merge into this branch</tt>
|
593
593
|
#
|
594
594
|
# @option options [Hash] :restrictions If not null, the following keys are required:
|
595
|
-
# <tt>:users [Array] The list of user logins with push access</tt>
|
596
|
-
# <tt>:teams [Array] The list of team slugs with push access</tt>.
|
595
|
+
# <tt>:users [Array] The list of user logins with push access</tt>
|
596
|
+
# <tt>:teams [Array] The list of team slugs with push access</tt>.
|
597
597
|
#
|
598
598
|
# Teams and users restrictions are only available for organization-owned repositories.
|
599
599
|
# @return [Sawyer::Resource] The protected branch
|
@@ -720,6 +720,19 @@ module Octokit
|
|
720
720
|
def delete_subscription(repo, options = {})
|
721
721
|
boolean_from_response :delete, "#{Repository.path repo}/subscription", options
|
722
722
|
end
|
723
|
+
|
724
|
+
# Create a repository dispatch event
|
725
|
+
#
|
726
|
+
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
727
|
+
# @param event_type [String] A custom webhook event name.
|
728
|
+
# @option options [Hash] :client_payload payload with extra information
|
729
|
+
# about the webhook event that your action or worklow may use.
|
730
|
+
#
|
731
|
+
# @return [Boolean] True if event was dispatched, false otherwise.
|
732
|
+
# @see https://developer.github.com/v3/repos/#create-a-repository-dispatch-event
|
733
|
+
def dispatch_event(repo, event_type, options = {})
|
734
|
+
boolean_from_response :post, "#{Repository.path repo}/dispatches", options.merge({ event_type: event_type })
|
735
|
+
end
|
723
736
|
end
|
724
737
|
end
|
725
738
|
end
|
data/lib/octokit/client/users.rb
CHANGED
@@ -340,6 +340,92 @@ module Octokit
|
|
340
340
|
end
|
341
341
|
alias :watched :subscriptions
|
342
342
|
|
343
|
+
# Initiates the generation of a migration archive.
|
344
|
+
#
|
345
|
+
# Requires authenticated user.
|
346
|
+
#
|
347
|
+
# @param repositories [Array<String>] :repositories Repositories for the organization.
|
348
|
+
# @option options [Boolean, optional] :lock_repositories Indicates whether repositories should be locked during migration
|
349
|
+
# @option options [Boolean, optional] :exclude_attachments Exclude attachments fro the migration data
|
350
|
+
# @return [Sawyer::Resource] Hash representing the new migration.
|
351
|
+
# @example
|
352
|
+
# @client.start_migration(['octocat/hello-world'])
|
353
|
+
# @see https://docs.github.com/en/rest/reference/migrations#start-a-user-migration
|
354
|
+
def start_user_migration(repositories, options = {})
|
355
|
+
options = ensure_api_media_type(:migrations, options)
|
356
|
+
options[:repositories] = repositories
|
357
|
+
post "user/migrations", options
|
358
|
+
end
|
359
|
+
|
360
|
+
# Lists the most recent migrations.
|
361
|
+
#
|
362
|
+
# Requires authenticated user.
|
363
|
+
#
|
364
|
+
# @return [Array<Sawyer::Resource>] Array of migration resources.
|
365
|
+
# @see https://docs.github.com/en/rest/reference/migrations#list-user-migrations
|
366
|
+
def user_migrations(options = {})
|
367
|
+
options = ensure_api_media_type(:migrations, options)
|
368
|
+
paginate "user/migrations", options
|
369
|
+
end
|
370
|
+
|
371
|
+
# Fetches the status of a migration.
|
372
|
+
#
|
373
|
+
# Requires authenticated user.
|
374
|
+
#
|
375
|
+
# @param id [Integer] ID number of the migration.
|
376
|
+
# @see https://docs.github.com/en/rest/reference/migrations#get-a-user-migration-status
|
377
|
+
def user_migration_status(id, options = {})
|
378
|
+
options = ensure_api_media_type(:migrations, options)
|
379
|
+
get "user/migrations/#{id}", options
|
380
|
+
end
|
381
|
+
|
382
|
+
# Fetches the URL to a migration archive.
|
383
|
+
#
|
384
|
+
# Requires authenticated user.
|
385
|
+
#
|
386
|
+
# @param id [Integer] ID number of the migration.
|
387
|
+
# @see https://docs.github.com/en/rest/reference/migrations#download-a-user-migration-archive
|
388
|
+
def user_migration_archive_url(id, options = {})
|
389
|
+
options = ensure_api_media_type(:migrations, options)
|
390
|
+
url = "user/migrations/#{id}/archive"
|
391
|
+
|
392
|
+
response = client_without_redirects(options).get(url)
|
393
|
+
response.headers['location']
|
394
|
+
end
|
395
|
+
|
396
|
+
# Deletes a previous migration archive.
|
397
|
+
#
|
398
|
+
# Requires authenticated user.
|
399
|
+
#
|
400
|
+
# @param id [Integer] ID number of the migration.
|
401
|
+
# @see https://docs.github.com/en/rest/reference/migrations#delete-a-user-migration-archive
|
402
|
+
def delete_user_migration_archive(id, options = {})
|
403
|
+
options = ensure_api_media_type(:migrations, options)
|
404
|
+
delete "user/migrations/#{id}/archive", options
|
405
|
+
end
|
406
|
+
|
407
|
+
# List repositories for a user migration.
|
408
|
+
#
|
409
|
+
# Requires authenticated user.
|
410
|
+
#
|
411
|
+
# @param id [Integer] ID number of the migration.
|
412
|
+
# @see https://docs.github.com/en/rest/reference/migrations#list-repositories-for-a-user-migration
|
413
|
+
def user_migration_repositories(id, options = {})
|
414
|
+
options = ensure_api_media_type(:migrations, options)
|
415
|
+
get "user/migrations/#{id}/repositories", options
|
416
|
+
end
|
417
|
+
|
418
|
+
# Unlock a user repository which has been locked by a migration.
|
419
|
+
#
|
420
|
+
# Requires authenticated user.
|
421
|
+
#
|
422
|
+
# @param id [Integer] ID number of the migration.
|
423
|
+
# @param repo [String] Name of the repository.
|
424
|
+
# @see https://docs.github.com/en/rest/reference/migrations#unlock-a-user-repository
|
425
|
+
def unlock_user_repository(id, repo, options = {})
|
426
|
+
options = ensure_api_media_type(:migrations, options)
|
427
|
+
delete "user/migrations/#{id}/repos/#{repo}/lock", options
|
428
|
+
end
|
343
429
|
end
|
344
430
|
|
345
431
|
private
|
data/lib/octokit/connection.rb
CHANGED
@@ -155,6 +155,9 @@ module Octokit
|
|
155
155
|
|
156
156
|
@last_response = response = agent.call(method, Addressable::URI.parse(path.to_s).normalize.to_s, data, options)
|
157
157
|
response.data
|
158
|
+
rescue Octokit::Error => error
|
159
|
+
@last_response = nil
|
160
|
+
raise error
|
158
161
|
end
|
159
162
|
|
160
163
|
# Executes the request, checking if it was successful
|
@@ -162,7 +165,7 @@ module Octokit
|
|
162
165
|
# @return [Boolean] True on success, false otherwise
|
163
166
|
def boolean_from_response(method, path, options = {})
|
164
167
|
request(method, path, options)
|
165
|
-
@last_response.status
|
168
|
+
[201, 202, 204].include? @last_response.status
|
166
169
|
rescue Octokit::NotFound
|
167
170
|
false
|
168
171
|
end
|
@@ -177,12 +180,12 @@ module Octokit
|
|
177
180
|
conn_opts[:proxy] = @proxy if @proxy
|
178
181
|
if conn_opts[:ssl].nil?
|
179
182
|
conn_opts[:ssl] = { :verify_mode => @ssl_verify_mode } if @ssl_verify_mode
|
180
|
-
else
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
183
|
+
else
|
184
|
+
verify = @connection_options[:ssl][:verify]
|
185
|
+
conn_opts[:ssl] = {
|
186
|
+
:verify => verify,
|
187
|
+
:verify_mode => verify == false ? 0 : @ssl_verify_mode
|
188
|
+
}
|
186
189
|
end
|
187
190
|
opts[:faraday] = Faraday.new(conn_opts)
|
188
191
|
|
data/lib/octokit/error.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Octokit
|
2
2
|
# Custom error class for rescuing from all GitHub errors
|
3
3
|
class Error < StandardError
|
4
|
-
|
4
|
+
attr_reader :context
|
5
5
|
# Returns the appropriate Octokit::Error subclass based
|
6
6
|
# on status and response message
|
7
7
|
#
|
@@ -34,9 +34,16 @@ module Octokit
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
+
def build_error_context
|
38
|
+
if RATE_LIMITED_ERRORS.include?(self.class)
|
39
|
+
@context = Octokit::RateLimit.from_response(@response)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
37
43
|
def initialize(response=nil)
|
38
44
|
@response = response
|
39
45
|
super(build_error_message)
|
46
|
+
build_error_context
|
40
47
|
end
|
41
48
|
|
42
49
|
# Documentation URL returned by the API for some errors
|
@@ -77,6 +84,8 @@ module Octokit
|
|
77
84
|
Octokit::BillingIssue
|
78
85
|
elsif body =~ /Resource protected by organization SAML enforcement/i
|
79
86
|
Octokit::SAMLProtected
|
87
|
+
elsif body =~ /suspended your access/i
|
88
|
+
Octokit::InstallationSuspended
|
80
89
|
else
|
81
90
|
Octokit::Forbidden
|
82
91
|
end
|
@@ -265,6 +274,10 @@ module Octokit
|
|
265
274
|
# and body matches 'Resource protected by organization SAML enforcement'
|
266
275
|
class SAMLProtected < Forbidden; end
|
267
276
|
|
277
|
+
# Raised when GitHub returns a 403 HTTP status code
|
278
|
+
# and body matches 'suspended your access'
|
279
|
+
class InstallationSuspended < Forbidden; end
|
280
|
+
|
268
281
|
# Raised when GitHub returns a 404 HTTP status code
|
269
282
|
class NotFound < ClientError; end
|
270
283
|
|
@@ -315,4 +328,5 @@ module Octokit
|
|
315
328
|
# Raised when a repository is created with an invalid format
|
316
329
|
class InvalidRepository < ArgumentError; end
|
317
330
|
|
331
|
+
RATE_LIMITED_ERRORS = [Octokit::TooManyRequests, Octokit::AbuseDetected]
|
318
332
|
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 && !response.headers.nil?
|
23
|
+
if response && 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/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: 4.
|
4
|
+
version: 4.19.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: 2020-
|
13
|
+
date: 2020-10-20 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -85,6 +85,9 @@ files:
|
|
85
85
|
- lib/octokit/arguments.rb
|
86
86
|
- lib/octokit/authentication.rb
|
87
87
|
- lib/octokit/client.rb
|
88
|
+
- lib/octokit/client/actions_secrets.rb
|
89
|
+
- lib/octokit/client/actions_workflow_runs.rb
|
90
|
+
- lib/octokit/client/actions_workflows.rb
|
88
91
|
- lib/octokit/client/apps.rb
|
89
92
|
- lib/octokit/client/authorizations.rb
|
90
93
|
- lib/octokit/client/checks.rb
|