This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Actions Artifacts API
|
||||
#
|
||||
# @see https://developer.github.com/v3/actions/artifacts
|
||||
module ActionsArtifacts
|
||||
# List all artifacts for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
#
|
||||
# @return [Sawyer::Resource] the total count and an array of artifacts
|
||||
# @see https://developer.github.com/v3/actions/artifacts#list-artifacts-for-a-repository
|
||||
def repository_artifacts(repo, options = {})
|
||||
paginate "#{Repository.path repo}/actions/artifacts", options do |data, last_response|
|
||||
data.artifacts.concat last_response.data.artifacts
|
||||
end
|
||||
end
|
||||
|
||||
# List all artifacts for a workflow run
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param workflow_run_id [Integer] Id of a workflow run
|
||||
#
|
||||
# @return [Sawyer::Resource] the total count and an array of artifacts
|
||||
# @see https://docs.github.com/en/rest/actions/artifacts#list-workflow-run-artifacts
|
||||
def workflow_run_artifacts(repo, workflow_run_id, options = {})
|
||||
paginate "#{Repository.path repo}/actions/runs/#{workflow_run_id}/artifacts", options do |data, last_response|
|
||||
data.artifacts.concat last_response.data.artifacts
|
||||
end
|
||||
end
|
||||
|
||||
# Get an artifact
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param id [Integer] Id of an artifact
|
||||
#
|
||||
# @return [Sawyer::Resource] Artifact information
|
||||
# @see https://docs.github.com/en/rest/actions/artifacts#get-an-artifact
|
||||
def artifact(repo, id, options = {})
|
||||
get "#{Repository.path repo}/actions/artifacts/#{id}", options
|
||||
end
|
||||
|
||||
# Get a download URL for an artifact
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param id [Integer] Id of an artifact
|
||||
#
|
||||
# @return [String] URL to the .zip archive of the artifact
|
||||
# @see https://docs.github.com/en/rest/actions/artifacts#download-an-artifact
|
||||
def artifact_download_url(repo, id, options = {})
|
||||
url = "#{Repository.path repo}/actions/artifacts/#{id}/zip"
|
||||
|
||||
response = client_without_redirects.head(url, options)
|
||||
response.headers['Location']
|
||||
end
|
||||
|
||||
# Delete an artifact
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param id [Integer] Id of an artifact
|
||||
#
|
||||
# @return [Boolean] Return true if the artifact was successfully deleted
|
||||
# @see https://docs.github.com/en/rest/actions/artifacts#delete-an-artifact
|
||||
def delete_artifact(repo, id, options = {})
|
||||
boolean_from_response :delete, "#{Repository.path repo}/actions/artifacts/#{id}", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,59 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Actions Secrets API
|
||||
#
|
||||
# @see https://developer.github.com/v3/actions/secrets/
|
||||
module ActionsSecrets
|
||||
# Get public key for secrets encryption
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @return [Hash] key_id and key
|
||||
# @see https://developer.github.com/v3/actions/secrets/#get-your-public-key
|
||||
def get_public_key(repo)
|
||||
get "#{Repository.path repo}/actions/secrets/public-key"
|
||||
end
|
||||
|
||||
# List secrets
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @return [Hash] total_count and list of secrets (each item is hash with name, created_at and updated_at)
|
||||
# @see https://developer.github.com/v3/actions/secrets/#list-secrets-for-a-repository
|
||||
def list_secrets(repo)
|
||||
paginate "#{Repository.path repo}/actions/secrets" do |data, last_response|
|
||||
data.secrets.concat last_response.data.secrets
|
||||
end
|
||||
end
|
||||
|
||||
# Get a secret
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param name [String] Name of secret
|
||||
# @return [Hash] name, created_at and updated_at
|
||||
# @see https://developer.github.com/v3/actions/secrets/#get-a-secret
|
||||
def get_secret(repo, name)
|
||||
get "#{Repository.path repo}/actions/secrets/#{name}"
|
||||
end
|
||||
|
||||
# Create or update secrets
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param name [String] Name of secret
|
||||
# @param options [Hash] encrypted_value and key_id
|
||||
# @see https://developer.github.com/v3/actions/secrets/#create-or-update-a-secret-for-a-repository
|
||||
def create_or_update_secret(repo, name, options)
|
||||
put "#{Repository.path repo}/actions/secrets/#{name}", options
|
||||
end
|
||||
|
||||
# Delete a secret
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param name [String] Name of secret
|
||||
# @see https://developer.github.com/v3/actions/secrets/#delete-a-secret-from-a-repository
|
||||
def delete_secret(repo, name)
|
||||
boolean_from_response :delete, "#{Repository.path repo}/actions/secrets/#{name}"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,65 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Actions Workflows jobs API
|
||||
#
|
||||
# @see https://docs.github.com/rest/actions/workflow-jobs
|
||||
module ActionsWorkflowJobs
|
||||
# Get a job for a workflow run
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param job_id [Integer, String] Id of the job
|
||||
#
|
||||
# @return [Sawyer::Resource] Job information
|
||||
# @see https://docs.github.com/rest/actions/workflow-jobs#get-a-job-for-a-workflow-run
|
||||
def workflow_run_job(repo, job_id, options = {})
|
||||
get "#{Repository.path repo}/actions/jobs/#{job_id}", options
|
||||
end
|
||||
|
||||
# Download job logs for a workflow run
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param job_id [Integer, String] Id of the job
|
||||
#
|
||||
# @return [String] URL to the archived log files of the job
|
||||
# @see https://docs.github.com/rest/actions/workflow-jobs#download-job-logs-for-a-workflow-run
|
||||
def workflow_run_job_logs(repo, job_id, options = {})
|
||||
url = "#{Repository.path repo}/actions/jobs/#{job_id}/logs"
|
||||
|
||||
response = client_without_redirects.head(url, options)
|
||||
response.headers['Location']
|
||||
end
|
||||
|
||||
# List jobs for a workflow run attempt
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param run_id [Integer, String] Id of the workflow run
|
||||
# @param attempt_number [Integer, String] Attempt number of the workflow run
|
||||
#
|
||||
# @return [Sawyer::Resource] Jobs information
|
||||
# @see https://docs.github.com/rest/actions/workflow-jobs#list-jobs-for-a-workflow-run-attempt
|
||||
def workflow_run_attempt_jobs(repo, run_id, attempt_number, options = {})
|
||||
paginate "#{Repository.path repo}/actions/runs/#{run_id}/attempts/#{attempt_number}/jobs", options do |data, last_response|
|
||||
data.jobs.concat last_response.data.jobs
|
||||
end
|
||||
end
|
||||
alias list_workflow_run_attempt_jobs workflow_run_attempt_jobs
|
||||
|
||||
# List jobs for a workflow run
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param run_id [Integer, String] Id of the workflow run
|
||||
# @option options [String] :filter Optional filtering by a `completed_at` timestamp
|
||||
#
|
||||
# @return [Sawyer::Resource] Jobs information
|
||||
# @see https://docs.github.com/rest/actions/workflow-jobs#list-jobs-for-a-workflow-run
|
||||
def workflow_run_jobs(repo, run_id, options = {})
|
||||
paginate "#{Repository.path repo}/actions/runs/#{run_id}/jobs", options do |data, last_response|
|
||||
data.jobs.concat last_response.data.jobs
|
||||
end
|
||||
end
|
||||
alias list_workflow_run_jobs workflow_run_jobs
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,125 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Actions Workflows runs API
|
||||
#
|
||||
# @see https://docs.github.com/rest/actions/workflow-runs
|
||||
module ActionsWorkflowRuns
|
||||
# List all runs for a repository workflow
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param workflow [Integer, String] Id or file name of the workflow
|
||||
# @option options [String] :actor Optional filtering by a user
|
||||
# @option options [String] :branch Optional filtering by a branch
|
||||
# @option options [String] :event Optional filtering by the event type
|
||||
# @option options [String] :status Optional filtering by a status or conclusion
|
||||
#
|
||||
# @return [Sawyer::Resource] the total count and an array of workflows
|
||||
# @see https://developer.github.com/v3/actions/workflow-runs/#list-workflow-runs
|
||||
def workflow_runs(repo, workflow, options = {})
|
||||
paginate "#{Repository.path repo}/actions/workflows/#{workflow}/runs", options do |data, last_response|
|
||||
data.workflow_runs.concat last_response.data.workflow_runs
|
||||
end
|
||||
end
|
||||
alias list_workflow_runs workflow_runs
|
||||
|
||||
# List all workflow runs for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @option options [String] :actor Optional filtering by the login of a user
|
||||
# @option options [String] :branch Optional filtering by a branch
|
||||
# @option options [String] :event Optional filtering by the event type (e.g. push, pull_request, issue)
|
||||
# @option options [String] :status Optional filtering by a status or conclusion (e.g. success, completed...)
|
||||
#
|
||||
# @return [Sawyer::Resource] the total count and an array of workflows
|
||||
# @see https://developer.github.com/v3/actions/workflow-runs/#list-repository-workflow-runs
|
||||
def repository_workflow_runs(repo, options = {})
|
||||
paginate "#{Repository.path repo}/actions/runs", options do |data, last_response|
|
||||
data.workflow_runs.concat last_response.data.workflow_runs
|
||||
end
|
||||
end
|
||||
alias list_repository_workflow_runs repository_workflow_runs
|
||||
|
||||
# Get a workflow run
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param id [Integer] Id of a workflow run
|
||||
#
|
||||
# @return [Sawyer::Resource] Run information
|
||||
# @see https://developer.github.com/v3/actions/workflow-runs/#get-a-workflow-run
|
||||
def workflow_run(repo, id, options = {})
|
||||
get "#{Repository.path repo}/actions/runs/#{id}", options
|
||||
end
|
||||
|
||||
# Re-runs a workflow run
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param id [Integer] Id of a workflow run
|
||||
#
|
||||
# @return [Boolean] Returns true if the re-run request was accepted
|
||||
# @see https://developer.github.com/v3/actions/workflow-runs/#re-run-a-workflow
|
||||
def rerun_workflow_run(repo, id, options = {})
|
||||
boolean_from_response :post, "#{Repository.path repo}/actions/runs/#{id}/rerun", options
|
||||
end
|
||||
|
||||
# Cancels a workflow run
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param id [Integer] Id of a workflow run
|
||||
#
|
||||
# @return [Boolean] Returns true if the cancellation was accepted
|
||||
# @see https://developer.github.com/v3/actions/workflow-runs/#cancel-a-workflow-run
|
||||
def cancel_workflow_run(repo, id, options = {})
|
||||
boolean_from_response :post, "#{Repository.path repo}/actions/runs/#{id}/cancel", options
|
||||
end
|
||||
|
||||
# Deletes a workflow run
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param id [Integer] Id of a workflow run
|
||||
#
|
||||
# @return [Boolean] Returns true if the run is deleted
|
||||
# @see https://docs.github.com/en/rest/reference/actions#delete-a-workflow-run
|
||||
def delete_workflow_run(repo, id, options = {})
|
||||
boolean_from_response :delete, "#{Repository.path repo}/actions/runs/#{id}", options
|
||||
end
|
||||
|
||||
# Get a download url for archived log files of a workflow run
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param id [Integer] Id of a workflow run
|
||||
#
|
||||
# @return [String] URL to the archived log files of the run
|
||||
# @see https://developer.github.com/v3/actions/workflow-runs/#download-workflow-run-logs
|
||||
def workflow_run_logs(repo, id, options = {})
|
||||
url = "#{Repository.path repo}/actions/runs/#{id}/logs"
|
||||
|
||||
response = client_without_redirects.head(url, options)
|
||||
response.headers['Location']
|
||||
end
|
||||
|
||||
# Delete all log files of a workflow run
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param id [Integer] Id of a workflow run
|
||||
#
|
||||
# @return [Boolean] Returns true if the logs are deleted
|
||||
# @see https://developer.github.com/v3/actions/workflow-runs/#delete-workflow-run-logs
|
||||
def delete_workflow_run_logs(repo, id, options = {})
|
||||
boolean_from_response :delete, "#{Repository.path repo}/actions/runs/#{id}/logs", options
|
||||
end
|
||||
|
||||
# Get workflow run usage
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param id [Integer] Id of a workflow run
|
||||
#
|
||||
# @return [Sawyer::Resource] Run usage
|
||||
# @see https://developer.github.com/v3/actions/workflow-runs/#get-workflow-run-usage
|
||||
def workflow_run_usage(repo, id, options = {})
|
||||
get "#{Repository.path repo}/actions/runs/#{id}/timing", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,68 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Actions Workflows API
|
||||
#
|
||||
# @see https://developer.github.com/v3/actions/workflows
|
||||
module ActionsWorkflows
|
||||
# Get the workflows in a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
#
|
||||
# @return [Sawyer::Resource] the total count and an array of workflows
|
||||
# @see https://developer.github.com/v3/actions/workflows/#list-repository-workflows
|
||||
def workflows(repo, options = {})
|
||||
paginate "#{Repository.path repo}/actions/workflows", options do |data, last_response|
|
||||
data.workflows.concat last_response.data.workflows
|
||||
end
|
||||
end
|
||||
alias list_workflows workflows
|
||||
|
||||
# Get single workflow in a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param id [Integer, String] Id or file name of the workflow
|
||||
#
|
||||
# @return [Sawyer::Resource] A single workflow
|
||||
# @see https://developer.github.com/v3/actions/workflows/#get-a-workflow
|
||||
def workflow(repo, id, options = {})
|
||||
get "#{Repository.path repo}/actions/workflows/#{id}", options
|
||||
end
|
||||
|
||||
# Create a workflow dispatch event
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param id [Integer, String] Id or file name of the workflow
|
||||
# @param ref [String] A SHA, branch name, or tag name
|
||||
#
|
||||
# @return [Boolean] True if event was dispatched, false otherwise
|
||||
# @see https://docs.github.com/en/rest/reference/actions#create-a-workflow-dispatch-event
|
||||
def workflow_dispatch(repo, id, ref, options = {})
|
||||
boolean_from_response :post, "#{Repository.path repo}/actions/workflows/#{id}/dispatches", options.merge({ ref: ref })
|
||||
end
|
||||
|
||||
# Enable a workflow
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param id [Integer, String] Id or file name of the workflow
|
||||
#
|
||||
# @return [Boolean] True if workflow was enabled, false otherwise
|
||||
# @see https://docs.github.com/en/rest/actions/workflows#enable-a-workflow
|
||||
def workflow_enable(repo, id, options = {})
|
||||
boolean_from_response :put, "#{Repository.path repo}/actions/workflows/#{id}/enable", options
|
||||
end
|
||||
|
||||
# Disable a workflow
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param id [Integer, String] Id or file name of the workflow
|
||||
#
|
||||
# @return [Boolean] True if workflow was disabled, false otherwise
|
||||
# @see https://docs.github.com/en/rest/actions/workflows#disable-a-workflow
|
||||
def workflow_disable(repo, id, options = {})
|
||||
boolean_from_response :put, "#{Repository.path repo}/actions/workflows/#{id}/disable", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,222 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Apps API
|
||||
module Apps
|
||||
# Get the authenticated App
|
||||
#
|
||||
# @param options [Hash] A customizable set of options
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/#get-the-authenticated-app
|
||||
#
|
||||
# @return [Sawyer::Resource] App information
|
||||
def app(options = {})
|
||||
get 'app', options
|
||||
end
|
||||
|
||||
# Find all installations that belong to an App
|
||||
#
|
||||
# @param options [Hash] A customizable set of options
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/#list-installations
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] the total_count and an array of installations
|
||||
def find_app_installations(options = {})
|
||||
paginate 'app/installations', options
|
||||
end
|
||||
alias find_installations find_app_installations
|
||||
|
||||
def find_integration_installations(options = {})
|
||||
octokit_warn(
|
||||
'Deprecated: Octokit::Client::Apps#find_integration_installations ' \
|
||||
'method is deprecated. Please update your call to use ' \
|
||||
'Octokit::Client::Apps#find_app_installations before the next major ' \
|
||||
'Octokit version update.'
|
||||
)
|
||||
find_app_installations(options)
|
||||
end
|
||||
|
||||
# Find all installations that are accessible to the authenticated user
|
||||
#
|
||||
# @param options [Hash] A customizable set of options
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/installations/#list-installations-for-a-user
|
||||
#
|
||||
# @return [Sawyer::Resource] the total_count and an array of installations
|
||||
def find_user_installations(options = {})
|
||||
paginate('user/installations', options) do |data, last_response|
|
||||
data.installations.concat last_response.data.installations
|
||||
end
|
||||
end
|
||||
|
||||
# Get a single installation
|
||||
#
|
||||
# @param id [Integer] Installation id
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/#get-an-installation
|
||||
#
|
||||
# @return [Sawyer::Resource] Installation information
|
||||
def installation(id, options = {})
|
||||
get "app/installations/#{id}", options
|
||||
end
|
||||
|
||||
# Create a new installation token
|
||||
#
|
||||
# @param installation [Integer] The id of a GitHub App Installation
|
||||
# @param options [Hash] A customizable set of options
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/#create-a-new-installation-token
|
||||
#
|
||||
# @return [<Sawyer::Resource>] An installation token
|
||||
def create_app_installation_access_token(installation, options = {})
|
||||
post "app/installations/#{installation}/access_tokens", options
|
||||
end
|
||||
alias create_installation_access_token create_app_installation_access_token
|
||||
|
||||
def create_integration_installation_access_token(installation, options = {})
|
||||
octokit_warn(
|
||||
'Deprecated: Octokit::Client::Apps#create_integration_installation_access_token ' \
|
||||
'method is deprecated. Please update your call to use ' \
|
||||
'Octokit::Client::Apps#create_app_installation_access_token before the next major ' \
|
||||
'Octokit version update.'
|
||||
)
|
||||
create_app_installation_access_token(installation, options)
|
||||
end
|
||||
|
||||
# Enables an app to find the organization's installation information.
|
||||
#
|
||||
# @param organization [String] Organization GitHub login
|
||||
# @param options [Hash] A customizable set of options
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/#get-an-organization-installation
|
||||
#
|
||||
# @return [Sawyer::Resource] Installation information
|
||||
def find_organization_installation(organization, options = {})
|
||||
get "#{Organization.path(organization)}/installation", options
|
||||
end
|
||||
|
||||
# Enables an app to find the repository's installation information.
|
||||
#
|
||||
# @param repo [String] A GitHub repository
|
||||
# @param options [Hash] A customizable set of options
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/#get-a-repository-installation
|
||||
#
|
||||
# @return [Sawyer::Resource] Installation information
|
||||
def find_repository_installation(repo, options = {})
|
||||
get "#{Repository.path(repo)}/installation", options
|
||||
end
|
||||
|
||||
# Enables an app to find the user's installation information.
|
||||
#
|
||||
# @param user [String] GitHub user login
|
||||
# @param options [Hash] A customizable set of options
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/#get-a-user-installation
|
||||
#
|
||||
# @return [Sawyer::Resource] Installation information
|
||||
def find_user_installation(user, options = {})
|
||||
get "#{User.path(user)}/installation", options
|
||||
end
|
||||
|
||||
# List repositories that are accessible to the authenticated installation
|
||||
#
|
||||
# @param options [Hash] A customizable set of options
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/installations/#list-repositories
|
||||
#
|
||||
# @return [Sawyer::Resource] the total_count and an array of repositories
|
||||
def list_app_installation_repositories(options = {})
|
||||
paginate('installation/repositories', options) do |data, last_response|
|
||||
data.repositories.concat last_response.data.repositories
|
||||
end
|
||||
end
|
||||
alias list_installation_repos list_app_installation_repositories
|
||||
|
||||
def list_integration_installation_repositories(options = {})
|
||||
octokit_warn(
|
||||
'Deprecated: Octokit::Client::Apps#list_integration_installation_repositories ' \
|
||||
'method is deprecated. Please update your call to use ' \
|
||||
'Octokit::Client::Apps#list_app_installation_repositories before the next major ' \
|
||||
'Octokit version update.'
|
||||
)
|
||||
list_app_installation_repositories(options)
|
||||
end
|
||||
|
||||
# Add a single repository to an installation
|
||||
#
|
||||
# @param installation [Integer] The id of a GitHub App Installation
|
||||
# @param repo [Integer] The id of the GitHub repository
|
||||
# @param options [Hash] A customizable set of options
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/installations/#add-repository-to-installation
|
||||
#
|
||||
# @return [Boolean] Success
|
||||
def add_repository_to_app_installation(installation, repo, options = {})
|
||||
boolean_from_response :put, "user/installations/#{installation}/repositories/#{repo}", options
|
||||
end
|
||||
alias add_repo_to_installation add_repository_to_app_installation
|
||||
|
||||
def add_repository_to_integration_installation(installation, repo, options = {})
|
||||
octokit_warn(
|
||||
'Deprecated: Octokit::Client::Apps#add_repository_to_integration_installation ' \
|
||||
'method is deprecated. Please update your call to use ' \
|
||||
'Octokit::Client::Apps#add_repository_to_app_installation before the next major ' \
|
||||
'Octokit version update.'
|
||||
)
|
||||
add_repository_to_app_installation(installation, repo, options)
|
||||
end
|
||||
|
||||
# Remove a single repository to an installation
|
||||
#
|
||||
# @param installation [Integer] The id of a GitHub App Installation
|
||||
# @param repo [Integer] The id of the GitHub repository
|
||||
# @param options [Hash] A customizable set of options
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/installations/#remove-repository-from-installation
|
||||
#
|
||||
# @return [Boolean] Success
|
||||
def remove_repository_from_app_installation(installation, repo, options = {})
|
||||
boolean_from_response :delete, "user/installations/#{installation}/repositories/#{repo}", options
|
||||
end
|
||||
alias remove_repo_from_installation remove_repository_from_app_installation
|
||||
|
||||
def remove_repository_from_integration_installation(installation, repo, options = {})
|
||||
octokit_warn(
|
||||
'Deprecated: Octokit::Client::Apps#remove_repository_from_integration_installation ' \
|
||||
'method is deprecated. Please update your call to use ' \
|
||||
'Octokit::Client::Apps#remove_repository_from_app_installation before the next major ' \
|
||||
'Octokit version update.'
|
||||
)
|
||||
remove_repository_from_app_installation(installation, repo, options)
|
||||
end
|
||||
|
||||
# List repositories accessible to the user for an installation
|
||||
#
|
||||
# @param installation [Integer] The id of a GitHub App Installation
|
||||
# @param options [Hash] A customizable set of options
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/installations/#list-repositories-accessible-to-the-user-for-an-installation
|
||||
#
|
||||
# @return [Sawyer::Resource] the total_count and an array of repositories
|
||||
def find_installation_repositories_for_user(installation, options = {})
|
||||
paginate("user/installations/#{installation}/repositories", options) do |data, last_response|
|
||||
data.repositories.concat last_response.data.repositories
|
||||
end
|
||||
end
|
||||
|
||||
# Delete an installation and uninstall a GitHub App
|
||||
#
|
||||
# @param installation [Integer] The id of a GitHub App Installation
|
||||
# @param options [Hash] A customizable set of options
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/#delete-an-installation
|
||||
#
|
||||
# @return [Boolean] Success
|
||||
def delete_installation(installation, options = {})
|
||||
boolean_from_response :delete, "app/installations/#{installation}", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,200 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Checks API
|
||||
#
|
||||
# @see https://developer.github.com/v3/checks/
|
||||
module Checks
|
||||
# Methods for Check Runs
|
||||
#
|
||||
# @see https://developer.github.com/v3/checks/runs/
|
||||
|
||||
# Create a check run
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param name [String] The name of the check
|
||||
# @param head_sha [String] The SHA of the commit to check
|
||||
# @return [Sawyer::Resource] A hash representing the new check run
|
||||
# @see https://developer.github.com/v3/checks/runs/#create-a-check-run
|
||||
# @example Create a check run
|
||||
# check_run = @client.create_check_run("octocat/Hello-World", "my-check", "7638417db6d59f3c431d3e1f261cc637155684cd")
|
||||
# check_run.name # => "my-check"
|
||||
# check_run.head_sha # => "7638417db6d59f3c431d3e1f261cc637155684cd"
|
||||
# check_run.status # => "queued"
|
||||
def create_check_run(repo, name, head_sha, options = {})
|
||||
options[:name] = name
|
||||
options[:head_sha] = head_sha
|
||||
|
||||
post "#{Repository.path repo}/check-runs", options
|
||||
end
|
||||
|
||||
# Update a check run
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param id [Integer] The ID of the check run
|
||||
# @return [Sawyer::Resource] A hash representing the updated check run
|
||||
# @see https://developer.github.com/v3/checks/runs/#update-a-check-run
|
||||
# @example Update a check run
|
||||
# check_run = @client.update_check_run("octocat/Hello-World", 51295429, status: "in_progress")
|
||||
# check_run.id # => 51295429
|
||||
# check_run.status # => "in_progress"
|
||||
def update_check_run(repo, id, options = {})
|
||||
patch "#{Repository.path repo}/check-runs/#{id}", options
|
||||
end
|
||||
|
||||
# List check runs for a specific ref
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param ref [String] A SHA, branch name, or tag name
|
||||
# @param options [Hash] A set of optional filters
|
||||
# @option options [String] :check_name Returns check runs with the specified <tt>name</tt>
|
||||
# @option options [String] :status Returns check runs with the specified <tt>status</tt>
|
||||
# @option options [String] :filter Filters check runs by their <tt>completed_at</tt> timestamp
|
||||
# @return [Sawyer::Resource] A hash representing a collection of check runs
|
||||
# @see https://developer.github.com/v3/checks/runs/#list-check-runs-for-a-specific-ref
|
||||
# @example List check runs for a specific ref
|
||||
# result = @client.check_runs_for_ref("octocat/Hello-World", "7638417db6d59f3c431d3e1f261cc637155684cd", status: "in_progress")
|
||||
# result.total_count # => 1
|
||||
# result.check_runs.count # => 1
|
||||
# result.check_runs[0].id # => 51295429
|
||||
# result.check_runs[0].status # => "in_progress"
|
||||
def check_runs_for_ref(repo, ref, options = {})
|
||||
paginate "#{Repository.path repo}/commits/#{ref}/check-runs", options do |data, last_response|
|
||||
data.check_runs.concat last_response.data.check_runs
|
||||
data.total_count += last_response.data.total_count
|
||||
end
|
||||
end
|
||||
alias list_check_runs_for_ref check_runs_for_ref
|
||||
|
||||
# List check runs in a check suite
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param id [Integer] The ID of the check suite
|
||||
# @param options [Hash] A set of optional filters
|
||||
# @option options [String] :check_name Returns check runs with the specified <tt>name</tt>
|
||||
# @option options [String] :status Returns check runs with the specified <tt>status</tt>
|
||||
# @option options [String] :filter Filters check runs by their <tt>completed_at</tt> timestamp
|
||||
# @return [Sawyer::Resource] A hash representing a collection of check runs
|
||||
# @see https://developer.github.com/v3/checks/runs/#list-check-runs-in-a-check-suite
|
||||
# @example List check runs in a check suite
|
||||
# result = @client.check_runs_for_check_suite("octocat/Hello-World", 50440400, status: "in_progress")
|
||||
# result.total_count # => 1
|
||||
# result.check_runs.count # => 1
|
||||
# result.check_runs[0].check_suite.id # => 50440400
|
||||
# result.check_runs[0].status # => "in_progress"
|
||||
def check_runs_for_check_suite(repo, id, options = {})
|
||||
paginate "#{Repository.path repo}/check-suites/#{id}/check-runs", options do |data, last_response|
|
||||
data.check_runs.concat last_response.data.check_runs
|
||||
data.total_count += last_response.data.total_count
|
||||
end
|
||||
end
|
||||
alias list_check_runs_for_check_suite check_runs_for_check_suite
|
||||
|
||||
# Get a single check run
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param id [Integer] The ID of the check run
|
||||
# @return [Sawyer::Resource] A hash representing the check run
|
||||
# @see https://developer.github.com/v3/checks/runs/#get-a-single-check-run
|
||||
def check_run(repo, id, options = {})
|
||||
get "#{Repository.path repo}/check-runs/#{id}", options
|
||||
end
|
||||
|
||||
# List annotations for a check run
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param id [Integer] The ID of the check run
|
||||
# @return [Array<Sawyer::Resource>] An array of hashes representing check run annotations
|
||||
# @see https://developer.github.com/v3/checks/runs/#list-annotations-for-a-check-run
|
||||
# @example List annotations for a check run
|
||||
# annotations = @client.check_run_annotations("octocat/Hello-World", 51295429)
|
||||
# annotations.count # => 1
|
||||
# annotations[0].path # => "README.md"
|
||||
# annotations[0].message # => "Looks good!"
|
||||
def check_run_annotations(repo, id, options = {})
|
||||
paginate "#{Repository.path repo}/check-runs/#{id}/annotations", options
|
||||
end
|
||||
|
||||
# Methods for Check Suites
|
||||
#
|
||||
# @see https://developer.github.com/v3/checks/suites/
|
||||
|
||||
# Get a single check suite
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param id [Integer] The ID of the check suite
|
||||
# @return [Sawyer::Resource] A hash representing the check suite
|
||||
# @see https://developer.github.com/v3/checks/suites/#get-a-single-check-suite
|
||||
def check_suite(repo, id, options = {})
|
||||
get "#{Repository.path repo}/check-suites/#{id}", options
|
||||
end
|
||||
|
||||
# List check suites for a specific ref
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param ref [String] A SHA, branch name, or tag name
|
||||
# @param options [Hash] A set of optional filters
|
||||
# @option options [Integer] :app_id Filters check suites by GitHub App <tt>id</tt>
|
||||
# @option options [String] :check_name Filters checks suites by the <tt>name</tt> of the check run
|
||||
# @return [Sawyer::Resource] A hash representing a collection of check suites
|
||||
# @see https://developer.github.com/v3/checks/suites/#list-check-suites-for-a-specific-ref
|
||||
# @example List check suites for a specific ref
|
||||
# result = @client.check_suites_for_ref("octocat/Hello-World", "7638417db6d59f3c431d3e1f261cc637155684cd", app_id: 76765)
|
||||
# result.total_count # => 1
|
||||
# result.check_suites.count # => 1
|
||||
# result.check_suites[0].id # => 50440400
|
||||
# result.check_suites[0].app.id # => 76765
|
||||
def check_suites_for_ref(repo, ref, options = {})
|
||||
paginate "#{Repository.path repo}/commits/#{ref}/check-suites", options do |data, last_response|
|
||||
data.check_suites.concat last_response.data.check_suites
|
||||
data.total_count += last_response.data.total_count
|
||||
end
|
||||
end
|
||||
alias list_check_suites_for_ref check_suites_for_ref
|
||||
|
||||
# Set preferences for check suites on a repository
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param options [Hash] Preferences to set
|
||||
# @return [Sawyer::Resource] A hash representing the repository's check suite preferences
|
||||
# @see https://developer.github.com/v3/checks/suites/#set-preferences-for-check-suites-on-a-repository
|
||||
# @example Set preferences for check suites on a repository
|
||||
# result = @client.set_check_suite_preferences("octocat/Hello-World", auto_trigger_checks: [{ app_id: 76765, setting: false }])
|
||||
# result.preferences.auto_trigger_checks.count # => 1
|
||||
# result.preferences.auto_trigger_checks[0].app_id # => 76765
|
||||
# result.preferences.auto_trigger_checks[0].setting # => false
|
||||
# result.repository.full_name # => "octocat/Hello-World"
|
||||
def set_check_suite_preferences(repo, options = {})
|
||||
patch "#{Repository.path repo}/check-suites/preferences", options
|
||||
end
|
||||
|
||||
# Create a check suite
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param head_sha [String] The SHA of the commit to check
|
||||
# @return [Sawyer::Resource] A hash representing the new check suite
|
||||
# @see https://developer.github.com/v3/checks/suites/#create-a-check-suite
|
||||
# @example Create a check suite
|
||||
# check_suite = @client.create_check_suite("octocat/Hello-World", "7638417db6d59f3c431d3e1f261cc637155684cd")
|
||||
# check_suite.head_sha # => "7638417db6d59f3c431d3e1f261cc637155684cd"
|
||||
# check_suite.status # => "queued"
|
||||
def create_check_suite(repo, head_sha, options = {})
|
||||
options[:head_sha] = head_sha
|
||||
|
||||
post "#{Repository.path repo}/check-suites", options
|
||||
end
|
||||
|
||||
# Rerequest check suite
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param id [Integer] The ID of the check suite
|
||||
# @return [Boolean] True if successful, raises an error otherwise
|
||||
# @see https://developer.github.com/v3/checks/suites/#rerequest-check-suite
|
||||
def rerequest_check_suite(repo, id, options = {})
|
||||
post "#{Repository.path repo}/check-suites/#{id}/rerequest", options
|
||||
true
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,20 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Branches for HEAD API
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/commits/
|
||||
module CommitBranches
|
||||
# List branches for a single HEAD commit
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param sha [String] The SHA of the commit whose branches will be fetched
|
||||
# @return [Array] List of branches
|
||||
# @see https://developer.github.com/v3/repos/commits/#list-branches-for-head-commit
|
||||
def commit_branches(repo, sha, options = {})
|
||||
paginate "#{Repository.path repo}/commits/#{sha}/branches-where-head", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,95 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Commit Comments API
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/comments/
|
||||
module CommitComments
|
||||
# List all commit comments
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @return [Array] List of commit comments
|
||||
# @see https://developer.github.com/v3/repos/comments/#list-commit-comments-for-a-repository
|
||||
def list_commit_comments(repo, options = {})
|
||||
paginate "#{Repository.path repo}/comments", options
|
||||
end
|
||||
|
||||
# List comments for a single commit
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param sha [String] The SHA of the commit whose comments will be fetched
|
||||
# @return [Array] List of commit comments
|
||||
# @see https://developer.github.com/v3/repos/comments/#list-comments-for-a-single-commit
|
||||
def commit_comments(repo, sha, options = {})
|
||||
paginate "#{Repository.path repo}/commits/#{sha}/comments", options
|
||||
end
|
||||
|
||||
# Get a single commit comment
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param id [String] The ID of the comment to fetch
|
||||
# @return [Sawyer::Resource] Commit comment
|
||||
# @see https://developer.github.com/v3/repos/comments/#get-a-single-commit-comment
|
||||
def commit_comment(repo, id, options = {})
|
||||
get "#{Repository.path repo}/comments/#{id}", options
|
||||
end
|
||||
|
||||
# Create a commit comment
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param sha [String] Sha of the commit to comment on
|
||||
# @param body [String] Message
|
||||
# @param path [String] Relative path of file to comment on
|
||||
# @param line [Integer] Line number in the file to comment on
|
||||
# @param position [Integer] Line index in the diff to comment on
|
||||
# @return [Sawyer::Resource] Commit comment
|
||||
# @see https://developer.github.com/v3/repos/comments/#create-a-commit-comment
|
||||
# @example Create a commit comment
|
||||
# comment = Octokit.create_commit_comment("octocat/Hello-World", "827efc6d56897b048c772eb4087f854f46256132", "My comment message", "README.md", 10, 1)
|
||||
# comment.commit_id # => "827efc6d56897b048c772eb4087f854f46256132"
|
||||
# comment.id # => 54321
|
||||
# comment.body # => "My comment message"
|
||||
# comment.path # => "README.md"
|
||||
# comment.line # => 10
|
||||
# comment.position # => 1
|
||||
def create_commit_comment(repo, sha, body, path = nil, line = nil, position = nil, options = {})
|
||||
params = {
|
||||
body: body,
|
||||
path: path,
|
||||
line: line,
|
||||
position: position
|
||||
}
|
||||
post "#{Repository.path repo}/commits/#{sha}/comments", options.merge(params)
|
||||
end
|
||||
|
||||
# Update a commit comment
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param id [String] The ID of the comment to update
|
||||
# @param body [String] Message
|
||||
# @return [Sawyer::Resource] Updated commit comment
|
||||
# @see https://developer.github.com/v3/repos/comments/#update-a-commit-comment
|
||||
# @example Update a commit comment
|
||||
# comment = Octokit.update_commit_comment("octocat/Hello-World", "860296", "Updated commit comment")
|
||||
# comment.id # => 860296
|
||||
# comment.body # => "Updated commit comment"
|
||||
def update_commit_comment(repo, id, body, options = {})
|
||||
params = {
|
||||
body: body
|
||||
}
|
||||
patch "#{Repository.path repo}/comments/#{id}", options.merge(params)
|
||||
end
|
||||
|
||||
# Delete a commit comment
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param id [String] The ID of the comment to delete
|
||||
# @return [Boolean] Success
|
||||
# @see https://developer.github.com/v3/repos/comments/#delete-a-commit-comment
|
||||
def delete_commit_comment(repo, id, options = {})
|
||||
boolean_from_response :delete, "#{Repository.path repo}/comments/#{id}", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,20 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Commit Pulls API
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/comments/
|
||||
module CommitPulls
|
||||
# List pulls for a single commit
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param sha [String] The SHA of the commit whose pulls will be fetched
|
||||
# @return [Array] List of commit pulls
|
||||
# @see https://developer.github.com/v3/repos/commits/#list-pull-requests-associated-with-commit
|
||||
def commit_pulls(repo, sha, options = {})
|
||||
paginate "#{Repository.path repo}/commits/#{sha}/pulls", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,236 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'date'
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Commits API
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/commits/
|
||||
module Commits
|
||||
# List commits
|
||||
#
|
||||
# @overload commits(repo, sha_or_branch, options = {})
|
||||
# @deprecated
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param sha_or_branch [String] A commit SHA or branch name
|
||||
# @param options [String] :sha Commit SHA or branch name from which to start the list
|
||||
# @overload commits(repo, options = {})
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param options [String] :sha Commit SHA or branch name from which to start the list
|
||||
# @return [Array<Sawyer::Resource>] An array of hashes representing commits
|
||||
# @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository
|
||||
def commits(*args)
|
||||
arguments = Octokit::RepoArguments.new(args)
|
||||
sha_or_branch = arguments.pop
|
||||
arguments.options[:sha] = sha_or_branch if sha_or_branch
|
||||
paginate "#{Repository.new(arguments.repo).path}/commits", arguments.options
|
||||
end
|
||||
alias list_commits commits
|
||||
|
||||
# Get commits after a specified date
|
||||
#
|
||||
# @overload commits_since(repo, date, options = {})
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param date [String] Date on which we want to compare
|
||||
# @param options [String] :sha Commit SHA or branch name from which to start the list
|
||||
# @overload commits_since(repo, date, sha_or_branch, options = {})
|
||||
# @deprecated
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param date [String] Date on which we want to compare
|
||||
# @param sha_or_branch [String] A commit SHA or branch name
|
||||
# @param options [String] :sha Commit SHA or branch name from which to start the list
|
||||
# @return [Array<Sawyer::Resource>] An array of hashes representing commits
|
||||
# @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository
|
||||
# @example
|
||||
# Octokit.commits_since('octokit/octokit.rb', '2012-10-01')
|
||||
def commits_since(*args)
|
||||
arguments = Octokit::RepoArguments.new(args)
|
||||
date = parse_date(arguments.shift)
|
||||
params = arguments.options
|
||||
params.merge!(since: iso8601(date))
|
||||
sha_or_branch = arguments.pop
|
||||
params[:sha] = sha_or_branch if sha_or_branch
|
||||
commits(arguments.repo, params)
|
||||
end
|
||||
|
||||
# Get commits before a specified date
|
||||
#
|
||||
# @overload commits_before(repo, date, options = {})
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param date [String] Date on which we want to compare
|
||||
# @overload commits_before(repo, date, sha_or_branch, options = {})
|
||||
# @deprecated
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param date [String] Date on which we want to compare
|
||||
# @param sha_or_branch [String] Commit SHA or branch name from which to start the list
|
||||
# @return [Array<Sawyer::Resource>] An array of hashes representing commits
|
||||
# @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository
|
||||
# @example
|
||||
# Octokit.commits_before('octokit/octokit.rb', '2012-10-01')
|
||||
def commits_before(*args)
|
||||
arguments = Octokit::RepoArguments.new(args)
|
||||
date = parse_date(arguments.shift)
|
||||
params = arguments.options
|
||||
params.merge!(until: iso8601(date))
|
||||
sha_or_branch = arguments.pop
|
||||
params[:sha] = sha_or_branch if sha_or_branch
|
||||
commits(arguments.repo, params)
|
||||
end
|
||||
|
||||
# Get commits on a specified date
|
||||
#
|
||||
# @overload commits_on(repo, date, options = {})
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param date [String] Date on which we want to compare
|
||||
# @overload commits_on(repo, date, sha_or_branch, options = {})
|
||||
# @deprecated
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param date [String] Date on which we want to compare
|
||||
# @param sha_or_branch [String] Commit SHA or branch name from which to start the list
|
||||
# @return [Array<Sawyer::Resource>] An array of hashes representing commits
|
||||
# @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository
|
||||
# @example
|
||||
# Octokit.commits_on('octokit/octokit.rb', '2012-10-01')
|
||||
def commits_on(*args)
|
||||
arguments = Octokit::RepoArguments.new(args)
|
||||
date = parse_date(arguments.shift)
|
||||
params = arguments.options
|
||||
end_date = date + 1
|
||||
params.merge!(since: iso8601(date), until: iso8601(end_date))
|
||||
sha_or_branch = arguments.pop
|
||||
params[:sha] = sha_or_branch if sha_or_branch
|
||||
commits(arguments.repo, params)
|
||||
end
|
||||
|
||||
# Get commits made between two nominated dates
|
||||
#
|
||||
# @overload commits_between(repo, start_date, end_date, options = {})
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param start_date [String] Start Date on which we want to compare
|
||||
# @param end_date [String] End Date on which we want to compare
|
||||
# @overload commits_between(repo, start_date, end_date, sha_or_branch, options = {})
|
||||
# @deprecated
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param start_date [String] Start Date on which we want to compare
|
||||
# @param end_date [String] End Date on which we want to compare
|
||||
# @param sha_or_branch [String] Commit SHA or branch name from which to start the list
|
||||
# @return [Array<Sawyer::Resource>] An array of hashes representing commits
|
||||
# @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository
|
||||
# @example
|
||||
# Octokit.commits_between('octokit/octokit.rb', '2012-10-01', '2012-11-01')
|
||||
def commits_between(*args)
|
||||
arguments = Octokit::RepoArguments.new(args)
|
||||
date = parse_date(arguments.shift)
|
||||
end_date = parse_date(arguments.shift)
|
||||
if date > end_date
|
||||
raise ArgumentError, "Start date #{date} does not precede #{end_date}"
|
||||
end
|
||||
|
||||
params = arguments.options
|
||||
params.merge!(since: iso8601(date), until: iso8601(end_date))
|
||||
sha_or_branch = arguments.pop
|
||||
params[:sha] = sha_or_branch if sha_or_branch
|
||||
commits(arguments.repo, params)
|
||||
end
|
||||
|
||||
# Get a single commit
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param sha [String] The SHA of the commit to fetch
|
||||
# @return [Sawyer::Resource] A hash representing the commit
|
||||
# @see https://developer.github.com/v3/repos/commits/#get-a-single-commit
|
||||
def commit(repo, sha, options = {})
|
||||
get "#{Repository.path repo}/commits/#{sha}", options
|
||||
end
|
||||
|
||||
# Get a detailed git commit
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param sha [String] The SHA of the commit to fetch
|
||||
# @return [Sawyer::Resource] A hash representing the commit
|
||||
# @see https://developer.github.com/v3/git/commits/#get-a-commit
|
||||
def git_commit(repo, sha, options = {})
|
||||
get "#{Repository.path repo}/git/commits/#{sha}", options
|
||||
end
|
||||
|
||||
# Create a commit
|
||||
#
|
||||
# Optionally pass <tt>author</tt> and <tt>committer</tt> hashes in <tt>options</tt>
|
||||
# if you'd like manual control over those parameters. If absent, details will be
|
||||
# inferred from the authenticated user. See <a href="http://developer.github.com/v3/git/commits/">GitHub's documentation</a>
|
||||
# for details about how to format committer identities.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param message [String] The commit message
|
||||
# @param tree [String] The SHA of the tree object the new commit will point to
|
||||
# @param parents [String, Array] One SHA (for a normal commit) or an array of SHAs (for a merge) of the new commit's parent commits. If ommitted or empty, a root commit will be created
|
||||
# @return [Sawyer::Resource] A hash representing the new commit
|
||||
# @see https://developer.github.com/v3/git/commits/#create-a-commit
|
||||
# @example Create a commit
|
||||
# commit = Octokit.create_commit("octocat/Hello-World", "My commit message", "827efc6d56897b048c772eb4087f854f46256132", "7d1b31e74ee336d15cbd21741bc88a537ed063a0")
|
||||
# commit.sha # => "7638417db6d59f3c431d3e1f261cc637155684cd"
|
||||
# commit.tree.sha # => "827efc6d56897b048c772eb4087f854f46256132"
|
||||
# commit.message # => "My commit message"
|
||||
# commit.committer # => { "name" => "Wynn Netherland", "email" => "wynn@github.com", ... }
|
||||
def create_commit(repo, message, tree, parents = nil, options = {})
|
||||
params = { message: message, tree: tree }
|
||||
params[:parents] = [parents].flatten if parents
|
||||
post "#{Repository.path repo}/git/commits", options.merge(params)
|
||||
end
|
||||
|
||||
# Compare two commits
|
||||
#
|
||||
# When using auto_pagination, commits from all pages will be concatenated
|
||||
# into the <tt>commits</tt> attribute of the first page's response.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param start [String] The sha of the starting commit
|
||||
# @param endd [String] The sha of the ending commit
|
||||
# @return [Sawyer::Resource] A hash representing the comparison
|
||||
# @see https://developer.github.com/v3/repos/commits/#compare-two-commits
|
||||
def compare(repo, start, endd, options = {})
|
||||
paginate "#{Repository.path repo}/compare/#{start}...#{endd}", options do |data, last_response|
|
||||
data.commits.concat last_response.data.commits
|
||||
end
|
||||
end
|
||||
|
||||
# Merge a branch or sha
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param base [String] The name of the base branch to merge into
|
||||
# @param head [String] The branch or SHA1 to merge
|
||||
# @option options [String] :commit_message The commit message for the merge
|
||||
# @return [Sawyer::Resource] A hash representing the comparison
|
||||
# @see https://developer.github.com/v3/repos/merging/#perform-a-merge
|
||||
def merge(repo, base, head, options = {})
|
||||
params = {
|
||||
base: base,
|
||||
head: head
|
||||
}.merge(options)
|
||||
post "#{Repository.path repo}/merges", params
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def iso8601(date)
|
||||
if date.respond_to?(:iso8601)
|
||||
date.iso8601
|
||||
else
|
||||
date.strftime('%Y-%m-%dT%H:%M:%S%Z')
|
||||
end
|
||||
end
|
||||
|
||||
# Parses the given string representation of a date, throwing a meaningful exception
|
||||
# (containing the date that failed to parse) in case of failure.
|
||||
#
|
||||
# @param date [String] String representation of a date
|
||||
# @return [DateTime]
|
||||
def parse_date(date)
|
||||
date = DateTime.parse(date.to_s)
|
||||
rescue ArgumentError
|
||||
raise ArgumentError, "#{date} is not a valid date"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,21 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Community Profile API
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/community/
|
||||
module CommunityProfile
|
||||
# Get community profile metrics for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @return [Sawyer::Resource] Community profile metrics
|
||||
# @see https://developer.github.com/v3/repos/community/#retrieve-community-profile-metrics
|
||||
# @example Get community profile metrics for octokit/octokit.rb
|
||||
# @client.community_profile('octokit/octokit.rb')
|
||||
def community_profile(repo, options = {})
|
||||
get "#{Repository.path repo}/community/profile", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,167 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'base64'
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Repo Contents API
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/contents/
|
||||
module Contents
|
||||
# Receive the default Readme for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @option options [String] :ref name of the Commit/Branch/Tag. Defaults to “master”.
|
||||
# @return [Sawyer::Resource] The detail of the readme
|
||||
# @see https://developer.github.com/v3/repos/contents/#get-the-readme
|
||||
# @example Get the readme file for a repo
|
||||
# Octokit.readme("octokit/octokit.rb")
|
||||
# @example Get the readme file for a particular branch of the repo
|
||||
# Octokit.readme("octokit/octokit.rb", :query => {:ref => 'some-other-branch'})
|
||||
def readme(repo, options = {})
|
||||
get "#{Repository.path repo}/readme", options
|
||||
end
|
||||
|
||||
# Receive a listing of a repository folder or the contents of a file
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @option options [String] :path A folder or file path
|
||||
# @option options [String] :ref name of the Commit/Branch/Tag. Defaults to “master”.
|
||||
# @return [Sawyer::Resource] The contents of a file or list of the files in the folder
|
||||
# @see https://developer.github.com/v3/repos/contents/#get-contents
|
||||
# @example List the contents of lib/octokit.rb
|
||||
# Octokit.contents("octokit/octokit.rb", :path => 'lib/octokit.rb')
|
||||
# @example Lists the contents of lib /octokit.rb on a particular branch
|
||||
# Octokit.contents("octokit/octokit.rb", :path => 'lib/octokit.rb', :query => {:ref => 'some-other-branch'})
|
||||
def contents(repo, options = {})
|
||||
options = options.dup
|
||||
repo_path = options.delete :path
|
||||
url = "#{Repository.path repo}/contents/#{repo_path}"
|
||||
get url, options
|
||||
end
|
||||
alias content contents
|
||||
|
||||
# Add content to a repository
|
||||
#
|
||||
# @overload create_contents(repo, path, message, content = nil, options = {})
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param path [String] A path for the new content
|
||||
# @param message [String] A commit message for adding the content
|
||||
# @param optional content [String] The content for the file
|
||||
# @option options [String] :branch The branch on which to add the content
|
||||
# @option options [String] :file Path or Ruby File object for content
|
||||
# @return [Sawyer::Resource] The contents and commit info for the addition
|
||||
# @see https://developer.github.com/v3/repos/contents/#create-a-file
|
||||
# @example Add content at lib/octokit.rb
|
||||
# Octokit.create_contents("octokit/octokit.rb",
|
||||
# "lib/octokit.rb",
|
||||
# "Adding content",
|
||||
# "File content",
|
||||
# :branch => "my-new-feature")
|
||||
def create_contents(*args)
|
||||
args = args.map { |item| item&.dup }
|
||||
options = args.last.is_a?(Hash) ? args.pop : {}
|
||||
repo = args.shift
|
||||
path = args.shift
|
||||
message = args.shift
|
||||
content = args.shift
|
||||
if content.nil? && file = options.delete(:file)
|
||||
case file
|
||||
when String
|
||||
if File.exist?(file)
|
||||
file = File.open(file, 'r')
|
||||
content = file.read
|
||||
file.close
|
||||
end
|
||||
when File, Tempfile
|
||||
content = file.read
|
||||
file.close
|
||||
end
|
||||
end
|
||||
raise ArgumentError, 'content or :file option required' if content.nil?
|
||||
|
||||
options[:content] = Base64.strict_encode64(content)
|
||||
options[:message] = message
|
||||
url = "#{Repository.path repo}/contents/#{path}"
|
||||
put url, options
|
||||
end
|
||||
alias create_content create_contents
|
||||
alias add_content create_contents
|
||||
alias add_contents create_contents
|
||||
|
||||
# Update content in a repository
|
||||
#
|
||||
# @overload update_contents(repo, path, message, sha, content = nil, options = {})
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param path [String] A path for the content to update
|
||||
# @param message [String] A commit message for updating the content
|
||||
# @param sha [String] The _blob sha_ of the content to update
|
||||
# @param content [String] The content for the file
|
||||
# @option options [String] :branch The branch on which to update the content
|
||||
# @option options [String] :file Path or Ruby File object for content
|
||||
# @return [Sawyer::Resource] The contents and commit info for the update
|
||||
# @see https://developer.github.com/v3/repos/contents/#update-a-file
|
||||
# @example Update content at lib/octokit.rb
|
||||
# Octokit.update_contents("octokit/octokit.rb",
|
||||
# "lib/octokit.rb",
|
||||
# "Updating content",
|
||||
# "7eb95f97e1a0636015df3837478d3f15184a5f49",
|
||||
# "File content",
|
||||
# :branch => "my-new-feature")
|
||||
def update_contents(*args)
|
||||
options = args.last.is_a?(Hash) ? args.pop : {}
|
||||
repo = args.shift
|
||||
path = args.shift
|
||||
message = args.shift
|
||||
sha = args.shift
|
||||
content = args.shift
|
||||
options.merge!(sha: sha)
|
||||
create_contents(repo, path, message, content, options)
|
||||
end
|
||||
alias update_content update_contents
|
||||
|
||||
# Delete content in a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param path [String] A path for the content to delete
|
||||
# @param message [String] A commit message for deleting the content
|
||||
# @param sha [String] The _blob sha_ of the content to delete
|
||||
# @option options [String] :branch The branch on which to delete the content
|
||||
# @return [Sawyer::Resource] The commit info for the delete
|
||||
# @see https://developer.github.com/v3/repos/contents/#delete-a-file
|
||||
# @example Delete content at lib/octokit.rb
|
||||
# Octokit.delete_contents("octokit/octokit.rb",
|
||||
# "lib/octokit.rb",
|
||||
# "Deleting content",
|
||||
# "7eb95f97e1a0636015df3837478d3f15184a5f49",
|
||||
# :branch => "my-new-feature")
|
||||
def delete_contents(repo, path, message, sha, options = {})
|
||||
options[:message] = message
|
||||
options[:sha] = sha
|
||||
url = "#{Repository.path repo}/contents/#{path}"
|
||||
delete url, options
|
||||
end
|
||||
alias delete_content delete_contents
|
||||
alias remove_content delete_contents
|
||||
alias remove_contents delete_contents
|
||||
|
||||
# This method will provide a URL to download a tarball or zipball archive for a repository.
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository.
|
||||
# @option options format [String] Either tarball (default) or zipball.
|
||||
# @option options [String] :ref Optional valid Git reference, defaults to master.
|
||||
# @return [String] Location of the download
|
||||
# @see https://developer.github.com/v3/repos/contents/#get-archive-link
|
||||
# @example Get archive link for octokit/octokit.rb
|
||||
# Octokit.archive_link("octokit/octokit.rb")
|
||||
def archive_link(repo, options = {})
|
||||
repo_ref = ERB::Util.url_encode(options.delete(:ref))
|
||||
format = (options.delete :format) || 'tarball'
|
||||
url = "#{Repository.path repo}/#{format}/#{repo_ref}"
|
||||
|
||||
response = client_without_redirects.head(url, options)
|
||||
response.headers['Location']
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,82 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Deployments API
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/commits/deployments/
|
||||
module Deployments
|
||||
# Fetch a single deployment for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param deployment_id [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @return <Sawyer::Resource> A single deployment
|
||||
# @see https://developer.github.com/v3/repos/deployments/#get-a-single-deployment
|
||||
def deployment(repo, deployment_id, options = {})
|
||||
get("#{Repository.path repo}/deployments/#{deployment_id}", options)
|
||||
end
|
||||
|
||||
# List all deployments for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @return [Array<Sawyer::Resource>] A list of deployments
|
||||
# @see https://developer.github.com/v3/repos/deployments/#list-deployments
|
||||
def deployments(repo, options = {})
|
||||
get("#{Repository.path repo}/deployments", options)
|
||||
end
|
||||
alias list_deployments deployments
|
||||
|
||||
# Create a deployment for a ref
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param ref [String] The ref to deploy
|
||||
# @option options [String] :task Used by the deployment system to allow different execution paths. Defaults to "deploy".
|
||||
# @option options [String] :payload Meta info about the deployment
|
||||
# @option options [Boolean] :auto_merge Optional parameter to merge the default branch into the requested deployment branch if necessary. Default: true
|
||||
# @option options [Array<String>] :required_contexts Optional array of status contexts verified against commit status checks.
|
||||
# @option options [String] :environment Optional name for the target deployment environment (e.g., production, staging, qa). Default: "production"
|
||||
# @option options [String] :description Optional short description.
|
||||
# @return [Sawyer::Resource] A deployment
|
||||
# @see https://developer.github.com/v3/repos/deployments/#create-a-deployment
|
||||
def create_deployment(repo, ref, options = {})
|
||||
options[:ref] = ref
|
||||
post("#{Repository.path repo}/deployments", options)
|
||||
end
|
||||
|
||||
# Delete a Deployment
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param deployment_id [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @return [No Content]
|
||||
# @see https://developer.github.com/v3/repos/deployments/#delete-a-deployment
|
||||
def delete_deployment(repo, deployment_id, options = {})
|
||||
delete("#{Repository.path repo}/deployments/#{deployment_id}", options)
|
||||
end
|
||||
|
||||
# List all statuses for a Deployment
|
||||
#
|
||||
# @param deployment_url [String] A URL for a deployment resource
|
||||
# @return [Array<Sawyer::Resource>] A list of deployment statuses
|
||||
# @see https://developer.github.com/v3/repos/deployments/#list-deployment-statuses
|
||||
def deployment_statuses(deployment_url, options = {})
|
||||
deployment = get(deployment_url, accept: options[:accept])
|
||||
get(deployment.rels[:statuses].href, options)
|
||||
end
|
||||
alias list_deployment_statuses deployment_statuses
|
||||
|
||||
# Create a deployment status for a Deployment
|
||||
#
|
||||
# @param deployment_url [String] A URL for a deployment resource
|
||||
# @param state [String] The state: pending, success, failure, error
|
||||
# @option options [String] :target_url The target URL to associate with this status. Default: ""
|
||||
# @option options [String] :description A short description of the status. Maximum length of 140 characters. Default: ""
|
||||
# @return [Sawyer::Resource] A deployment status
|
||||
# @see https://developer.github.com/v3/repos/deployments/#create-a-deployment-status
|
||||
def create_deployment_status(deployment_url, state, options = {})
|
||||
deployment = get(deployment_url, accept: options[:accept])
|
||||
options[:state] = state.to_s.downcase
|
||||
post(deployment.rels[:statuses].href, options)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,49 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Repo Downloads API
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/downloads/
|
||||
module Downloads
|
||||
# List available downloads for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A Github Repository
|
||||
# @return [Array] A list of available downloads
|
||||
# @deprecated As of December 11th, 2012: https://github.com/blog/1302-goodbye-uploads
|
||||
# @see https://developer.github.com/v3/repos/downloads/#list-downloads-for-a-repository
|
||||
# @example List all downloads for Github/Hubot
|
||||
# Octokit.downloads("github/hubot")
|
||||
def downloads(repo, options = {})
|
||||
paginate "#{Repository.path repo}/downloads", options
|
||||
end
|
||||
alias list_downloads downloads
|
||||
|
||||
# Get single download for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param id [Integer] ID of the download
|
||||
# @return [Sawyer::Resource] A single download from the repository
|
||||
# @deprecated As of December 11th, 2012: https://github.com/blog/1302-goodbye-uploads
|
||||
# @see https://developer.github.com/v3/repos/downloads/#get-a-single-download
|
||||
# @example Get the "Robawt" download from Github/Hubot
|
||||
# Octokit.download("github/hubot")
|
||||
def download(repo, id, options = {})
|
||||
get "#{Repository.path repo}/downloads/#{id}", options
|
||||
end
|
||||
|
||||
# Delete a single download for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param id [Integer] ID of the download
|
||||
# @deprecated As of December 11th, 2012: https://github.com/blog/1302-goodbye-uploads
|
||||
# @see https://developer.github.com/v3/repos/downloads/#delete-a-download
|
||||
# @return [Boolean] Status
|
||||
# @example Get the "Robawt" download from Github/Hubot
|
||||
# Octokit.delete_download("github/hubot", 1234)
|
||||
def delete_download(repo, id, options = {})
|
||||
boolean_from_response :delete, "#{Repository.path repo}/downloads/#{id}", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,18 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Emojis API
|
||||
module Emojis
|
||||
# List all emojis used on GitHub
|
||||
#
|
||||
# @return [Sawyer::Resource] A list of all emojis on GitHub
|
||||
# @see https://developer.github.com/v3/emojis/#emojis
|
||||
# @example List all emojis
|
||||
# Octokit.emojis
|
||||
def emojis(options = {})
|
||||
get 'emojis', options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,55 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Environments API
|
||||
#
|
||||
# @see https://docs.github.com/en/rest/deployments/environments
|
||||
module Environments
|
||||
# Fetch a single environment for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param environment_name [String] The name of the environment
|
||||
# @return <Sawyer::Resource> A single environment
|
||||
# @see https://docs.github.com/en/rest/deployments/environments#get-an-environment
|
||||
def environment(repo, environment_name, options = {})
|
||||
get("#{Repository.path repo}/environments/#{environment_name}", options)
|
||||
end
|
||||
|
||||
# Lists the environments for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @option options [Integer] :per_page The number of results per page (max 100). Default: 30
|
||||
# @option options [Integer] :page Page number of the results to fetch. Default: 1
|
||||
# @return [Sawyer::Resource] Total count of environments and list of environments
|
||||
# @see https://docs.github.com/en/rest/deployments/environments#list-environments
|
||||
def environments(repo, options = {})
|
||||
get("#{Repository.path repo}/environments", options)
|
||||
end
|
||||
alias list_environments environments
|
||||
|
||||
# Create or update an environment with protection rules, such as required reviewers
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param environment_name [String] The name of the environment
|
||||
# @option options [Integer] :wait_timer The amount of time to delay a job after the job is initially triggered. The time (in minutes) must be an integer between 0 and 43,200 (30 days).
|
||||
# @option options [Array] :reviewers The people or teams that may review jobs that reference the environment. You can list up to six users or teams as reviewers.
|
||||
# @option options [Object] :deployment_branch_policy The type of deployment branch policy for this environment. To allow all branches to deploy, set to null.
|
||||
# @return [Sawyer::Resource] An environment
|
||||
# @see https://docs.github.com/en/rest/deployments/environments#create-or-update-an-environment
|
||||
def create_or_update_environment(repo, environment_name, options = {})
|
||||
put("#{Repository.path repo}/environments/#{environment_name}", options)
|
||||
end
|
||||
|
||||
# Delete an Environment
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param environment_name [String] The name of the environment
|
||||
# @return [No Content]
|
||||
# @see https://docs.github.com/en/rest/deployments/environments#delete-an-environment
|
||||
def delete_environment(repo, environment_name, options = {})
|
||||
delete("#{Repository.path repo}/environments/#{environment_name}", options)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,151 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Method for the Events API
|
||||
#
|
||||
# @see https://developer.github.com/v3/activity/events/
|
||||
# @see https://developer.github.com/v3/issues/events/
|
||||
module Events
|
||||
# List all public events for GitHub
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] A list of all public events from GitHub
|
||||
# @see https://developer.github.com/v3/activity/events/#list-public-events
|
||||
# @example List all pubilc events
|
||||
# Octokit.public_events
|
||||
def public_events(options = {})
|
||||
paginate 'events', options
|
||||
end
|
||||
|
||||
# List all user events
|
||||
#
|
||||
# @param user [Integer, String] GitHub user login or id.
|
||||
# @return [Array<Sawyer::Resource>] A list of all user events
|
||||
# @see https://developer.github.com/v3/activity/events/#list-events-performed-by-a-user
|
||||
# @example List all user events
|
||||
# Octokit.user_events("sferik")
|
||||
def user_events(user, options = {})
|
||||
paginate "#{User.path user}/events", options
|
||||
end
|
||||
|
||||
# List public user events
|
||||
#
|
||||
# @param user [Integer, String] GitHub user login or id
|
||||
# @return [Array<Sawyer::Resource>] A list of public user events
|
||||
# @see https://developer.github.com/v3/activity/events/#list-public-events-performed-by-a-user
|
||||
# @example List public user events
|
||||
# Octokit.user_events("sferik")
|
||||
def user_public_events(user, options = {})
|
||||
paginate "#{User.path user}/events/public", options
|
||||
end
|
||||
|
||||
# List events that a user has received
|
||||
#
|
||||
# @param user [Integer, String] GitHub user login or id
|
||||
# @return [Array<Sawyer::Resource>] A list of all user received events
|
||||
# @see https://developer.github.com/v3/activity/events/#list-events-that-a-user-has-received
|
||||
# @example List all user received events
|
||||
# Octokit.received_events("sferik")
|
||||
def received_events(user, options = {})
|
||||
paginate "#{User.path user}/received_events", options
|
||||
end
|
||||
|
||||
# List public events a user has received
|
||||
#
|
||||
# @param user [Integer, String] GitHub user login or id
|
||||
# @return [Array<Sawyer::Resource>] A list of public user received events
|
||||
# @see https://developer.github.com/v3/activity/events/#list-public-events-that-a-user-has-received
|
||||
# @example List public user received events
|
||||
# Octokit.received_public_events("sferik")
|
||||
def received_public_events(user, options = {})
|
||||
paginate "#{User.path user}/received_events/public", options
|
||||
end
|
||||
|
||||
# List events for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @return [Array<Sawyer::Resource>] A list of events for a repository
|
||||
# @see https://developer.github.com/v3/activity/events/#list-repository-events
|
||||
# @example List events for a repository
|
||||
# Octokit.repository_events("sferik/rails_admin")
|
||||
def repository_events(repo, options = {})
|
||||
paginate "#{Repository.path repo}/events", options
|
||||
end
|
||||
|
||||
# List public events for a repository's network
|
||||
#
|
||||
# @param repo [String, Repository, Hash] A GitHub repository
|
||||
# @return [Array<Sawyer::Resource>] A list of events for a repository's network
|
||||
# @see https://developer.github.com/v3/activity/events/#list-public-events-for-a-network-of-repositories
|
||||
# @example List events for a repository's network
|
||||
# Octokit.repository_network_events("sferik/rails_admin")
|
||||
def repository_network_events(repo, options = {})
|
||||
paginate "networks/#{Repository.new(repo)}/events", options
|
||||
end
|
||||
|
||||
# List all events for an organization
|
||||
#
|
||||
# Requires authenticated client.
|
||||
#
|
||||
# @param org [String] Organization GitHub handle
|
||||
# @return [Array<Sawyer::Resource>] List of all events from a GitHub organization
|
||||
# @see https://developer.github.com/v3/activity/events/#list-events-for-an-organization
|
||||
# @example List events for the lostisland organization
|
||||
# @client.organization_events("lostisland")
|
||||
def organization_events(org, options = {})
|
||||
paginate "users/#{login}/events/orgs/#{org}", options
|
||||
end
|
||||
|
||||
# List an organization's public events
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @return [Array<Sawyer::Resource>] List of public events from a GitHub organization
|
||||
# @see https://developer.github.com/v3/activity/events/#list-public-events-for-an-organization
|
||||
# @example List public events for GitHub
|
||||
# Octokit.organization_public_events("GitHub")
|
||||
def organization_public_events(org, options = {})
|
||||
paginate "#{Organization.path org}/events", options
|
||||
end
|
||||
|
||||
# Get all Issue Events for a given Repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] Array of all Issue Events for this Repository
|
||||
# @see https://developer.github.com/v3/issues/events/#list-events-for-a-repository
|
||||
# @see https://developer.github.com/v3/activity/events/#list-issue-events-for-a-repository
|
||||
# @example Get all Issue Events for Octokit
|
||||
# Octokit.repository_issue_events("octokit/octokit.rb")
|
||||
def repository_issue_events(repo, options = {})
|
||||
paginate "#{Repository.path repo}/issues/events", options
|
||||
end
|
||||
alias repo_issue_events repository_issue_events
|
||||
|
||||
# List events for an Issue
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Issue number
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] Array of events for that issue
|
||||
# @see https://developer.github.com/v3/issues/events/#list-events-for-an-issue
|
||||
# @example List all issues events for issue #38 on octokit/octokit.rb
|
||||
# Octokit.issue_events("octokit/octokit.rb", 38)
|
||||
def issue_events(repo, number, options = {})
|
||||
paginate "#{Repository.path repo}/issues/#{number}/events", options
|
||||
end
|
||||
|
||||
# Get information on a single Issue Event
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Event number
|
||||
#
|
||||
# @return [Sawyer::Resource] A single Event for an Issue
|
||||
# @see https://developer.github.com/v3/issues/events/#get-a-single-event
|
||||
# @example Get Event information for ID 3094334 (a pull request was closed)
|
||||
# Octokit.issue_event("octokit/octokit.rb", 3094334)
|
||||
def issue_event(repo, number, options = {})
|
||||
paginate "#{Repository.path repo}/issues/events/#{number}", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,32 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Feeds API
|
||||
#
|
||||
# @see https://developer.github.com/v3/activity/feeds/
|
||||
module Feeds
|
||||
# List Feeds
|
||||
#
|
||||
# The feeds returned depend on authentication, see the GitHub API docs
|
||||
# for more information.
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] list of feeds
|
||||
# @see https://developer.github.com/v3/activity/feeds/#list-feeds
|
||||
def feeds
|
||||
get 'feeds'
|
||||
end
|
||||
|
||||
# Get a Feed by name
|
||||
#
|
||||
# @param name [Symbol, String] Name of feed to retrieve.
|
||||
# @return [Feed] Parsed feed in the format returned by the configured
|
||||
# parser.
|
||||
def feed(name, options = {})
|
||||
if rel = feeds._links[name]
|
||||
get rel.href, accept: rel.type, options: options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,234 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Gists API
|
||||
#
|
||||
# @see https://developer.github.com/v3/gists/
|
||||
module Gists
|
||||
# List gists for a user or all public gists
|
||||
#
|
||||
# @param user [String] An optional user to filter listing
|
||||
# @return [Array<Sawyer::Resource>] A list of gists
|
||||
# @example Fetch all gists for defunkt
|
||||
# Octokit.gists('defunkt')
|
||||
# @example Fetch all public gists
|
||||
# Octokit.gists
|
||||
# @see https://developer.github.com/v3/gists/#list-gists
|
||||
def gists(user = nil, options = {})
|
||||
if user.nil?
|
||||
paginate 'gists', options
|
||||
else
|
||||
paginate "#{User.path user}/gists", options
|
||||
end
|
||||
end
|
||||
alias list_gists gists
|
||||
|
||||
# List public gists
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] A list of gists
|
||||
# @example Fetch all public gists
|
||||
# Octokit.public_gists
|
||||
# @see https://developer.github.com/v3/gists/#list-gists
|
||||
def public_gists(options = {})
|
||||
paginate 'gists/public', options
|
||||
end
|
||||
|
||||
# List the authenticated user’s starred gists
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] A list of gists
|
||||
# @see https://developer.github.com/v3/gists/#list-gists
|
||||
def starred_gists(options = {})
|
||||
paginate 'gists/starred', options
|
||||
end
|
||||
|
||||
# Get a single gist
|
||||
#
|
||||
# @param gist [String] ID of gist to fetch
|
||||
# @option options [String] :sha Specific gist revision SHA
|
||||
# @return [Sawyer::Resource] Gist information
|
||||
# @see https://developer.github.com/v3/gists/#get-a-single-gist
|
||||
# @see https://developer.github.com/v3/gists/#get-a-specific-revision-of-a-gist
|
||||
def gist(gist, options = {})
|
||||
options = options.dup
|
||||
if sha = options.delete(:sha)
|
||||
get "gists/#{Gist.new(gist)}/#{sha}", options
|
||||
else
|
||||
get "gists/#{Gist.new(gist)}", options
|
||||
end
|
||||
end
|
||||
|
||||
# Create a gist
|
||||
#
|
||||
# @param options [Hash] Gist information.
|
||||
# @option options [String] :description
|
||||
# @option options [Boolean] :public Sets gist visibility
|
||||
# @option options [Array<Hash>] :files Files that make up this gist. Keys
|
||||
# should be the filename, the value a Hash with a :content key with text
|
||||
# content of the Gist.
|
||||
# @return [Sawyer::Resource] Newly created gist info
|
||||
# @see https://developer.github.com/v3/gists/#create-a-gist
|
||||
def create_gist(options = {})
|
||||
post 'gists', options
|
||||
end
|
||||
|
||||
# Edit a gist
|
||||
#
|
||||
# @param options [Hash] Gist information.
|
||||
# @option options [String] :description
|
||||
# @option options [Hash] :files Files that make up this gist. Keys
|
||||
# should be the filename, the value a Hash with a :content key with text
|
||||
# content of the Gist.
|
||||
#
|
||||
# NOTE: All files from the previous version of the
|
||||
# gist are carried over by default if not included in the hash. Deletes
|
||||
# can be performed by including the filename with a null hash.
|
||||
# @return
|
||||
# [Sawyer::Resource] Newly created gist info
|
||||
# @see https://developer.github.com/v3/gists/#edit-a-gist
|
||||
# @example Update a gist
|
||||
# @client.edit_gist('some_id', {
|
||||
# :files => {"boo.md" => {"content" => "updated stuff"}}
|
||||
# })
|
||||
def edit_gist(gist, options = {})
|
||||
patch "gists/#{Gist.new(gist)}", options
|
||||
end
|
||||
|
||||
# List gist commits
|
||||
#
|
||||
# @param gist [String] Gist ID
|
||||
# @return [Array] List of commits to the gist
|
||||
# @see https://developer.github.com/v3/gists/#list-gist-commits
|
||||
# @example List commits for a gist
|
||||
# @client.gist_commits('some_id')
|
||||
def gist_commits(gist, options = {})
|
||||
paginate "gists/#{Gist.new(gist)}/commits", options
|
||||
end
|
||||
|
||||
#
|
||||
# Star a gist
|
||||
#
|
||||
# @param gist [String] Gist ID
|
||||
# @return [Boolean] Indicates if gist is starred successfully
|
||||
# @see https://developer.github.com/v3/gists/#star-a-gist
|
||||
def star_gist(gist, options = {})
|
||||
boolean_from_response :put, "gists/#{Gist.new(gist)}/star", options
|
||||
end
|
||||
|
||||
# Unstar a gist
|
||||
#
|
||||
# @param gist [String] Gist ID
|
||||
# @return [Boolean] Indicates if gist is unstarred successfully
|
||||
# @see https://developer.github.com/v3/gists/#unstar-a-gist
|
||||
def unstar_gist(gist, options = {})
|
||||
boolean_from_response :delete, "gists/#{Gist.new(gist)}/star", options
|
||||
end
|
||||
|
||||
# Check if a gist is starred
|
||||
#
|
||||
# @param gist [String] Gist ID
|
||||
# @return [Boolean] Indicates if gist is starred
|
||||
# @see https://developer.github.com/v3/gists/#check-if-a-gist-is-starred
|
||||
def gist_starred?(gist, options = {})
|
||||
boolean_from_response :get, "gists/#{Gist.new(gist)}/star", options
|
||||
end
|
||||
|
||||
# Fork a gist
|
||||
#
|
||||
# @param gist [String] Gist ID
|
||||
# @return [Sawyer::Resource] Data for the new gist
|
||||
# @see https://developer.github.com/v3/gists/#fork-a-gist
|
||||
def fork_gist(gist, options = {})
|
||||
post "gists/#{Gist.new(gist)}/forks", options
|
||||
end
|
||||
|
||||
# List gist forks
|
||||
#
|
||||
# @param gist [String] Gist ID
|
||||
# @return [Array] List of gist forks
|
||||
# @see https://developer.github.com/v3/gists/#list-gist-forks
|
||||
# @example List gist forks
|
||||
# @client.gist_forks('some-id')
|
||||
def gist_forks(gist, options = {})
|
||||
paginate "gists/#{Gist.new(gist)}/forks", options
|
||||
end
|
||||
|
||||
# Delete a gist
|
||||
#
|
||||
# @param gist [String] Gist ID
|
||||
# @return [Boolean] Indicating success of deletion
|
||||
# @see https://developer.github.com/v3/gists/#delete-a-gist
|
||||
def delete_gist(gist, options = {})
|
||||
boolean_from_response :delete, "gists/#{Gist.new(gist)}", options
|
||||
end
|
||||
|
||||
# List gist comments
|
||||
#
|
||||
# @param gist_id [String] Gist Id.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing comments.
|
||||
# @see https://developer.github.com/v3/gists/comments/#list-comments-on-a-gist
|
||||
# @example
|
||||
# Octokit.gist_comments('3528ae645')
|
||||
def gist_comments(gist_id, options = {})
|
||||
paginate "gists/#{gist_id}/comments", options
|
||||
end
|
||||
|
||||
# Get gist comment
|
||||
#
|
||||
# @param gist_id [String] Id of the gist.
|
||||
# @param gist_comment_id [Integer] Id of the gist comment.
|
||||
# @return [Sawyer::Resource] Hash representing gist comment.
|
||||
# @see https://developer.github.com/v3/gists/comments/#get-a-single-comment
|
||||
# @example
|
||||
# Octokit.gist_comment('208sdaz3', 1451398)
|
||||
def gist_comment(gist_id, gist_comment_id, options = {})
|
||||
get "gists/#{gist_id}/comments/#{gist_comment_id}", options
|
||||
end
|
||||
|
||||
# Create gist comment
|
||||
#
|
||||
# Requires authenticated client.
|
||||
#
|
||||
# @param gist_id [String] Id of the gist.
|
||||
# @param comment [String] Comment contents.
|
||||
# @return [Sawyer::Resource] Hash representing the new comment.
|
||||
# @see https://developer.github.com/v3/gists/comments/#create-a-comment
|
||||
# @example
|
||||
# @client.create_gist_comment('3528645', 'This is very helpful.')
|
||||
def create_gist_comment(gist_id, comment, options = {})
|
||||
options = options.merge({ body: comment })
|
||||
post "gists/#{gist_id}/comments", options
|
||||
end
|
||||
|
||||
# Update gist comment
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param gist_id [String] Id of the gist.
|
||||
# @param gist_comment_id [Integer] Id of the gist comment to update.
|
||||
# @param comment [String] Updated comment contents.
|
||||
# @return [Sawyer::Resource] Hash representing the updated comment.
|
||||
# @see https://developer.github.com/v3/gists/comments/#edit-a-comment
|
||||
# @example
|
||||
# @client.update_gist_comment('208sdaz3', '3528645', ':heart:')
|
||||
def update_gist_comment(gist_id, gist_comment_id, comment, options = {})
|
||||
options = options.merge({ body: comment })
|
||||
patch "gists/#{gist_id}/comments/#{gist_comment_id}", options
|
||||
end
|
||||
|
||||
# Delete gist comment
|
||||
#
|
||||
# Requires authenticated client.
|
||||
#
|
||||
# @param gist_id [String] Id of the gist.
|
||||
# @param gist_comment_id [Integer] Id of the gist comment to delete.
|
||||
# @return [Boolean] True if comment deleted, false otherwise.
|
||||
# @see https://developer.github.com/v3/gists/comments/#delete-a-comment
|
||||
# @example
|
||||
# @client.delete_gist_comment('208sdaz3', '586399')
|
||||
def delete_gist_comment(gist_id, gist_comment_id, options = {})
|
||||
boolean_from_response(:delete, "gists/#{gist_id}/comments/#{gist_comment_id}", options)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,43 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Gitignore API
|
||||
#
|
||||
# @see https://developer.github.com/v3/gitignore/
|
||||
module Gitignore
|
||||
# Listing available gitignore templates.
|
||||
#
|
||||
# These templates can be passed option when creating a repository.
|
||||
#
|
||||
# @see https://developer.github.com/v3/gitignore/#listing-available-templates
|
||||
#
|
||||
# @return [Array<String>] List of templates.
|
||||
#
|
||||
# @example Git all the gitignore templates
|
||||
# @client.gitignore_templates
|
||||
def gitignore_templates(options = {})
|
||||
get 'gitignore/templates', options
|
||||
end
|
||||
|
||||
# Get a gitignore template.
|
||||
#
|
||||
# Use the raw {http://developer.github.com/v3/media/ media type} to get
|
||||
# the raw contents.
|
||||
#
|
||||
# @param template_name [String] Name of the template. Template names are
|
||||
# case sensitive, make sure to use a valid name from the
|
||||
# .gitignore_templates list.
|
||||
#
|
||||
# @see https://developer.github.com/v3/gitignore/#get-a-single-template
|
||||
#
|
||||
# @return [Sawyer::Resource] Gitignore template
|
||||
#
|
||||
# @example Get the Ruby gitignore template
|
||||
# @client.gitignore_template('Ruby')
|
||||
def gitignore_template(template_name, options = {})
|
||||
get "gitignore/templates/#{template_name}", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,287 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Hooks API
|
||||
module Hooks
|
||||
# List repo hooks
|
||||
#
|
||||
# Requires authenticated client.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing hooks.
|
||||
# @see https://developer.github.com/v3/repos/hooks/#list-hooks
|
||||
# @example
|
||||
# @client.hooks('octokit/octokit.rb')
|
||||
def hooks(repo, options = {})
|
||||
paginate "#{Repository.path repo}/hooks", options
|
||||
end
|
||||
|
||||
# Get single hook
|
||||
#
|
||||
# Requires authenticated client.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param id [Integer] Id of the hook to get.
|
||||
# @return [Sawyer::Resource] Hash representing hook.
|
||||
# @see https://developer.github.com/v3/repos/hooks/#get-single-hook
|
||||
# @example
|
||||
# @client.hook('octokit/octokit.rb', 100000)
|
||||
def hook(repo, id, options = {})
|
||||
get "#{Repository.path repo}/hooks/#{id}", options
|
||||
end
|
||||
|
||||
# Create a hook
|
||||
#
|
||||
# Requires authenticated client.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param name [String] The name of the service that is being called. See
|
||||
# {https://api.github.com/hooks Hooks} for the possible names.
|
||||
# @param config [Hash] A Hash containing key/value pairs to provide
|
||||
# settings for this hook. These settings vary between the services and
|
||||
# are defined in the {https://github.com/github/github-services github-services} repo.
|
||||
# @option options [Array<String>] :events ('["push"]') Determines what
|
||||
# events the hook is triggered for.
|
||||
# @option options [Boolean] :active Determines whether the hook is
|
||||
# actually triggered on pushes.
|
||||
# @return [Sawyer::Resource] Hook info for the new hook
|
||||
# @see https://api.github.com/hooks
|
||||
# @see https://github.com/github/github-services
|
||||
# @see https://developer.github.com/v3/repos/hooks/#create-a-hook
|
||||
# @example
|
||||
# @client.create_hook(
|
||||
# 'octokit/octokit.rb',
|
||||
# 'web',
|
||||
# {
|
||||
# :url => 'http://something.com/webhook',
|
||||
# :content_type => 'json'
|
||||
# },
|
||||
# {
|
||||
# :events => ['push', 'pull_request'],
|
||||
# :active => true
|
||||
# }
|
||||
# )
|
||||
def create_hook(repo, name, config, options = {})
|
||||
options = { name: name, config: config, events: ['push'], active: true }.merge(options)
|
||||
post "#{Repository.path repo}/hooks", options
|
||||
end
|
||||
|
||||
# Edit a hook
|
||||
#
|
||||
# Requires authenticated client.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param id [Integer] Id of the hook being updated.
|
||||
# @param name [String] The name of the service that is being called. See
|
||||
# {https://api.github.com/hooks Hooks} for the possible names.
|
||||
# @param config [Hash] A Hash containing key/value pairs to provide
|
||||
# settings for this hook. These settings vary between the services and
|
||||
# are defined in the {https://github.com/github/github-services github-services} repo.
|
||||
# @option options [Array<String>] :events ('["push"]') Determines what
|
||||
# events the hook is triggered for.
|
||||
# @option options [Array<String>] :add_events Determines a list of events
|
||||
# to be added to the list of events that the Hook triggers for.
|
||||
# @option options [Array<String>] :remove_events Determines a list of events
|
||||
# to be removed from the list of events that the Hook triggers for.
|
||||
# @option options [Boolean] :active Determines whether the hook is
|
||||
# actually triggered on pushes.
|
||||
# @return [Sawyer::Resource] Hook info for the updated hook
|
||||
# @see https://api.github.com/hooks
|
||||
# @see https://github.com/github/github-services
|
||||
# @see https://developer.github.com/v3/repos/hooks/#edit-a-hook
|
||||
# @example
|
||||
# @client.edit_hook(
|
||||
# 'octokit/octokit.rb',
|
||||
# 100000,
|
||||
# 'web',
|
||||
# {
|
||||
# :url => 'http://something.com/webhook',
|
||||
# :content_type => 'json'
|
||||
# },
|
||||
# {
|
||||
# :add_events => ['status'],
|
||||
# :remove_events => ['pull_request'],
|
||||
# :active => true
|
||||
# }
|
||||
# )
|
||||
def edit_hook(repo, id, name, config, options = {})
|
||||
options = { name: name, config: config }.merge(options)
|
||||
patch "#{Repository.path repo}/hooks/#{id}", options
|
||||
end
|
||||
|
||||
# Delete hook
|
||||
#
|
||||
# Requires authenticated client.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param id [Integer] Id of the hook to remove.
|
||||
# @return [Boolean] True if hook removed, false otherwise.
|
||||
# @see https://developer.github.com/v3/repos/hooks/#delete-a-hook
|
||||
# @example
|
||||
# @client.remove_hook('octokit/octokit.rb', 1000000)
|
||||
def remove_hook(repo, id, options = {})
|
||||
boolean_from_response :delete, "#{Repository.path repo}/hooks/#{id}", options
|
||||
end
|
||||
|
||||
# Test hook
|
||||
#
|
||||
# Requires authenticated client.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param id [Integer] Id of the hook to test.
|
||||
# @return [Boolean] Success
|
||||
# @see https://developer.github.com/v3/repos/hooks/#test-a-push-hook
|
||||
# @example
|
||||
# @client.test_hook('octokit/octokit.rb', 1000000)
|
||||
def test_hook(repo, id, options = {})
|
||||
boolean_from_response :post, "#{Repository.path repo}/hooks/#{id}/tests", options
|
||||
end
|
||||
|
||||
# Ping hook
|
||||
#
|
||||
# Requires authenticated client.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param id [Integer] Id of the hook to send a ping.
|
||||
# @return [Boolean] Ping requested?
|
||||
# @see https://developer.github.com/v3/repos/hooks/#ping-a-hook
|
||||
# @example
|
||||
# @client.ping_hook('octokit/octokit.rb', 1000000)
|
||||
def ping_hook(repo, id, options = {})
|
||||
boolean_from_response :post, "#{Repository.path repo}/hooks/#{id}/pings", options
|
||||
end
|
||||
|
||||
# List org hooks
|
||||
#
|
||||
# Requires client authenticated as admin for the org.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing hooks.
|
||||
# @see https://developer.github.com/v3/orgs/hooks/#list-hooks
|
||||
# @example
|
||||
# @client.org_hooks('octokit')
|
||||
def org_hooks(org, options = {})
|
||||
paginate "#{Organization.path org}/hooks", options
|
||||
end
|
||||
alias list_org_hooks org_hooks
|
||||
|
||||
# Get an org hook
|
||||
#
|
||||
# Requires client authenticated as admin for the org.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param id [Integer] Id of the hook to get.
|
||||
# @return [Sawyer::Resource] Hash representing hook.
|
||||
# @see https://developer.github.com/v3/orgs/hooks/#get-single-hook
|
||||
# @example
|
||||
# @client.org_hook('octokit', 123)
|
||||
def org_hook(org, id, options = {})
|
||||
get "#{Organization.path org}/hooks/#{id}", options
|
||||
end
|
||||
|
||||
# Create an org hook
|
||||
#
|
||||
# Requires client authenticated as admin for the org.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param config [Hash] A Hash containing key/value pairs to provide
|
||||
# settings for this hook.
|
||||
# @option options [Array<String>] :events ('["push"]') Determines what
|
||||
# events the hook is triggered for.
|
||||
# @option options [Boolean] :active Determines whether the hook is
|
||||
# actually triggered on pushes.
|
||||
# @return [Sawyer::Resource] Hook info for the new hook
|
||||
# @see https://api.github.com/hooks
|
||||
# @see https://developer.github.com/v3/orgs/hooks/#create-a-hook
|
||||
# @example
|
||||
# @client.create_org_hook(
|
||||
# 'octokit',
|
||||
# {
|
||||
# :url => 'http://something.com/webhook',
|
||||
# :content_type => 'json'
|
||||
# },
|
||||
# {
|
||||
# :events => ['push', 'pull_request'],
|
||||
# :active => true
|
||||
# }
|
||||
# )
|
||||
def create_org_hook(org, config, options = {})
|
||||
options = { name: 'web', config: config }.merge(options)
|
||||
post "#{Organization.path org}/hooks", options
|
||||
end
|
||||
|
||||
# Update an org hook
|
||||
#
|
||||
# Requires client authenticated as admin for the org.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param id [Integer] Id of the hook to update.
|
||||
# @param config [Hash] A Hash containing key/value pairs to provide
|
||||
# settings for this hook.
|
||||
# @option options [Array<String>] :events ('["push"]') Determines what
|
||||
# events the hook is triggered for.
|
||||
# @option options [Boolean] :active Determines whether the hook is
|
||||
# actually triggered on pushes.
|
||||
# @return [Sawyer::Resource] Hook info for the new hook
|
||||
# @see https://api.github.com/hooks
|
||||
# @see https://developer.github.com/v3/orgs/hooks/#edit-a-hook
|
||||
# @example
|
||||
# @client.edit_org_hook(
|
||||
# 'octokit',
|
||||
# 123,
|
||||
# {
|
||||
# :url => 'http://something.com/webhook',
|
||||
# :content_type => 'json'
|
||||
# },
|
||||
# {
|
||||
# :events => ['push', 'pull_request'],
|
||||
# :active => true
|
||||
# }
|
||||
# )
|
||||
def edit_org_hook(org, id, config, options = {})
|
||||
options = { config: config }.merge(options)
|
||||
patch "#{Organization.path org}/hooks/#{id}", options
|
||||
end
|
||||
alias update_org_hook edit_org_hook
|
||||
|
||||
# Ping org hook
|
||||
#
|
||||
# Requires client authenticated as admin for the org.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param id [Integer] Id of the hook to update.
|
||||
# @return [Boolean] Success
|
||||
# @see https://developer.github.com/v3/orgs/hooks/#ping-a-hook
|
||||
# @example
|
||||
# @client.ping_org_hook('octokit', 1000000)
|
||||
def ping_org_hook(org, id, options = {})
|
||||
boolean_from_response :post, "#{Organization.path org}/hooks/#{id}/pings", options
|
||||
end
|
||||
|
||||
# Remove org hook
|
||||
#
|
||||
# Requires client authenticated as admin for the org.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param id [Integer] Id of the hook to update.
|
||||
# @return [Boolean] True if hook removed, false otherwise.
|
||||
# @see https://developer.github.com/v3/orgs/hooks/#delete-a-hook
|
||||
# @example
|
||||
# @client.remove_org_hook('octokit', 1000000)
|
||||
def remove_org_hook(org, id, options = {})
|
||||
boolean_from_response :delete, "#{Organization.path org}/hooks/#{id}", options
|
||||
end
|
||||
|
||||
# Parse payload string
|
||||
#
|
||||
# @param payload_string [String] The payload
|
||||
# @return [Sawyer::Resource] The payload object
|
||||
# @see https://developer.github.com/v3/activity/events/types/
|
||||
def parse_payload(payload_string)
|
||||
payload_hash = agent.class.decode payload_string
|
||||
Sawyer::Resource.new agent, payload_hash
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,367 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Issues API
|
||||
#
|
||||
# @see https://developer.github.com/v3/issues/
|
||||
module Issues
|
||||
# List issues for the authenticated user or repository
|
||||
#
|
||||
# @param repository [Integer, String, Repository, Hash] A GitHub repository.
|
||||
# @param options [Sawyer::Resource] A customizable set of options.
|
||||
# @option options [Integer] :milestone Milestone number.
|
||||
# @option options [String] :state (open) State: <tt>open</tt>, <tt>closed</tt>, or <tt>all</tt>.
|
||||
# @option options [String] :assignee User login.
|
||||
# @option options [String] :creator User login.
|
||||
# @option options [String] :mentioned User login.
|
||||
# @option options [String] :labels List of comma separated Label names. Example: <tt>bug,ui,@high</tt>.
|
||||
# @option options [String] :sort (created) Sort: <tt>created</tt>, <tt>updated</tt>, or <tt>comments</tt>.
|
||||
# @option options [String] :direction (desc) Direction: <tt>asc</tt> or <tt>desc</tt>.
|
||||
# @option options [Integer] :page (1) Page number.
|
||||
# @return [Array<Sawyer::Resource>] A list of issues for a repository.
|
||||
# @see https://developer.github.com/v3/issues/#list-issues-for-a-repository
|
||||
# @see https://developer.github.com/v3/issues/#list-issues
|
||||
# @example List issues for a repository
|
||||
# Octokit.list_issues("sferik/rails_admin")
|
||||
# @example List issues for the authenticated user across repositories
|
||||
# @client = Octokit::Client.new(:login => 'foo', :password => 'bar')
|
||||
# @client.list_issues
|
||||
def list_issues(repository = nil, options = {})
|
||||
path = repository ? "#{Repository.new(repository).path}/issues" : 'issues'
|
||||
paginate path, options
|
||||
end
|
||||
alias issues list_issues
|
||||
|
||||
# List all issues across owned and member repositories for the authenticated user
|
||||
#
|
||||
# @param options [Sawyer::Resource] A customizable set of options.
|
||||
# @option options [String] :filter (assigned) State: <tt>assigned</tt>, <tt>created</tt>, <tt>mentioned</tt>, <tt>subscribed</tt> or <tt>closed</tt>.
|
||||
# @option options [String] :state (open) State: <tt>open</tt>, <tt>closed</tt>, or <tt>all</tt>.
|
||||
# @option options [Array<String>] :labels List of Label names. Example: <tt>['bug', 'ui', '@high']</tt>.
|
||||
# @option options [String] :sort (created) Sort: <tt>created</tt>, <tt>updated</tt>, or <tt>comments</tt>.
|
||||
# @option options [String] :direction (desc) Direction: <tt>asc</tt> or <tt>desc</tt>.
|
||||
# @option options [Integer] :page (1) Page number.
|
||||
# @option options [String] :since Timestamp in ISO 8601
|
||||
# format: YYYY-MM-DDTHH:MM:SSZ
|
||||
# @return [Array<Sawyer::Resource>] A list of issues for a repository.
|
||||
# @see https://developer.github.com/v3/issues/#list-issues
|
||||
# @example List issues for the authenticated user across owned and member repositories
|
||||
# @client = Octokit::Client.new(:login => 'foo', :password => 'bar')
|
||||
# @client.user_issues
|
||||
def user_issues(options = {})
|
||||
paginate 'user/issues', options
|
||||
end
|
||||
|
||||
# List all issues for a given organization for the authenticated user
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param options [Sawyer::Resource] A customizable set of options.
|
||||
# @option options [String] :filter (assigned) State: <tt>assigned</tt>, <tt>created</tt>, <tt>mentioned</tt>, <tt>subscribed</tt> or <tt>closed</tt>.
|
||||
# @option options [String] :state (open) State: <tt>open</tt>, <tt>closed</tt>, or <tt>all</tt>.
|
||||
# @option options [Array<String>] :labels List of Label names. Example: <tt>['bug', 'ui', '@high']</tt>.
|
||||
# @option options [String] :sort (created) Sort: <tt>created</tt>, <tt>updated</tt>, or <tt>comments</tt>.
|
||||
# @option options [String] :direction (desc) Direction: <tt>asc</tt> or <tt>desc</tt>.
|
||||
# @option options [Integer] :page (1) Page number.
|
||||
# @option options [String] :since Timestamp in ISO 8601
|
||||
# format: YYYY-MM-DDTHH:MM:SSZ
|
||||
# @return [Array<Sawyer::Resource>] A list of issues.
|
||||
# @see https://developer.github.com/v3/issues/#list-issues
|
||||
# @example List all issues for a given organization for the authenticated user
|
||||
# @client = Octokit::Client.new(:login => 'foo', :password => 'bar')
|
||||
# @client.org_issues("octokit")
|
||||
def org_issues(org, options = {})
|
||||
paginate "#{Organization.path org}/issues", options
|
||||
end
|
||||
|
||||
# Create an issue for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param title [String] A descriptive title
|
||||
# @param body [String] An optional concise description
|
||||
# @param options [Hash] A customizable set of options.
|
||||
# @option options [String] :assignee User login.
|
||||
# @option options [Array<String>] :assignees User login.
|
||||
# @option options [Integer] :milestone Milestone number.
|
||||
# @option options [String] :labels List of comma separated Label names. Example: <tt>bug,ui,@high</tt>.
|
||||
# @return [Sawyer::Resource] Your newly created issue
|
||||
# @see https://developer.github.com/v3/issues/#create-an-issue
|
||||
# @example Create a new Issues for a repository
|
||||
# Octokit.create_issue("sferik/rails_admin", 'Updated Docs', 'Added some extra links')
|
||||
def create_issue(repo, title, body = nil, options = {})
|
||||
options[:labels] = case options[:labels]
|
||||
when String
|
||||
options[:labels].split(',').map(&:strip)
|
||||
when Array
|
||||
options[:labels]
|
||||
else
|
||||
[]
|
||||
end
|
||||
parameters = { title: title }
|
||||
parameters[:body] = body unless body.nil?
|
||||
post "#{Repository.path repo}/issues", options.merge(parameters)
|
||||
end
|
||||
alias open_issue create_issue
|
||||
|
||||
# Get a single issue from a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Number ID of the issue
|
||||
# @return [Sawyer::Resource] The issue you requested, if it exists
|
||||
# @see https://developer.github.com/v3/issues/#get-a-single-issue
|
||||
# @example Get issue #25 from octokit/octokit.rb
|
||||
# Octokit.issue("octokit/octokit.rb", "25")
|
||||
def issue(repo, number, options = {})
|
||||
get "#{Repository.path repo}/issues/#{number}", options
|
||||
end
|
||||
|
||||
# Close an issue
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Number ID of the issue
|
||||
# @param options [Hash] A customizable set of options.
|
||||
# @option options [String] :assignee User login.
|
||||
# @option options [Array<String>] :assignees User login.
|
||||
# @option options [Integer] :milestone Milestone number.
|
||||
# @option options [Array<String>] :labels List of Label names. Example: <tt>['bug', 'ui', '@high']</tt>.
|
||||
# @return [Sawyer::Resource] The updated Issue
|
||||
# @see https://developer.github.com/v3/issues/#edit-an-issue
|
||||
# @example Close Issue #25 from octokit/octokit.rb
|
||||
# Octokit.close_issue("octokit/octokit.rb", "25")
|
||||
def close_issue(repo, number, options = {})
|
||||
patch "#{Repository.path repo}/issues/#{number}", options.merge({ state: 'closed' })
|
||||
end
|
||||
|
||||
# Reopen an issue
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Number ID of the issue
|
||||
# @param options [Hash] A customizable set of options.
|
||||
# @option options [String] :assignee User login.
|
||||
# @option options [Array<String>] :assignees User login.
|
||||
# @option options [Integer] :milestone Milestone number.
|
||||
# @option options [Array<String>] :labels List of Label names. Example: <tt>['bug', 'ui', '@high']</tt>.
|
||||
# @return [Sawyer::Resource] The updated Issue
|
||||
# @see https://developer.github.com/v3/issues/#edit-an-issue
|
||||
# @example Reopen Issue #25 from octokit/octokit.rb
|
||||
# Octokit.reopen_issue("octokit/octokit.rb", "25")
|
||||
def reopen_issue(repo, number, options = {})
|
||||
patch "#{Repository.path repo}/issues/#{number}", options.merge({ state: 'open' })
|
||||
end
|
||||
|
||||
# Lock an issue's conversation, limiting it to collaborators
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Number ID of the issue
|
||||
# @return [Boolean] Success
|
||||
# @see https://developer.github.com/v3/issues/#lock-an-issue
|
||||
# @example Lock Issue #25 from octokit/octokit.rb
|
||||
# Octokit.lock_issue("octokit/octokit.rb", "25")
|
||||
def lock_issue(repo, number, options = {})
|
||||
boolean_from_response :put, "#{Repository.path repo}/issues/#{number}/lock", options
|
||||
end
|
||||
|
||||
# Unlock an issue's conversation, opening it to all viewers
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Number ID of the issue
|
||||
# @return [Boolean] Success
|
||||
# @see https://developer.github.com/v3/issues/#unlock-an-issue
|
||||
# @example Unlock Issue #25 from octokit/octokit.rb
|
||||
# Octokit.close_issue("octokit/octokit.rb", "25")
|
||||
def unlock_issue(repo, number, options = {})
|
||||
boolean_from_response :delete, "#{Repository.path repo}/issues/#{number}/lock", options
|
||||
end
|
||||
|
||||
# Update an issue
|
||||
#
|
||||
# @overload update_issue(repo, number, title, body, options)
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Number ID of the issue
|
||||
# @param title [String] Updated title for the issue
|
||||
# @param body [String] Updated body of the issue
|
||||
# @param options [Hash] A customizable set of options.
|
||||
# @option options [String] :assignee User login.
|
||||
# @option options [Array<String>] :assignees User login.
|
||||
# @option options [Integer] :milestone Milestone number.
|
||||
# @option options [String] :labels List of comma separated Label names. Example: <tt>bug,ui,@high</tt>.
|
||||
# @option options [String] :state State of the issue. <tt>open</tt> or <tt>closed</tt>
|
||||
#
|
||||
# @overload update_issue(repo, number, options)
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Number ID of the issue
|
||||
# @param options [Hash] A customizable set of options.
|
||||
# @option options [String] :title Updated title for the issue
|
||||
# @option options [String] :body Updated body of the issue
|
||||
# @option options [String] :assignee User login.
|
||||
# @option options [Array<String>] :assignees User login.
|
||||
# @option options [Integer] :milestone Milestone number.
|
||||
# @option options [Array<String>] :labels List of Label names. Example: <tt>['bug', 'ui', '@high']</tt>.
|
||||
# @option options [String] :state State of the issue. <tt>open</tt> or <tt>closed</tt>
|
||||
# @return [Sawyer::Resource] The updated Issue
|
||||
# @see https://developer.github.com/v3/issues/#edit-an-issue
|
||||
#
|
||||
# @example Change the title of Issue #25
|
||||
# Octokit.update_issue("octokit/octokit.rb", "25", "A new title", "the same body")
|
||||
#
|
||||
# @example Change only the assignee of Issue #25
|
||||
# Octokit.update_issue("octokit/octokit.rb", "25", :assignee => "pengwynn")
|
||||
def update_issue(repo, number, *args)
|
||||
arguments = Arguments.new(args)
|
||||
opts = arguments.options
|
||||
|
||||
unless arguments.empty?
|
||||
opts[:title] = arguments.shift
|
||||
opts[:body] = arguments.shift
|
||||
end
|
||||
|
||||
patch "#{Repository.path repo}/issues/#{number}", opts
|
||||
end
|
||||
|
||||
# Get all comments attached to issues for the repository
|
||||
#
|
||||
# By default, Issue Comments are ordered by ascending ID.
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param options [Hash] Optional parameters
|
||||
# @option options [String] :sort created or updated
|
||||
# @option options [String] :direction asc or desc. Ignored without sort
|
||||
# parameter.
|
||||
# @option options [String] :since Timestamp in ISO 8601
|
||||
# format: YYYY-MM-DDTHH:MM:SSZ
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] List of issues comments.
|
||||
#
|
||||
# @see https://developer.github.com/v3/issues/comments/#list-comments-in-a-repository
|
||||
#
|
||||
# @example Get the comments for issues in the octokit repository
|
||||
# @client.issues_comments("octokit/octokit.rb")
|
||||
#
|
||||
# @example Get issues comments, sort by updated descending since a time
|
||||
# @client.issues_comments("octokit/octokit.rb", {
|
||||
# :sort => 'desc',
|
||||
# :direction => 'asc',
|
||||
# :since => '2010-05-04T23:45:02Z'
|
||||
# })
|
||||
def issues_comments(repo, options = {})
|
||||
paginate "#{Repository.path repo}/issues/comments", options
|
||||
end
|
||||
|
||||
# Get all comments attached to an issue
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Number ID of the issue
|
||||
# @return [Array<Sawyer::Resource>] Array of comments that belong to an issue
|
||||
# @see https://developer.github.com/v3/issues/comments/#list-comments-on-an-issue
|
||||
# @example Get comments for issue #25 from octokit/octokit.rb
|
||||
# Octokit.issue_comments("octokit/octokit.rb", "25")
|
||||
def issue_comments(repo, number, options = {})
|
||||
paginate "#{Repository.path repo}/issues/#{number}/comments", options
|
||||
end
|
||||
|
||||
# Get a single comment attached to an issue
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Number ID of the comment
|
||||
# @return [Sawyer::Resource] The specific comment in question
|
||||
# @see https://developer.github.com/v3/issues/comments/#get-a-single-comment
|
||||
# @example Get comment #1194549 from an issue on octokit/octokit.rb
|
||||
# Octokit.issue_comment("octokit/octokit.rb", 1194549)
|
||||
def issue_comment(repo, number, options = {})
|
||||
paginate "#{Repository.path repo}/issues/comments/#{number}", options
|
||||
end
|
||||
|
||||
# Add a comment to an issue
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Issue number
|
||||
# @param comment [String] Comment to be added
|
||||
# @return [Sawyer::Resource] Comment
|
||||
# @see https://developer.github.com/v3/issues/comments/#create-a-comment
|
||||
# @example Add the comment "Almost to v1" to Issue #23 on octokit/octokit.rb
|
||||
# Octokit.add_comment("octokit/octokit.rb", 23, "Almost to v1")
|
||||
def add_comment(repo, number, comment, options = {})
|
||||
post "#{Repository.path repo}/issues/#{number}/comments", options.merge({ body: comment })
|
||||
end
|
||||
|
||||
# Update a single comment on an issue
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Comment number
|
||||
# @param comment [String] Body of the comment which will replace the existing body.
|
||||
# @return [Sawyer::Resource] Comment
|
||||
# @see https://developer.github.com/v3/issues/comments/#edit-a-comment
|
||||
# @example Update the comment #1194549 with body "I've started this on my 25-issue-comments-v3 fork" on an issue on octokit/octokit.rb
|
||||
# Octokit.update_comment("octokit/octokit.rb", 1194549, "Almost to v1, added this on my fork")
|
||||
def update_comment(repo, number, comment, options = {})
|
||||
patch "#{Repository.path repo}/issues/comments/#{number}", options.merge({ body: comment })
|
||||
end
|
||||
|
||||
# Delete a single comment
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Comment number
|
||||
# @return [Boolean] Success
|
||||
# @see https://developer.github.com/v3/issues/comments/#delete-a-comment
|
||||
# @example Delete the comment #1194549 on an issue on octokit/octokit.rb
|
||||
# Octokit.delete_comment("octokit/octokit.rb", 1194549)
|
||||
def delete_comment(repo, number, options = {})
|
||||
boolean_from_response :delete, "#{Repository.path repo}/issues/comments/#{number}", options
|
||||
end
|
||||
|
||||
# Get the timeline for an issue
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Number ID of the comment
|
||||
# @return [Sawyer::Resource] The timeline for this issue
|
||||
# @see https://developer.github.com/v3/issues/timeline/
|
||||
# @example Get timeline for issue #1435 on octokit/octokit.rb
|
||||
# Octokit.issue_timeline("octokit/octokit.rb", 1435)
|
||||
def issue_timeline(repo, number, options = {})
|
||||
paginate "#{Repository.path repo}/issues/#{number}/timeline", options
|
||||
end
|
||||
|
||||
# Lists the available assignees for issues in a repository.
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @return [Array<Sawyer::Resource>] List of GitHub users.
|
||||
# @see https://developer.github.com/v3/issues/assignees/#list-assignees
|
||||
# @example Get available assignees on repository octokit/octokit.rb
|
||||
# Octokit.list_assignees("octokit/octokit.rb")
|
||||
def list_assignees(repo, options = {})
|
||||
paginate "#{Repository.path repo}/assignees", options
|
||||
end
|
||||
|
||||
# Add assignees to an issue
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Issue number
|
||||
# @param assignees [Array<String>] Assignees to be added
|
||||
# @return [Sawyer::Resource] Issue
|
||||
# @see https://developer.github.com/v3/issues/assignees/#add-assignees-to-an-issue
|
||||
# @example Add assignees "pengwynn" and "joeyw" to Issue #23 on octokit/octokit.rb
|
||||
# Octokit.add_assignees("octokit/octokit.rb", 23, ["pengwynn", "joeyw"])
|
||||
def add_assignees(repo, number, assignees, options = {})
|
||||
post "#{Repository.path repo}/issues/#{number}/assignees", options.merge({ assignees: assignees })
|
||||
end
|
||||
|
||||
# Remove assignees from an issue
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Issue number
|
||||
# @param assignees [Array<String>] Assignees to be removed
|
||||
# @param options [Hash] Header params for request
|
||||
# @return [Sawyer::Resource] Issue
|
||||
# @see https://developer.github.com/v3/issues/assignees/#remove-assignees-from-an-issue
|
||||
# @example Remove assignees "pengwynn" and "joeyw" from Issue #23 on octokit/octokit.rb
|
||||
# Octokit.remove_assignees("octokit/octokit.rb", 23, ["pengwynn", "joeyw"])
|
||||
#
|
||||
# @example Remove assignees "pengwynn" from Issue #23 on octokit/octokit.rb
|
||||
# Octokit.remove_assignees("octokit/octokit.rb", 23, ["pengwynn"],
|
||||
# :accept => "application/vnd.github.v3+json")
|
||||
def remove_assignees(repo, number, assignees, options = {})
|
||||
delete "#{Repository.path repo}/issues/#{number}/assignees", options.merge({ assignees: assignees })
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,156 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'erb'
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Issue Labels API
|
||||
#
|
||||
# @see https://developer.github.com/v3/issues/labels/
|
||||
module Labels
|
||||
# List available labels for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @return [Array<Sawyer::Resource>] A list of the labels across the repository
|
||||
# @see https://developer.github.com/v3/issues/labels/#list-all-labels-for-this-repository
|
||||
# @example List labels for octokit/octokit.rb
|
||||
# Octokit.labels("octokit/octokit.rb")
|
||||
def labels(repo, options = {})
|
||||
paginate "#{Repository.path repo}/labels", options
|
||||
end
|
||||
|
||||
# Get single label for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param name [String] Name of the label
|
||||
# @return [Sawyer::Resource] A single label from the repository
|
||||
# @see https://developer.github.com/v3/issues/labels/#get-a-single-label
|
||||
# @example Get the "V3 Addition" label from octokit/octokit.rb
|
||||
# Octokit.label("octokit/octokit.rb", "V3 Addition")
|
||||
def label(repo, name, options = {})
|
||||
get "#{Repository.path repo}/labels/#{ERB::Util.url_encode(name)}", options
|
||||
end
|
||||
|
||||
# Add a label to a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param label [String] A new label
|
||||
# @param color [String] A color, in hex, without the leading #
|
||||
# @return [Sawyer::Resource] The new label
|
||||
# @see https://developer.github.com/v3/issues/labels/#create-a-label
|
||||
# @example Add a new label "Version 1.0" with color "#cccccc"
|
||||
# Octokit.add_label("octokit/octokit.rb", "Version 1.0", "cccccc")
|
||||
def add_label(repo, label, color = 'ffffff', options = {})
|
||||
post "#{Repository.path repo}/labels", options.merge({ name: label, color: color })
|
||||
end
|
||||
|
||||
# Update a label
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param label [String] The name of the label which will be updated
|
||||
# @param options [Hash] A customizable set of options.
|
||||
# @option options [String] :name An updated label name
|
||||
# @option options [String] :color An updated color value, in hex, without leading #
|
||||
# @return [Sawyer::Resource] The updated label
|
||||
# @see https://developer.github.com/v3/issues/labels/#update-a-label
|
||||
# @example Update the label "Version 1.0" with new color "#cceeaa"
|
||||
# Octokit.update_label("octokit/octokit.rb", "Version 1.0", {:color => "cceeaa"})
|
||||
def update_label(repo, label, options = {})
|
||||
patch "#{Repository.path repo}/labels/#{ERB::Util.url_encode(label)}", options
|
||||
end
|
||||
|
||||
# Delete a label from a repository.
|
||||
#
|
||||
# This deletes the label from the repository, and removes it from all issues.
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param label [String] String name of the label
|
||||
# @return [Boolean] Success
|
||||
# @see https://developer.github.com/v3/issues/labels/#delete-a-label
|
||||
# @example Delete the label "Version 1.0" from the repository.
|
||||
# Octokit.delete_label!("octokit/octokit.rb", "Version 1.0")
|
||||
def delete_label!(repo, label, options = {})
|
||||
boolean_from_response :delete, "#{Repository.path repo}/labels/#{ERB::Util.url_encode(label)}", options
|
||||
end
|
||||
|
||||
# Remove a label from an Issue
|
||||
#
|
||||
# This removes the label from the Issue
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Number ID of the issue
|
||||
# @param label [String] String name of the label
|
||||
# @return [Array<Sawyer::Resource>] A list of the labels currently on the issue
|
||||
# @see https://developer.github.com/v3/issues/labels/#remove-a-label-from-an-issue
|
||||
# @example Remove the label "Version 1.0" from the repository.
|
||||
# Octokit.remove_label("octokit/octokit.rb", 23, "Version 1.0")
|
||||
def remove_label(repo, number, label, options = {})
|
||||
delete "#{Repository.path repo}/issues/#{number}/labels/#{ERB::Util.url_encode(label)}", options
|
||||
end
|
||||
|
||||
# Remove all label from an Issue
|
||||
#
|
||||
# This removes the label from the Issue
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Number ID of the issue
|
||||
# @return [Boolean] Success of operation
|
||||
# @see https://developer.github.com/v3/issues/labels/#remove-all-labels-from-an-issue
|
||||
# @example Remove all labels from Issue #23
|
||||
# Octokit.remove_all_labels("octokit/octokit.rb", 23)
|
||||
def remove_all_labels(repo, number, options = {})
|
||||
boolean_from_response :delete, "#{Repository.path repo}/issues/#{number}/labels", options
|
||||
end
|
||||
|
||||
# List labels for a given issue
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Number ID of the issue
|
||||
# @return [Array<Sawyer::Resource>] A list of the labels currently on the issue
|
||||
# @see https://developer.github.com/v3/issues/labels/#list-labels-on-an-issue
|
||||
# @example List labels for octokit/octokit.rb, issue # 1
|
||||
# Octokit.labels_for_issue("octokit/octokit.rb", 1)
|
||||
def labels_for_issue(repo, number, options = {})
|
||||
paginate "#{Repository.path repo}/issues/#{number}/labels", options
|
||||
end
|
||||
|
||||
# Add label(s) to an Issue
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A Github repository
|
||||
# @param number [Integer] Number ID of the issue
|
||||
# @param labels [Array] An array of labels to apply to this Issue
|
||||
# @return [Array<Sawyer::Resource>] A list of the labels currently on the issue
|
||||
# @see https://developer.github.com/v3/issues/labels/#add-labels-to-an-issue
|
||||
# @example Add two labels for octokit/octokit.rb
|
||||
# Octokit.add_labels_to_an_issue("octokit/octokit.rb", 10, ['V3 Transition', 'Improvement'])
|
||||
def add_labels_to_an_issue(repo, number, labels)
|
||||
post "#{Repository.path repo}/issues/#{number}/labels", labels
|
||||
end
|
||||
|
||||
# Replace all labels on an Issue
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A Github repository
|
||||
# @param number [Integer] Number ID of the issue
|
||||
# @param labels [Array] An array of labels to use as replacement
|
||||
# @return [Array<Sawyer::Resource>] A list of the labels currently on the issue
|
||||
# @see https://developer.github.com/v3/issues/labels/#replace-all-labels-for-an-issue
|
||||
# @example Replace labels for octokit/octokit.rb Issue #10
|
||||
# Octokit.replace_all_labels("octokit/octokit.rb", 10, ['V3 Transition', 'Improvement'])
|
||||
def replace_all_labels(repo, number, labels, _options = {})
|
||||
put "#{Repository.path repo}/issues/#{number}/labels", labels
|
||||
end
|
||||
|
||||
# Get labels for every issue in a milestone
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [Integer] Number ID of the milestone
|
||||
# @return [Array<Sawyer::Resource>] A list of the labels across the milestone
|
||||
# @see http://developer.github.com/v3/issues/labels/#get-labels-for-every-issue-in-a-milestone
|
||||
# @example List all labels for milestone #2 on octokit/octokit.rb
|
||||
# Octokit.labels_for_milestone("octokit/octokit.rb", 2)
|
||||
def labels_for_milestone(repo, number, options = {})
|
||||
paginate "#{Repository.path repo}/milestones/#{number}/labels", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,42 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Legacy Search API
|
||||
#
|
||||
# @see https://developer.github.com/v3/search/
|
||||
module LegacySearch
|
||||
# Legacy repository search
|
||||
#
|
||||
# @see https://developer.github.com/v3/search/#search-repositories
|
||||
# @param q [String] Search keyword
|
||||
# @return [Array<Sawyer::Resource>] List of repositories found
|
||||
def legacy_search_repositories(q, options = {})
|
||||
get("legacy/repos/search/#{q}", options)['repositories']
|
||||
end
|
||||
|
||||
# Legacy search issues within a repository
|
||||
#
|
||||
# @param repo [String, Repository, Hash] A GitHub repository
|
||||
# @param search_term [String] The term to search for
|
||||
# @param state [String] :state (open) <tt>open</tt> or <tt>closed</tt>.
|
||||
# @return [Array<Sawyer::Resource>] A list of issues matching the search term and state
|
||||
# @example Search for 'test' in the open issues for sferik/rails_admin
|
||||
# Octokit.search_issues("sferik/rails_admin", 'test', 'open')
|
||||
def legacy_search_issues(repo, search_term, state = 'open', options = {})
|
||||
get("legacy/issues/search/#{Repository.new(repo)}/#{state}/#{search_term}", options)['issues']
|
||||
end
|
||||
|
||||
# Search for user.
|
||||
#
|
||||
# @param search [String] User to search for.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing users.
|
||||
# @see https://developer.github.com/v3/search/#search-users
|
||||
# @example
|
||||
# Octokit.search_users('pengwynn')
|
||||
def legacy_search_users(search, options = {})
|
||||
get("legacy/user/search/#{search}", options)['users']
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,42 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for licenses API
|
||||
#
|
||||
module Licenses
|
||||
# List all licenses
|
||||
#
|
||||
# @see https://developer.github.com/v3/licenses/#list-all-licenses
|
||||
# @return [Array<Sawyer::Resource>] A list of licenses
|
||||
# @example
|
||||
# Octokit.licenses
|
||||
def licenses(options = {})
|
||||
paginate 'licenses', options
|
||||
end
|
||||
|
||||
# List an individual license
|
||||
#
|
||||
# @see https://developer.github.com/v3/licenses/#get-an-individual-license
|
||||
# @param license_name [String] The license name
|
||||
# @return <Sawyer::Resource> An individual license
|
||||
# @example
|
||||
# Octokit.license 'mit'
|
||||
def license(license_name, options = {})
|
||||
get "licenses/#{license_name}", options
|
||||
end
|
||||
|
||||
# Returns the contents of the repository’s license file, if one is detected.
|
||||
#
|
||||
# @see https://developer.github.com/v3/licenses/#get-the-contents-of-a-repositorys-license
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @option options [String] :ref name of the Commit/Branch/Tag. Defaults to 'master'.
|
||||
# @return [Sawyer::Resource] The detail of the license file
|
||||
# @example
|
||||
# Octokit.repository_license_contents 'benbalter/licensee'
|
||||
def repository_license_contents(repo, options = {})
|
||||
get "#{Repository.path repo}/license", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,27 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Markdown API
|
||||
#
|
||||
# @see https://developer.github.com/v3/markdown/
|
||||
module Markdown
|
||||
# Render an arbitrary Markdown document
|
||||
#
|
||||
# @param text [String] Markdown source
|
||||
# @option options [String] (optional) :mode (`markdown` or `gfm`)
|
||||
# @option options [String] (optional) :context Repo context
|
||||
# @return [String] HTML renderization
|
||||
# @see https://developer.github.com/v3/markdown/#render-an-arbitrary-markdown-document
|
||||
# @example Render some GFM
|
||||
# Octokit.markdown('Fixed in #111', :mode => "gfm", :context => "octokit/octokit.rb")
|
||||
def markdown(text, options = {})
|
||||
options[:text] = text
|
||||
options[:repo] = Repository.new(options[:repo]) if options[:repo]
|
||||
options[:accept] = 'application/vnd.github.raw'
|
||||
|
||||
post 'markdown', options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,56 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Marketplace Listing API
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/marketplace/
|
||||
module Marketplace
|
||||
# List all plans for an app's marketplace listing
|
||||
#
|
||||
# @param options [Hash] A customizable set of options
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/marketplace/#list-all-plans-for-your-marketplace-listing
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] A list of plans
|
||||
def list_plans(options = {})
|
||||
paginate '/marketplace_listing/plans', options
|
||||
end
|
||||
|
||||
# List all GitHub accounts on a specific plan
|
||||
#
|
||||
# @param plan_id [Integer] The id of the GitHub plan
|
||||
# @param options [Hash] A customizable set of options
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/marketplace/#list-all-github-accounts-user-or-organization-on-a-specific-plan
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] A list of accounts
|
||||
def list_accounts_for_plan(plan_id, options = {})
|
||||
paginate "/marketplace_listing/plans/#{plan_id}/accounts", options
|
||||
end
|
||||
|
||||
# Get the plan associated with a given GitHub account
|
||||
#
|
||||
# @param account_id [Integer] The id of the GitHub account
|
||||
# @param options [Hash] A customizable set of options
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/marketplace/#check-if-a-github-account-is-associated-with-any-marketplace-listing
|
||||
#
|
||||
# @return <Sawyer::Resource> Account with plan details, or nil
|
||||
def plan_for_account(account_id, options = {})
|
||||
get "/marketplace_listing/accounts/#{account_id}", options
|
||||
end
|
||||
|
||||
# Get user's Marketplace purchases
|
||||
#
|
||||
# @param options [Hash] A customizable set of options
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/marketplace/#get-a-users-marketplace-purchases
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] A list of Marketplace purchases
|
||||
def marketplace_purchases(options = {})
|
||||
get '/user/marketplace_purchases', options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,20 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Meta API
|
||||
#
|
||||
# @see https://developer.github.com/v3/meta/
|
||||
module Meta
|
||||
# Get meta information about GitHub.com, the service.
|
||||
# @see https://developer.github.com/v3/meta/#meta
|
||||
# @return [Sawyer::Resource] Hash with meta information.
|
||||
# @example Get GitHub meta information
|
||||
# @client.github_meta
|
||||
def meta(options = {})
|
||||
get 'meta', options
|
||||
end
|
||||
alias github_meta meta
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,87 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Issues Milestones API
|
||||
#
|
||||
# @see https://developer.github.com/v3/issues/milestones/
|
||||
module Milestones
|
||||
# List milestones for a repository
|
||||
#
|
||||
# @param repository [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param options [Hash] A customizable set of options.
|
||||
# @option options [Integer] :milestone Milestone number.
|
||||
# @option options [String] :state (open) State: <tt>open</tt>, <tt>closed</tt>, or <tt>all</tt>.
|
||||
# @option options [String] :sort (created) Sort: <tt>created</tt>, <tt>updated</tt>, or <tt>comments</tt>.
|
||||
# @option options [String] :direction (desc) Direction: <tt>asc</tt> or <tt>desc</tt>.
|
||||
# @return [Array<Sawyer::Resource>] A list of milestones for a repository.
|
||||
# @see https://developer.github.com/v3/issues/milestones/#list-milestones-for-a-repository
|
||||
# @example List milestones for a repository
|
||||
# Octokit.list_milestones("octokit/octokit.rb")
|
||||
def list_milestones(repository, options = {})
|
||||
paginate "#{Repository.path repository}/milestones", options
|
||||
end
|
||||
alias milestones list_milestones
|
||||
|
||||
# Get a single milestone for a repository
|
||||
#
|
||||
# @param repository [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param options [Hash] A customizable set of options.
|
||||
# @option options [Integer] :milestone Milestone number.
|
||||
# @return [Sawyer::Resource] A single milestone from a repository.
|
||||
# @see https://developer.github.com/v3/issues/milestones/#get-a-single-milestone
|
||||
# @example Get a single milestone for a repository
|
||||
# Octokit.milestone("octokit/octokit.rb", 1)
|
||||
def milestone(repository, number, options = {})
|
||||
get "#{Repository.path repository}/milestones/#{number}", options
|
||||
end
|
||||
|
||||
# Create a milestone for a repository
|
||||
#
|
||||
# @param repository [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param title [String] A unique title.
|
||||
# @param options [Hash] A customizable set of options.
|
||||
# @option options [String] :state (open) State: <tt>open</tt> or <tt>closed</tt>.
|
||||
# @option options [String] :description A meaningful description
|
||||
# @option options [Time] :due_on Set if the milestone has a due date
|
||||
# @return [Sawyer::Resource] A single milestone object
|
||||
# @see https://developer.github.com/v3/issues/milestones/#create-a-milestone
|
||||
# @example Create a milestone for a repository
|
||||
# Octokit.create_milestone("octokit/octokit.rb", "0.7.0", {:description => 'Add support for v3 of Github API'})
|
||||
def create_milestone(repository, title, options = {})
|
||||
post "#{Repository.path repository}/milestones", options.merge({ title: title })
|
||||
end
|
||||
|
||||
# Update a milestone for a repository
|
||||
#
|
||||
# @param repository [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param number [String, Integer] ID of the milestone
|
||||
# @param options [Hash] A customizable set of options.
|
||||
# @option options [String] :title A unique title.
|
||||
# @option options [String] :state (open) State: <tt>open</tt> or <tt>closed</tt>.
|
||||
# @option options [String] :description A meaningful description
|
||||
# @option options [Time] :due_on Set if the milestone has a due date
|
||||
# @return [Sawyer::Resource] A single milestone object
|
||||
# @see https://developer.github.com/v3/issues/milestones/#update-a-milestone
|
||||
# @example Update a milestone for a repository
|
||||
# Octokit.update_milestone("octokit/octokit.rb", 1, {:description => 'Add support for v3 of Github API'})
|
||||
def update_milestone(repository, number, options = {})
|
||||
patch "#{Repository.path repository}/milestones/#{number}", options
|
||||
end
|
||||
alias edit_milestone update_milestone
|
||||
|
||||
# Delete a single milestone for a repository
|
||||
#
|
||||
# @param repository [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param options [Hash] A customizable set of options.
|
||||
# @option options [Integer] :milestone Milestone number.
|
||||
# @return [Boolean] Success
|
||||
# @see https://developer.github.com/v3/issues/milestones/#delete-a-milestone
|
||||
# @example Delete a single milestone from a repository
|
||||
# Octokit.delete_milestone("octokit/octokit.rb", 1)
|
||||
def delete_milestone(repository, number, options = {})
|
||||
boolean_from_response :delete, "#{Repository.path repository}/milestones/#{number}", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,167 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Notifications API
|
||||
#
|
||||
# @see https://developer.github.com/v3/activity/notifications/
|
||||
module Notifications
|
||||
# List your notifications
|
||||
#
|
||||
# @param options [Hash] Optional parameters
|
||||
# @option options [Boolean] :all 'true' to show notifications marked as
|
||||
# read.
|
||||
# @option options [Boolean] :participating 'true' to show only
|
||||
# notifications in which the user is directly participating or
|
||||
# mentioned.
|
||||
# @option options [String] :since Time filters out any notifications
|
||||
# updated before the given time. The time should be passed in as UTC in
|
||||
# the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. Ex. '2012-10-09T23:39:01Z'
|
||||
# @return [Array<Sawyer::Resource>] Array of notifications.
|
||||
# @see https://developer.github.com/v3/activity/notifications/#list-your-notifications
|
||||
# @example Get users notifications
|
||||
# @client.notifications
|
||||
# @example Get all notifications since a certain time.
|
||||
# @client.notifications({all: true, since: '2012-10-09T23:39:01Z'})
|
||||
def notifications(options = {})
|
||||
paginate 'notifications', options
|
||||
end
|
||||
|
||||
# List your notifications in a repository
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param options [Hash] Optional parameters
|
||||
# @option options [Boolean] :all 'true' to show notifications marked as
|
||||
# read.
|
||||
# @option options [Boolean] :participating 'true' to show only
|
||||
# notifications in which the user is directly participating or
|
||||
# mentioned.
|
||||
# @option options [String] :since Time filters out any notifications
|
||||
# updated before the given time. The time should be passed in as UTC in
|
||||
# the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. Ex. '2012-10-09T23:39:01Z'
|
||||
# @return [Array<Sawyer::Resource>] Array of notifications.
|
||||
# @see https://developer.github.com/v3/activity/notifications/#list-your-notifications-in-a-repository
|
||||
# @example Get your notifications for octokit/octokit.rb
|
||||
# @client.repository_notifications('octokit/octokit.rb')
|
||||
# @example Get your notifications for octokit/octokit.rb since a time.
|
||||
# @client.repository_notifications({since: '2012-10-09T23:39:01Z'})
|
||||
def repository_notifications(repo, options = {})
|
||||
paginate "#{Repository.path repo}/notifications", options
|
||||
end
|
||||
alias repo_notifications repository_notifications
|
||||
|
||||
# Mark notifications as read
|
||||
#
|
||||
# @param options [Hash] Optional parameters
|
||||
# @option options [Boolean] :unread Changes the unread status of the
|
||||
# threads.
|
||||
# @option options [Boolean] :read Inverse of 'unread'.
|
||||
# @option options [String] :last_read_at ('Now') Describes the last point
|
||||
# that notifications were checked. Anything updated since this time
|
||||
# will not be updated. The time should be passed in as UTC in the
|
||||
# ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. Ex. '2012-10-09T23:39:01Z'
|
||||
# @return [Boolean] True if marked as read, false otherwise
|
||||
# @see https://developer.github.com/v3/activity/notifications/#mark-as-read
|
||||
#
|
||||
# @example
|
||||
# @client.mark_notifications_as_read
|
||||
def mark_notifications_as_read(options = {})
|
||||
request :put, 'notifications', options
|
||||
|
||||
last_response.status == 205
|
||||
end
|
||||
|
||||
# Mark notifications from a specific repository as read
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param options [Hash] Optional parameters
|
||||
# @option options [Boolean] :unread Changes the unread status of the
|
||||
# threads.
|
||||
# @option options [Boolean] :read Inverse of 'unread'.
|
||||
# @option options [String] :last_read_at ('Now') Describes the last point
|
||||
# that notifications were checked. Anything updated since this time
|
||||
# will not be updated. The time should be passed in as UTC in the
|
||||
# ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. Ex. '2012-10-09T23:39:01Z'
|
||||
# @return [Boolean] True if marked as read, false otherwise
|
||||
# @see https://developer.github.com/v3/activity/notifications/#mark-notifications-as-read-in-a-repository
|
||||
# @example
|
||||
# @client.mark_notifications_as_read("octokit/octokit.rb")
|
||||
def mark_repository_notifications_as_read(repo, options = {})
|
||||
request :put, "#{Repository.path repo}/notifications", options
|
||||
|
||||
last_response.status == 205
|
||||
end
|
||||
alias mark_repo_notifications_as_read mark_repository_notifications_as_read
|
||||
|
||||
# List notifications for a specific thread
|
||||
#
|
||||
# @param thread_id [Integer] Id of the thread.
|
||||
# @return [Array<Sawyer::Resource>] Array of notifications.
|
||||
# @see https://developer.github.com/v3/activity/notifications/#view-a-single-thread
|
||||
#
|
||||
# @example
|
||||
# @client.notification_thread(1000)
|
||||
def thread_notifications(thread_id, options = {})
|
||||
get "notifications/threads/#{thread_id}", options
|
||||
end
|
||||
|
||||
# Mark thread as read
|
||||
#
|
||||
# @param thread_id [Integer] Id of the thread to update.
|
||||
# @return [Boolean] True if updated, false otherwise.
|
||||
# @see https://developer.github.com/v3/activity/notifications/#mark-a-thread-as-read
|
||||
# @example
|
||||
# @client.mark_thread_as_read(1, :read => false)
|
||||
def mark_thread_as_read(thread_id, options = {})
|
||||
request :patch, "notifications/threads/#{thread_id}", options
|
||||
|
||||
last_response.status == 205
|
||||
end
|
||||
|
||||
# Get thread subscription
|
||||
#
|
||||
# @param thread_id [Integer] Id of the thread.
|
||||
# @return [Sawyer::Resource] Subscription.
|
||||
# @see https://developer.github.com/v3/activity/notifications/#get-a-thread-subscription
|
||||
# @example
|
||||
# @client.thread_subscription(1)
|
||||
def thread_subscription(thread_id, options = {})
|
||||
get "notifications/threads/#{thread_id}/subscription", options
|
||||
end
|
||||
|
||||
# Update thread subscription
|
||||
#
|
||||
# This lets you subscribe to a thread, or ignore it. Subscribing to a
|
||||
# thread is unnecessary if the user is already subscribed to the
|
||||
# repository. Ignoring a thread will mute all future notifications (until
|
||||
# you comment or get @mentioned).
|
||||
#
|
||||
# @param thread_id [Integer] Id of the thread.
|
||||
# @param options
|
||||
# @option options [Boolean] :subscribed Determines if notifications
|
||||
# should be received from this repository.
|
||||
# @option options [Boolean] :ignored Deterimines if all notifications
|
||||
# should be blocked from this repository.
|
||||
# @return [Sawyer::Resource] Updated subscription.
|
||||
# @see https://developer.github.com/v3/activity/notifications/#set-a-thread-subscription
|
||||
# @example Subscribe to notifications
|
||||
# @client.update_thread_subscription(1, :subscribed => true)
|
||||
# @example Ignore notifications from a repo
|
||||
# @client.update_thread_subscription(1, :ignored => true)
|
||||
def update_thread_subscription(thread_id, options = {})
|
||||
put "notifications/threads/#{thread_id}/subscription", options
|
||||
end
|
||||
|
||||
# Delete a thread subscription
|
||||
#
|
||||
# @param thread_id [Integer] Id of the thread.
|
||||
# @return [Boolean] True if delete successful, false otherwise.
|
||||
# @see https://developer.github.com/v3/activity/notifications/#delete-a-thread-subscription
|
||||
# @example
|
||||
# @client.delete_thread_subscription(1)
|
||||
def delete_thread_subscription(thread_id, options = {})
|
||||
boolean_from_response :delete, "notifications/threads/#{thread_id}/subscription", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,116 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the OauthApplications API
|
||||
#
|
||||
# @see https://developer.github.com/v3/apps/oauth_applications
|
||||
module OauthApplications
|
||||
# Check if a token is valid.
|
||||
#
|
||||
# Applications can check if a token is valid without rate limits.
|
||||
#
|
||||
# @param access_token [String] 40 character GitHub OAuth access token
|
||||
#
|
||||
# @return [Sawyer::Resource] A single authorization for the authenticated user
|
||||
# @see https://developer.github.com/v3/apps/oauth_applications/#check-a-token
|
||||
#
|
||||
# @example
|
||||
# client = Octokit::Client.new(:client_id => 'abcdefg12345', :client_secret => 'secret')
|
||||
# client.check_token('deadbeef1234567890deadbeef987654321')
|
||||
def check_token(access_token, options = {})
|
||||
options[:access_token] = access_token
|
||||
|
||||
key = options.delete(:client_id) || client_id
|
||||
secret = options.delete(:client_secret) || client_secret
|
||||
|
||||
as_app(key, secret) do |app_client|
|
||||
app_client.post "applications/#{client_id}/token", options
|
||||
end
|
||||
end
|
||||
alias check_application_authorization check_token
|
||||
|
||||
# Reset a token
|
||||
#
|
||||
# Applications can reset a token without requiring a user to re-authorize.
|
||||
#
|
||||
# @param access_token [String] 40 character GitHub OAuth access token
|
||||
#
|
||||
# @return [Sawyer::Resource] A single authorization for the authenticated user
|
||||
# @see https://developer.github.com/v3/apps/oauth_applications/#reset-a-token
|
||||
#
|
||||
# @example
|
||||
# client = Octokit::Client.new(:client_id => 'abcdefg12345', :client_secret => 'secret')
|
||||
# client.reset_token('deadbeef1234567890deadbeef987654321')
|
||||
def reset_token(access_token, options = {})
|
||||
options[:access_token] = access_token
|
||||
|
||||
key = options.delete(:client_id) || client_id
|
||||
secret = options.delete(:client_secret) || client_secret
|
||||
|
||||
as_app(key, secret) do |app_client|
|
||||
app_client.patch "applications/#{client_id}/token", options
|
||||
end
|
||||
end
|
||||
alias reset_application_authorization reset_token
|
||||
|
||||
# Delete an app token
|
||||
#
|
||||
# Applications can revoke (delete) a token
|
||||
#
|
||||
# @param access_token [String] 40 character GitHub OAuth access token
|
||||
#
|
||||
# @return [Boolean] Result
|
||||
# @see https://developer.github.com/v3/apps/oauth_applications/#delete-an-app-token
|
||||
#
|
||||
# @example
|
||||
# client = Octokit::Client.new(:client_id => 'abcdefg12345', :client_secret => 'secret')
|
||||
# client.delete_token('deadbeef1234567890deadbeef987654321')
|
||||
def delete_app_token(access_token, options = {})
|
||||
options[:access_token] = access_token
|
||||
|
||||
key = options.delete(:client_id) || client_id
|
||||
secret = options.delete(:client_secret) || client_secret
|
||||
|
||||
begin
|
||||
as_app(key, secret) do |app_client|
|
||||
app_client.delete "applications/#{client_id}/token", options
|
||||
app_client.last_response.status == 204
|
||||
end
|
||||
rescue Octokit::NotFound
|
||||
false
|
||||
end
|
||||
end
|
||||
alias delete_application_authorization delete_app_token
|
||||
alias revoke_application_authorization delete_app_token
|
||||
|
||||
# Delete an app authorization
|
||||
#
|
||||
# OAuth application owners can revoke a grant for their OAuth application and a specific user.
|
||||
#
|
||||
# @param access_token [String] 40 character GitHub OAuth access token
|
||||
#
|
||||
# @return [Boolean] Result
|
||||
# @see https://developer.github.com/v3/apps/oauth_applications/#delete-an-app-token
|
||||
#
|
||||
# @example
|
||||
# client = Octokit::Client.new(:client_id => 'abcdefg12345', :client_secret => 'secret')
|
||||
# client.delete_app_authorization('deadbeef1234567890deadbeef987654321')
|
||||
def delete_app_authorization(access_token, options = {})
|
||||
options[:access_token] = access_token
|
||||
|
||||
key = options.delete(:client_id) || client_id
|
||||
secret = options.delete(:client_secret) || client_secret
|
||||
|
||||
begin
|
||||
as_app(key, secret) do |app_client|
|
||||
app_client.delete "applications/#{client_id}/grant", options
|
||||
app_client.last_response.status == 204
|
||||
end
|
||||
rescue Octokit::NotFound
|
||||
false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,141 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Git Data API
|
||||
#
|
||||
# @see https://developer.github.com/v3/git/
|
||||
module Objects
|
||||
# Get a single tree, fetching information about its root-level objects
|
||||
#
|
||||
# Pass <tt>:recursive => true</tt> in <tt>options</tt> to fetch information about all of the tree's objects, including those in subdirectories.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param tree_sha [String] The SHA of the tree to fetch
|
||||
# @return [Sawyer::Resource] A hash representing the fetched tree
|
||||
# @see https://developer.github.com/v3/git/trees/#get-a-tree
|
||||
# @see https://developer.github.com/v3/git/trees/#get-a-tree-recursively
|
||||
# @example Fetch a tree and inspect the path of one of its files
|
||||
# tree = Octokit.tree("octocat/Hello-World", "9fb037999f264ba9a7fc6274d15fa3ae2ab98312")
|
||||
# tree.tree.first.path # => "file.rb"
|
||||
# @example Fetch a tree recursively
|
||||
# tree = Octokit.tree("octocat/Hello-World", "fc6274d15fa3ae2ab983129fb037999f264ba9a7", :recursive => true)
|
||||
# tree.tree.first.path # => "subdir/file.txt"
|
||||
def tree(repo, tree_sha, options = {})
|
||||
get "#{Repository.path repo}/git/trees/#{tree_sha}", options
|
||||
end
|
||||
|
||||
# Create a tree
|
||||
#
|
||||
# Pass <tt>:base_tree => "827efc6..."</tt> in <tt>options</tt> to update an existing tree with new data.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param tree [Array] An array of hashes representing a tree structure
|
||||
# @return [Sawyer::Resource] A hash representing the new tree
|
||||
# @see https://developer.github.com/v3/git/trees/#create-a-tree
|
||||
# @example Create a tree containing one file
|
||||
# tree = Octokit.create_tree("octocat/Hello-World", [ { :path => "file.rb", :mode => "100644", :type => "blob", :sha => "44b4fc6d56897b048c772eb4087f854f46256132" } ])
|
||||
# tree.sha # => "cd8274d15fa3ae2ab983129fb037999f264ba9a7"
|
||||
# tree.tree.first.path # => "file.rb"
|
||||
def create_tree(repo, tree, options = {})
|
||||
parameters = { tree: tree }
|
||||
post "#{Repository.path repo}/git/trees", options.merge(parameters)
|
||||
end
|
||||
|
||||
# Get a single blob, fetching its content and encoding
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param blob_sha [String] The SHA of the blob to fetch
|
||||
# @return [Sawyer::Resource] A hash representing the fetched blob
|
||||
# @see https://developer.github.com/v3/git/blobs/#get-a-blob
|
||||
# @example Fetch a blob and inspect its contents
|
||||
# blob = Octokit.blob("octocat/Hello-World", "827efc6d56897b048c772eb4087f854f46256132")
|
||||
# blob.encoding # => "utf-8"
|
||||
# blob.content # => "Foo bar baz"
|
||||
# @example Fetch a base64-encoded blob and inspect its contents
|
||||
# require "base64"
|
||||
# blob = Octokit.blob("octocat/Hello-World", "827efc6d56897b048c772eb4087f854f46256132")
|
||||
# blob.encoding # => "base64"
|
||||
# blob.content # => "Rm9vIGJhciBiYXo="
|
||||
# Base64.decode64(blob.content) # => "Foo bar baz"
|
||||
def blob(repo, blob_sha, options = {})
|
||||
get "#{Repository.path repo}/git/blobs/#{blob_sha}", options
|
||||
end
|
||||
|
||||
# Create a blob
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param content [String] Content of the blob
|
||||
# @param encoding [String] The content's encoding. <tt>utf-8</tt> and <tt>base64</tt> are accepted. If your data cannot be losslessly sent as a UTF-8 string, you can base64 encode it
|
||||
# @return [String] The new blob's SHA, e.g. <tt>827efc6d56897b048c772eb4087f854f46256132</tt>
|
||||
# @see https://developer.github.com/v3/git/blobs/#create-a-blob
|
||||
# @example Create a blob containing <tt>foo bar baz</tt>
|
||||
# Octokit.create_blob("octocat/Hello-World", "foo bar baz")
|
||||
# @example Create a blob containing <tt>foo bar baz</tt>, encoded using base64
|
||||
# require "base64"
|
||||
# Octokit.create_blob("octocat/Hello-World", Base64.encode64("foo bar baz"), "base64")
|
||||
def create_blob(repo, content, encoding = 'utf-8', options = {})
|
||||
parameters = {
|
||||
content: content,
|
||||
encoding: encoding
|
||||
}
|
||||
blob = post "#{Repository.path repo}/git/blobs", options.merge(parameters)
|
||||
|
||||
blob.sha
|
||||
end
|
||||
|
||||
# Get a tag
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param tag_sha [String] The SHA of the tag to fetch.
|
||||
# @return [Sawyer::Resource] Hash representing the tag.
|
||||
# @see https://developer.github.com/v3/git/tags/#get-a-tag
|
||||
# @example Fetch a tag
|
||||
# Octokit.tag('octokit/octokit.rb', '23aad20633f4d2981b1c7209a800db3014774e96')
|
||||
def tag(repo, tag_sha, options = {})
|
||||
get "#{Repository.path repo}/git/tags/#{tag_sha}", options
|
||||
end
|
||||
|
||||
# Create a tag
|
||||
#
|
||||
# Requires authenticated client.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param tag [String] Tag string.
|
||||
# @param message [String] Tag message.
|
||||
# @param object_sha [String] SHA of the git object this is tagging.
|
||||
# @param type [String] Type of the object we're tagging. Normally this is
|
||||
# a `commit` but it can also be a `tree` or a `blob`.
|
||||
# @param tagger_name [String] Name of the author of the tag.
|
||||
# @param tagger_email [String] Email of the author of the tag.
|
||||
# @param tagger_date [string] Timestamp of when this object was tagged.
|
||||
# @return [Sawyer::Resource] Hash representing new tag.
|
||||
# @see https://developer.github.com/v3/git/tags/#create-a-tag-object
|
||||
# @example
|
||||
# @client.create_tag(
|
||||
# "octokit/octokit.rb",
|
||||
# "v9000.0.0",
|
||||
# "Version 9000\n",
|
||||
# "f4cdf6eb734f32343ce3f27670c17b35f54fd82e",
|
||||
# "commit",
|
||||
# "Wynn Netherland",
|
||||
# "wynn.netherland@gmail.com",
|
||||
# "2012-06-03T17:03:11-07:00"
|
||||
# )
|
||||
def create_tag(repo, tag, message, object_sha, type, tagger_name, tagger_email, tagger_date, options = {})
|
||||
options.merge!(
|
||||
tag: tag,
|
||||
message: message,
|
||||
object: object_sha,
|
||||
type: type,
|
||||
tagger: {
|
||||
name: tagger_name,
|
||||
email: tagger_email,
|
||||
date: tagger_date
|
||||
}
|
||||
)
|
||||
post "#{Repository.path repo}/git/tags", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,864 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Organizations API
|
||||
#
|
||||
# @see https://developer.github.com/v3/orgs/
|
||||
module Organizations
|
||||
# Get an organization
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @return [Sawyer::Resource] Hash representing GitHub organization.
|
||||
# @see https://developer.github.com/v3/orgs/#get-an-organization
|
||||
# @example
|
||||
# Octokit.organization('github')
|
||||
# @example
|
||||
# Octokit.org('github')
|
||||
def organization(org, options = {})
|
||||
get Organization.path(org), options
|
||||
end
|
||||
alias org organization
|
||||
|
||||
# Update an organization.
|
||||
#
|
||||
# Requires authenticated client with proper organization permissions.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param values [Hash] The updated organization attributes.
|
||||
# @option values [String] :billing_email Billing email address. This address is not publicized.
|
||||
# @option values [String] :company Company name.
|
||||
# @option values [String] :email Publicly visible email address.
|
||||
# @option values [String] :location Location of organization.
|
||||
# @option values [String] :name GitHub username for organization.
|
||||
# @option values [String] :default_repository_permission The default permission members have on organization repositories.
|
||||
# @option values [Boolean] :members_can_create_repositories Set true to allow members to create repositories on the organization.
|
||||
# @return [Sawyer::Resource] Hash representing GitHub organization.
|
||||
# @see https://developer.github.com/v3/orgs/#edit-an-organization
|
||||
# @example
|
||||
# @client.update_organization('github', {
|
||||
# :billing_email => 'support@github.com',
|
||||
# :company => 'GitHub',
|
||||
# :email => 'support@github.com',
|
||||
# :location => 'San Francisco',
|
||||
# :name => 'github'
|
||||
# })
|
||||
# @example
|
||||
# @client.update_org('github', {:company => 'Unicorns, Inc.'})
|
||||
def update_organization(org, values, options = {})
|
||||
patch Organization.path(org), options.merge(values)
|
||||
end
|
||||
alias update_org update_organization
|
||||
|
||||
# Delete an organization.
|
||||
#
|
||||
# Requires authenticated organization owner.
|
||||
#
|
||||
# @param org [String, Integer] Organization login or ID.
|
||||
# @return [Boolean] True if deletion successful, otherwise false.
|
||||
# @see https://docs.github.com/rest/orgs/orgs#delete-an-organization
|
||||
# @example
|
||||
# @client.delete_organization("my-org")
|
||||
# @example
|
||||
# @client.delete_org("my-org")
|
||||
def delete_organization(org)
|
||||
boolean_from_response :delete, Organization.path(org)
|
||||
end
|
||||
alias delete_org delete_organization
|
||||
|
||||
# Get organizations for a user.
|
||||
#
|
||||
# Nonauthenticated calls to this method will return organizations that
|
||||
# the user is a public member.
|
||||
#
|
||||
# Use an authenicated client to get both public and private organizations
|
||||
# for a user.
|
||||
#
|
||||
# Calling this method on a `@client` will return that users organizations.
|
||||
# Private organizations are included only if the `@client` is authenticated.
|
||||
#
|
||||
# @param user [Integer, String] GitHub user login or id of the user to get
|
||||
# list of organizations.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing organizations.
|
||||
# @see https://developer.github.com/v3/orgs/#list-your-organizations
|
||||
# @see https://developer.github.com/v3/orgs/#list-user-organizations
|
||||
# @example
|
||||
# Octokit.organizations('pengwynn')
|
||||
# @example
|
||||
# @client.organizations('pengwynn')
|
||||
# @example
|
||||
# Octokit.orgs('pengwynn')
|
||||
# @example
|
||||
# Octokit.list_organizations('pengwynn')
|
||||
# @example
|
||||
# Octokit.list_orgs('pengwynn')
|
||||
# @example
|
||||
# @client.organizations
|
||||
def organizations(user = nil, options = {})
|
||||
paginate "#{User.path user}/orgs", options
|
||||
end
|
||||
alias list_organizations organizations
|
||||
alias list_orgs organizations
|
||||
alias orgs organizations
|
||||
|
||||
# List all GitHub organizations
|
||||
#
|
||||
# This provides a list of every organization, in the order that they
|
||||
# were created.
|
||||
#
|
||||
# @param options [Hash] Optional options.
|
||||
# @option options [Integer] :since The integer ID of the last
|
||||
# Organization that you’ve seen.
|
||||
#
|
||||
# @see https://developer.github.com/v3/orgs/#list-all-organizations
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] List of GitHub organizations.
|
||||
def all_organizations(options = {})
|
||||
paginate 'organizations', options
|
||||
end
|
||||
alias all_orgs all_organizations
|
||||
|
||||
# List organization repositories
|
||||
#
|
||||
# Public repositories are available without authentication. Private repos
|
||||
# require authenticated organization member.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id for which
|
||||
# to list repos.
|
||||
# @option options [String] :type ('all') Filter by repository type.
|
||||
# `all`, `public`, `member`, `sources`, `forks`, or `private`.
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] List of repositories
|
||||
# @see https://developer.github.com/v3/repos/#list-organization-repositories
|
||||
# @example
|
||||
# Octokit.organization_repositories('github')
|
||||
# @example
|
||||
# Octokit.org_repositories('github')
|
||||
# @example
|
||||
# Octokit.org_repos('github')
|
||||
# @example
|
||||
# @client.org_repos('github', {:type => 'private'})
|
||||
def organization_repositories(org, options = {})
|
||||
paginate "#{Organization.path org}/repos", options
|
||||
end
|
||||
alias org_repositories organization_repositories
|
||||
alias org_repos organization_repositories
|
||||
|
||||
# Get organization members
|
||||
#
|
||||
# Public members of the organization are returned by default. An
|
||||
# authenticated client that is a member of the GitHub organization
|
||||
# is required to get private members.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing users.
|
||||
# @see https://developer.github.com/v3/orgs/members/#members-list
|
||||
# @example
|
||||
# Octokit.organization_members('github')
|
||||
# @example
|
||||
# Octokit.org_members('github')
|
||||
def organization_members(org, options = {})
|
||||
options = options.dup
|
||||
path = 'public_' if options.delete(:public)
|
||||
paginate "#{Organization.path org}/#{path}members", options
|
||||
end
|
||||
alias org_members organization_members
|
||||
|
||||
# Get organization public members
|
||||
#
|
||||
# Lists the public members of an organization
|
||||
#
|
||||
# @param org [String] Organization GitHub username.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing users.
|
||||
# @see https://developer.github.com/v3/orgs/members/#public-members-list
|
||||
# @example
|
||||
# Octokit.organization_public_members('github')
|
||||
# @example
|
||||
# Octokit.org_public_members('github')
|
||||
def organization_public_members(org, options = {})
|
||||
organization_members org, options.merge(public: true)
|
||||
end
|
||||
alias org_public_members organization_public_members
|
||||
|
||||
# Check if a user is a member of an organization.
|
||||
#
|
||||
# Use this to check if another user is a member of an organization that
|
||||
# you are a member. If you are not in the organization you are checking,
|
||||
# use .organization_public_member? instead.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param user [String] GitHub username of the user to check.
|
||||
#
|
||||
# @return [Boolean] Is a member?
|
||||
#
|
||||
# @see https://developer.github.com/v3/orgs/members/#check-membership
|
||||
#
|
||||
# @example Check if a user is in your organization
|
||||
# @client.organization_member?('your_organization', 'pengwynn')
|
||||
# => false
|
||||
def organization_member?(org, user, options = {})
|
||||
result = boolean_from_response(:get, "#{Organization.path org}/members/#{user}", options)
|
||||
if !result && last_response && last_response.status == 302
|
||||
boolean_from_response :get, last_response.headers['Location']
|
||||
else
|
||||
result
|
||||
end
|
||||
end
|
||||
alias org_member? organization_member?
|
||||
|
||||
# Check if a user is a public member of an organization.
|
||||
#
|
||||
# If you are checking for membership of a user of an organization that
|
||||
# you are in, use .organization_member? instead.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param user [String] GitHub username of the user to check.
|
||||
#
|
||||
# @return [Boolean] Is a public member?
|
||||
#
|
||||
# @see https://developer.github.com/v3/orgs/members/#check-public-membership
|
||||
#
|
||||
# @example Check if a user is a hubbernaut
|
||||
# @client.organization_public_member?('github', 'pengwynn')
|
||||
# => true
|
||||
def organization_public_member?(org, user, options = {})
|
||||
boolean_from_response :get, "#{Organization.path org}/public_members/#{user}", options
|
||||
end
|
||||
alias org_public_member? organization_public_member?
|
||||
|
||||
# List pending organization invitations
|
||||
#
|
||||
# Requires authenticated organization member.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing invitations.
|
||||
# @see https://developer.github.com/v3/orgs/members/#list-pending-organization-invitations
|
||||
#
|
||||
# @example
|
||||
# @client.organization_invitations('github')
|
||||
def organization_invitations(org, options = {})
|
||||
get "#{Organization.path org}/invitations", options
|
||||
end
|
||||
alias org_invitations organization_invitations
|
||||
|
||||
# List outside collaborators for an organization
|
||||
#
|
||||
# Requires authenticated organization members.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing users.
|
||||
# @see https://developer.github.com/v3/orgs/outside_collaborators/#list-outside-collaborators
|
||||
#
|
||||
# @example
|
||||
# @client.outside_collaborators('github')
|
||||
def outside_collaborators(org, options = {})
|
||||
paginate "#{Organization.path org}/outside_collaborators", options
|
||||
end
|
||||
|
||||
# Remove outside collaborator from an organization
|
||||
#
|
||||
# Requires authenticated organization members.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param user [String] GitHub username to be removed as outside collaborator
|
||||
# @return [Boolean] Return true if outside collaborator removed from organization, false otherwise.
|
||||
# @see https://developer.github.com/v3/orgs/outside-collaborators/#remove-outside-collaborator
|
||||
#
|
||||
# @example
|
||||
# @client.remove_outside_collaborator('github', 'lizzhale')
|
||||
def remove_outside_collaborator(org, user, options = {})
|
||||
boolean_from_response :delete, "#{Organization.path org}/outside_collaborators/#{user}", options
|
||||
end
|
||||
|
||||
# Converts an organization member to an outside collaborator
|
||||
#
|
||||
# Requires authenticated organization members.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param user [String] GitHub username to be removed as outside collaborator
|
||||
# @return [Boolean] Return true if outside collaborator removed from organization, false otherwise.
|
||||
# @see https://developer.github.com/v3/orgs/outside-collaborators/#convert-member-to-outside-collaborator
|
||||
#
|
||||
# @example
|
||||
# @client.convert_to_outside_collaborator('github', 'lizzhale')
|
||||
def convert_to_outside_collaborator(org, user, options = {})
|
||||
boolean_from_response :put, "#{Organization.path org}/outside_collaborators/#{user}", options
|
||||
end
|
||||
|
||||
# List teams
|
||||
#
|
||||
# Requires authenticated organization member.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing teams.
|
||||
# @see https://developer.github.com/v3/orgs/teams/#list-teams
|
||||
# @example
|
||||
# @client.organization_teams('github')
|
||||
# @example
|
||||
# @client.org_teams('github')
|
||||
def organization_teams(org, options = {})
|
||||
paginate "#{Organization.path org}/teams", options
|
||||
end
|
||||
alias org_teams organization_teams
|
||||
|
||||
# Create team
|
||||
#
|
||||
# Requires authenticated organization owner.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @option options [String] :name Team name.
|
||||
# @option options [Array<String>] :repo_names Repositories for the team.
|
||||
# @option options [Array<String>] :maintainers Maintainers for the team.
|
||||
# @option options [Integer] :parent_team_id ID of a team to set as the parent team.
|
||||
# @return [Sawyer::Resource] Hash representing new team.
|
||||
# @see https://developer.github.com/v3/orgs/teams/#create-team
|
||||
# @example
|
||||
# @client.create_team('github', {
|
||||
# :name => 'Designers',
|
||||
# :repo_names => ['github/dotfiles']
|
||||
# })
|
||||
def create_team(org, options = {})
|
||||
if options.key?(:permission)
|
||||
octokit_warn 'Deprecated: Passing :permission option to #create_team. Assign team repository permission by passing :permission to #add_team_repository instead.'
|
||||
end
|
||||
post "#{Organization.path org}/teams", options
|
||||
end
|
||||
|
||||
# Get team
|
||||
#
|
||||
# Requires authenticated organization member.
|
||||
#
|
||||
# @param team_id [Integer] Team id.
|
||||
# @return [Sawyer::Resource] Hash representing team.
|
||||
# @see https://developer.github.com/v3/orgs/teams/#get-team
|
||||
# @example
|
||||
# @client.team(100000)
|
||||
def team(team_id, options = {})
|
||||
get "teams/#{team_id}", options
|
||||
end
|
||||
|
||||
# Get team by name and org
|
||||
#
|
||||
# Requires authenticated organization member.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param team_slug [String] Team slug.
|
||||
# @return [Sawyer::Resource] Hash representing team.
|
||||
# @see https://developer.github.com/v3/teams/#get-team-by-name
|
||||
# @example
|
||||
# @client.team_by_name("github", "justice-league")
|
||||
def team_by_name(org, team_slug, options = {})
|
||||
get "#{Organization.path(org)}/teams/#{team_slug}", options
|
||||
end
|
||||
|
||||
# Check team permissions for a repository
|
||||
#
|
||||
# Requires authenticated organization member.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param team_slug_or_id [String, Integer] Team slug or Team ID.
|
||||
# @param owner [String] Owner name for the repository.
|
||||
# @param repo [String] Name of the repo to check permissions against.
|
||||
# @return [String, Sawyer::Resource] Depending on options it may be an empty string or a resource.
|
||||
# @example
|
||||
# # Check whether the team has any permissions with the repository
|
||||
# @client.team_permissions_for_repo("github", "justice-league", "octocat", "hello-world")
|
||||
#
|
||||
# @example
|
||||
# # Get the full repository object including the permissions level and role for the team
|
||||
# @client.team_permissions_for_repo("github", "justice-league", "octocat", "hello-world", :accept => 'application/vnd.github.v3.repository+json')
|
||||
# @see https://docs.github.com/en/rest/teams/teams#check-team-permissions-for-a-repository
|
||||
def team_permissions_for_repo(org, team_slug_or_id, owner, repo, options = {})
|
||||
get "#{Organization.path(org)}/teams/#{team_slug_or_id}/repos/#{owner}/#{repo}", options
|
||||
end
|
||||
|
||||
# List child teams
|
||||
#
|
||||
# Requires authenticated organization member.
|
||||
#
|
||||
# @param team_id [Integer] Team id.
|
||||
# @return [Sawyer::Resource] Hash representing team.
|
||||
# @see https://developer.github.com/v3/orgs/teams/#list-child-teams
|
||||
# @example
|
||||
# @client.child_teams(100000, :accept => "application/vnd.github.hellcat-preview+json")
|
||||
def child_teams(team_id, options = {})
|
||||
paginate "teams/#{team_id}/teams", options
|
||||
end
|
||||
|
||||
# Update team
|
||||
#
|
||||
# Requires authenticated organization owner.
|
||||
#
|
||||
# @param team_id [Integer] Team id.
|
||||
# @option options [String] :name Team name.
|
||||
# @option options [String] :permission Permissions the team has for team repositories.
|
||||
#
|
||||
# `pull` - team members can pull, but not push to or administer these repositories.
|
||||
# `push` - team members can pull and push, but not administer these repositories.
|
||||
# `admin` - team members can pull, push and administer these repositories.
|
||||
# @option options [Integer] :parent_team_id ID of a team to set as the parent team.
|
||||
# @return [Sawyer::Resource] Hash representing updated team.
|
||||
# @see https://developer.github.com/v3/orgs/teams/#edit-team
|
||||
# @example
|
||||
# @client.update_team(100000, {
|
||||
# :name => 'Front-end Designers',
|
||||
# :permission => 'push'
|
||||
# })
|
||||
def update_team(team_id, options = {})
|
||||
patch "teams/#{team_id}", options
|
||||
end
|
||||
|
||||
# Delete team
|
||||
#
|
||||
# Requires authenticated organization owner.
|
||||
#
|
||||
# @param team_id [Integer] Team id.
|
||||
# @return [Boolean] True if deletion successful, false otherwise.
|
||||
# @see https://developer.github.com/v3/orgs/teams/#delete-team
|
||||
# @example
|
||||
# @client.delete_team(100000)
|
||||
def delete_team(team_id, options = {})
|
||||
boolean_from_response :delete, "teams/#{team_id}", options
|
||||
end
|
||||
|
||||
# List team members
|
||||
#
|
||||
# Requires authenticated organization member.
|
||||
#
|
||||
# @param team_id [Integer] Team id.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing users.
|
||||
# @see https://developer.github.com/v3/orgs/teams/#list-team-members
|
||||
# @example
|
||||
# @client.team_members(100000)
|
||||
def team_members(team_id, options = {})
|
||||
paginate "teams/#{team_id}/members", options
|
||||
end
|
||||
|
||||
# Add team member
|
||||
#
|
||||
# Requires authenticated organization owner or member with team
|
||||
# `admin` permission.
|
||||
#
|
||||
# @param team_id [Integer] Team id.
|
||||
# @param user [String] GitHub username of new team member.
|
||||
# @return [Boolean] True on successful addition, false otherwise.
|
||||
# @see https://developer.github.com/v3/orgs/teams/#add-team-member
|
||||
# @example
|
||||
# @client.add_team_member(100000, 'pengwynn')
|
||||
#
|
||||
# @example
|
||||
# # Opt-in to future behavior for this endpoint. Adds the member to the
|
||||
# # team if they're already an org member. If not, the method will return
|
||||
# # 422 and indicate the user should call the new Team Membership endpoint.
|
||||
# @client.add_team_member \
|
||||
# 100000,
|
||||
# 'pengwynn',
|
||||
# :accept => "application/vnd.github.the-wasp-preview+json"
|
||||
# @see https://developer.github.com/changes/2014-08-05-team-memberships-api/
|
||||
def add_team_member(team_id, user, options = {})
|
||||
# There's a bug in this API call. The docs say to leave the body blank,
|
||||
# but it fails if the body is both blank and the content-length header
|
||||
# is not 0.
|
||||
boolean_from_response :put, "teams/#{team_id}/members/#{user}", options.merge({ name: user })
|
||||
end
|
||||
|
||||
# Remove team member
|
||||
#
|
||||
# Requires authenticated organization owner or member with team
|
||||
# `admin` permission.
|
||||
#
|
||||
# @param team_id [Integer] Team id.
|
||||
# @param user [String] GitHub username of the user to boot.
|
||||
# @return [Boolean] True if user removed, false otherwise.
|
||||
# @see https://developer.github.com/v3/orgs/teams/#remove-team-member
|
||||
# @example
|
||||
# @client.remove_team_member(100000, 'pengwynn')
|
||||
def remove_team_member(team_id, user, options = {})
|
||||
boolean_from_response :delete, "teams/#{team_id}/members/#{user}", options
|
||||
end
|
||||
|
||||
# Check if a user is a member of a team.
|
||||
#
|
||||
# Use this to check if another user is a member of a team that
|
||||
# you are a member.
|
||||
#
|
||||
# @param team_id [Integer] Team id.
|
||||
# @param user [String] GitHub username of the user to check.
|
||||
#
|
||||
# @return [Boolean] Is a member?
|
||||
#
|
||||
# @see https://developer.github.com/v3/orgs/teams/#get-team-member
|
||||
#
|
||||
# @example Check if a user is in your team
|
||||
# @client.team_member?(100000, 'pengwynn')
|
||||
# => false
|
||||
def team_member?(team_id, user, options = {})
|
||||
boolean_from_response :get, "teams/#{team_id}/members/#{user}", options
|
||||
end
|
||||
|
||||
# List pending team invitations
|
||||
#
|
||||
# Requires authenticated organization member.
|
||||
#
|
||||
# @param team_id [Integer] Team id.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing invitations.
|
||||
# @see https://developer.github.com/v3/orgs/teams/#list-pending-team-invitations
|
||||
#
|
||||
# @example
|
||||
# @client.team_invitations('github')
|
||||
def team_invitations(team_id, options = {})
|
||||
get "teams/#{team_id}/invitations", options
|
||||
end
|
||||
|
||||
# List team repositories
|
||||
#
|
||||
# Requires authenticated organization member.
|
||||
#
|
||||
# @param team_id [Integer] Team id.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing repositories.
|
||||
# @see https://developer.github.com/v3/orgs/teams/#list-team-repos
|
||||
# @example
|
||||
# @client.team_repositories(100000)
|
||||
# @example
|
||||
# @client.team_repos(100000)
|
||||
def team_repositories(team_id, options = {})
|
||||
paginate "teams/#{team_id}/repos", options
|
||||
end
|
||||
alias team_repos team_repositories
|
||||
|
||||
# Check if a repo is managed by a specific team
|
||||
#
|
||||
# @param team_id [Integer] Team ID.
|
||||
# @param repo [String, Hash, Repository] A GitHub repository.
|
||||
# @return [Boolean] True if managed by a team. False if not managed by
|
||||
# the team OR the requesting user does not have authorization to access
|
||||
# the team information.
|
||||
# @see https://developer.github.com/v3/orgs/teams/#check-if-a-team-manages-a-repository
|
||||
# @example
|
||||
# @client.team_repository?(8675309, 'octokit/octokit.rb')
|
||||
# @example
|
||||
# @client.team_repo?(8675309, 'octokit/octokit.rb')
|
||||
def team_repository?(team_id, repo, _options = {})
|
||||
boolean_from_response :get, "teams/#{team_id}/repos/#{Repository.new(repo)}"
|
||||
end
|
||||
alias team_repo? team_repository?
|
||||
|
||||
# Add team repository
|
||||
#
|
||||
# This can also be used to update the permission of an existing team
|
||||
#
|
||||
# Requires authenticated user to be an owner of the organization that the
|
||||
# team is associated with. Also, the repo must be owned by the
|
||||
# organization, or a direct form of a repo owned by the organization.
|
||||
#
|
||||
# @param team_id [Integer] Team id.
|
||||
# @param repo [String, Hash, Repository] A GitHub repository.
|
||||
# @option options [String] :permission The permission to grant the team.
|
||||
# Only valid on organization-owned repositories.
|
||||
# Can be one of: <tt>pull</tt>, <tt>push</tt>, or <tt>admin</tt>.
|
||||
# If not specified, the team's <tt>permission</tt> attribute will be
|
||||
# used to determine what permission to grant the team on this repository.
|
||||
# @return [Boolean] True if successful, false otherwise.
|
||||
# @see Octokit::Repository
|
||||
# @see https://developer.github.com/v3/orgs/teams/#add-or-update-team-repository
|
||||
# @example
|
||||
# @client.add_team_repository(100000, 'github/developer.github.com')
|
||||
# @example
|
||||
# @client.add_team_repo(100000, 'github/developer.github.com')
|
||||
# @example Add a team with admin permissions
|
||||
# @client.add_team_repository(100000, 'github/developer.github.com', permission: 'admin')
|
||||
def add_team_repository(team_id, repo, options = {})
|
||||
boolean_from_response :put, "teams/#{team_id}/repos/#{Repository.new(repo)}", options
|
||||
end
|
||||
alias add_team_repo add_team_repository
|
||||
|
||||
# Remove team repository
|
||||
#
|
||||
# Removes repository from team. Does not delete the repository.
|
||||
#
|
||||
# Requires authenticated organization owner.
|
||||
#
|
||||
# @param team_id [Integer] Team id.
|
||||
# @param repo [String, Hash, Repository] A GitHub repository.
|
||||
# @return [Boolean] Return true if repo removed from team, false otherwise.
|
||||
# @see Octokit::Repository
|
||||
# @see https://developer.github.com/v3/orgs/teams/#remove-team-repository
|
||||
# @example
|
||||
# @client.remove_team_repository(100000, 'github/developer.github.com')
|
||||
# @example
|
||||
# @client.remove_team_repo(100000, 'github/developer.github.com')
|
||||
def remove_team_repository(team_id, repo, _options = {})
|
||||
boolean_from_response :delete, "teams/#{team_id}/repos/#{Repository.new(repo)}"
|
||||
end
|
||||
alias remove_team_repo remove_team_repository
|
||||
|
||||
# Remove organization member
|
||||
#
|
||||
# Requires authenticated organization owner or member with team `admin` access.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param user [String] GitHub username of user to remove.
|
||||
# @return [Boolean] True if removal is successful, false otherwise.
|
||||
# @see https://developer.github.com/v3/orgs/members/#remove-a-member
|
||||
# @example
|
||||
# @client.remove_organization_member('github', 'pengwynn')
|
||||
# @example
|
||||
# @client.remove_org_member('github', 'pengwynn')
|
||||
def remove_organization_member(org, user, options = {})
|
||||
# this is a synonym for: for team in org.teams: remove_team_member(team.id, user)
|
||||
# provided in the GH API v3
|
||||
boolean_from_response :delete, "#{Organization.path org}/members/#{user}", options
|
||||
end
|
||||
alias remove_org_member remove_organization_member
|
||||
|
||||
# Publicize a user's membership of an organization
|
||||
#
|
||||
# Requires authenticated organization owner.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param user [String] GitHub username of user to publicize.
|
||||
# @return [Boolean] True if publicization successful, false otherwise.
|
||||
# @see https://developer.github.com/v3/orgs/members/#publicize-a-users-membership
|
||||
# @example
|
||||
# @client.publicize_membership('github', 'pengwynn')
|
||||
def publicize_membership(org, user, options = {})
|
||||
boolean_from_response :put, "#{Organization.path org}/public_members/#{user}", options
|
||||
end
|
||||
|
||||
# Conceal a user's membership of an organization.
|
||||
#
|
||||
# Requires authenticated organization owner.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param user [String] GitHub username of user to unpublicize.
|
||||
# @return [Boolean] True of unpublicization successful, false otherwise.
|
||||
# @see https://developer.github.com/v3/orgs/members/#conceal-a-users-membership
|
||||
# @example
|
||||
# @client.unpublicize_membership('github', 'pengwynn')
|
||||
# @example
|
||||
# @client.conceal_membership('github', 'pengwynn')
|
||||
def unpublicize_membership(org, user, options = {})
|
||||
boolean_from_response :delete, "#{Organization.path org}/public_members/#{user}", options
|
||||
end
|
||||
alias conceal_membership unpublicize_membership
|
||||
|
||||
# List all teams for the authenticated user across all their orgs
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] Array of team resources.
|
||||
# @see https://developer.github.com/v3/orgs/teams/#list-user-teams
|
||||
def user_teams(options = {})
|
||||
paginate 'user/teams', options
|
||||
end
|
||||
|
||||
# Check if a user has a team membership.
|
||||
#
|
||||
# @param team_id [Integer] Team id.
|
||||
# @param user [String] GitHub username of the user to check.
|
||||
#
|
||||
# @return [Sawyer::Resource] Hash of team membership info
|
||||
#
|
||||
# @see https://developer.github.com/v3/orgs/teams/#get-team-membership
|
||||
#
|
||||
# @example Check if a user has a membership for a team
|
||||
# @client.team_membership(1234, 'pengwynn')
|
||||
def team_membership(team_id, user, options = {})
|
||||
get "teams/#{team_id}/memberships/#{user}", options
|
||||
end
|
||||
|
||||
# Add or invite a user to a team
|
||||
#
|
||||
# @param team_id [Integer] Team id.
|
||||
# @param user [String] GitHub username of the user to invite.
|
||||
#
|
||||
# @return [Sawyer::Resource] Hash of team membership info
|
||||
#
|
||||
# @see https://developer.github.com/v3/orgs/teams/#add-or-update-team-membership
|
||||
#
|
||||
# @example Check if a user has a membership for a team
|
||||
# @client.add_team_membership(1234, 'pengwynn')
|
||||
def add_team_membership(team_id, user, options = {})
|
||||
put "teams/#{team_id}/memberships/#{user}", options
|
||||
end
|
||||
|
||||
# Remove team membership
|
||||
#
|
||||
# @param team_id [Integer] Team id.
|
||||
# @param user [String] GitHub username of the user to boot.
|
||||
# @return [Boolean] True if user removed, false otherwise.
|
||||
# @see https://developer.github.com/v3/orgs/teams/#remove-team-membership
|
||||
# @example
|
||||
# @client.remove_team_membership(100000, 'pengwynn')
|
||||
def remove_team_membership(team_id, user, options = {})
|
||||
boolean_from_response :delete, "teams/#{team_id}/memberships/#{user}", options
|
||||
end
|
||||
|
||||
# List all organizations memberships for the authenticated user
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] Array of organizations memberships.
|
||||
# @see https://developer.github.com/v3/orgs/members/#list-your-organization-memberships
|
||||
def organization_memberships(options = {})
|
||||
paginate 'user/memberships/orgs', options
|
||||
end
|
||||
alias org_memberships organization_memberships
|
||||
|
||||
# Get an organization membership
|
||||
#
|
||||
# @param org [Integer, String] The GitHub Organization.
|
||||
# @option options [String] :user The login of the user, otherwise authenticated user.
|
||||
# @return [Sawyer::Resource] Hash representing the organization membership.
|
||||
# @see https://developer.github.com/v3/orgs/members/#get-your-organization-membership
|
||||
# @see https://developer.github.com/v3/orgs/members/#get-organization-membership
|
||||
def organization_membership(org, options = {})
|
||||
options = options.dup
|
||||
if user = options.delete(:user)
|
||||
get "#{Organization.path(org)}/memberships/#{user}", options
|
||||
else
|
||||
get "user/memberships/orgs/#{org}", options
|
||||
end
|
||||
end
|
||||
alias org_membership organization_membership
|
||||
|
||||
# Edit an organization membership
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @option options [String] :role The role of the user in the organization.
|
||||
# @option options [String] :state The state that the membership should be in.
|
||||
# @option options [String] :user The login of the user, otherwise authenticated user.
|
||||
# @return [Sawyer::Resource] Hash representing the updated organization membership.
|
||||
# @see https://developer.github.com/v3/orgs/members/#edit-your-organization-membership
|
||||
# @see https://developer.github.com/v3/orgs/members/#add-or-update-organization-membership
|
||||
def update_organization_membership(org, options = {})
|
||||
options = options.dup
|
||||
if user = options.delete(:user)
|
||||
options.delete(:state)
|
||||
put "#{Organization.path(org)}/memberships/#{user}", options
|
||||
else
|
||||
options.delete(:role)
|
||||
patch "user/memberships/orgs/#{org}", options
|
||||
end
|
||||
end
|
||||
alias update_org_membership update_organization_membership
|
||||
|
||||
# Remove an organization membership
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @return [Boolean] Success
|
||||
# @see https://developer.github.com/v3/orgs/members/#remove-organization-membership
|
||||
def remove_organization_membership(org, options = {})
|
||||
options = options.dup
|
||||
user = options.delete(:user)
|
||||
user && boolean_from_response(:delete, "#{Organization.path(org)}/memberships/#{user}", options)
|
||||
end
|
||||
alias remove_org_membership remove_organization_membership
|
||||
|
||||
# Initiates the generation of a migration archive.
|
||||
#
|
||||
# Requires authenticated organization owner.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param repositories [Array<String>] :repositories Repositories for the organization.
|
||||
# @option options [Boolean, optional] :lock_repositories Indicates whether repositories should be locked during migration
|
||||
# @return [Sawyer::Resource] Hash representing the new migration.
|
||||
# @example
|
||||
# @client.start_migration('github', ['github/dotfiles'])
|
||||
# @see https://docs.github.com/en/rest/reference/migrations#start-an-organization-migration
|
||||
def start_migration(org, repositories, options = {})
|
||||
options[:repositories] = repositories
|
||||
post "#{Organization.path(org)}/migrations", options
|
||||
end
|
||||
|
||||
# Lists the most recent migrations.
|
||||
#
|
||||
# Requires authenticated organization owner.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @return [Array<Sawyer::Resource>] Array of migration resources.
|
||||
# @see https://docs.github.com/en/rest/reference/migrations#list-organization-migrations
|
||||
def migrations(org, options = {})
|
||||
paginate "#{Organization.path(org)}/migrations", options
|
||||
end
|
||||
|
||||
# Fetches the status of a migration.
|
||||
#
|
||||
# Requires authenticated organization owner.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param id [Integer] ID number of the migration.
|
||||
# @see https://docs.github.com/en/rest/reference/migrations#get-an-organization-migration-status
|
||||
def migration_status(org, id, options = {})
|
||||
get "#{Organization.path(org)}/migrations/#{id}", options
|
||||
end
|
||||
|
||||
# Fetches the URL to a migration archive.
|
||||
#
|
||||
# Requires authenticated organization owner.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param id [Integer] ID number of the migration.
|
||||
# @see https://docs.github.com/en/rest/reference/migrations#download-an-organization-migration-archive
|
||||
def migration_archive_url(org, id, options = {})
|
||||
url = "#{Organization.path(org)}/migrations/#{id}/archive"
|
||||
|
||||
response = client_without_redirects(options).get(url)
|
||||
response.headers['location']
|
||||
end
|
||||
|
||||
# Deletes a previous migration archive.
|
||||
#
|
||||
# Requires authenticated organization owner.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @param id [Integer] ID number of the migration.
|
||||
# @see https://docs.github.com/en/rest/reference/migrations#delete-an-organization-migration-archive
|
||||
def delete_migration_archive(org, id, options = {})
|
||||
delete "#{Organization.path(org)}/migrations/#{id}/archive", options
|
||||
end
|
||||
|
||||
# Unlock a previous migration archive.
|
||||
#
|
||||
# Requires authenticated organization owner.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @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-an-organization-repository
|
||||
def unlock_repository(org, id, repo, options = {})
|
||||
delete "#{Organization.path(org)}/migrations/#{id}/repos/#{repo}/lock", options
|
||||
end
|
||||
|
||||
# Get GitHub Actions billing for an organization
|
||||
#
|
||||
# Requires authenticated organization owner.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id.
|
||||
# @return [Sawyer::Resource] Hash representing GitHub Actions billing for an organization.
|
||||
# @see https://docs.github.com/en/rest/reference/billing#get-github-actions-billing-for-an-organization
|
||||
#
|
||||
# @example
|
||||
# @client.billing_actions('github')
|
||||
def billing_actions(org)
|
||||
get "#{Organization.path(org)}/settings/billing/actions"
|
||||
end
|
||||
|
||||
# Get organization audit log.
|
||||
#
|
||||
# Gets the audit log for an organization.
|
||||
#
|
||||
# @param org [String, Integer] Organization GitHub login or id for which
|
||||
# to retrieve the audit log.
|
||||
# @option options [String] :include ('all') Filter by event type.
|
||||
# `all`, `git` or `web`.
|
||||
# @option options [String] :phrase A search phrase.
|
||||
# @option options [String] :order ('desc') The order of audit log events. To list newest events first, specify desc.
|
||||
# To list oldest events first, specify asc.
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] List of events
|
||||
# @see https://docs.github.com/en/enterprise-cloud@latest/rest/orgs/orgs#get-the-audit-log-for-an-organization
|
||||
# @example
|
||||
# Octokit.organization_audit_log('github', {include: 'all', phrase: 'action:org.add_member created:>2022-08-29 user:octocat'})
|
||||
def organization_audit_log(org, options = {})
|
||||
paginate "#{Organization.path org}/audit-log", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,61 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Pages API
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/pages/
|
||||
module Pages
|
||||
# List Pages information for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @return Sawyer::Resource A GitHub Pages resource
|
||||
# @see https://developer.github.com/v3/repos/pages/#get-information-about-a-pages-site
|
||||
def pages(repo, options = {})
|
||||
get "#{Repository.path repo}/pages", options
|
||||
end
|
||||
|
||||
# Get a specific Pages build by ID
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param id [Integer, String] Build ID
|
||||
# @return [Sawyer::Resource] Pages build information
|
||||
# @see https://developer.github.com/v3/repos/pages/#list-a-specific-pages-build
|
||||
# @example
|
||||
# Octokit.pages_build("github/developer.github.com", 5472601)
|
||||
def pages_build(repo, id, options = {})
|
||||
get "#{Repository.path repo}/pages/builds/#{id}", options
|
||||
end
|
||||
|
||||
# List Pages builds for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @return [Array<Sawyer::Resource>] A list of build history for a repository.
|
||||
# @see https://developer.github.com/v3/repos/pages/#list-pages-builds
|
||||
def pages_builds(repo, options = {})
|
||||
get "#{Repository.path repo}/pages/builds", options
|
||||
end
|
||||
alias list_pages_builds pages_builds
|
||||
|
||||
# List the latest Pages build information for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @return Sawyer::Resource A GitHub Pages resource about a build
|
||||
# @see https://developer.github.com/v3/repos/pages/#list-latest-pages-build
|
||||
def latest_pages_build(repo, options = {})
|
||||
get "#{Repository.path repo}/pages/builds/latest", options
|
||||
end
|
||||
|
||||
# Request a page build for the latest revision of the default branch
|
||||
#
|
||||
# You can only request builds for your repositories
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @return [Sawyer::Resource] Request result
|
||||
# @see https://developer.github.com/v3/repos/pages/#request-a-page-build
|
||||
def request_page_build(repo, options = {})
|
||||
post "#{Repository.path repo}/pages/builds", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,294 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for Projects API
|
||||
#
|
||||
# @see https://docs.github.com/en/rest/projects
|
||||
module Projects
|
||||
# List projects for a repository
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @return [Array<Sawyer::Resource>] Repository projects
|
||||
# @see https://developer.github.com/v3/projects/#list-repository-projects
|
||||
# @example
|
||||
# @client.projects('octokit/octokit.rb')
|
||||
def projects(repo, options = {})
|
||||
paginate "#{Repository.path repo}/projects", options
|
||||
end
|
||||
|
||||
# Create a project
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param name [String] Project name
|
||||
# @option options [String] :body Body of the project
|
||||
# @return [Sawyer::Resource] Fresh new project
|
||||
# @see https://developer.github.com/v3/projects/#create-a-repository-project
|
||||
# @example Create project with only a name
|
||||
# @client.create_project('octokit/octokit.rb', 'implement new APIs')
|
||||
#
|
||||
# @example Create project with name and body
|
||||
# @client.create_project('octokit/octokit.rb', 'bugs be gone', body: 'Fix all the bugs @joeyw creates')
|
||||
def create_project(repo, name, options = {})
|
||||
options[:name] = name
|
||||
post "#{Repository.path repo}/projects", options
|
||||
end
|
||||
|
||||
# List organization projects
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param org [String] A GitHub organization
|
||||
# @return [Array<Sawyer::Resource>] Organization projects
|
||||
# @see https://developer.github.com/v3/projects/#list-organization-projects
|
||||
# @example
|
||||
# @client.org_projects("octokit")
|
||||
def org_projects(org, options = {})
|
||||
paginate "orgs/#{org}/projects", options
|
||||
end
|
||||
alias organization_projects org_projects
|
||||
|
||||
# Create organization project
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param org [String] A GitHub organization
|
||||
# @param name [String] Project name
|
||||
# @option options [String] :body Project body
|
||||
# @return [Sawyer::Resource] Organization project
|
||||
# @see https://developer.github.com/v3/projects/#create-an-organization-project
|
||||
# @example Create with only a name
|
||||
# @client.create_org_project("octocat", "make more octocats")
|
||||
# @example Create a project with name and body
|
||||
# @client.create_org_project("octokit", "octocan", body: 'Improve clients')
|
||||
def create_org_project(org, name, options = {})
|
||||
options[:name] = name
|
||||
post "orgs/#{org}/projects", options
|
||||
end
|
||||
alias create_organization_project create_org_project
|
||||
|
||||
# Get a project by id
|
||||
#
|
||||
# @param id [Integer] Project id
|
||||
# @return [Sawyer::Resource] Project
|
||||
# @see https://developer.github.com/v3/projects/#get-a-project
|
||||
# @example
|
||||
# Octokit.project(123942)
|
||||
def project(id, options = {})
|
||||
get "projects/#{id}", options
|
||||
end
|
||||
|
||||
# Update a project
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param id [Integer] Project id
|
||||
# @option options [String] :name Project name
|
||||
# @option options [String] :body Project body
|
||||
# @return [Sawyer::Resource] Project
|
||||
# @see https://developer.github.com/v3/projects/#update-a-project
|
||||
# @example Update project name
|
||||
# @client.update_project(123942, name: 'New name')
|
||||
def update_project(id, options = {})
|
||||
patch "projects/#{id}", options
|
||||
end
|
||||
|
||||
# Delete a project
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param id [Integer] Project id
|
||||
# @return [Boolean] Result of deletion
|
||||
# @see https://developer.github.com/v3/projects/#delete-a-project
|
||||
# @example
|
||||
# @client.delete_project(123942)
|
||||
def delete_project(id, options = {})
|
||||
boolean_from_response :delete, "projects/#{id}", options
|
||||
end
|
||||
|
||||
# List project columns
|
||||
#
|
||||
# @param id [Integer] Project id
|
||||
# @return [Array<Sawyer::Resource>] List of project columns
|
||||
# @see https://developer.github.com/v3/projects/columns/#list-project-columns
|
||||
# @example
|
||||
# @client.project_columns(123942)
|
||||
def project_columns(id, options = {})
|
||||
paginate "projects/#{id}/columns", options
|
||||
end
|
||||
|
||||
# Create a project column
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param id [Integer] Project column id
|
||||
# @param name [String] New column name
|
||||
# @return [Sawyer::Resource] Newly created column
|
||||
# @see https://developer.github.com/v3/projects/columns/#create-a-project-column
|
||||
# @example
|
||||
# @client.create_project_column(123942, "To Dones")
|
||||
def create_project_column(id, name, options = {})
|
||||
options[:name] = name
|
||||
post "projects/#{id}/columns", options
|
||||
end
|
||||
|
||||
# Get a project column by ID
|
||||
#
|
||||
# @param id [Integer] Project column id
|
||||
# @return [Sawyer::Resource] Project column
|
||||
# @see https://developer.github.com/v3/projects/columns/#get-a-project-column
|
||||
# @example
|
||||
# Octokit.project_column(30294)
|
||||
def project_column(id, options = {})
|
||||
get "projects/columns/#{id}", options
|
||||
end
|
||||
|
||||
# Update a project column
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param id [Integer] Project column id
|
||||
# @param name [String] New column name
|
||||
# @return [Sawyer::Resource] Updated column
|
||||
# @see https://developer.github.com/v3/projects/columns/#update-a-project-column
|
||||
# @example
|
||||
# @client.update_project_column(30294, "new column name")
|
||||
def update_project_column(id, name, options = {})
|
||||
options[:name] = name
|
||||
patch "projects/columns/#{id}", options
|
||||
end
|
||||
|
||||
# Delete a project column
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param id [Integer] Project column id
|
||||
# @return [Boolean] Result of deletion request, true when deleted
|
||||
# @see https://developer.github.com/v3/projects/columns/#delete-a-project-column
|
||||
# @example
|
||||
# @client.delete_project_column(30294)
|
||||
def delete_project_column(id, options = {})
|
||||
boolean_from_response :delete, "projects/columns/#{id}", options
|
||||
end
|
||||
|
||||
# Move a project column
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param id [Integer] Project column id
|
||||
# @param position [String] New position for the column. Can be one of
|
||||
# <tt>first</tt>, <tt>last</tt>, or <tt>after:<column-id></tt>, where
|
||||
# <tt><column-id></tt> is the id value of a column in the same project.
|
||||
# @return [Sawyer::Resource] Result
|
||||
# @see https://developer.github.com/v3/projects/columns/#move-a-project-column
|
||||
# @example
|
||||
# @client.move_project_column(30294, "last")
|
||||
def move_project_column(id, position, options = {})
|
||||
options[:position] = position
|
||||
post "projects/columns/#{id}/moves", options
|
||||
end
|
||||
|
||||
# List columns cards
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param id [Integer] Project column id
|
||||
# @return [Array<Sawyer::Resource>] Cards in the column
|
||||
# @see https://developer.github.com/v3/projects/cards/#list-project-cards
|
||||
# @example
|
||||
# @client.column_cards(30294)
|
||||
def column_cards(id, options = {})
|
||||
paginate "projects/columns/#{id}/cards", options
|
||||
end
|
||||
|
||||
# Create project card
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param id [Integer] Project column id
|
||||
# @option options [String] :note Card contents for a note type
|
||||
# @option options [Integer] :content_id Issue ID for the card contents
|
||||
# @option options [String] :content_type Type of content to associate
|
||||
# with the card. <tt>Issue</tt> is presently the only avaiable value
|
||||
# @note If :note is supplied, :content_id and :content_type must be
|
||||
# excluded. Similarly, if :content_id is supplied, :content_type must
|
||||
# be set and :note must not be included.
|
||||
# @return [Sawyer::Resource] Newly created card
|
||||
# @see https://developer.github.com/v3/projects/cards/#create-a-project-card
|
||||
# @example Create a project card with a note
|
||||
# @client.create_project_card(123495, note: 'New note card')
|
||||
# @example Create a project card for an repository issue
|
||||
# @client.create_project_card(123495, content_id: 1, content_type: 'Issue')
|
||||
def create_project_card(id, options = {})
|
||||
post "projects/columns/#{id}/cards", options
|
||||
end
|
||||
|
||||
# Get a project card
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param id [Integer] Project card id
|
||||
# @return [Sawyer::Resource] Project card
|
||||
# @see https://developer.github.com/v3/projects/cards/#get-a-project-card
|
||||
# @example
|
||||
# @client.project_card(123495)
|
||||
def project_card(id, options = {})
|
||||
get "projects/columns/cards/#{id}", options
|
||||
end
|
||||
|
||||
# Update a project card
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param id [Integer] Project card id
|
||||
# @option options [String] :note The card's note content. Only valid for
|
||||
# cards without another type of content, so this cannot be specified if
|
||||
# the card already has a content_id and content_type.
|
||||
# @return [Sawyer::Resource] Updated project card
|
||||
# @see https://developer.github.com/v3/projects/cards/#update-a-project-card
|
||||
# @example
|
||||
# @client.update_project_card(12345, note: 'new note')
|
||||
def update_project_card(id, options = {})
|
||||
patch "projects/columns/cards/#{id}", options
|
||||
end
|
||||
|
||||
# Move a project card
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param id [Integer] Project card id
|
||||
# @param position [String] Can be one of <tt>top</tt>, <tt>bottom</tt>,
|
||||
# or <tt>after:<card-id></tt>, where <card-id> is the id value of a
|
||||
# card in the same column, or in the new column specified by column_id.
|
||||
# @option options [Integer] :column_id The column id to move the card to,
|
||||
# must be column in same project
|
||||
# @return [Sawyer::Resource] Empty sawyer resource
|
||||
# @see https://developer.github.com/v3/projects/cards/#move-a-project-card
|
||||
# @example Move a card to the bottom of the same column
|
||||
# @client.move_project_card(123495, 'bottom')
|
||||
# @example Move a card to the top of another column
|
||||
# @client.move_project_card(123495, 'top', column_id: 59402)
|
||||
def move_project_card(id, position, options = {})
|
||||
options[:position] = position
|
||||
post "projects/columns/cards/#{id}/moves", options
|
||||
end
|
||||
|
||||
# Delete a project card
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param id [Integer] Project card id
|
||||
# @return [Boolean] True of deleted, false otherwise
|
||||
# @see https://developer.github.com/v3/projects/cards/#delete-a-project-card
|
||||
# @example
|
||||
# @client.delete_project_card(123495)
|
||||
def delete_project_card(id, options = {})
|
||||
boolean_from_response :delete, "projects/columns/cards/#{id}", options
|
||||
end
|
||||
end # Projects
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,111 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the PubSubHubbub API
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/hooks/#pubsubhubbub
|
||||
module PubSubHubbub
|
||||
# Subscribe to a pubsub topic
|
||||
#
|
||||
# @param topic [String] A recoginized and supported pubsub topic
|
||||
# @param callback [String] A callback url to be posted to when the topic event is fired
|
||||
# @param secret [String] An optional shared secret used to generate a SHA1 HMAC of the outgoing body content
|
||||
# @return [Boolean] true if the subscribe was successful, otherwise an error is raised
|
||||
# @see https://developer.github.com/v3/repos/hooks/#subscribing
|
||||
# @example Subscribe to push events from one of your repositories, having an email sent when fired
|
||||
# client = Octokit::Client.new(:oauth_token = "token")
|
||||
# client.subscribe("https://github.com/joshk/devise_imapable/events/push", "github://Email?address=josh.kalderimis@gmail.com")
|
||||
def subscribe(topic, callback, secret = nil)
|
||||
options = {
|
||||
'hub.callback': callback,
|
||||
'hub.mode': 'subscribe',
|
||||
'hub.topic': topic
|
||||
}
|
||||
options.merge!('hub.secret': secret) unless secret.nil?
|
||||
|
||||
response = pub_sub_hubbub_request(options)
|
||||
|
||||
response.status == 204
|
||||
end
|
||||
|
||||
# Unsubscribe from a pubsub topic
|
||||
#
|
||||
# @param topic [String] A recoginized pubsub topic
|
||||
# @param callback [String] A callback url to be unsubscribed from
|
||||
# @return [Boolean] true if the unsubscribe was successful, otherwise an error is raised
|
||||
# @see https://developer.github.com/v3/repos/hooks/#subscribing
|
||||
# @example Unsubscribe to push events from one of your repositories, no longer having an email sent when fired
|
||||
# client = Octokit::Client.new(:oauth_token = "token")
|
||||
# client.unsubscribe("https://github.com/joshk/devise_imapable/events/push", "github://Email?address=josh.kalderimis@gmail.com")
|
||||
def unsubscribe(topic, callback)
|
||||
options = {
|
||||
'hub.callback': callback,
|
||||
'hub.mode': 'unsubscribe',
|
||||
'hub.topic': topic
|
||||
}
|
||||
response = pub_sub_hubbub_request(options)
|
||||
|
||||
response.status == 204
|
||||
end
|
||||
|
||||
# Subscribe to a repository through pubsub
|
||||
#
|
||||
# @param repo [String, Repository, Hash] A GitHub repository
|
||||
# @param service_name [String] service name owner
|
||||
# @param service_arguments [Hash] params that will be passed by subscribed hook.
|
||||
# List of services is available @ https://github.com/github/github-services/tree/master/docs.
|
||||
# Please refer Data node for complete list of arguments.
|
||||
# @param secret [String] An optional shared secret used to generate a SHA1 HMAC of the outgoing body content
|
||||
# @return [Boolean] True if subscription successful, false otherwise
|
||||
# @see https://developer.github.com/v3/repos/hooks/#subscribing
|
||||
# @example Subscribe to push events to one of your repositories to Travis-CI
|
||||
# client = Octokit::Client.new(:oauth_token = "token")
|
||||
# client.subscribe_service_hook('joshk/device_imapable', 'Travis', { :token => "test", :domain => "domain", :user => "user" })
|
||||
def subscribe_service_hook(repo, service_name, service_arguments = {}, secret = nil)
|
||||
topic = "#{Octokit.web_endpoint}#{Repository.new(repo)}/events/push"
|
||||
callback = "github://#{service_name}?#{service_arguments.collect { |k, v| [k, v].map { |p| URI.encode_www_form_component(p) }.join('=') }.join('&')}"
|
||||
subscribe(topic, callback, secret)
|
||||
end
|
||||
|
||||
# Unsubscribe repository through pubsub
|
||||
#
|
||||
# @param repo [String, Repository, Hash] A GitHub repository
|
||||
# @param service_name [String] service name owner
|
||||
# List of services is available @ https://github.com/github/github-services/tree/master/docs.
|
||||
# @see https://developer.github.com/v3/repos/hooks/#subscribing
|
||||
# @example Subscribe to push events to one of your repositories to Travis-CI
|
||||
# client = Octokit::Client.new(:oauth_token = "token")
|
||||
# client.unsubscribe_service_hook('joshk/device_imapable', 'Travis')
|
||||
def unsubscribe_service_hook(repo, service_name)
|
||||
topic = "#{Octokit.web_endpoint}#{Repository.new(repo)}/events/push"
|
||||
callback = "github://#{service_name}"
|
||||
unsubscribe(topic, callback)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def pub_sub_hubbub_request(options = {})
|
||||
# This method is janky, bypass normal stack so we don't
|
||||
# serialize request as JSON
|
||||
conn = Faraday.new(url: @api_endpoint) do |http|
|
||||
http.headers[:user_agent] = user_agent
|
||||
if basic_authenticated?
|
||||
http.request(*FARADAY_BASIC_AUTH_KEYS, @login, @password)
|
||||
elsif token_authenticated?
|
||||
http.request :authorization, 'token', @access_token
|
||||
end
|
||||
http.request :url_encoded
|
||||
http.use Octokit::Response::RaiseError
|
||||
http.adapter Faraday.default_adapter
|
||||
end
|
||||
|
||||
conn.post do |req|
|
||||
req.url 'hub'
|
||||
req.headers['Content-Type'] = 'application/x-www-form-urlencoded'
|
||||
req.body = options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,313 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Pull Requests API
|
||||
#
|
||||
# @see https://developer.github.com/v3/pulls/
|
||||
module PullRequests
|
||||
# List pull requests for a repository
|
||||
#
|
||||
# @overload pull_requests(repo, options)
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param options [Hash] Method options
|
||||
# @option options [String] :state `open` or `closed` or `all`.
|
||||
# @return [Array<Sawyer::Resource>] Array of pulls
|
||||
# @see https://developer.github.com/v3/pulls/#list-pull-requests
|
||||
# @example
|
||||
# Octokit.pull_requests('rails/rails', :state => 'closed')
|
||||
def pull_requests(repo, options = {})
|
||||
paginate "#{Repository.path repo}/pulls", options
|
||||
end
|
||||
alias pulls pull_requests
|
||||
|
||||
# Get a pull request
|
||||
#
|
||||
# @see https://developer.github.com/v3/pulls/#get-a-single-pull-request
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] Number of the pull request to fetch
|
||||
# @return [Sawyer::Resource] Pull request info
|
||||
# @example
|
||||
# Octokit.pull_request('rails/rails', 42, :state => 'closed')
|
||||
def pull_request(repo, number, options = {})
|
||||
get "#{Repository.path repo}/pulls/#{number}", options
|
||||
end
|
||||
alias pull pull_request
|
||||
|
||||
# Create a pull request
|
||||
#
|
||||
# @see https://developer.github.com/v3/pulls/#create-a-pull-request
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param base [String] The branch (or git ref) you want your changes
|
||||
# pulled into. This should be an existing branch on the current
|
||||
# repository. You cannot submit a pull request to one repo that requests
|
||||
# a merge to a base of another repo.
|
||||
# @param head [String] The branch (or git ref) where your changes are implemented.
|
||||
# @param title [String] Title for the pull request
|
||||
# @param body [String] The body for the pull request (optional). Supports GFM.
|
||||
# @return [Sawyer::Resource] The newly created pull request
|
||||
# @example
|
||||
# @client.create_pull_request("octokit/octokit.rb", "master", "feature-branch",
|
||||
# "Pull Request title", "Pull Request body")
|
||||
def create_pull_request(repo, base, head, title, body = nil, options = {})
|
||||
pull = {
|
||||
base: base,
|
||||
head: head,
|
||||
title: title
|
||||
}
|
||||
pull[:body] = body unless body.nil?
|
||||
post "#{Repository.path repo}/pulls", options.merge(pull)
|
||||
end
|
||||
|
||||
# Create a pull request from existing issue
|
||||
#
|
||||
# @see https://developer.github.com/v3/pulls/#alternative-input
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param base [String] The branch (or git ref) you want your changes
|
||||
# pulled into. This should be an existing branch on the current
|
||||
# repository. You cannot submit a pull request to one repo that requests
|
||||
# a merge to a base of another repo.
|
||||
# @param head [String] The branch (or git ref) where your changes are implemented.
|
||||
# @param issue [Integer] Number of Issue on which to base this pull request
|
||||
# @return [Sawyer::Resource] The newly created pull request
|
||||
def create_pull_request_for_issue(repo, base, head, issue, options = {})
|
||||
pull = {
|
||||
base: base,
|
||||
head: head,
|
||||
issue: issue
|
||||
}
|
||||
post "#{Repository.path repo}/pulls", options.merge(pull)
|
||||
end
|
||||
|
||||
# Update a pull request
|
||||
# @overload update_pull_request(repo, number, title=nil, body=nil, state=nil, options = {})
|
||||
# @deprecated
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param number [Integer] Number of pull request to update.
|
||||
# @param title [String] Title for the pull request.
|
||||
# @param body [String] Body content for pull request. Supports GFM.
|
||||
# @param state [String] State of the pull request. `open` or `closed`.
|
||||
# @overload update_pull_request(repo, number, options = {})
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param number [Integer] Number of pull request to update.
|
||||
# @option options [String] :title Title for the pull request.
|
||||
# @option options [String] :body Body for the pull request.
|
||||
# @option options [String] :state State for the pull request.
|
||||
# @return [Sawyer::Resource] Hash representing updated pull request.
|
||||
# @see https://developer.github.com/v3/pulls/#update-a-pull-request
|
||||
# @example
|
||||
# @client.update_pull_request('octokit/octokit.rb', 67, 'new title', 'updated body', 'closed')
|
||||
# @example Passing nil for optional attributes to update specific attributes.
|
||||
# @client.update_pull_request('octokit/octokit.rb', 67, nil, nil, 'open')
|
||||
# @example Empty body by passing empty string
|
||||
# @client.update_pull_request('octokit/octokit.rb', 67, nil, '')
|
||||
def update_pull_request(*args)
|
||||
arguments = Octokit::Arguments.new(args)
|
||||
repo = arguments.shift
|
||||
number = arguments.shift
|
||||
patch "#{Repository.path repo}/pulls/#{number}", arguments.options
|
||||
end
|
||||
|
||||
# Close a pull request
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param number [Integer] Number of pull request to update.
|
||||
# @return [Sawyer::Resource] Hash representing updated pull request.
|
||||
# @see https://developer.github.com/v3/pulls/#update-a-pull-request
|
||||
# @example
|
||||
# @client.close_pull_request('octokit/octokit.rb', 67)
|
||||
def close_pull_request(repo, number, options = {})
|
||||
options.merge! state: 'closed'
|
||||
update_pull_request(repo, number, options)
|
||||
end
|
||||
|
||||
# List commits on a pull request
|
||||
#
|
||||
# @see https://developer.github.com/v3/pulls/#list-commits-on-a-pull-request
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] Number of pull request
|
||||
# @return [Array<Sawyer::Resource>] List of commits
|
||||
def pull_request_commits(repo, number, options = {})
|
||||
paginate "#{Repository.path repo}/pulls/#{number}/commits", options
|
||||
end
|
||||
alias pull_commits pull_request_commits
|
||||
|
||||
# List pull request comments for a repository
|
||||
#
|
||||
# By default, Review Comments are ordered by ascending ID.
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param options [Hash] Optional parameters
|
||||
# @option options [String] :sort created or updated
|
||||
# @option options [String] :direction asc or desc. Ignored without sort
|
||||
# parameter.
|
||||
# @option options [String] :since Timestamp in ISO 8601
|
||||
# format: YYYY-MM-DDTHH:MM:SSZ
|
||||
#
|
||||
# @return [Array] List of pull request review comments.
|
||||
#
|
||||
# @see https://developer.github.com/v3/pulls/comments/#list-comments-in-a-repository
|
||||
#
|
||||
# @example Get the pull request review comments in the octokit repository
|
||||
# @client.issues_comments("octokit/octokit.rb")
|
||||
#
|
||||
# @example Get review comments, sort by updated asc since a time
|
||||
# @client.pull_requests_comments("octokit/octokit.rb", {
|
||||
# :sort => 'updated',
|
||||
# :direction => 'asc',
|
||||
# :since => '2010-05-04T23:45:02Z'
|
||||
# })
|
||||
def pull_requests_comments(repo, options = {})
|
||||
paginate("#{Repository.path repo}/pulls/comments", options)
|
||||
end
|
||||
alias pulls_comments pull_requests_comments
|
||||
alias reviews_comments pull_requests_comments
|
||||
|
||||
# List comments on a pull request
|
||||
#
|
||||
# @see https://developer.github.com/v3/pulls/comments/#list-comments-on-a-pull-request
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] Number of pull request
|
||||
# @return [Array<Sawyer::Resource>] List of comments
|
||||
def pull_request_comments(repo, number, options = {})
|
||||
# return the comments for a pull request
|
||||
paginate("#{Repository.path repo}/pulls/#{number}/comments", options)
|
||||
end
|
||||
alias pull_comments pull_request_comments
|
||||
alias review_comments pull_request_comments
|
||||
|
||||
# Get a pull request comment
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param comment_id [Integer] Id of comment to get
|
||||
# @return [Sawyer::Resource] Hash representing the comment
|
||||
# @see https://developer.github.com/v3/pulls/comments/#get-a-single-comment
|
||||
# @example
|
||||
# @client.pull_request_comment("pengwynn/octkit", 1903950)
|
||||
def pull_request_comment(repo, comment_id, options = {})
|
||||
get "#{Repository.path repo}/pulls/comments/#{comment_id}", options
|
||||
end
|
||||
alias pull_comment pull_request_comment
|
||||
alias review_comment pull_request_comment
|
||||
|
||||
# Create a pull request comment
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param pull_id [Integer] Pull request id
|
||||
# @param body [String] Comment content
|
||||
# @param commit_id [String] Sha of the commit to comment on.
|
||||
# @param path [String] Relative path of the file to comment on.
|
||||
# @param position [Integer] Line index in the diff to comment on.
|
||||
# @return [Sawyer::Resource] Hash representing the new comment
|
||||
# @see https://developer.github.com/v3/pulls/comments/#create-a-comment
|
||||
# @example
|
||||
# @client.create_pull_request_comment("octokit/octokit.rb", 163, ":shipit:",
|
||||
# "2d3201e4440903d8b04a5487842053ca4883e5f0", "lib/octokit/request.rb", 47)
|
||||
def create_pull_request_comment(repo, pull_id, body, commit_id, path, position, options = {})
|
||||
options.merge!({
|
||||
body: body,
|
||||
commit_id: commit_id,
|
||||
path: path,
|
||||
position: position
|
||||
})
|
||||
post "#{Repository.path repo}/pulls/#{pull_id}/comments", options
|
||||
end
|
||||
alias create_pull_comment create_pull_request_comment
|
||||
alias create_view_comment create_pull_request_comment
|
||||
|
||||
# Create reply to a pull request comment
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param pull_id [Integer] Pull request id
|
||||
# @param body [String] Comment contents
|
||||
# @param comment_id [Integer] Comment id to reply to
|
||||
# @return [Sawyer::Resource] Hash representing new comment
|
||||
# @see https://developer.github.com/v3/pulls/comments/#create-a-comment
|
||||
# @example
|
||||
# @client.create_pull_request_comment_reply("octokit/octokit.rb", 163, "done.", 1903950)
|
||||
def create_pull_request_comment_reply(repo, pull_id, body, comment_id, options = {})
|
||||
options.merge!({
|
||||
body: body,
|
||||
in_reply_to: comment_id
|
||||
})
|
||||
post "#{Repository.path repo}/pulls/#{pull_id}/comments", options
|
||||
end
|
||||
alias create_pull_reply create_pull_request_comment_reply
|
||||
alias create_review_reply create_pull_request_comment_reply
|
||||
|
||||
# Update pull request comment
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param comment_id [Integer] Id of the comment to update
|
||||
# @param body [String] Updated comment content
|
||||
# @return [Sawyer::Resource] Hash representing the updated comment
|
||||
# @see https://developer.github.com/v3/pulls/comments/#edit-a-comment
|
||||
# @example
|
||||
# @client.update_pull_request_comment("octokit/octokit.rb", 1903950, ":shipit:")
|
||||
def update_pull_request_comment(repo, comment_id, body, options = {})
|
||||
options.merge! body: body
|
||||
patch("#{Repository.path repo}/pulls/comments/#{comment_id}", options)
|
||||
end
|
||||
alias update_pull_comment update_pull_request_comment
|
||||
alias update_review_comment update_pull_request_comment
|
||||
|
||||
# Delete pull request comment
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param comment_id [Integer] Id of the comment to delete
|
||||
# @return [Boolean] True if deleted, false otherwise
|
||||
# @see https://developer.github.com/v3/pulls/comments/#delete-a-comment
|
||||
# @example
|
||||
# @client.delete_pull_request_comment("octokit/octokit.rb", 1902707)
|
||||
def delete_pull_request_comment(repo, comment_id, options = {})
|
||||
boolean_from_response(:delete, "#{Repository.path repo}/pulls/comments/#{comment_id}", options)
|
||||
end
|
||||
alias delete_pull_comment delete_pull_request_comment
|
||||
alias delete_review_comment delete_pull_request_comment
|
||||
|
||||
# List files on a pull request
|
||||
#
|
||||
# @see https://developer.github.com/v3/pulls/#list-pull-requests-files
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] Number of pull request
|
||||
# @return [Array<Sawyer::Resource>] List of files
|
||||
def pull_request_files(repo, number, options = {})
|
||||
paginate "#{Repository.path repo}/pulls/#{number}/files", options
|
||||
end
|
||||
alias pull_files pull_request_files
|
||||
|
||||
# Update a pull request branch
|
||||
#
|
||||
# @see https://developer.github.com/v3/pulls/#update-a-pull-request-branch
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] Number of pull request
|
||||
# @param options [Hash] Optional parameters (e.g. expected_head_sha)
|
||||
# @return [Boolean] True if the pull request branch has been updated
|
||||
def update_pull_request_branch(repo, number, options = {})
|
||||
boolean_from_response(:put, "#{Repository.path repo}/pulls/#{number}/update-branch", options)
|
||||
end
|
||||
|
||||
# Merge a pull request
|
||||
#
|
||||
# @see https://developer.github.com/v3/pulls/#merge-a-pull-request-merge-button
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] Number of pull request
|
||||
# @param commit_message [String] Optional commit message for the merge commit
|
||||
# @return [Array<Sawyer::Resource>] Merge commit info if successful
|
||||
def merge_pull_request(repo, number, commit_message = '', options = {})
|
||||
put "#{Repository.path repo}/pulls/#{number}/merge", options.merge({ commit_message: commit_message })
|
||||
end
|
||||
|
||||
# Check pull request merge status
|
||||
#
|
||||
# @see https://developer.github.com/v3/pulls/#get-if-a-pull-request-has-been-merged
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] Number of pull request
|
||||
# @return [Boolean] True if the pull request has been merged
|
||||
def pull_merged?(repo, number, options = {})
|
||||
boolean_from_response :get, "#{Repository.path repo}/pulls/#{number}/merge", options
|
||||
end
|
||||
alias pull_request_merged? pull_merged?
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,52 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for API rate limiting info
|
||||
#
|
||||
# @see https://developer.github.com/v3/#rate-limiting
|
||||
module RateLimit
|
||||
# Get rate limit info from last response if available
|
||||
# or make a new request to fetch rate limit
|
||||
#
|
||||
# @see https://developer.github.com/v3/rate_limit/#rate-limit
|
||||
# @return [Octokit::RateLimit] Rate limit info
|
||||
def rate_limit(_options = {})
|
||||
return rate_limit! if last_response.nil?
|
||||
|
||||
Octokit::RateLimit.from_response(last_response)
|
||||
end
|
||||
alias ratelimit rate_limit
|
||||
|
||||
# Get number of rate limted requests remaining
|
||||
#
|
||||
# @see https://developer.github.com/v3/rate_limit/#rate-limit
|
||||
# @return [Integer] Number of requests remaining in this period
|
||||
def rate_limit_remaining(_options = {})
|
||||
octokit_warn 'Deprecated: Please use .rate_limit.remaining'
|
||||
rate_limit.remaining
|
||||
end
|
||||
alias ratelimit_remaining rate_limit_remaining
|
||||
|
||||
# Refresh rate limit info by making a new request
|
||||
#
|
||||
# @see https://developer.github.com/v3/rate_limit/#rate-limit
|
||||
# @return [Octokit::RateLimit] Rate limit info
|
||||
def rate_limit!(_options = {})
|
||||
get 'rate_limit'
|
||||
Octokit::RateLimit.from_response(last_response)
|
||||
end
|
||||
alias ratelimit! rate_limit!
|
||||
|
||||
# Refresh rate limit info and get number of rate limted requests remaining
|
||||
#
|
||||
# @see https://developer.github.com/v3/rate_limit/#rate-limit
|
||||
# @return [Integer] Number of requests remaining in this period
|
||||
def rate_limit_remaining!(_options = {})
|
||||
octokit_warn 'Deprecated: Please use .rate_limit!.remaining'
|
||||
rate_limit!.remaining
|
||||
end
|
||||
alias ratelimit_remaining! rate_limit_remaining!
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,153 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Reacions API
|
||||
#
|
||||
# @see https://developer.github.com/v3/reactions/
|
||||
module Reactions
|
||||
# List reactions for a commit comment
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param id [Integer] The id of the commit comment
|
||||
# @see https://developer.github.com/v3/reactions/#list-reactions-for-a-commit-comment
|
||||
#
|
||||
# @example
|
||||
# @client.commit_comment_reactions("octokit/octokit.rb", 1)
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] Array of Hashes representing the reactions.
|
||||
def commit_comment_reactions(repo, id, options = {})
|
||||
get "#{Repository.path repo}/comments/#{id}/reactions", options
|
||||
end
|
||||
|
||||
# Create a reaction for a commit comment
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param id [Integer] The id of the commit comment
|
||||
# @param reaction [String] The Reaction
|
||||
# @see https://developer.github.com/v3/reactions/#create-reaction-for-a-commit-comment
|
||||
# @see https://developer.github.com/v3/reactions/#reaction-types
|
||||
#
|
||||
# @example
|
||||
# @client.create_commit_comment_reactions("octokit/octokit.rb", 1)
|
||||
#
|
||||
# @return [<Sawyer::Resource>] Hash representing the reaction
|
||||
def create_commit_comment_reaction(repo, id, reaction, options = {})
|
||||
options = options.merge(content: reaction)
|
||||
post "#{Repository.path repo}/comments/#{id}/reactions", options
|
||||
end
|
||||
|
||||
# List reactions for an issue
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] The Issue number
|
||||
# @see https://developer.github.com/v3/reactions/#list-reactions-for-an-issue
|
||||
#
|
||||
# @example
|
||||
# @client.issue_reactions("octokit/octokit.rb", 1)
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] Array of Hashes representing the reactions.
|
||||
def issue_reactions(repo, number, options = {})
|
||||
get "#{Repository.path repo}/issues/#{number}/reactions", options
|
||||
end
|
||||
|
||||
# Create reaction for an issue
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] The Issue number
|
||||
# @param reaction [String] The Reaction
|
||||
#
|
||||
# @see https://developer.github.com/v3/reactions/#create-reaction-for-an-issue
|
||||
# @see https://developer.github.com/v3/reactions/#reaction-types
|
||||
#
|
||||
# @example
|
||||
# @client.create_issue_reaction("octokit/octokit.rb", 1)
|
||||
#
|
||||
# @return [<Sawyer::Resource>] Hash representing the reaction.
|
||||
def create_issue_reaction(repo, number, reaction, options = {})
|
||||
options = options.merge(content: reaction)
|
||||
post "#{Repository.path repo}/issues/#{number}/reactions", options
|
||||
end
|
||||
|
||||
# List reactions for an issue comment
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param id [Integer] The Issue comment id
|
||||
#
|
||||
# @see https://developer.github.com/v3/reactions/#list-reactions-for-an-issue-comment
|
||||
#
|
||||
# @example
|
||||
# @client.issue_comment_reactions("octokit/octokit.rb", 1)
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] Array of Hashes representing the reactions.
|
||||
def issue_comment_reactions(repo, id, options = {})
|
||||
get "#{Repository.path repo}/issues/comments/#{id}/reactions", options
|
||||
end
|
||||
|
||||
# Create reaction for an issue comment
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param id [Integer] The Issue comment id
|
||||
# @param reaction [String] The Reaction
|
||||
#
|
||||
# @see https://developer.github.com/v3/reactions/#create-reaction-for-an-issue-comment
|
||||
# @see https://developer.github.com/v3/reactions/#reaction-types
|
||||
#
|
||||
# @example
|
||||
# @client.create_issue_comment_reaction("octokit/octokit.rb", 1)
|
||||
#
|
||||
# @return [<Sawyer::Resource>] Hashes representing the reaction.
|
||||
def create_issue_comment_reaction(repo, id, reaction, options = {})
|
||||
options = options.merge(content: reaction)
|
||||
post "#{Repository.path repo}/issues/comments/#{id}/reactions", options
|
||||
end
|
||||
|
||||
# List reactions for a pull request review comment
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param id [Integer] The Issue comment id
|
||||
#
|
||||
# @see https://developer.github.com/v3/reactions/#list-reactions-for-a-pull-request-review-comment
|
||||
#
|
||||
# @example
|
||||
# @client.pull_request_review_comment_reactions("octokit/octokit.rb", 1)
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] Array of Hashes representing the reactions.
|
||||
def pull_request_review_comment_reactions(repo, id, options = {})
|
||||
get "#{Repository.path repo}/pulls/comments/#{id}/reactions", options
|
||||
end
|
||||
|
||||
# Create reaction for a pull request review comment
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param id [Integer] The Issue comment id
|
||||
# @param reaction [String] The Reaction
|
||||
#
|
||||
# @see https://developer.github.com/v3/reactions/#create-reaction-for-a-pull-request-review-comment
|
||||
# @see https://developer.github.com/v3/reactions/#reaction-types
|
||||
#
|
||||
# @example
|
||||
# @client.create_pull_request_reiew_comment_reaction("octokit/octokit.rb", 1)
|
||||
#
|
||||
# @return [<Sawyer::Resource>] Hash representing the reaction.
|
||||
def create_pull_request_review_comment_reaction(repo, id, reaction, options = {})
|
||||
options = options.merge(content: reaction)
|
||||
post "#{Repository.path repo}/pulls/comments/#{id}/reactions", options
|
||||
end
|
||||
|
||||
# Delete a reaction
|
||||
#
|
||||
# @param id [Integer] Reaction id
|
||||
#
|
||||
# @see https://developer.github.com/v3/reactions/#delete-a-reaction
|
||||
#
|
||||
# @example
|
||||
# @client.delete_reaction(1)
|
||||
#
|
||||
# @return [Boolean] Return true if reaction was deleted, false otherwise.
|
||||
def delete_reaction(id, options = {})
|
||||
boolean_from_response :delete, "reactions/#{id}", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,131 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for References for Git Data API
|
||||
#
|
||||
# @see https://developer.github.com/v3/git/refs/
|
||||
module Refs
|
||||
# List all refs for a given user and repo
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param namespace [String] The ref namespace, e.g. <tt>tag</tt> or <tt>heads</tt>
|
||||
# @return [Array<Sawyer::Resource>] A list of references matching the repo and the namespace
|
||||
# @see https://developer.github.com/v3/git/refs/#get-all-references
|
||||
# @example Fetch all refs for sferik/rails_admin
|
||||
# Octokit.refs("sferik/rails_admin")
|
||||
def refs(repo, namespace = nil, options = {})
|
||||
path = "#{Repository.path repo}/git/refs"
|
||||
path += "/#{namespace}" unless namespace.nil?
|
||||
paginate path, options
|
||||
end
|
||||
alias list_refs refs
|
||||
alias references refs
|
||||
alias list_references refs
|
||||
|
||||
# Fetch matching refs
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param ref [String] The ref, e.g. <tt>tags/v0.0.3</tt> or <tt>heads/rails-3</tt>
|
||||
# @return [Array<Sawyer::Resource>] The reference matching the given repo and the ref id
|
||||
# @see https://developer.github.com/v3/git/refs/#list-matching-references
|
||||
# @example Fetch refs matching tags/v2 for sferik/rails_admin
|
||||
# Octokit.ref("sferik/rails_admin","tags/v2")
|
||||
def matching_refs(repo, ref, options = {})
|
||||
paginate "#{Repository.path repo}/git/matching-refs/#{ref}", options
|
||||
end
|
||||
|
||||
# Fetch a given reference
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param ref [String] The ref, e.g. <tt>tags/v0.0.3</tt>
|
||||
# @return [Sawyer::Resource] The reference matching the given repo and the ref id
|
||||
# @see https://developer.github.com/v3/git/refs/#get-a-reference
|
||||
# @example Fetch tags/v0.0.3 for sferik/rails_admin
|
||||
# Octokit.ref("sferik/rails_admin","tags/v0.0.3")
|
||||
def ref(repo, ref, options = {})
|
||||
get "#{Repository.path repo}/git/refs/#{ref}", options
|
||||
end
|
||||
alias reference ref
|
||||
|
||||
# Create a reference
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param ref [String] The ref, e.g. <tt>tags/v0.0.3</tt>
|
||||
# @param sha [String] A SHA, e.g. <tt>827efc6d56897b048c772eb4087f854f46256132</tt>
|
||||
# @return [Array<Sawyer::Resource>] The list of references, already containing the new one
|
||||
# @see https://developer.github.com/v3/git/refs/#create-a-reference
|
||||
# @example Create refs/heads/master for octocat/Hello-World with sha 827efc6d56897b048c772eb4087f854f46256132
|
||||
# Octokit.create_ref("octocat/Hello-World", "heads/master", "827efc6d56897b048c772eb4087f854f46256132")
|
||||
def create_ref(repo, ref, sha, options = {})
|
||||
ref = "refs/#{ref}" unless ref =~ %r{\Arefs/}
|
||||
parameters = {
|
||||
ref: ref,
|
||||
sha: sha
|
||||
}
|
||||
post "#{Repository.path repo}/git/refs", options.merge(parameters)
|
||||
end
|
||||
alias create_reference create_ref
|
||||
|
||||
# Update a reference
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param ref [String] The ref, e.g. <tt>tags/v0.0.3</tt>
|
||||
# @param sha [String] A SHA, e.g. <tt>827efc6d56897b048c772eb4087f854f46256132</tt>
|
||||
# @param force [Boolean] A flag indicating whether to force the update or to make sure the update is a fast-forward update.
|
||||
# @return [Array<Sawyer::Resource>] The list of references updated
|
||||
# @see https://developer.github.com/v3/git/refs/#update-a-reference
|
||||
# @example Force update heads/sc/featureA for octocat/Hello-World with sha aa218f56b14c9653891f9e74264a383fa43fefbd
|
||||
# Octokit.update_ref("octocat/Hello-World", "heads/sc/featureA", "aa218f56b14c9653891f9e74264a383fa43fefbd")
|
||||
def update_ref(repo, ref, sha, force = false, options = {})
|
||||
parameters = {
|
||||
sha: sha,
|
||||
force: force
|
||||
}
|
||||
patch "#{Repository.path repo}/git/refs/#{ref}", options.merge(parameters)
|
||||
end
|
||||
alias update_reference update_ref
|
||||
|
||||
# Update a branch
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param branch [String] The ref, e.g. <tt>feature/new-shiny</tt>
|
||||
# @param sha [String] A SHA, e.g. <tt>827efc6d56897b048c772eb4087f854f46256132</tt>
|
||||
# @param force [Boolean] A flag indicating whether to force the update or to make sure the update is a fast-forward update.
|
||||
# @return [Array<Sawyer::Resource>] The list of references updated
|
||||
# @see https://developer.github.com/v3/git/refs/#update-a-reference
|
||||
# @example Force update heads/sc/featureA for octocat/Hello-World with sha aa218f56b14c9653891f9e74264a383fa43fefbd
|
||||
# Octokit.update_branch("octocat/Hello-World", "sc/featureA", "aa218f56b14c9653891f9e74264a383fa43fefbd")
|
||||
# @example Fast-forward update heads/sc/featureA for octocat/Hello-World with sha aa218f56b14c9653891f9e74264a383fa43fefbd
|
||||
# Octokit.update_branch("octocat/Hello-World", "sc/featureA", "aa218f56b14c9653891f9e74264a383fa43fefbd", false)
|
||||
def update_branch(repo, branch, sha, force = true, options = {})
|
||||
update_ref repo, "heads/#{branch}", sha, force, options
|
||||
end
|
||||
|
||||
# Delete a single branch
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param branch [String] The branch, e.g. <tt>fix-refs</tt>
|
||||
# @return [Boolean] Success
|
||||
# @see https://developer.github.com/v3/git/refs/#delete-a-reference
|
||||
# @example Delete uritemplate for sigmavirus24/github3.py
|
||||
# Octokit.delete_branch("sigmavirus24/github3.py", "uritemplate")
|
||||
def delete_branch(repo, branch, options = {})
|
||||
delete_ref repo, "heads/#{branch}", options
|
||||
end
|
||||
|
||||
# Delete a single reference
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param ref [String] The ref, e.g. <tt>tags/v0.0.3</tt>
|
||||
# @return [Boolean] Success
|
||||
# @see https://developer.github.com/v3/git/refs/#delete-a-reference
|
||||
# @example Delete tags/v0.0.3 for sferik/rails_admin
|
||||
# Octokit.delete_ref("sferik/rails_admin","tags/v0.0.3")
|
||||
def delete_ref(repo, ref, options = {})
|
||||
boolean_from_response :delete, "#{Repository.path repo}/git/refs/#{ref}", options
|
||||
end
|
||||
alias delete_reference delete_ref
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,164 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Releases API
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/releases/
|
||||
module Releases
|
||||
# List releases for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @return [Array<Sawyer::Resource>] A list of releases
|
||||
# @see https://developer.github.com/v3/repos/releases/#list-releases-for-a-repository
|
||||
def releases(repo, options = {})
|
||||
paginate "#{Repository.path repo}/releases", options
|
||||
end
|
||||
alias list_releases releases
|
||||
|
||||
# Create a release
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param tag_name [String] Git tag from which to create release
|
||||
# @option options [String] :target_commitish Specifies the commitish value that determines where the Git tag is created from.
|
||||
# @option options [String] :name Name for the release
|
||||
# @option options [String] :body Content for release notes
|
||||
# @option options [Boolean] :draft Mark this release as a draft
|
||||
# @option options [Boolean] :prerelease Mark this release as a pre-release
|
||||
# @return [Sawyer::Resource] The release
|
||||
# @see https://developer.github.com/v3/repos/releases/#create-a-release
|
||||
def create_release(repo, tag_name, options = {})
|
||||
opts = options.merge(tag_name: tag_name)
|
||||
post "#{Repository.path repo}/releases", opts
|
||||
end
|
||||
|
||||
# Get a release
|
||||
#
|
||||
# @param url [String] URL for the release as returned from .releases
|
||||
# @return [Sawyer::Resource] The release
|
||||
# @see https://developer.github.com/v3/repos/releases/#get-a-single-release
|
||||
def release(url, options = {})
|
||||
get url, options
|
||||
end
|
||||
|
||||
# Update a release
|
||||
#
|
||||
# @param url [String] URL for the release as returned from .releases
|
||||
# @option options [String] :tag_name Git tag from which to create release
|
||||
# @option options [String] :target_commitish Specifies the commitish value that determines where the Git tag is created from.
|
||||
# @option options [String] :name Name for the release
|
||||
# @option options [String] :body Content for release notes
|
||||
# @option options [Boolean] :draft Mark this release as a draft
|
||||
# @option options [Boolean] :prerelease Mark this release as a pre-release
|
||||
# @return [Sawyer::Resource] The release
|
||||
# @see https://developer.github.com/v3/repos/releases/#edit-a-release
|
||||
def update_release(url, options = {})
|
||||
patch url, options
|
||||
end
|
||||
alias edit_release update_release
|
||||
|
||||
# Delete a release
|
||||
#
|
||||
# @param url [String] URL for the release as returned from .releases
|
||||
# @return [Boolean] Success or failure
|
||||
# @see https://developer.github.com/v3/repos/releases/#delete-a-release
|
||||
def delete_release(url, options = {})
|
||||
boolean_from_response(:delete, url, options)
|
||||
end
|
||||
|
||||
# List release assets
|
||||
#
|
||||
# @param release_url [String] URL for the release as returned from .releases
|
||||
# @return [Array<Sawyer::Resource>] A list of release assets
|
||||
# @see https://developer.github.com/v3/repos/releases/#list-assets-for-a-release
|
||||
def release_assets(release_url, options = {})
|
||||
paginate release(release_url).rels[:assets].href, options
|
||||
end
|
||||
|
||||
# Upload a release asset
|
||||
#
|
||||
# @param release_url [String] URL for the release as returned from .releases
|
||||
# @param path_or_file [String] Path to file to upload
|
||||
# @option options [String] :content_type The MIME type for the file to upload
|
||||
# @option options [String] :name The name for the file
|
||||
# @return [Sawyer::Resource] The release asset
|
||||
# @see https://developer.github.com/v3/repos/releases/#upload-a-release-asset
|
||||
def upload_asset(release_url, path_or_file, options = {})
|
||||
file = path_or_file.respond_to?(:read) ? path_or_file : File.new(path_or_file, 'rb')
|
||||
options[:content_type] ||= content_type_from_file(file)
|
||||
raise Octokit::MissingContentType if options[:content_type].nil?
|
||||
|
||||
unless name = options[:name]
|
||||
name = File.basename(file.path)
|
||||
end
|
||||
upload_url = release(release_url).rels[:upload].href_template.expand(name: name)
|
||||
|
||||
request :post, upload_url, file.read, parse_query_and_convenience_headers(options)
|
||||
ensure
|
||||
file&.close
|
||||
end
|
||||
|
||||
# Get a single release asset
|
||||
#
|
||||
#
|
||||
# @param asset_url [String] URL for the asset as returned from .release_assets
|
||||
# @return [Sawyer::Resource] The release asset
|
||||
# @see https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
|
||||
def release_asset(asset_url, options = {})
|
||||
get(asset_url, options)
|
||||
end
|
||||
|
||||
# Update a release asset
|
||||
#
|
||||
# @param asset_url [String] URL for the asset as returned from .release_assets
|
||||
# @option options [String] :name The name for the file
|
||||
# @option options [String] :label The download text for the file
|
||||
# @return [Sawyer::Resource] The release asset
|
||||
# @see https://developer.github.com/v3/repos/releases/#edit-a-release-asset
|
||||
def update_release_asset(asset_url, options = {})
|
||||
patch(asset_url, options)
|
||||
end
|
||||
alias edit_release_asset update_release_asset
|
||||
|
||||
# Delete a release asset
|
||||
#
|
||||
# @param asset_url [String] URL for the asset as returned from .release_assets
|
||||
# @return [Boolean] Success or failure
|
||||
# @see https://developer.github.com/v3/repos/releases/#delete-a-release-asset
|
||||
def delete_release_asset(asset_url, options = {})
|
||||
boolean_from_response(:delete, asset_url, options)
|
||||
end
|
||||
|
||||
# Get the release for a given tag
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param tag_name [String] the name for a tag
|
||||
# @return [Sawyer::Resource] The release
|
||||
# @see https://developer.github.com/v3/repos/releases/#get-a-release-by-tag-name
|
||||
def release_for_tag(repo, tag_name, options = {})
|
||||
get "#{Repository.path repo}/releases/tags/#{tag_name}", options
|
||||
end
|
||||
|
||||
# Get the latest release
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @return [Sawyer::Resource] The release
|
||||
# @see https://developer.github.com/v3/repos/releases/#get-the-latest-release
|
||||
def latest_release(repo, options = {})
|
||||
get "#{Repository.path repo}/releases/latest", options
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def content_type_from_file(file)
|
||||
require 'mime/types'
|
||||
if mime_type = MIME::Types.type_for(file.path).first
|
||||
mime_type.content_type
|
||||
end
|
||||
rescue LoadError
|
||||
msg = 'Please pass content_type or install mime-types gem to guess content type from file'
|
||||
raise Octokit::MissingContentType, msg
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,779 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Repositories API
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/
|
||||
module Repositories
|
||||
# Check if a repository exists
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/#get
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @return [Boolean]
|
||||
def repository?(repo, options = {})
|
||||
!!repository(repo, options)
|
||||
rescue Octokit::InvalidRepository, Octokit::NotFound
|
||||
false
|
||||
end
|
||||
|
||||
# Get a single repository
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/#get
|
||||
# @see https://developer.github.com/v3/licenses/#get-a-repositorys-license
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @return [Sawyer::Resource] Repository information
|
||||
def repository(repo, options = {})
|
||||
get Repository.path(repo), options
|
||||
end
|
||||
alias repo repository
|
||||
|
||||
# Edit a repository
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/#update-a-repository
|
||||
# @param repo [String, Hash, Repository] A GitHub repository
|
||||
# @param options [Hash] Repository information to update
|
||||
# @option options [String] :name Name of the repo
|
||||
# @option options [String] :description Description of the repo
|
||||
# @option options [String] :homepage Home page of the repo
|
||||
# @option options [String] :private `true` makes the repository private, and `false` makes it public.
|
||||
# @option options [String] :has_issues `true` enables issues for this repo, `false` disables issues.
|
||||
# @option options [String] :has_wiki `true` enables wiki for this repo, `false` disables wiki.
|
||||
# @option options [Boolean] :is_template `true` makes the repository a template, `false` makes it not a template.
|
||||
# @option options [String] :has_downloads `true` enables downloads for this repo, `false` disables downloads.
|
||||
# @option options [String] :default_branch Update the default branch for this repository.
|
||||
# @return [Sawyer::Resource] Repository information
|
||||
def edit_repository(repo, options = {})
|
||||
repo = Repository.new(repo)
|
||||
options[:name] ||= repo.name
|
||||
patch "repos/#{repo}", options
|
||||
end
|
||||
alias edit edit_repository
|
||||
alias update_repository edit_repository
|
||||
alias update edit_repository
|
||||
|
||||
# List user repositories
|
||||
#
|
||||
# If user is not supplied, repositories for the current
|
||||
# authenticated user are returned.
|
||||
#
|
||||
# @note If the user provided is a GitHub organization, only the
|
||||
# organization's public repositories will be listed. For retrieving
|
||||
# organization repositories the {Organizations#organization_repositories}
|
||||
# method should be used instead.
|
||||
# @see https://developer.github.com/v3/repos/#list-your-repositories
|
||||
# @see https://developer.github.com/v3/repos/#list-user-repositories
|
||||
# @param user [Integer, String] Optional GitHub user login or id for which
|
||||
# to list repos.
|
||||
# @return [Array<Sawyer::Resource>] List of repositories
|
||||
def repositories(user = nil, options = {})
|
||||
paginate "#{User.path user}/repos", options
|
||||
end
|
||||
alias list_repositories repositories
|
||||
alias list_repos repositories
|
||||
alias repos repositories
|
||||
|
||||
# List all repositories
|
||||
#
|
||||
# This provides a dump of every repository, in the order that they were
|
||||
# created.
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/#list-all-public-repositories
|
||||
#
|
||||
# @param options [Hash] Optional options
|
||||
# @option options [Integer] :since The integer ID of the last Repository
|
||||
# that you’ve seen.
|
||||
# @return [Array<Sawyer::Resource>] List of repositories.
|
||||
def all_repositories(options = {})
|
||||
paginate 'repositories', options
|
||||
end
|
||||
|
||||
# Star a repository
|
||||
#
|
||||
# @param repo [String, Hash, Repository] A GitHub repository
|
||||
# @return [Boolean] `true` if successfully starred
|
||||
# @see https://developer.github.com/v3/activity/starring/#star-a-repository
|
||||
def star(repo, options = {})
|
||||
boolean_from_response :put, "user/starred/#{Repository.new(repo)}", options
|
||||
end
|
||||
|
||||
# Unstar a repository
|
||||
#
|
||||
# @param repo [String, Hash, Repository] A GitHub repository
|
||||
# @return [Boolean] `true` if successfully unstarred
|
||||
# @see https://developer.github.com/v3/activity/starring/#unstar-a-repository
|
||||
def unstar(repo, options = {})
|
||||
boolean_from_response :delete, "user/starred/#{Repository.new(repo)}", options
|
||||
end
|
||||
|
||||
# Watch a repository
|
||||
#
|
||||
# @param repo [String, Hash, Repository] A GitHub repository
|
||||
# @return [Boolean] `true` if successfully watched
|
||||
# @deprecated Use #star instead
|
||||
# @see https://developer.github.com/v3/activity/watching/#watch-a-repository-legacy
|
||||
def watch(repo, options = {})
|
||||
boolean_from_response :put, "user/watched/#{Repository.new(repo)}", options
|
||||
end
|
||||
|
||||
# Unwatch a repository
|
||||
#
|
||||
# @param repo [String, Hash, Repository] A GitHub repository
|
||||
# @return [Boolean] `true` if successfully unwatched
|
||||
# @deprecated Use #unstar instead
|
||||
# @see https://developer.github.com/v3/activity/watching/#stop-watching-a-repository-legacy
|
||||
def unwatch(repo, options = {})
|
||||
boolean_from_response :delete, "user/watched/#{Repository.new(repo)}", options
|
||||
end
|
||||
|
||||
# Fork a repository
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @return [Sawyer::Resource] Repository info for the new fork
|
||||
# @see https://developer.github.com/v3/repos/forks/#create-a-fork
|
||||
def fork(repo, options = {})
|
||||
post "#{Repository.path repo}/forks", options
|
||||
end
|
||||
|
||||
# Create a repository for a user or organization
|
||||
#
|
||||
# @param name [String] Name of the new repo
|
||||
# @option options [String] :description Description of the repo
|
||||
# @option options [String] :homepage Home page of the repo
|
||||
# @option options [String] :private `true` makes the repository private, and `false` makes it public.
|
||||
# @option options [String] :has_issues `true` enables issues for this repo, `false` disables issues.
|
||||
# @option options [String] :has_wiki `true` enables wiki for this repo, `false` disables wiki.
|
||||
# @option options [Boolean] :is_template `true` makes this repo available as a template repository, `false` to prevent it.
|
||||
# @option options [String] :has_downloads `true` enables downloads for this repo, `false` disables downloads.
|
||||
# @option options [String] :organization Short name for the org under which to create the repo.
|
||||
# @option options [Integer] :team_id The id of the team that will be granted access to this repository. This is only valid when creating a repo in an organization.
|
||||
# @option options [Boolean] :auto_init `true` to create an initial commit with empty README. Default is `false`.
|
||||
# @option options [String] :gitignore_template Desired language or platform .gitignore template to apply. Ignored if auto_init parameter is not provided.
|
||||
# @return [Sawyer::Resource] Repository info for the new repository
|
||||
# @see https://developer.github.com/v3/repos/#create
|
||||
def create_repository(name, options = {})
|
||||
opts = options.dup
|
||||
organization = opts.delete :organization
|
||||
opts.merge! name: name
|
||||
|
||||
if organization.nil?
|
||||
post 'user/repos', opts
|
||||
else
|
||||
post "#{Organization.path organization}/repos", opts
|
||||
end
|
||||
end
|
||||
alias create_repo create_repository
|
||||
alias create create_repository
|
||||
|
||||
# Delete repository
|
||||
#
|
||||
# Note: If OAuth is used, 'delete_repo' scope is required
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/#delete-a-repository
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @return [Boolean] `true` if repository was deleted
|
||||
def delete_repository(repo, options = {})
|
||||
boolean_from_response :delete, Repository.path(repo), options
|
||||
end
|
||||
alias delete_repo delete_repository
|
||||
|
||||
# Transfer repository
|
||||
#
|
||||
# Transfer a repository owned by your organization
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/#transfer-a-repository
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param new_owner [String] The username or organization name the repository will be transferred to.
|
||||
# @param options [Array<Integer>] :team_ids ID of the team or teams to add to the repository. Teams can only be added to organization-owned repositories.
|
||||
# @return [Sawyer::Resource] Repository info for the transferred repository
|
||||
def transfer_repository(repo, new_owner, options = {})
|
||||
post "#{Repository.path repo}/transfer", options.merge({ new_owner: new_owner })
|
||||
end
|
||||
alias transfer_repo transfer_repository
|
||||
|
||||
# Create a repository for a user or organization generated from a template repository
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub template repository
|
||||
# @param name [String] Name of the new repo
|
||||
# @option options [String] :owner Organization or user who the new repository will belong to.
|
||||
# @option options [String] :description Description of the repo
|
||||
# @option options [String] :private `true` makes the repository private, and `false` makes it public.
|
||||
# @option options [Boolean] :include_all_branches `true` copies all branches from the template repository, `false` (default) makes it only copy the master branch.
|
||||
# @return [Sawyer::Resource] Repository info for the new repository
|
||||
def create_repository_from_template(repo, name, options = {})
|
||||
options.merge! name: name
|
||||
post "#{Repository.path repo}/generate", options
|
||||
end
|
||||
alias create_repo_from_template create_repository_from_template
|
||||
|
||||
# Hide a public repository
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @return [Sawyer::Resource] Updated repository info
|
||||
def set_private(repo, options = {})
|
||||
# GitHub Api for setting private updated to use private attr, rather than public
|
||||
update_repository repo, options.merge({ private: true })
|
||||
end
|
||||
|
||||
# Unhide a private repository
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @return [Sawyer::Resource] Updated repository info
|
||||
def set_public(repo, options = {})
|
||||
# GitHub Api for setting private updated to use private attr, rather than public
|
||||
update_repository repo, options.merge({ private: false })
|
||||
end
|
||||
|
||||
# Get deploy keys on a repo
|
||||
#
|
||||
# Requires authenticated client.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing deploy keys.
|
||||
# @see https://developer.github.com/v3/repos/keys/#list-deploy-keys
|
||||
# @example
|
||||
# @client.deploy_keys('octokit/octokit.rb')
|
||||
# @example
|
||||
# @client.list_deploy_keys('octokit/octokit.rb')
|
||||
def deploy_keys(repo, options = {})
|
||||
paginate "#{Repository.path repo}/keys", options
|
||||
end
|
||||
alias list_deploy_keys deploy_keys
|
||||
|
||||
# Get a single deploy key for a repo
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param id [Integer] Deploy key ID.
|
||||
# @return [Sawyer::Resource] Deploy key.
|
||||
# @see https://developer.github.com/v3/repos/keys/#get-a-deploy-key
|
||||
# @example
|
||||
# @client.deploy_key('octokit/octokit.rb', 8675309)
|
||||
def deploy_key(repo, id, options = {})
|
||||
get "#{Repository.path repo}/keys/#{id}", options
|
||||
end
|
||||
|
||||
# Add deploy key to a repo
|
||||
#
|
||||
# Requires authenticated client.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param title [String] Title reference for the deploy key.
|
||||
# @param key [String] Public key.
|
||||
# @return [Sawyer::Resource] Hash representing newly added key.
|
||||
# @see https://developer.github.com/v3/repos/keys/#add-a-new-deploy-key
|
||||
# @example
|
||||
# @client.add_deploy_key('octokit/octokit.rb', 'Staging server', 'ssh-rsa AAA...')
|
||||
def add_deploy_key(repo, title, key, options = {})
|
||||
post "#{Repository.path repo}/keys", options.merge(title: title, key: key)
|
||||
end
|
||||
|
||||
# Edit a deploy key
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param id [Integer] Deploy key ID.
|
||||
# @param options [Hash] Attributes to edit.
|
||||
# @option title [String] Key title.
|
||||
# @option key [String] Public key.
|
||||
# @return [Sawyer::Resource] Updated deploy key.
|
||||
# @deprecated This method is no longer supported in the API
|
||||
# @see https://developer.github.com/changes/2014-02-24-finer-grained-scopes-for-ssh-keys/
|
||||
# @see https://developer.github.com/v3/repos/keys/#edit-a-deploy-key
|
||||
# @example Update the key for a deploy key.
|
||||
# @client.edit_deploy_key('octokit/octokit.rb', 8675309, :key => 'ssh-rsa BBB...')
|
||||
# @example
|
||||
# @client.update_deploy_key('octokit/octokit.rb', 8675309, :title => 'Uber', :key => 'ssh-rsa BBB...'))
|
||||
def edit_deploy_key(repo, id, options)
|
||||
patch "#{Repository.path repo}/keys/#{id}", options
|
||||
end
|
||||
alias update_deploy_key edit_deploy_key
|
||||
|
||||
# Remove deploy key from a repo
|
||||
#
|
||||
# Requires authenticated client.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param id [Integer] Id of the deploy key to remove.
|
||||
# @return [Boolean] True if key removed, false otherwise.
|
||||
# @see https://developer.github.com/v3/repos/keys/#remove-a-deploy-key
|
||||
# @example
|
||||
# @client.remove_deploy_key('octokit/octokit.rb', 100000)
|
||||
def remove_deploy_key(repo, id, options = {})
|
||||
boolean_from_response :delete, "#{Repository.path repo}/keys/#{id}", options
|
||||
end
|
||||
|
||||
# List collaborators
|
||||
#
|
||||
# Requires authenticated client for private repos.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @option options [String] :affiliation Filters the return array by affiliation.
|
||||
# Can be one of: <tt>outside</tt>, <tt>direct</tt>, or <tt>all</tt>.
|
||||
# If not specified, defaults to <tt>all</tt>
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing collaborating users.
|
||||
# @see https://developer.github.com/v3/repos/collaborators/#list-collaborators
|
||||
# @example
|
||||
# Octokit.collaborators('octokit/octokit.rb')
|
||||
# @example
|
||||
# Octokit.collabs('octokit/octokit.rb')
|
||||
# @example
|
||||
# @client.collabs('octokit/octokit.rb')
|
||||
def collaborators(repo, options = {})
|
||||
paginate "#{Repository.path repo}/collaborators", options
|
||||
end
|
||||
alias collabs collaborators
|
||||
|
||||
# Add collaborator to repo
|
||||
#
|
||||
# This can also be used to update the permission of an existing collaborator
|
||||
#
|
||||
# Requires authenticated client.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param collaborator [String] Collaborator GitHub username to add.
|
||||
# @option options [String] :permission The permission to grant the collaborator.
|
||||
# Only valid on organization-owned repositories.
|
||||
# Can be one of: <tt>pull</tt>, <tt>push</tt>, or <tt>admin</tt>.
|
||||
# If not specified, defaults to <tt>push</tt>
|
||||
# @return [Boolean] True if collaborator added, false otherwise.
|
||||
# @see https://developer.github.com/v3/repos/collaborators/#add-user-as-a-collaborator
|
||||
# @example
|
||||
# @client.add_collaborator('octokit/octokit.rb', 'holman')
|
||||
# @example
|
||||
# @client.add_collab('octokit/octokit.rb', 'holman')
|
||||
# @example Add a collaborator with admin permissions
|
||||
# @client.add_collaborator('octokit/octokit.rb', 'holman', permission: 'admin')
|
||||
def add_collaborator(repo, collaborator, options = {})
|
||||
boolean_from_response :put, "#{Repository.path repo}/collaborators/#{collaborator}", options
|
||||
end
|
||||
alias add_collab add_collaborator
|
||||
|
||||
# Remove collaborator from repo.
|
||||
#
|
||||
# Requires authenticated client.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param collaborator [String] Collaborator GitHub username to remove.
|
||||
# @return [Boolean] True if collaborator removed, false otherwise.
|
||||
# @see https://developer.github.com/v3/repos/collaborators/#remove-user-as-a-collaborator
|
||||
# @example
|
||||
# @client.remove_collaborator('octokit/octokit.rb', 'holman')
|
||||
# @example
|
||||
# @client.remove_collab('octokit/octokit.rb', 'holman')
|
||||
def remove_collaborator(repo, collaborator, options = {})
|
||||
boolean_from_response :delete, "#{Repository.path repo}/collaborators/#{collaborator}", options
|
||||
end
|
||||
alias remove_collab remove_collaborator
|
||||
|
||||
# Checks if a user is a collaborator for a repo.
|
||||
#
|
||||
# Requires authenticated client.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param collaborator [String] Collaborator GitHub username to check.
|
||||
# @return [Boolean] True if user is a collaborator, false otherwise.
|
||||
# @see https://developer.github.com/v3/repos/collaborators/#check-if-a-user-is-a-collaborator
|
||||
# @example
|
||||
# @client.collaborator?('octokit/octokit.rb', 'holman')
|
||||
def collaborator?(repo, collaborator, options = {})
|
||||
boolean_from_response :get, "#{Repository.path repo}/collaborators/#{collaborator}", options
|
||||
end
|
||||
|
||||
# Get a user's permission level for a repo.
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @return [Sawyer::Resource] Hash representing the user's permission level for the given repository
|
||||
# @see https://developer.github.com/v3/repos/collaborators/#review-a-users-permission-level
|
||||
# @example
|
||||
# @client.permission_level('octokit/octokit.rb', 'lizzhale')
|
||||
def permission_level(repo, collaborator, options = {})
|
||||
get "#{Repository.path repo}/collaborators/#{collaborator}/permission", options
|
||||
end
|
||||
|
||||
# List teams for a repo
|
||||
#
|
||||
# Requires authenticated client that is an owner or collaborator of the repo.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing teams.
|
||||
# @see https://developer.github.com/v3/repos/#list-teams
|
||||
# @example
|
||||
# @client.repository_teams('octokit/pengwynn')
|
||||
# @example
|
||||
# @client.repo_teams('octokit/pengwynn')
|
||||
# @example
|
||||
# @client.teams('octokit/pengwynn')
|
||||
def repository_teams(repo, options = {})
|
||||
paginate "#{Repository.path repo}/teams", options
|
||||
end
|
||||
alias repo_teams repository_teams
|
||||
alias teams repository_teams
|
||||
|
||||
# List all topics for a repository
|
||||
#
|
||||
# Requires authenticated client for private repos.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @return [Sawyer::Resource] representing the topics for given repo
|
||||
# @see https://developer.github.com/v3/repos/#list-all-topics-for-a-repository
|
||||
# @example List topics for octokit/octokit.rb
|
||||
# Octokit.topics('octokit/octokit.rb')
|
||||
# @example List topics for octokit/octokit.rb
|
||||
# client.topics('octokit/octokit.rb')
|
||||
def topics(repo, options = {})
|
||||
paginate "#{Repository.path repo}/topics", options
|
||||
end
|
||||
|
||||
# Replace all topics for a repository
|
||||
#
|
||||
# Requires authenticated client.
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A Github repository
|
||||
# @param names [Array] An array of topics to add to the repository.
|
||||
# @return [Sawyer::Resource] representing the replaced topics for given repo
|
||||
# @see https://developer.github.com/v3/repos/#replace-all-topics-for-a-repository
|
||||
# @example Replace topics for octokit/octokit.rb
|
||||
# client.replace_all_topics('octokit/octokit.rb', ['octocat', 'atom', 'electron', 'API'])
|
||||
# @example Clear all topics for octokit/octokit.rb
|
||||
# client.replace_all_topics('octokit/octokit.rb', [])
|
||||
def replace_all_topics(repo, names, options = {})
|
||||
put "#{Repository.path repo}/topics", options.merge(names: names)
|
||||
end
|
||||
|
||||
# List contributors to a repo
|
||||
#
|
||||
# Requires authenticated client for private repos.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param anon [Boolean] Set true to include anonymous contributors.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing users.
|
||||
# @see https://developer.github.com/v3/repos/#list-contributors
|
||||
# @example
|
||||
# Octokit.contributors('octokit/octokit.rb', true)
|
||||
# @example
|
||||
# Octokit.contribs('octokit/octokit.rb')
|
||||
# @example
|
||||
# @client.contribs('octokit/octokit.rb')
|
||||
def contributors(repo, anon = nil, options = {})
|
||||
options[:anon] = 1 if anon.to_s[/1|true/]
|
||||
paginate "#{Repository.path repo}/contributors", options
|
||||
end
|
||||
alias contribs contributors
|
||||
|
||||
# List stargazers of a repo
|
||||
#
|
||||
# Requires authenticated client for private repos.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing users.
|
||||
# @see https://developer.github.com/v3/activity/starring/#list-stargazers
|
||||
# @example
|
||||
# Octokit.stargazers('octokit/octokit.rb')
|
||||
# @example
|
||||
# @client.stargazers('octokit/octokit.rb')
|
||||
def stargazers(repo, options = {})
|
||||
paginate "#{Repository.path repo}/stargazers", options
|
||||
end
|
||||
|
||||
# @deprecated Use {#stargazers} instead
|
||||
#
|
||||
# List watchers of repo.
|
||||
#
|
||||
# Requires authenticated client for private repos.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing users.
|
||||
# @see https://developer.github.com/v3/repos/watching/#list-watchers
|
||||
# @example
|
||||
# Octokit.watchers('octokit/octokit.rb')
|
||||
# @example
|
||||
# @client.watchers('octokit/octokit.rb')
|
||||
def watchers(repo, options = {})
|
||||
paginate "#{Repository.path repo}/watchers", options
|
||||
end
|
||||
|
||||
# List forks
|
||||
#
|
||||
# Requires authenticated client for private repos.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing repos.
|
||||
# @see https://developer.github.com/v3/repos/forks/#list-forks
|
||||
# @example
|
||||
# Octokit.forks('octokit/octokit.rb')
|
||||
# @example
|
||||
# Octokit.network('octokit/octokit.rb')
|
||||
# @example
|
||||
# @client.forks('octokit/octokit.rb')
|
||||
def forks(repo, options = {})
|
||||
paginate "#{Repository.path repo}/forks", options
|
||||
end
|
||||
alias network forks
|
||||
|
||||
# List languages of code in the repo.
|
||||
#
|
||||
# Requires authenticated client for private repos.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @return [Array<Sawyer::Resource>] Array of Hashes representing languages.
|
||||
# @see https://developer.github.com/v3/repos/#list-languages
|
||||
# @example
|
||||
# Octokit.languages('octokit/octokit.rb')
|
||||
# @example
|
||||
# @client.languages('octokit/octokit.rb')
|
||||
def languages(repo, options = {})
|
||||
paginate "#{Repository.path repo}/languages", options
|
||||
end
|
||||
|
||||
# List tags
|
||||
#
|
||||
# Requires authenticated client for private repos.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing tags.
|
||||
# @see https://developer.github.com/v3/repos/#list-tags
|
||||
# @example
|
||||
# Octokit.tags('octokit/octokit.rb')
|
||||
# @example
|
||||
# @client.tags('octokit/octokit.rb')
|
||||
def tags(repo, options = {})
|
||||
paginate "#{Repository.path repo}/tags", options
|
||||
end
|
||||
|
||||
# List branches
|
||||
#
|
||||
# Requires authenticated client for private repos.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing branches.
|
||||
# @see https://developer.github.com/v3/repos/#list-branches
|
||||
# @example
|
||||
# Octokit.branches('octokit/octokit.rb')
|
||||
# @example
|
||||
# @client.branches('octokit/octokit.rb')
|
||||
def branches(repo, options = {})
|
||||
paginate "#{Repository.path repo}/branches", options
|
||||
end
|
||||
|
||||
# Get a single branch from a repository
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param branch [String] Branch name
|
||||
# @return [Sawyer::Resource] The branch requested, if it exists
|
||||
# @see https://developer.github.com/v3/repos/#get-branch
|
||||
# @example Get branch 'master` from octokit/octokit.rb
|
||||
# Octokit.branch("octokit/octokit.rb", "master")
|
||||
def branch(repo, branch, options = {})
|
||||
get "#{Repository.path repo}/branches/#{CGI.escape(branch)}", options
|
||||
end
|
||||
alias get_branch branch
|
||||
|
||||
# Lock a single branch from a repository
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param branch [String] Branch name
|
||||
# @option options [Hash] :required_status_checks If not null, the following keys are required:
|
||||
# <tt>:enforce_admins [boolean] Enforce required status checks for repository administrators.</tt>
|
||||
# <tt>:strict [boolean] Require branches to be up to date before merging.</tt>
|
||||
# <tt>:contexts [Array] The list of status checks to require in order to merge into this branch</tt>
|
||||
#
|
||||
# @option options [Hash] :restrictions If not null, the following keys are required:
|
||||
# <tt>:users [Array] The list of user logins with push access</tt>
|
||||
# <tt>:teams [Array] The list of team slugs with push access</tt>.
|
||||
#
|
||||
# Teams and users restrictions are only available for organization-owned repositories.
|
||||
# @return [Sawyer::Resource] The protected branch
|
||||
# @see https://developer.github.com/v3/repos/#enabling-and-disabling-branch-protection
|
||||
# @example
|
||||
# @client.protect_branch('octokit/octokit.rb', 'master', foo)
|
||||
def protect_branch(repo, branch, options = {})
|
||||
options[:restrictions] ||= nil
|
||||
options[:required_status_checks] ||= nil
|
||||
put "#{Repository.path repo}/branches/#{branch}/protection", options
|
||||
end
|
||||
|
||||
# Get branch protection summary
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param branch [String] Branch name
|
||||
# @return [Sawyer::Resource, nil] Branch protection summary or nil if the branch
|
||||
# is not protected
|
||||
# @see https://developer.github.com/v3/repos/branches/#get-branch-protection
|
||||
# @example
|
||||
# @client.branch_protection('octokit/octokit.rb', 'master')
|
||||
def branch_protection(repo, branch, options = {})
|
||||
get "#{Repository.path repo}/branches/#{branch}/protection", options
|
||||
rescue Octokit::BranchNotProtected
|
||||
nil
|
||||
end
|
||||
|
||||
# Unlock a single branch from a repository
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param branch [String] Branch name
|
||||
# @return [Sawyer::Resource] The unprotected branch
|
||||
# @see https://developer.github.com/v3/repos/#enabling-and-disabling-branch-protection
|
||||
# @example
|
||||
# @client.unprotect_branch('octokit/octokit.rb', 'master')
|
||||
def unprotect_branch(repo, branch, options = {})
|
||||
boolean_from_response :delete, "#{Repository.path repo}/branches/#{branch}/protection", options
|
||||
end
|
||||
|
||||
# Rename a single branch from a repository
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param branch [String] Current branch name
|
||||
# @param new_name [String] New branch name
|
||||
# @return [Sawyer::Resource] The renamed branch
|
||||
# @see https://developer.github.com/v3/repos/#rename-a-branch
|
||||
# @example
|
||||
# @client.rename_branch('octokit/octokit.rb', 'master', 'main')
|
||||
def rename_branch(repo, branch, new_name, options = {})
|
||||
params = {
|
||||
new_name: new_name
|
||||
}
|
||||
post "#{Repository.path repo}/branches/#{branch}/rename", params.merge(options)
|
||||
end
|
||||
|
||||
# List users available for assigning to issues.
|
||||
#
|
||||
# Requires authenticated client for private repos.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing users.
|
||||
# @see https://developer.github.com/v3/issues/assignees/#list-assignees
|
||||
# @example
|
||||
# Octokit.repository_assignees('octokit/octokit.rb')
|
||||
# @example
|
||||
# Octokit.repo_assignees('octokit/octokit.rb')
|
||||
# @example
|
||||
# @client.repository_assignees('octokit/octokit.rb')
|
||||
def repository_assignees(repo, options = {})
|
||||
paginate "#{Repository.path repo}/assignees", options
|
||||
end
|
||||
alias repo_assignees repository_assignees
|
||||
|
||||
# Check to see if a particular user is an assignee for a repository.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param assignee [String] User login to check
|
||||
# @return [Boolean] True if assignable on project, false otherwise.
|
||||
# @see https://developer.github.com/v3/issues/assignees/#check-assignee
|
||||
# @example
|
||||
# Octokit.check_assignee('octokit/octokit.rb', 'andrew')
|
||||
def check_assignee(repo, assignee, options = {})
|
||||
boolean_from_response :get, "#{Repository.path repo}/assignees/#{assignee}", options
|
||||
end
|
||||
|
||||
# List watchers subscribing to notifications for a repo
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @return [Array<Sawyer::Resource>] Array of users watching.
|
||||
# @see https://developer.github.com/v3/activity/watching/#list-watchers
|
||||
# @example
|
||||
# @client.subscribers("octokit/octokit.rb")
|
||||
def subscribers(repo, options = {})
|
||||
paginate "#{Repository.path repo}/subscribers", options
|
||||
end
|
||||
|
||||
# Get a repository subscription
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @return [Sawyer::Resource] Repository subscription.
|
||||
# @see https://developer.github.com/v3/activity/watching/#get-a-repository-subscription
|
||||
# @example
|
||||
# @client.subscription("octokit/octokit.rb")
|
||||
def subscription(repo, options = {})
|
||||
get "#{Repository.path repo}/subscription", options
|
||||
end
|
||||
|
||||
# Update repository subscription
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param options [Hash]
|
||||
#
|
||||
# @option options [Boolean] :subscribed Determines if notifications
|
||||
# should be received from this repository.
|
||||
# @option options [Boolean] :ignored Deterimines if all notifications
|
||||
# should be blocked from this repository.
|
||||
# @return [Sawyer::Resource] Updated repository subscription.
|
||||
# @see https://developer.github.com/v3/activity/watching/#set-a-repository-subscription
|
||||
# @example Subscribe to notifications for a repository
|
||||
# @client.update_subscription("octokit/octokit.rb", {subscribed: true})
|
||||
def update_subscription(repo, options = {})
|
||||
put "#{Repository.path repo}/subscription", options
|
||||
end
|
||||
|
||||
# Delete a repository subscription
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @return [Boolean] True if subscription deleted, false otherwise.
|
||||
# @see https://developer.github.com/v3/activity/watching/#delete-a-repository-subscription
|
||||
#
|
||||
# @example
|
||||
# @client.delete_subscription("octokit/octokit.rb")
|
||||
def delete_subscription(repo, options = {})
|
||||
boolean_from_response :delete, "#{Repository.path repo}/subscription", options
|
||||
end
|
||||
|
||||
# Create a repository dispatch event
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param event_type [String] A custom webhook event name.
|
||||
# @option options [Hash] :client_payload payload with extra information
|
||||
# about the webhook event that your action or worklow may use.
|
||||
#
|
||||
# @return [Boolean] True if event was dispatched, false otherwise.
|
||||
# @see https://developer.github.com/v3/repos/#create-a-repository-dispatch-event
|
||||
def dispatch_event(repo, event_type, options = {})
|
||||
boolean_from_response :post, "#{Repository.path repo}/dispatches", options.merge({ event_type: event_type })
|
||||
end
|
||||
|
||||
# Check to see if vulnerability alerts are enabled for a repository
|
||||
#
|
||||
# The authenticated user must have admin access to the repository.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @return [Boolean] True if vulnerability alerts are enabled, false otherwise.
|
||||
# @see https://docs.github.com/en/rest/reference/repos#check-if-vulnerability-alerts-are-enabled-for-a-repository
|
||||
#
|
||||
# @example
|
||||
# @client.vulnerability_alerts_enabled?("octokit/octokit.rb")
|
||||
def vulnerability_alerts_enabled?(repo, options = {})
|
||||
boolean_from_response(:get, "#{Repository.path repo}/vulnerability-alerts", options)
|
||||
end
|
||||
|
||||
# Enable vulnerability alerts for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param options [Hash]
|
||||
#
|
||||
# @return [Boolean] True if vulnerability alerts enabled, false otherwise.
|
||||
# @see https://docs.github.com/en/rest/reference/repos#enable-vulnerability-alerts
|
||||
# @example Enable vulnerability alerts for a repository
|
||||
# @client.enable_vulnerability_alerts("octokit/octokit.rb")
|
||||
def enable_vulnerability_alerts(repo, options = {})
|
||||
boolean_from_response(:put, "#{Repository.path repo}/vulnerability-alerts", options)
|
||||
end
|
||||
|
||||
# Disable vulnerability alerts for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param options [Hash]
|
||||
#
|
||||
# @return [Boolean] True if vulnerability alerts disabled, false otherwise.
|
||||
# @see https://docs.github.com/en/rest/reference/repos#disable-vulnerability-alerts
|
||||
# @example Disable vulnerability alerts for a repository
|
||||
# @client.disable_vulnerability_alerts("octokit/octokit.rb")
|
||||
def disable_vulnerability_alerts(repo, options = {})
|
||||
boolean_from_response(:delete, "#{Repository.path repo}/vulnerability-alerts", options)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,96 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Repository Invitations API
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/invitations/
|
||||
module RepositoryInvitations
|
||||
# Invite a user to a repository
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param user [String] User GitHub username to add
|
||||
# @return [Sawyer::Resource] The repository invitation
|
||||
# @see https://developer.github.com/v3/repos/collaborators/#add-user-as-a-collaborator
|
||||
def invite_user_to_repository(repo, user, options = {})
|
||||
put "#{Repository.path repo}/collaborators/#{user}", options
|
||||
end
|
||||
alias invite_user_to_repo invite_user_to_repository
|
||||
|
||||
# List all invitations for a repository
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @return [Array<Sawyer::Resource>] A list of invitations
|
||||
# @see https://developer.github.com/v3/repos/invitations/#list-invitations-for-a-repository
|
||||
def repository_invitations(repo, options = {})
|
||||
paginate "#{Repository.path repo}/invitations", options
|
||||
end
|
||||
alias repo_invitations repository_invitations
|
||||
|
||||
# Delete an invitation for a repository
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param invitation_id [Integer] The id of the invitation
|
||||
# @return [Boolean] True if the invitation was successfully deleted
|
||||
# @see https://developer.github.com/v3/repos/invitations/#delete-a-repository-invitation
|
||||
def delete_repository_invitation(repo, invitation_id, options = {})
|
||||
boolean_from_response :delete, "#{Repository.path repo}/invitations/#{invitation_id}", options
|
||||
end
|
||||
alias delete_repo_invitation delete_repository_invitation
|
||||
|
||||
# Update an invitation for a repository
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param invitation_id [Integer] The id of the invitation
|
||||
# @return [Sawyer::Resource] The updated repository invitation
|
||||
# @see https://developer.github.com/v3/repos/invitations/#update-a-repository-invitation
|
||||
def update_repository_invitation(repo, invitation_id, options = {})
|
||||
patch "#{Repository.path repo}/invitations/#{invitation_id}", options
|
||||
end
|
||||
alias update_repo_invitation update_repository_invitation
|
||||
|
||||
# List all repository invitations for the user
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] The users repository invitations
|
||||
# @see https://developer.github.com/v3/repos/invitations/#list-a-users-repository-invitations
|
||||
def user_repository_invitations(options = {})
|
||||
paginate '/user/repository_invitations', options
|
||||
end
|
||||
alias user_repo_invitations user_repository_invitations
|
||||
|
||||
# Accept a repository invitation
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param invitation_id [Integer] The id of the invitation
|
||||
# @return [Boolean] True if the acceptance of the invitation was successful
|
||||
# @see https://developer.github.com/v3/repos/invitations/#accept-a-repository-invitation
|
||||
def accept_repository_invitation(invitation_id, options = {})
|
||||
patch "/user/repository_invitations/#{invitation_id}", options
|
||||
end
|
||||
alias accept_repo_invitation accept_repository_invitation
|
||||
|
||||
# Decline a repository invitation
|
||||
#
|
||||
# Requires authenticated client
|
||||
#
|
||||
# @param invitation_id [Integer] The id of the invitation
|
||||
# @return [Boolean] True if the acceptance of the invitation was successful
|
||||
# @see https://developer.github.com/v3/repos/invitations/#decline-a-repository-invitation
|
||||
def decline_repository_invitation(invitation_id, options = {})
|
||||
boolean_from_response :delete, "/user/repository_invitations/#{invitation_id}", options
|
||||
end
|
||||
alias decline_invitation decline_repository_invitation
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,227 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Reviews API
|
||||
#
|
||||
# @see https://developer.github.com/v3/pulls/reviews/
|
||||
module Reviews
|
||||
# List reviews on a pull request
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] Number ID of the pull request
|
||||
# @see https://developer.github.com/v3/pulls/reviews/#list-reviews-on-a-pull-request
|
||||
#
|
||||
# @example
|
||||
# @client.pull_request_reviews('octokit/octokit.rb', 2)
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] Array of Hashes representing the reviews
|
||||
def pull_request_reviews(repo, number, options = {})
|
||||
paginate "#{Repository.path repo}/pulls/#{number}/reviews", options
|
||||
end
|
||||
|
||||
# Get a single review
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] Number ID of the pull request
|
||||
# @param review [Integer] The id of the review
|
||||
# @see https://developer.github.com/v3/pulls/reviews/#get-a-single-review
|
||||
#
|
||||
# @example
|
||||
# @client.pull_request_review('octokit/octokit.rb', 825, 6505518)
|
||||
#
|
||||
# @return [Sawyer::Resource] Hash representing the review
|
||||
def pull_request_review(repo, number, review, options = {})
|
||||
get "#{Repository.path repo}/pulls/#{number}/reviews/#{review}", options
|
||||
end
|
||||
|
||||
# Delete a pending review
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] Number ID of the pull request
|
||||
# @param review [Integer] The id of the review
|
||||
# @see https://developer.github.com/v3/pulls/reviews/#delete-a-pending-review
|
||||
#
|
||||
# @example
|
||||
# @client.delete_pull_request_review('octokit/octokit.rb', 825, 6505518)
|
||||
#
|
||||
# @return [Sawyer::Resource] Hash representing the deleted review
|
||||
def delete_pull_request_review(repo, number, review, options = {})
|
||||
delete "#{Repository.path repo}/pulls/#{number}/reviews/#{review}", options
|
||||
end
|
||||
|
||||
# Get comments for a single review
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] Number ID of the pull request
|
||||
# @param review [Integer] The id of the review
|
||||
# @see https://developer.github.com/v3/pulls/reviews/#get-comments-for-a-single-review
|
||||
#
|
||||
# @example
|
||||
# @client.pull_request_review_comments('octokit/octokit.rb', 825, 6505518)
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] Array of Hashes representing the review comments
|
||||
def pull_request_review_comments(repo, number, review, options = {})
|
||||
paginate "#{Repository.path repo}/pulls/#{number}/reviews/#{review}/comments", options
|
||||
end
|
||||
|
||||
# Create a pull request review
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] Number ID of the pull request
|
||||
# @param options [Hash] Method options
|
||||
# @option options [String] :event The review action (event) to perform;
|
||||
# can be one of APPROVE, REQUEST_CHANGES, or COMMENT.
|
||||
# If left blank, the review is left PENDING.
|
||||
# @option options [String] :body The body text of the pull request review
|
||||
# @option options [Array<Hash>] :comments Comments part of the review
|
||||
# @option comments [String] :path The path to the file being commented on
|
||||
# @option comments [Integer] :position The position in the file to be commented on
|
||||
# @option comments [String] :body Body of the comment
|
||||
# @see https://developer.github.com/v3/pulls/reviews/#create-a-pull-request-review
|
||||
#
|
||||
# @example
|
||||
# comments = [
|
||||
# { path: '.travis.yml', position: 10, body: 'ruby-head is under development that is not stable.' },
|
||||
# { path: '.travis.yml', position: 32, body: 'ruby-head is also required in thervm section.' },
|
||||
# ]
|
||||
# options = { event: 'REQUEST_CHANGES', comments: comments }
|
||||
# @client.create_pull_request_review('octokit/octokit.rb', 844, options)
|
||||
#
|
||||
# @return [Sawyer::Resource>] Hash respresenting the review
|
||||
def create_pull_request_review(repo, number, options = {})
|
||||
post "#{Repository.path repo}/pulls/#{number}/reviews", options
|
||||
end
|
||||
|
||||
# Submit a pull request review
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] Number ID of the pull request
|
||||
# @param review [Integer] The id of the review
|
||||
# @param event [String] The review action (event) to perform; can be one of
|
||||
# APPROVE, REQUEST_CHANGES, or COMMENT.
|
||||
# @param options [Hash] Method options
|
||||
# @option options [String] :body The body text of the pull request review
|
||||
# @see https://developer.github.com/v3/pulls/reviews/#submit-a-pull-request-review
|
||||
#
|
||||
# @example
|
||||
# @client.submit_pull_request_review('octokit/octokit.rb', 825, 6505518,
|
||||
# 'APPROVE', body: 'LGTM!')
|
||||
#
|
||||
# @return [Sawyer::Resource] Hash respresenting the review
|
||||
def submit_pull_request_review(repo, number, review, event, options = {})
|
||||
options = options.merge(event: event)
|
||||
post "#{Repository.path repo}/pulls/#{number}/reviews/#{review}/events", options
|
||||
end
|
||||
|
||||
# Dismiss a pull request review
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] Number ID of the pull request
|
||||
# @param review [Integer] The id of the review
|
||||
# @param message [String] The message for the pull request review dismissal
|
||||
# @see https://developer.github.com/v3/pulls/reviews/#dismiss-a-pull-request-review
|
||||
#
|
||||
# @example
|
||||
# @client.dismiss_pull_request_review('octokit/octokit.rb', 825, 6505518, 'The message.')
|
||||
#
|
||||
# @return [Sawyer::Resource] Hash representing the dismissed review
|
||||
def dismiss_pull_request_review(repo, number, review, message, options = {})
|
||||
options = options.merge(message: message)
|
||||
put "#{Repository.path repo}/pulls/#{number}/reviews/#{review}/dismissals", options
|
||||
end
|
||||
|
||||
# List review requests
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] Number ID of the pull request
|
||||
# @see https://developer.github.com/v3/pulls/review_requests/#list-review-requests
|
||||
#
|
||||
# @example
|
||||
# @client.pull_request_review_requests('octokit/octokit.rb', 2)
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] Array of Hashes representing the review requests
|
||||
def pull_request_review_requests(repo, number, options = {})
|
||||
paginate "#{Repository.path repo}/pulls/#{number}/requested_reviewers", options
|
||||
end
|
||||
|
||||
# Create a review request
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] Number ID of the pull request
|
||||
# @param reviewers [Hash] :reviewers [Array<String>] An array of user logins
|
||||
# @param options [Hash] :team_reviewers [Array<String>] An array of team slugs
|
||||
# @see https://developer.github.com/v3/pulls/review_requests/#create-a-review-request
|
||||
#
|
||||
# @example
|
||||
# @client.request_pull_request_review('octokit/octokit.rb', 2, reviewers: ['soudy'])
|
||||
#
|
||||
# @return [Sawyer::Resource>] Hash respresenting the pull request
|
||||
def request_pull_request_review(repo, number, reviewers = {}, options = {})
|
||||
# TODO(5.0): remove deprecated behavior
|
||||
if reviewers.is_a?(Array)
|
||||
octokit_warn(
|
||||
'Deprecated: Octokit::Client#request_pull_request_review ' \
|
||||
"no longer takes a separate :reviewers argument.\n" \
|
||||
'Please update your call to pass :reviewers and :team_reviewers as part of the options hash.'
|
||||
)
|
||||
options = options.merge(reviewers: reviewers)
|
||||
else
|
||||
options = options.merge(reviewers)
|
||||
end
|
||||
|
||||
post "#{Repository.path repo}/pulls/#{number}/requested_reviewers", options
|
||||
end
|
||||
|
||||
# Delete a review request
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param id [Integer] The id of the pull request
|
||||
# @param reviewers [Hash] :reviewers [Array] An array of user logins
|
||||
# @param options [Hash] :team_reviewers [Array] An array of team slugs
|
||||
#
|
||||
# @see https://developer.github.com/v3/pulls/review_requests/#delete-a-review-request
|
||||
#
|
||||
# @example
|
||||
# options = {
|
||||
# "reviewers" => [ "octocat", "hubot", "other_user" ],
|
||||
# "team_reviewers" => [ "justice-league" ]
|
||||
# }
|
||||
# @client.delete_pull_request_review_request('octokit/octokit.rb', 2, options)
|
||||
#
|
||||
# @return [Sawyer::Resource>] Hash representing the pull request
|
||||
def delete_pull_request_review_request(repo, id, reviewers = {}, options = {})
|
||||
# TODO(5.0): remove deprecated behavior
|
||||
if !reviewers.empty? && !options.empty?
|
||||
octokit_warn(
|
||||
'Deprecated: Octokit::Client#delete_pull_request_review_request ' \
|
||||
"no longer takes a separate :reviewers argument.\n" \
|
||||
'Please update your call to pass :reviewers and :team_reviewers as part of the options hash.'
|
||||
)
|
||||
end
|
||||
# For backwards compatibility, this endpoint can be called with a separate reviewers hash.
|
||||
# If not called with a separate hash, then 'reviewers' is, in fact, 'options'.
|
||||
options = options.merge(reviewers)
|
||||
delete "#{Repository.path repo}/pulls/#{id}/requested_reviewers", options
|
||||
end
|
||||
|
||||
# Update a review request comment
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param number [Integer] Number ID of the pull request
|
||||
# @param review [Integer] The id of the review
|
||||
# @param body [String] body text of the pull request review.
|
||||
# @param options [Hash] Method options
|
||||
# @see https://developer.github.com/v3/pulls/reviews/#update-a-pull-request-review
|
||||
#
|
||||
# @example
|
||||
# @client.update_pull_request_review('octokit/octokit.rb', 825, 6505518, 'This is close to perfect! Please address the suggested inline change. And add more about this.')
|
||||
#
|
||||
# @return [Sawyer::Resource] Hash representing the review comment
|
||||
def update_pull_request_review(repo, number, review, body, options = {})
|
||||
options[:body] = body
|
||||
put "#{Repository.path repo}/pulls/#{number}/reviews/#{review}", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,18 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the unpublished Octocat API
|
||||
module Say
|
||||
# Return a nifty ASCII Octocat with GitHub wisdom
|
||||
# or your own
|
||||
#
|
||||
# @return [String]
|
||||
def say(text = nil, options = {})
|
||||
options[:s] = text if text
|
||||
get 'octocat', options
|
||||
end
|
||||
alias octocat say
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,105 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Search API
|
||||
#
|
||||
# @see https://developer.github.com/v3/search/
|
||||
module Search
|
||||
# Search code
|
||||
#
|
||||
# @param query [String] Search term and qualifiers
|
||||
# @param options [Hash] Sort and pagination options
|
||||
# @option options [String] :sort Sort field
|
||||
# @option options [String] :order Sort order (asc or desc)
|
||||
# @option options [Integer] :page Page of paginated results
|
||||
# @option options [Integer] :per_page Number of items per page
|
||||
# @return [Sawyer::Resource] Search results object
|
||||
# @see https://developer.github.com/v3/search/#search-code
|
||||
def search_code(query, options = {})
|
||||
search 'search/code', query, options
|
||||
end
|
||||
|
||||
# Search commits
|
||||
#
|
||||
# @param query [String] Search terms and qualifiers
|
||||
# @param options [Hash] Sort and pagination options
|
||||
# @option options [String] :sort Sort field
|
||||
# @option options [String] :order Sort order (asc or desc)
|
||||
# @option options [Integer] :page Page of paginated results
|
||||
# @option options [Integer] :per_page Number of items per page
|
||||
# @return [Sawyer::Resource] Search results object
|
||||
# @see https://developer.github.com/v3/search/#search-commits
|
||||
def search_commits(query, options = {})
|
||||
search 'search/commits', query, options
|
||||
end
|
||||
|
||||
# Search issues
|
||||
#
|
||||
# @param query [String] Search term and qualifiers
|
||||
# @param options [Hash] Sort and pagination options
|
||||
# @option options [String] :sort Sort field
|
||||
# @option options [String] :order Sort order (asc or desc)
|
||||
# @option options [Integer] :page Page of paginated results
|
||||
# @option options [Integer] :per_page Number of items per page
|
||||
# @return [Sawyer::Resource] Search results object
|
||||
# @see https://developer.github.com/v3/search/#search-issues-and-pull-requests
|
||||
# @see https://docs.github.com/en/rest/search#limitations-on-query-length
|
||||
def search_issues(query, options = {})
|
||||
search 'search/issues', query, options
|
||||
end
|
||||
|
||||
# Search repositories
|
||||
#
|
||||
# @param query [String] Search term and qualifiers
|
||||
# @param options [Hash] Sort and pagination options
|
||||
# @option options [String] :sort Sort field
|
||||
# @option options [String] :order Sort order (asc or desc)
|
||||
# @option options [Integer] :page Page of paginated results
|
||||
# @option options [Integer] :per_page Number of items per page
|
||||
# @return [Sawyer::Resource] Search results object
|
||||
# @see https://developer.github.com/v3/search/#search-repositories
|
||||
def search_repositories(query, options = {})
|
||||
search 'search/repositories', query, options
|
||||
end
|
||||
alias search_repos search_repositories
|
||||
|
||||
# Search topics
|
||||
#
|
||||
# @param query [String] Search term and qualifiers
|
||||
# @param options [Hash] Sort and pagination options
|
||||
# @option options [String] :sort Sort field
|
||||
# @option options [String] :order Sort order (asc or desc)
|
||||
# @option options [Integer] :page Page of paginated results
|
||||
# @option options [Integer] :per_page Number of items per page
|
||||
# @return [Sawyer::Resource] Search results object
|
||||
# @see https://developer.github.com/v3/search/#search-topics
|
||||
def search_topics(query, options = {})
|
||||
search 'search/topics', query, options
|
||||
end
|
||||
|
||||
# Search users
|
||||
#
|
||||
# @param query [String] Search term and qualifiers
|
||||
# @param options [Hash] Sort and pagination options
|
||||
# @option options [String] :sort Sort field
|
||||
# @option options [String] :order Sort order (asc or desc)
|
||||
# @option options [Integer] :page Page of paginated results
|
||||
# @option options [Integer] :per_page Number of items per page
|
||||
# @return [Sawyer::Resource] Search results object
|
||||
# @see https://developer.github.com/v3/search/#search-users
|
||||
def search_users(query, options = {})
|
||||
search 'search/users', query, options
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def search(path, query, options = {})
|
||||
opts = options.merge(q: query)
|
||||
paginate(path, opts) do |data, last_response|
|
||||
data.items.concat last_response.data.items
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,48 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the GitHub Status API
|
||||
#
|
||||
# @see https://status.github.com/api
|
||||
module ServiceStatus
|
||||
# Root for status API
|
||||
# @private
|
||||
SUMMARY_ROOT = 'https://www.githubstatus.com/api/v2/summary.json'
|
||||
STATUS_ROOT = 'https://www.githubstatus.com/api/v2/status.json'
|
||||
COMPONENTS_ROOT = 'https://www.githubstatus.com/api/v2/components.json'
|
||||
|
||||
# Returns a summary with the current status and the last status messages.
|
||||
#
|
||||
# @return [<Sawyer::Resource>] GitHub status summary
|
||||
# @see https://www.githubstatus.com/api#summory
|
||||
def github_status_summary
|
||||
get(SUMMARY_ROOT)
|
||||
end
|
||||
|
||||
# Returns the current system status
|
||||
#
|
||||
# @return [Sawyer::Resource] GitHub status
|
||||
# @see https://www.githubstatus.com/api#status
|
||||
def github_status
|
||||
get(STATUS_ROOT)
|
||||
end
|
||||
|
||||
# Returns the last human communication, status, and timestamp.
|
||||
#
|
||||
# @return [Sawyer::Resource] GitHub status last message
|
||||
# @see https://www.githubstatus.com/api/#components
|
||||
def github_status_last_message
|
||||
get(COMPONENTS_ROOT).components.first
|
||||
end
|
||||
|
||||
# Returns the most recent human communications with status and timestamp.
|
||||
#
|
||||
# @return [Array<Sawyer::Resource>] GitHub status messages
|
||||
# @see https://www.githubstatus.com/api#components
|
||||
def github_status_messages
|
||||
get(COMPONENTS_ROOT).components
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,156 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Source Import API
|
||||
#
|
||||
# @see https://developer.github.com/v3/migration/source_imports
|
||||
module SourceImport
|
||||
# Start a source import to a GitHub repository using GitHub Importer.
|
||||
#
|
||||
# @overload start_source_import(repo, vcs, vcs_url, options = {})
|
||||
# @deprecated
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param vcs [String] The originating VCS type. Can be one of "subversion", "git", "mercurial", or "tfvc".
|
||||
# @param vcs_url [String] The URL of the originating repository.
|
||||
# @param options [Hash]
|
||||
# @option options [String] :vcs_username If authentication is required, the username to provide to vcs_url.
|
||||
# @option options [String] :vcs_password If authentication is required, the password to provide to vcs_url.
|
||||
# @option options [String] :tfvc_project For a tfvc import, the name of the project that is being imported.
|
||||
# @overload start_source_import(repo, vcs_url, options = {})
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param vcs_url [String] The URL of the originating repository.
|
||||
# @param options [Hash]
|
||||
# @param options [String] :vcs The originating VCS type. Can be one of "subversion", "git", "mercurial", or "tfvc".
|
||||
# @option options [String] :vcs_username If authentication is required, the username to provide to vcs_url.
|
||||
# @option options [String] :vcs_password If authentication is required, the password to provide to vcs_url.
|
||||
# @option options [String] :tfvc_project For a tfvc import, the name of the project that is being imported.
|
||||
# @return [Sawyer::Resource] Hash representing the repository import
|
||||
# @see https://developer.github.com/v3/migration/source_imports/#start-an-import
|
||||
#
|
||||
# @example
|
||||
# @client.start_source_import("octokit/octokit.rb", "http://svn.mycompany.com/svn/myproject", {
|
||||
# :vcs => "subversion",
|
||||
# :vcs_username" => "octocat",
|
||||
# :vcs_password => "secret"
|
||||
# })
|
||||
def start_source_import(*args)
|
||||
arguments = Octokit::RepoArguments.new(args)
|
||||
vcs_url = arguments.pop
|
||||
vcs = arguments.pop
|
||||
if vcs
|
||||
octokit_warn 'Octokit#start_source_import vcs parameter is now an option, please update your call before the next major Octokit version update.'
|
||||
arguments.options.merge!(vcs: vcs)
|
||||
end
|
||||
options = arguments.options.merge(vcs_url: vcs_url)
|
||||
put "#{Repository.path arguments.repo}/import", options
|
||||
end
|
||||
|
||||
# View the progress of an import.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @return [Sawyer::Resource] Hash representing the progress of the import
|
||||
# @see https://developer.github.com/v3/migration/source_imports/#get-import-progress
|
||||
#
|
||||
# @example
|
||||
# @client.source_import_progress("octokit/octokit.rb")
|
||||
def source_import_progress(repo, options = {})
|
||||
get "#{Repository.path repo}/import", options
|
||||
end
|
||||
|
||||
# Update source import with authentication or project choice
|
||||
# Restart source import if no options are passed
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @return [Sawyer::Resource] Hash representing the repository import
|
||||
# @see https://developer.github.com/v3/migration/source_imports/#update-existing-import
|
||||
# @option options [String] :vcs_username If authentication is required, the username to provide to vcs_url.
|
||||
# @option options [String] :vcs_password If authentication is required, the password to provide to vcs_url.
|
||||
# @option options [String] To update project choice, please refer to the project_choice array from the progress return hash for the exact attributes.
|
||||
# https://developer.github.com/v3/migration/source_imports/#update-existing-import
|
||||
#
|
||||
# @example
|
||||
# @client.update_source_import("octokit/octokit.rb", {
|
||||
# :vcs_username" => "octocat",
|
||||
# :vcs_password => "secret"
|
||||
# })
|
||||
def update_source_import(repo, options = {})
|
||||
patch "#{Repository.path repo}/import", options
|
||||
end
|
||||
|
||||
# List source import commit authors
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param options [Hash]
|
||||
# @option options [String] :since Only authors found after this id are returned.
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing commit_authors.
|
||||
# @see https://developer.github.com/v3/migration/source_imports/#get-commit-authors
|
||||
#
|
||||
# @example
|
||||
# @client.source_import_commit_authors("octokit/octokit.rb")
|
||||
def source_import_commit_authors(repo, options = {})
|
||||
get "#{Repository.path repo}/import/authors", options
|
||||
end
|
||||
|
||||
# Update an author's identity for the import.
|
||||
#
|
||||
# @param author_url [String] The source import API url for the commit author
|
||||
# @param values [Hash] The updated author attributes
|
||||
# @option values [String] :email The new Git author email.
|
||||
# @option values [String] :name The new Git author name.
|
||||
# @return [Sawyer::Resource] Hash representing the updated commit author
|
||||
# @see https://developer.github.com/v3/migration/source_imports/#map-a-commit-author
|
||||
#
|
||||
# @example
|
||||
# author_url = "https://api.github.com/repos/octokit/octokit.rb/import/authors/1"
|
||||
# @client.map_source_import_commit_author(author_url, {
|
||||
# :email => "hubot@github.com",
|
||||
# :name => "Hubot the Robot"
|
||||
# })
|
||||
def map_source_import_commit_author(author_url, values, options = {})
|
||||
options = options.merge(values)
|
||||
patch author_url, options
|
||||
end
|
||||
|
||||
# Stop an import for a repository.
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @return [Boolean] True if the import has been cancelled, false otherwise.
|
||||
# @see https://developer.github.com/v3/migration/source_imports/#cancel-an-import
|
||||
#
|
||||
# @example
|
||||
# @client.cancel_source_import("octokit/octokit.rb")
|
||||
def cancel_source_import(repo, options = {})
|
||||
boolean_from_response :delete, "#{Repository.path repo}/import", options
|
||||
end
|
||||
|
||||
# List source import large files
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param options [Hash]
|
||||
# @option options [Integer] :page Page of paginated results
|
||||
# @return [Array<Sawyer::Resource>] Array of hashes representing files over 100MB.
|
||||
# @see https://developer.github.com/v3/migration/source_imports/#get-large-files
|
||||
#
|
||||
# @example
|
||||
# @client.source_import_large_files("octokit/octokit.rb")
|
||||
def source_import_large_files(repo, options = {})
|
||||
get "#{Repository.path repo}/import/large_files", options
|
||||
end
|
||||
|
||||
# Set preference for using Git LFS to import files over 100MB
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository.
|
||||
# @param use_lfs [String] Preference for using Git LFS to import large files. Can be one of "opt_in" or "opt_out"
|
||||
# @return [Sawyer::Resource] Hash representing the repository import
|
||||
# @see https://developer.github.com/v3/migration/source_imports/#set-git-lfs-preference
|
||||
#
|
||||
# @example
|
||||
# @client.opt_in_source_import_lfs("octokit/octokit.rb", "opt_in")
|
||||
def set_source_import_lfs_preference(repo, use_lfs, options = {})
|
||||
options = options.merge(use_lfs: use_lfs)
|
||||
patch "#{Repository.path repo}/import/lfs", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,108 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Repository Statistics API
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/statistics/
|
||||
module Stats
|
||||
# Get contributors list with additions, deletions, and commit counts
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @option retry_timeout [Number] How long Octokit should keep trying to get stats (in seconds)
|
||||
# @option retry_wait [Number] How long Octokit should wait between retries.
|
||||
# @return [Array<Sawyer::Resource>] Array of contributor stats
|
||||
# @see https://developer.github.com/v3/repos/statistics/#get-contributors-list-with-additions-deletions-and-commit-counts
|
||||
# @example Get contributor stats for octokit
|
||||
# @client.contributors_stats('octokit/octokit.rb')
|
||||
def contributors_stats(repo, options = {})
|
||||
get_stats(repo, 'contributors', options)
|
||||
end
|
||||
alias contributor_stats contributors_stats
|
||||
|
||||
# Get the last year of commit activity data
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @option retry_timeout [Number] How long Octokit should keep trying to get stats (in seconds)
|
||||
# @option retry_wait [Number] How long Octokit should wait between retries.
|
||||
# @return [Array<Sawyer::Resource>] The last year of commit activity grouped by
|
||||
# week. The days array is a group of commits per day, starting on Sunday.
|
||||
# @see https://developer.github.com/v3/repos/statistics/#get-the-last-year-of-commit-activity-data
|
||||
# @example Get commit activity for octokit
|
||||
# @client.commit_activity_stats('octokit/octokit.rb')
|
||||
def commit_activity_stats(repo, options = {})
|
||||
get_stats(repo, 'commit_activity', options)
|
||||
end
|
||||
|
||||
# Get the number of additions and deletions per week
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @option retry_timeout [Number] How long Octokit should keep trying to get stats (in seconds)
|
||||
# @option retry_wait [Number] How long Octokit should wait between retries.
|
||||
# @return [Array<Sawyer::Resource>] Weekly aggregate of the number of additions
|
||||
# and deletions pushed to a repository.
|
||||
# @see https://developer.github.com/v3/repos/statistics/#get-the-number-of-additions-and-deletions-per-week
|
||||
# @example Get code frequency stats for octokit
|
||||
# @client.code_frequency_stats('octokit/octokit.rb')
|
||||
def code_frequency_stats(repo, options = {})
|
||||
get_stats(repo, 'code_frequency', options)
|
||||
end
|
||||
|
||||
# Get the weekly commit count for the repo owner and everyone else
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @option retry_timeout [Number] How long Octokit should keep trying to get stats (in seconds)
|
||||
# @option retry_wait [Number] How long Octokit should wait between retries.
|
||||
# @return [Sawyer::Resource] Total commit counts for the owner and total commit
|
||||
# counts in all. all is everyone combined, including the owner in the last
|
||||
# 52 weeks. If you’d like to get the commit counts for non-owners, you can
|
||||
# subtract all from owner.
|
||||
# @see https://developer.github.com/v3/repos/statistics/#get-the-weekly-commit-count-for-the-repository-owner-and-everyone-else
|
||||
# @example Get weekly commit counts for octokit
|
||||
# @client.participation_stats("octokit/octokit.rb")
|
||||
def participation_stats(repo, options = {})
|
||||
get_stats(repo, 'participation', options)
|
||||
end
|
||||
|
||||
# Get the number of commits per hour in each day
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @option retry_timeout [Number] How long Octokit should keep trying to get stats (in seconds)
|
||||
# @option retry_wait [Number] How long Octokit should wait between retries.
|
||||
# @return [Array<Array>] Arrays containing the day number, hour number, and
|
||||
# number of commits
|
||||
# @see https://developer.github.com/v3/repos/statistics/#get-the-number-of-commits-per-hour-in-each-day
|
||||
# @example Get octokit punch card
|
||||
# @octokit.punch_card_stats
|
||||
def punch_card_stats(repo, options = {})
|
||||
get_stats(repo, 'punch_card', options)
|
||||
end
|
||||
alias punch_card punch_card_stats
|
||||
|
||||
private
|
||||
|
||||
# @private Get stats for a repository
|
||||
#
|
||||
# @param repo [Integer, String, Hash, Repository] A GitHub repository
|
||||
# @param metric [String] The metrics you are looking for
|
||||
# @return [Array<Sawyer::Resource> or nil] Stats in metric-specific format, or nil if not yet calculated.
|
||||
# @see https://developer.github.com/v3/repos/statistics/
|
||||
def get_stats(repo, metric, options = {})
|
||||
options = options.dup
|
||||
if retry_timeout = options.delete(:retry_timeout)
|
||||
retry_wait = options.delete(:retry_wait) || 0.5
|
||||
timeout = Time.now + retry_timeout
|
||||
end
|
||||
loop do
|
||||
data = get("#{Repository.path repo}/stats/#{metric}", options)
|
||||
return data if last_response.status == 200
|
||||
return [] if last_response.status == 204
|
||||
return nil unless retry_timeout
|
||||
return nil if Time.now >= timeout
|
||||
|
||||
sleep retry_wait if retry_wait
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,47 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Commit Statuses API
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/statuses/
|
||||
module Statuses
|
||||
# List all statuses for a given commit
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param sha [String] The SHA1 for the commit
|
||||
# @return [Array<Sawyer::Resource>] A list of statuses
|
||||
# @see https://developer.github.com/v3/repos/statuses/#list-statuses-for-a-specific-ref
|
||||
def statuses(repo, sha, options = {})
|
||||
paginate "#{Repository.path repo}/statuses/#{sha}", options
|
||||
end
|
||||
alias list_statuses statuses
|
||||
|
||||
# Get the combined status for a ref
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] a GitHub repository
|
||||
# @param ref [String] A Sha or Ref to fetch the status of
|
||||
# @return [Sawyer::Resource] The combined status for the commit
|
||||
# @see https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref
|
||||
def combined_status(repo, ref, options = {})
|
||||
get "#{Repository.path repo}/commits/#{ref}/status", options
|
||||
end
|
||||
alias status combined_status
|
||||
|
||||
# Create status for a commit
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @param sha [String] The SHA1 for the commit
|
||||
# @param state [String] The state: pending, success, failure, error
|
||||
# @option options [String] :context A context to differentiate this status from others
|
||||
# @option options [String] :target_url A link to more details about this status
|
||||
# @option options [String] :description A short human-readable description of this status
|
||||
# @return [Sawyer::Resource] A status
|
||||
# @see https://developer.github.com/v3/repos/statuses/#create-a-status
|
||||
def create_status(repo, sha, state, options = {})
|
||||
options = options.merge(state: state)
|
||||
post "#{Repository.path repo}/statuses/#{sha}", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,31 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Method to check scopes
|
||||
#
|
||||
# @see https://developer.github.com/v3/oauth_authorizations/#oauth-authorizations-api
|
||||
module Tokens
|
||||
# Check scopes for a token
|
||||
#
|
||||
# @param token [String] GitHub OAuth token
|
||||
# @param options [Hash] Header params for request
|
||||
# @return [Array<String>] OAuth scopes
|
||||
# @see https://developer.github.com/v3/oauth/#scopes
|
||||
def scopes(token = @access_token, options = {})
|
||||
options = options.dup
|
||||
raise ArgumentError, 'Access token required' if token.nil?
|
||||
|
||||
auth = { 'Authorization' => "token #{token}" }
|
||||
headers = (options.delete(:headers) || {}).merge(auth)
|
||||
|
||||
agent.call(:get, 'user', headers: headers)
|
||||
.headers['X-OAuth-Scopes']
|
||||
.to_s
|
||||
.split(',')
|
||||
.map(&:strip)
|
||||
.sort
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,64 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Octokit
|
||||
class Client
|
||||
# Methods for the Traffic API
|
||||
#
|
||||
# @see https://developer.github.com/v3/repos/traffic/
|
||||
module Traffic
|
||||
# Get the top 10 referrers over the last 14 days
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @return [Array<Sawyer::Resource>] List of referrers and stats
|
||||
# @see https://developer.github.com/v3/repos/traffic/#list-referrers
|
||||
# @example
|
||||
# @client.top_referrers('octokit/octokit.rb')
|
||||
def top_referrers(repo, options = {})
|
||||
get "#{Repository.path repo}/traffic/popular/referrers", options
|
||||
end
|
||||
|
||||
# Get the top 10 popular contents over the last 14 days
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub repository
|
||||
# @return [Array<Sawyer::Resource>] List of popular contents
|
||||
# @see https://developer.github.com/v3/repos/traffic/#list-paths
|
||||
# @example
|
||||
# @client.top_paths('octokit/octokit.rb')
|
||||
def top_paths(repo, options = {})
|
||||
get "#{Repository.path repo}/traffic/popular/paths", options
|
||||
end
|
||||
|
||||
# Get the total number of views and breakdown per day or week for the
|
||||
# last 14 days
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub Repository
|
||||
# @option options [String] :per ('day') Views per. <tt>day</tt> or
|
||||
# <tt>week</tt>
|
||||
# @return [Sawyer::Resource] Breakdown of view stats
|
||||
# @see https://developer.github.com/v3/repos/traffic/#views
|
||||
# @example Views per day
|
||||
# @client.views('octokit/octokit.rb')
|
||||
# @example Views per week
|
||||
# @client.views('octokit/octokit.rb', per: 'week')
|
||||
def views(repo, options = {})
|
||||
get "#{Repository.path repo}/traffic/views", options
|
||||
end
|
||||
|
||||
# Get the total number of clones and breakdown per day or week for the
|
||||
# last 14 days
|
||||
#
|
||||
# @param repo [Integer, String, Repository, Hash] A GitHub Repository
|
||||
# @option options [String] :per ('day') Views per. <tt>day</tt> or
|
||||
# <tt>week</tt>
|
||||
# @return [Sawyer::Resource] Breakdown of clone stats
|
||||
# @see https://developer.github.com/v3/repos/traffic/#clones
|
||||
# @example Clones per day
|
||||
# @client.clones('octokit/octokit.rb')
|
||||
# @example Clones per week
|
||||
# @client.clones('octokit/octokit.rb', per: 'week')
|
||||
def clones(repo, options = {})
|
||||
get "#{Repository.path repo}/traffic/clones", options
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user