Skip to main content

lib/api/checks/checks.ex

# Generated by `mix github.gen` from docs/github-api/api.github.com.json.
# Do not edit by hand; re-run the task instead.

defmodule Noizu.Github.Api.Checks do
  @moduledoc """
  GitHub `checks` API.
  """
  import Noizu.Github

  @doc """
  Create a check run

  @see https://docs.github.com/rest/checks/runs#create-a-check-run
  """
  def create(body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/check-runs"
    body = body
    api_call(:post, url, body, Noizu.Github.CheckRun, options)
  end

  @doc """
  Create a check suite

  @see https://docs.github.com/rest/checks/suites#create-a-check-suite
  """
  def create_suite(body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/check-suites"
    body = body
    api_call(:post, url, body, Noizu.Github.CheckSuite, options)
  end

  @doc """
  Get a check run

  @see https://docs.github.com/rest/checks/runs#get-a-check-run
  """
  def get(check_run_id, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/check-runs/#{check_run_id}"
    body = %{}
    api_call(:get, url, body, Noizu.Github.CheckRun, options)
  end

  @doc """
  Get a check suite

  @see https://docs.github.com/rest/checks/suites#get-a-check-suite
  """
  def get_suite(check_suite_id, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/check-suites/#{check_suite_id}"
    body = %{}
    api_call(:get, url, body, Noizu.Github.CheckSuite, options)
  end

  @doc """
  List check run annotations

  @see https://docs.github.com/rest/checks/runs#list-check-run-annotations
  """
  def list_annotations(check_run_id, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)

    url =
      (
        query =
          [
            get_field(:per_page, options, nil),
            get_field(:page, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/repos/#{owner}/#{repo}/check-runs/#{check_run_id}/annotations" <> qs
      )

    body = %{}
    api_call(:get, url, body, Noizu.Github.Collection.CheckAnnotation, options)
  end

  @doc """
  List check runs for a Git reference

  @see https://docs.github.com/rest/checks/runs#list-check-runs-for-a-git-reference
  """
  def list_for_ref(ref, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)

    url =
      (
        query =
          [
            get_field(:check_name, options, nil),
            get_field(:status, options, nil),
            get_field(:filter, options, nil),
            get_field(:per_page, options, nil),
            get_field(:page, options, nil),
            get_field(:app_id, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/repos/#{owner}/#{repo}/commits/#{ref}/check-runs" <> qs
      )

    body = %{}
    api_call(:get, url, body, Noizu.Github.Raw, options)
  end

  @doc """
  List check runs in a check suite

  @see https://docs.github.com/rest/checks/runs#list-check-runs-in-a-check-suite
  """
  def list_for_suite(check_suite_id, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)

    url =
      (
        query =
          [
            get_field(:check_name, options, nil),
            get_field(:status, options, nil),
            get_field(:filter, options, nil),
            get_field(:per_page, options, nil),
            get_field(:page, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/repos/#{owner}/#{repo}/check-suites/#{check_suite_id}/check-runs" <> qs
      )

    body = %{}
    api_call(:get, url, body, Noizu.Github.Raw, options)
  end

  @doc """
  List check suites for a Git reference

  @see https://docs.github.com/rest/checks/suites#list-check-suites-for-a-git-reference
  """
  def list_suites_for_ref(ref, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)

    url =
      (
        query =
          [
            get_field(:app_id, options, nil),
            get_field(:check_name, options, nil),
            get_field(:per_page, options, nil),
            get_field(:page, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/repos/#{owner}/#{repo}/commits/#{ref}/check-suites" <> qs
      )

    body = %{}
    api_call(:get, url, body, Noizu.Github.Raw, options)
  end

  @doc """
  Rerequest a check run

  @see https://docs.github.com/rest/checks/runs#rerequest-a-check-run
  """
  def rerequest_run(check_run_id, body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/check-runs/#{check_run_id}/rerequest"
    body = body
    api_call(:post, url, body, Noizu.Github.Raw, options)
  end

  @doc """
  Rerequest a check suite

  @see https://docs.github.com/rest/checks/suites#rerequest-a-check-suite
  """
  def rerequest_suite(check_suite_id, body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/check-suites/#{check_suite_id}/rerequest"
    body = body
    api_call(:post, url, body, Noizu.Github.Raw, options)
  end

  @doc """
  Update repository preferences for check suites

  @see https://docs.github.com/rest/checks/suites#update-repository-preferences-for-check-suites
  """
  def set_suites_preferences(body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/check-suites/preferences"
    body = body
    api_call(:patch, url, body, Noizu.Github.CheckSuitePreference, options)
  end

  @doc """
  Update a check run

  @see https://docs.github.com/rest/checks/runs#update-a-check-run
  """
  def update(check_run_id, body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/check-runs/#{check_run_id}"
    body = body
    api_call(:patch, url, body, Noizu.Github.CheckRun, options)
  end
end