Add bin and edit workflow
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 9s

This commit is contained in:
2026-09-16 13:11:16 -06:00
parent c8ac4fcae5
commit 4cee170d66
17576 changed files with 895740 additions and 2 deletions
@@ -0,0 +1,435 @@
# frozen_string_literal: true
module Octokit
class Client
# Methods for the Users API
#
# @see https://developer.github.com/v3/users/
module Users
# List all GitHub users
#
# This provides a list of every user, in the order that they signed up
# for GitHub.
#
# @param options [Hash] Optional options.
# @option options [Integer] :since The integer ID of the last User that
# you’ve seen.
#
# @see https://developer.github.com/v3/users/#get-all-users
#
# @return [Array<Sawyer::Resource>] List of GitHub users.
def all_users(options = {})
paginate 'users', options
end
# Get a single user
#
# @param user [Integer, String] GitHub user login or id.
# @return [Sawyer::Resource]
# @see https://developer.github.com/v3/users/#get-a-single-user
# @see https://developer.github.com/v3/users/#get-the-authenticated-user
# @example
# Octokit.user("sferik")
def user(user = nil, options = {})
get User.path(user), options
end
# Retrieve the access_token.
#
# @param code [String] Authorization code generated by GitHub.
# @param app_id [String] Client Id we received when our application was registered with GitHub. Defaults to client_id.
# @param app_secret [String] Client Secret we received when our application was registered with GitHub. Defaults to client_secret.
# @return [Sawyer::Resource] Hash holding the access token.
# @see https://developer.github.com/v3/oauth/#web-application-flow
# @example
# Octokit.exchange_code_for_token('aaaa', 'xxxx', 'yyyy', {:accept => 'application/json'})
def exchange_code_for_token(code, app_id = client_id, app_secret = client_secret, options = {})
options = options.merge({
code: code,
client_id: app_id,
client_secret: app_secret,
headers: {
content_type: 'application/json',
accept: 'application/json'
}
})
post "#{web_endpoint}login/oauth/access_token", options
end
# Validate user username and password
#
# @param options [Hash] User credentials
# @option options [String] :login GitHub login
# @option options [String] :password GitHub password
# @return [Boolean] True if credentials are valid
def validate_credentials(options = {})
!self.class.new(options).user.nil?
rescue Octokit::Unauthorized
false
end
# Update the authenticated user
#
# @param options [Hash] A customizable set of options.
# @option options [String] :name
# @option options [String] :email Publically visible email address.
# @option options [String] :blog
# @option options [String] :company
# @option options [String] :location
# @option options [Boolean] :hireable
# @option options [String] :bio
# @return [Sawyer::Resource]
# @see https://developer.github.com/v3/users/#update-the-authenticated-user
# @example
# Octokit.update_user(:name => "Erik Michaels-Ober", :email => "sferik@gmail.com", :company => "Code for America", :location => "San Francisco", :hireable => false)
def update_user(options)
patch 'user', options
end
# Get a user's followers.
#
# @param user [Integer, String] GitHub user login or id of the user whose
# list of followers you are getting.
# @return [Array<Sawyer::Resource>] Array of hashes representing users
# followers.
# @see https://developer.github.com/v3/users/followers/#list-followers-of-a-user
# @example
# Octokit.followers('pengwynn')
def followers(user = login, options = {})
paginate "#{User.path user}/followers", options
end
# Get list of users a user is following.
#
# @param user [Intger, String] GitHub user login or id of the user who you
# are getting the list of the people they follow.
# @return [Array<Sawyer::Resource>] Array of hashes representing users a
# user is following.
# @see https://developer.github.com/v3/users/followers/#list-users-followed-by-another-user
# @example
# Octokit.following('pengwynn')
def following(user = login, options = {})
paginate "#{User.path user}/following", options
end
# Check if you are following a user. Alternatively, check if a given user
# is following a target user.
#
# Requries an authenticated client.
#
# @overload follows?(target)
# @param target [String] GitHub login of the user that you want to
# check if you are following.
# @overload follows?(user, target)
# @param user [Integer, String] GitHub user login or id of first user
# @param target [String] GitHub login of the target user
# @return [Boolean] True following target user, false otherwise.
# @see https://developer.github.com/v3/users/followers/#check-if-you-are-following-a-user
# @see https://developer.github.com/v3/users/followers/#check-if-one-user-follows-another
# @example
# @client.follows?('pengwynn')
# @example
# @client.follows?('catsby', 'pengwynn')
def follows?(*args)
target = args.pop
user = args.first
boolean_from_response :get, "#{User.path user}/following/#{target}"
end
# Follow a user.
#
# Requires authenticatied client.
#
# @param user [String] Username of the user to follow.
# @return [Boolean] True if follow was successful, false otherwise.
# @see https://developer.github.com/v3/users/followers/#follow-a-user
# @example
# @client.follow('holman')
def follow(user, options = {})
boolean_from_response :put, "user/following/#{user}", options
end
# Unfollow a user.
#
# Requires authenticated client.
#
# @param user [String] Username of the user to unfollow.
# @return [Boolean] True if unfollow was successful, false otherwise.
# @see https://developer.github.com/v3/users/followers/#unfollow-a-user
# @example
# @client.unfollow('holman')
def unfollow(user, options = {})
boolean_from_response :delete, "user/following/#{user}", options
end
# Get list of repos starred by a user.
#
# @param user [Integer, String] GitHub user login of the user to get the
# list of their starred repositories.
# @param options [Hash] Optional options
# @option options [String] :sort (created) Sort: <tt>created</tt> or <tt>updated</tt>.
# @option options [String] :direction (desc) Direction: <tt>asc</tt> or <tt>desc</tt>.
# @return [Array<Sawyer::Resource>] Array of hashes representing repositories starred by user.
# @see https://developer.github.com/v3/activity/starring/#list-repositories-being-starred
# @example
# Octokit.starred('pengwynn')
def starred(user = login, options = {})
paginate user_path(user, 'starred'), options
end
# Check if you are starring a repo.
#
# Requires authenticated client.
#
# @param repo [String, Hash, Repository] A GitHub repository
# @return [Boolean] True if you are following the repo, false otherwise.
# @see https://developer.github.com/v3/activity/starring/#check-if-you-are-starring-a-repository
# @example
# @client.starred?('pengwynn/octokit')
def starred?(repo, options = {})
boolean_from_response :get, "user/starred/#{Repository.new(repo)}", options
end
# Get a public key.
#
# Note, when using dot notation to retrieve the values, ruby will return
# the hash key for the public keys value instead of the actual value, use
# symbol or key string to retrieve the value. See example.
#
# Requires authenticated client.
#
# @param key_id [Integer] Key to retreive.
# @return [Sawyer::Resource] Hash representing the key.
# @see https://developer.github.com/v3/users/keys/#get-a-single-public-key
# @example
# @client.key(1)
# @example Retrieve public key contents
# public_key = @client.key(1)
# public_key.key
# # => Error
#
# public_key[:key]
# # => "ssh-rsa AAA..."
#
# public_key['key']
# # => "ssh-rsa AAA..."
def key(key_id, options = {})
get "user/keys/#{key_id}", options
end
# Get list of public keys for user.
#
# Requires authenticated client.
#
# @return [Array<Sawyer::Resource>] Array of hashes representing public keys.
# @see https://developer.github.com/v3/users/keys/#list-your-public-keys
# @example
# @client.keys
def keys(options = {})
paginate 'user/keys', options
end
# Get list of public keys for user.
#
# @param user [Integer, String] GitHub user login or id.
# @return [Array<Sawyer::Resource>] Array of hashes representing public keys.
# @see https://developer.github.com/v3/users/keys/#list-public-keys-for-a-user
# @example
# @client.user_keys('pengwynn')
def user_keys(user, options = {})
# TODO: Roll this into .keys
paginate "#{User.path user}/keys", options
end
# Add public key to user account.
#
# Requires authenticated client.
#
# @param title [String] Title to give reference to the public key.
# @param key [String] Public key.
# @return [Sawyer::Resource] Hash representing the newly added public key.
# @see https://developer.github.com/v3/users/keys/#create-a-public-key
# @example
# @client.add_key('Personal projects key', 'ssh-rsa AAA...')
def add_key(title, key, options = {})
post 'user/keys', options.merge({ title: title, key: key })
end
# Update a public key
#
# Requires authenticated client
#
# @param key_id [Integer] Id of key to update.
# @param options [Hash] Hash containing attributes to update.
# @option options [String] :title
# @option options [String] :key
# @return [Sawyer::Resource] Hash representing the updated public key.
#
# @deprecated This method is no longer supported in the API
# @see https://developer.github.com/v3/users/keys/#update-a-public-key
# @see https://developer.github.com/changes/2014-02-24-finer-grained-scopes-for-ssh-keys/
# @example
# @client.update_key(1, :title => 'new title', :key => "ssh-rsa BBB")
def update_key(key_id, options = {})
patch "user/keys/#{key_id}", options
end
# Remove a public key from user account.
#
# Requires authenticated client.
#
# @param id [String] Id of the public key to remove.
# @return [Boolean] True if removal was successful, false otherwise.
# @see https://developer.github.com/v3/users/keys/#delete-a-public-key
# @example
# @client.remove_key(1)
def remove_key(id, options = {})
boolean_from_response :delete, "user/keys/#{id}", options
end
# List email addresses for a user.
#
# Requires authenticated client.
#
# @return [Array<String>] Array of email addresses.
# @see https://developer.github.com/v3/users/emails/#list-email-addresses-for-a-user
# @example
# @client.emails
def emails(options = {})
paginate 'user/emails', options
end
# Add email address to user.
#
# Requires authenticated client.
#
# @param email [String] Email address to add to the user.
# @return [Array<String>] Array of all email addresses of the user.
# @see https://developer.github.com/v3/users/emails/#add-email-addresses
# @example
# @client.add_email('new_email@user.com')
def add_email(email, _options = {})
email = Array(email)
post 'user/emails', email
end
# Remove email from user.
#
# Requires authenticated client.
#
# @param email [String] Email address to remove.
# @return [Array<String>] Array of all email addresses of the user.
# @see https://developer.github.com/v3/users/emails/#delete-email-addresses
# @example
# @client.remove_email('old_email@user.com')
def remove_email(email)
email = Array(email)
boolean_from_response :delete, 'user/emails', email
end
# List repositories being watched by a user.
#
# @param user [Integer, String] GitHub user login or id.
# @return [Array<Sawyer::Resource>] Array of repositories.
# @see https://developer.github.com/v3/activity/watching/#list-repositories-being-watched
# @example
# @client.subscriptions("pengwynn")
def subscriptions(user = login, options = {})
paginate user_path(user, 'subscriptions'), options
end
alias watched subscriptions
# Initiates the generation of a migration archive.
#
# Requires authenticated user.
#
# @param repositories [Array<String>] :repositories Repositories for the organization.
# @option options [Boolean, optional] :lock_repositories Indicates whether repositories should be locked during migration
# @option options [Boolean, optional] :exclude_attachments Exclude attachments fro the migration data
# @return [Sawyer::Resource] Hash representing the new migration.
# @example
# @client.start_migration(['octocat/hello-world'])
# @see https://docs.github.com/en/rest/reference/migrations#start-a-user-migration
def start_user_migration(repositories, options = {})
options[:repositories] = repositories
post 'user/migrations', options
end
# Lists the most recent migrations.
#
# Requires authenticated user.
#
# @return [Array<Sawyer::Resource>] Array of migration resources.
# @see https://docs.github.com/en/rest/reference/migrations#list-user-migrations
def user_migrations(options = {})
paginate 'user/migrations', options
end
# Fetches the status of a migration.
#
# Requires authenticated user.
#
# @param id [Integer] ID number of the migration.
# @see https://docs.github.com/en/rest/reference/migrations#get-a-user-migration-status
def user_migration_status(id, options = {})
get "user/migrations/#{id}", options
end
# Fetches the URL to a migration archive.
#
# Requires authenticated user.
#
# @param id [Integer] ID number of the migration.
# @see https://docs.github.com/en/rest/reference/migrations#download-a-user-migration-archive
def user_migration_archive_url(id, options = {})
url = "user/migrations/#{id}/archive"
response = client_without_redirects(options).get(url)
response.headers['location']
end
# Deletes a previous migration archive.
#
# Requires authenticated user.
#
# @param id [Integer] ID number of the migration.
# @see https://docs.github.com/en/rest/reference/migrations#delete-a-user-migration-archive
def delete_user_migration_archive(id, options = {})
delete "user/migrations/#{id}/archive", options
end
# List repositories for a user migration.
#
# Requires authenticated user.
#
# @param id [Integer] ID number of the migration.
# @see https://docs.github.com/en/rest/reference/migrations#list-repositories-for-a-user-migration
def user_migration_repositories(id, options = {})
get "user/migrations/#{id}/repositories", options
end
# Unlock a user repository which has been locked by a migration.
#
# Requires authenticated user.
#
# @param id [Integer] ID number of the migration.
# @param repo [String] Name of the repository.
# @see https://docs.github.com/en/rest/reference/migrations#unlock-a-user-repository
def unlock_user_repository(id, repo, options = {})
delete "user/migrations/#{id}/repos/#{repo}/lock", options
end
end
private
# convenience method for constructing a user specific path, if the user is logged in
def user_path(user, path)
if user == login && user_authenticated?
"user/#{path}"
else
"#{User.path user}/#{path}"
end
end
end
end