Skip to main content

lib/api/code_scanning/code_scanning.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.CodeScanning do
  @moduledoc """
  GitHub `code-scanning` API.
  """
  import Noizu.Github

  @doc """
  Commit an autofix for a code scanning alert

  @see https://docs.github.com/rest/code-scanning/code-scanning#commit-an-autofix-for-a-code-scanning-alert
  """
  def commit_autofix(alert_number, body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)

    url =
      github_base() <>
        "/repos/#{owner}/#{repo}/code-scanning/alerts/#{alert_number}/autofix/commits"

    body = body
    api_call(:post, url, body, Noizu.Github.CodeScanningAutofixCommitsResponse, options)
  end

  @doc """
  Create an autofix for a code scanning alert

  @see https://docs.github.com/rest/code-scanning/code-scanning#create-an-autofix-for-a-code-scanning-alert
  """
  def create_autofix(alert_number, body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/code-scanning/alerts/#{alert_number}/autofix"
    body = body
    api_call(:post, url, body, Noizu.Github.CodeScanningAutofix, options)
  end

  @doc """
  Create a CodeQL variant analysis

  @see https://docs.github.com/rest/code-scanning/code-scanning#create-a-codeql-variant-analysis
  """
  def create_variant_analysis(body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/code-scanning/codeql/variant-analyses"
    body = body
    api_call(:post, url, body, Noizu.Github.CodeScanningVariantAnalysis, options)
  end

  @doc """
  Delete a code scanning analysis from a repository

  @see https://docs.github.com/rest/code-scanning/code-scanning#delete-a-code-scanning-analysis-from-a-repository
  """
  def delete_analysis(analysis_id, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)

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

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/repos/#{owner}/#{repo}/code-scanning/analyses/#{analysis_id}" <> qs
      )

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

  @doc """
  Delete a CodeQL database

  @see https://docs.github.com/rest/code-scanning/code-scanning#delete-a-codeql-database
  """
  def delete_codeql_database(language, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/code-scanning/codeql/databases/#{language}"
    body = %{}
    api_call(:delete, url, body, Noizu.Github.Raw, options)
  end

  @doc """
  Get a code scanning alert

  @see https://docs.github.com/rest/code-scanning/code-scanning#get-a-code-scanning-alert
  """
  def get_alert(alert_number, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/code-scanning/alerts/#{alert_number}"
    body = %{}
    api_call(:get, url, body, Noizu.Github.CodeScanningAlert, options)
  end

  @doc """
  Get a code scanning analysis for a repository

  @see https://docs.github.com/rest/code-scanning/code-scanning#get-a-code-scanning-analysis-for-a-repository
  """
  def get_analysis(analysis_id, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/code-scanning/analyses/#{analysis_id}"
    body = %{}
    api_call(:get, url, body, Noizu.Github.CodeScanningAnalysis, options)
  end

  @doc """
  Get the status of an autofix for a code scanning alert

  @see https://docs.github.com/rest/code-scanning/code-scanning#get-the-status-of-an-autofix-for-a-code-scanning-alert
  """
  def get_autofix(alert_number, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/code-scanning/alerts/#{alert_number}/autofix"
    body = %{}
    api_call(:get, url, body, Noizu.Github.CodeScanningAutofix, options)
  end

  @doc """
  Get a CodeQL database for a repository

  @see https://docs.github.com/rest/code-scanning/code-scanning#get-a-codeql-database-for-a-repository
  """
  def get_codeql_database(language, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/code-scanning/codeql/databases/#{language}"
    body = %{}
    api_call(:get, url, body, Noizu.Github.CodeScanningCodeqlDatabase, options)
  end

  @doc """
  Get a code scanning default setup configuration

  @see https://docs.github.com/rest/code-scanning/code-scanning#get-a-code-scanning-default-setup-configuration
  """
  def get_default_setup(options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/code-scanning/default-setup"
    body = %{}
    api_call(:get, url, body, Noizu.Github.CodeScanningDefaultSetup, options)
  end

  @doc """
  Get information about a SARIF upload

  @see https://docs.github.com/rest/code-scanning/code-scanning#get-information-about-a-sarif-upload
  """
  def get_sarif(sarif_id, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/code-scanning/sarifs/#{sarif_id}"
    body = %{}
    api_call(:get, url, body, Noizu.Github.CodeScanningSarifsStatus, options)
  end

  @doc """
  Get the summary of a CodeQL variant analysis

  @see https://docs.github.com/rest/code-scanning/code-scanning#get-the-summary-of-a-codeql-variant-analysis
  """
  def get_variant_analysis(codeql_variant_analysis_id, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)

    url =
      github_base() <>
        "/repos/#{owner}/#{repo}/code-scanning/codeql/variant-analyses/#{codeql_variant_analysis_id}"

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

  @doc """
  Get the analysis status of a repository in a CodeQL variant analysis

  @see https://docs.github.com/rest/code-scanning/code-scanning#get-the-analysis-status-of-a-repository-in-a-codeql-variant-analysis
  """
  def get_variant_analysis_repo_task(
        codeql_variant_analysis_id,
        repo_owner,
        repo_name,
        options \\ nil
      ) do
    owner = repo_owner(options)
    repo = repo_name(options)

    url =
      github_base() <>
        "/repos/#{owner}/#{repo}/code-scanning/codeql/variant-analyses/#{codeql_variant_analysis_id}/repos/#{repo_owner}/#{repo_name}"

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

  @doc """
  List instances of a code scanning alert

  @see https://docs.github.com/rest/code-scanning/code-scanning#list-instances-of-a-code-scanning-alert
  """
  def list_alert_instances(alert_number, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)

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

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")

        github_base() <>
          "/repos/#{owner}/#{repo}/code-scanning/alerts/#{alert_number}/instances" <> qs
      )

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

  @doc """
  List code scanning alerts for an organization

  @see https://docs.github.com/rest/code-scanning/code-scanning#list-code-scanning-alerts-for-an-organization
  """
  def list_alerts_for_org(org, options \\ nil) do
    url =
      (
        query =
          [
            get_field(:tool_name, options, nil),
            get_field(:tool_guid, options, nil),
            get_field(:before, options, nil),
            get_field(:after, options, nil),
            get_field(:page, options, nil),
            get_field(:per_page, options, nil),
            get_field(:direction, options, nil),
            get_field(:state, options, nil),
            get_field(:sort, options, nil),
            get_field(:severity, options, nil),
            get_field(:assignees, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/orgs/#{org}/code-scanning/alerts" <> qs
      )

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

  @doc """
  List code scanning alerts for a repository

  @see https://docs.github.com/rest/code-scanning/code-scanning#list-code-scanning-alerts-for-a-repository
  """
  def list_alerts_for_repo(options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)

    url =
      (
        query =
          [
            get_field(:tool_name, options, nil),
            get_field(:tool_guid, options, nil),
            get_field(:page, options, nil),
            get_field(:per_page, options, nil),
            get_field(:ref, options, nil),
            get_field(:pr, options, nil),
            get_field(:direction, options, nil),
            get_field(:before, options, nil),
            get_field(:after, options, nil),
            get_field(:sort, options, nil),
            get_field(:state, options, nil),
            get_field(:severity, options, nil),
            get_field(:assignees, options, nil)
          ]
          |> Enum.filter(& &1)

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

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

  @doc """
  List CodeQL databases for a repository

  @see https://docs.github.com/rest/code-scanning/code-scanning#list-codeql-databases-for-a-repository
  """
  def list_codeql_databases(options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/code-scanning/codeql/databases"
    body = %{}
    api_call(:get, url, body, Noizu.Github.Collection.CodeScanningCodeqlDatabase, options)
  end

  @doc """
  List code scanning analyses for a repository

  @see https://docs.github.com/rest/code-scanning/code-scanning#list-code-scanning-analyses-for-a-repository
  """
  def list_recent_analyses(options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)

    url =
      (
        query =
          [
            get_field(:tool_name, options, nil),
            get_field(:tool_guid, options, nil),
            get_field(:page, options, nil),
            get_field(:per_page, options, nil),
            get_field(:pr, options, nil),
            get_field(:ref, options, nil),
            get_field(:sarif_id, options, nil),
            get_field(:direction, options, nil),
            get_field(:sort, options, nil)
          ]
          |> Enum.filter(& &1)

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

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

  @doc """
  Update a code scanning alert

  @see https://docs.github.com/rest/code-scanning/code-scanning#update-a-code-scanning-alert
  """
  def update_alert(alert_number, body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/code-scanning/alerts/#{alert_number}"
    body = body
    api_call(:patch, url, body, Noizu.Github.CodeScanningAlert, options)
  end

  @doc """
  Update a code scanning default setup configuration

  @see https://docs.github.com/rest/code-scanning/code-scanning#update-a-code-scanning-default-setup-configuration
  """
  def update_default_setup(body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/code-scanning/default-setup"
    body = body
    api_call(:patch, url, body, Noizu.Github.Raw, options)
  end

  @doc """
  Upload an analysis as SARIF data

  @see https://docs.github.com/rest/code-scanning/code-scanning#upload-an-analysis-as-sarif-data
  """
  def upload_sarif(body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/code-scanning/sarifs"
    body = body
    api_call(:post, url, body, Noizu.Github.CodeScanningSarifsReceipt, options)
  end
end