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 = {}) ensure_api_media_type(:checks, 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 = {}) ensure_api_media_type(:checks, 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 name # @option options [String] :status Returns check runs with the specified status # @option options [String] :filter Filters check runs by their completed_at 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 = {}) ensure_api_media_type(:checks, options) get "#{Repository.path repo}/commits/#{ref}/check-runs", options 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 name # @option options [String] :status Returns check runs with the specified status # @option options [String] :filter Filters check runs by their completed_at 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 = {}) ensure_api_media_type(:checks, options) get "#{Repository.path repo}/check-suites/#{id}/check-runs", options 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 = {}) ensure_api_media_type(:checks, 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] 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 = {}) ensure_api_media_type(:checks, options) get "#{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 = {}) ensure_api_media_type(:checks, 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 id # @option options [String] :check_name Filters checks suites by the name 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 = {}) ensure_api_media_type(:checks, options) get "#{Repository.path repo}/commits/#{ref}/check-suites", options 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 = {}) ensure_api_media_type(:checks, 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 = {}) ensure_api_media_type(:checks, 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 = {}) ensure_api_media_type(:checks, options) post "#{Repository.path repo}/check-suites/#{id}/rerequest", options true end end end end