defmodule GitHub.Dependabot do
@moduledoc """
Provides API endpoints related to dependabot
"""
@default_client GitHub.Client
@doc """
Add selected repository to an organization secret
## Resources
* [API method documentation](https://docs.github.com/rest/reference/dependabot#add-selected-repository-to-an-organization-secret)
"""
@spec add_selected_repo_to_org_secret(String.t(), String.t(), integer, keyword) ::
:ok | {:error, GitHub.Error.t()}
def add_selected_repo_to_org_secret(org, secret_name, repository_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [org: org, secret_name: secret_name, repository_id: repository_id],
call: {GitHub.Dependabot, :add_selected_repo_to_org_secret},
url: "/orgs/#{org}/dependabot/secrets/#{secret_name}/repositories/#{repository_id}",
method: :put,
response: [{204, nil}, {409, nil}],
opts: opts
})
end
@doc """
Create or update an organization secret
## Resources
* [API method documentation](https://docs.github.com/rest/reference/dependabot#create-or-update-an-organization-secret)
"""
@spec create_or_update_org_secret(String.t(), String.t(), map, keyword) ::
{:ok, GitHub.EmptyObject.t()} | {:error, GitHub.Error.t()}
def create_or_update_org_secret(org, secret_name, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [org: org, secret_name: secret_name, body: body],
call: {GitHub.Dependabot, :create_or_update_org_secret},
url: "/orgs/#{org}/dependabot/secrets/#{secret_name}",
body: body,
method: :put,
request: [{"application/json", :map}],
response: [{201, {GitHub.EmptyObject, :t}}, {204, nil}],
opts: opts
})
end
@doc """
Create or update a repository secret
## Resources
* [API method documentation](https://docs.github.com/rest/reference/dependabot#create-or-update-a-repository-secret)
"""
@spec create_or_update_repo_secret(String.t(), String.t(), String.t(), map, keyword) ::
{:ok, GitHub.EmptyObject.t()} | {:error, GitHub.Error.t()}
def create_or_update_repo_secret(owner, repo, secret_name, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [owner: owner, repo: repo, secret_name: secret_name, body: body],
call: {GitHub.Dependabot, :create_or_update_repo_secret},
url: "/repos/#{owner}/#{repo}/dependabot/secrets/#{secret_name}",
body: body,
method: :put,
request: [{"application/json", :map}],
response: [{201, {GitHub.EmptyObject, :t}}, {204, nil}],
opts: opts
})
end
@doc """
Delete an organization secret
## Resources
* [API method documentation](https://docs.github.com/rest/reference/dependabot#delete-an-organization-secret)
"""
@spec delete_org_secret(String.t(), String.t(), keyword) :: :ok | {:error, GitHub.Error.t()}
def delete_org_secret(org, secret_name, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [org: org, secret_name: secret_name],
call: {GitHub.Dependabot, :delete_org_secret},
url: "/orgs/#{org}/dependabot/secrets/#{secret_name}",
method: :delete,
response: [{204, nil}],
opts: opts
})
end
@doc """
Delete a repository secret
## Resources
* [API method documentation](https://docs.github.com/rest/reference/dependabot#delete-a-repository-secret)
"""
@spec delete_repo_secret(String.t(), String.t(), String.t(), keyword) ::
:ok | {:error, GitHub.Error.t()}
def delete_repo_secret(owner, repo, secret_name, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [owner: owner, repo: repo, secret_name: secret_name],
call: {GitHub.Dependabot, :delete_repo_secret},
url: "/repos/#{owner}/#{repo}/dependabot/secrets/#{secret_name}",
method: :delete,
response: [{204, nil}],
opts: opts
})
end
@doc """
Get a Dependabot alert
## Resources
* [API method documentation](https://docs.github.com/rest/reference/dependabot#get-a-dependabot-alert)
"""
@spec get_alert(String.t(), String.t(), integer, keyword) ::
{:ok, GitHub.Dependabot.Alert.t()} | {:error, GitHub.Error.t()}
def get_alert(owner, repo, alert_number, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [owner: owner, repo: repo, alert_number: alert_number],
call: {GitHub.Dependabot, :get_alert},
url: "/repos/#{owner}/#{repo}/dependabot/alerts/#{alert_number}",
method: :get,
response: [
{200, {GitHub.Dependabot.Alert, :t}},
{304, nil},
{403, {GitHub.BasicError, :t}},
{404, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc """
Get an organization public key
## Resources
* [API method documentation](https://docs.github.com/rest/reference/dependabot#get-an-organization-public-key)
"""
@spec get_org_public_key(String.t(), keyword) ::
{:ok, GitHub.Dependabot.PublicKey.t()} | {:error, GitHub.Error.t()}
def get_org_public_key(org, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [org: org],
call: {GitHub.Dependabot, :get_org_public_key},
url: "/orgs/#{org}/dependabot/secrets/public-key",
method: :get,
response: [{200, {GitHub.Dependabot.PublicKey, :t}}],
opts: opts
})
end
@doc """
Get an organization secret
## Resources
* [API method documentation](https://docs.github.com/rest/reference/dependabot#get-an-organization-secret)
"""
@spec get_org_secret(String.t(), String.t(), keyword) ::
{:ok, GitHub.Organization.DependabotSecret.t()} | {:error, GitHub.Error.t()}
def get_org_secret(org, secret_name, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [org: org, secret_name: secret_name],
call: {GitHub.Dependabot, :get_org_secret},
url: "/orgs/#{org}/dependabot/secrets/#{secret_name}",
method: :get,
response: [{200, {GitHub.Organization.DependabotSecret, :t}}],
opts: opts
})
end
@doc """
Get a repository public key
## Resources
* [API method documentation](https://docs.github.com/rest/reference/dependabot#get-a-repository-public-key)
"""
@spec get_repo_public_key(String.t(), String.t(), keyword) ::
{:ok, GitHub.Dependabot.PublicKey.t()} | {:error, GitHub.Error.t()}
def get_repo_public_key(owner, repo, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [owner: owner, repo: repo],
call: {GitHub.Dependabot, :get_repo_public_key},
url: "/repos/#{owner}/#{repo}/dependabot/secrets/public-key",
method: :get,
response: [{200, {GitHub.Dependabot.PublicKey, :t}}],
opts: opts
})
end
@doc """
Get a repository secret
## Resources
* [API method documentation](https://docs.github.com/rest/reference/dependabot#get-a-repository-secret)
"""
@spec get_repo_secret(String.t(), String.t(), String.t(), keyword) ::
{:ok, GitHub.Dependabot.Secret.t()} | {:error, GitHub.Error.t()}
def get_repo_secret(owner, repo, secret_name, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [owner: owner, repo: repo, secret_name: secret_name],
call: {GitHub.Dependabot, :get_repo_secret},
url: "/repos/#{owner}/#{repo}/dependabot/secrets/#{secret_name}",
method: :get,
response: [{200, {GitHub.Dependabot.Secret, :t}}],
opts: opts
})
end
@doc """
List Dependabot alerts for an enterprise
## Options
* `state` (String.t()): A comma-separated list of states. If specified, only alerts with these states will be returned.
Can be: `auto_dismissed`, `dismissed`, `fixed`, `open`
* `severity` (String.t()): A comma-separated list of severities. If specified, only alerts with these severities will be returned.
Can be: `low`, `medium`, `high`, `critical`
* `ecosystem` (String.t()): A comma-separated list of ecosystems. If specified, only alerts for these ecosystems will be returned.
Can be: `composer`, `go`, `maven`, `npm`, `nuget`, `pip`, `pub`, `rubygems`, `rust`
* `package` (String.t()): A comma-separated list of package names. If specified, only alerts for these packages will be returned.
* `scope` (String.t()): The scope of the vulnerable dependency. If specified, only alerts with this scope will be returned.
* `sort` (String.t()): The property by which to sort the results.
`created` means when the alert was created.
`updated` means when the alert's state last changed.
* `direction` (String.t()): The direction to sort the results by.
* `before` (String.t()): A cursor, as given in the [Link header](https://docs.github.com/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results before this cursor.
* `after` (String.t()): A cursor, as given in the [Link header](https://docs.github.com/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results after this cursor.
* `first` (integer): **Deprecated**. The number of results per page (max 100), starting from the first matching result.
This parameter must not be used in combination with `last`.
Instead, use `per_page` in combination with `after` to fetch the first page of results.
* `last` (integer): **Deprecated**. The number of results per page (max 100), starting from the last matching result.
This parameter must not be used in combination with `first`.
Instead, use `per_page` in combination with `before` to fetch the last page of results.
* `per_page` (integer): The number of results per page (max 100).
## Resources
* [API method documentation](https://docs.github.com/rest/dependabot/alerts#list-dependabot-alerts-for-an-enterprise)
"""
@spec list_alerts_for_enterprise(String.t(), keyword) ::
{:ok, [GitHub.Dependabot.Alert.WithRepository.t()]} | {:error, GitHub.Error.t()}
def list_alerts_for_enterprise(enterprise, opts \\ []) do
client = opts[:client] || @default_client
query =
Keyword.take(opts, [
:after,
:before,
:direction,
:ecosystem,
:first,
:last,
:package,
:per_page,
:scope,
:severity,
:sort,
:state
])
client.request(%{
args: [enterprise: enterprise],
call: {GitHub.Dependabot, :list_alerts_for_enterprise},
url: "/enterprises/#{enterprise}/dependabot/alerts",
method: :get,
query: query,
response: [
{200, {:array, {GitHub.Dependabot.Alert.WithRepository, :t}}},
{304, nil},
{403, {GitHub.BasicError, :t}},
{404, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :simple}}
],
opts: opts
})
end
@doc """
List Dependabot alerts for an organization
## Options
* `state` (String.t()): A comma-separated list of states. If specified, only alerts with these states will be returned.
Can be: `auto_dismissed`, `dismissed`, `fixed`, `open`
* `severity` (String.t()): A comma-separated list of severities. If specified, only alerts with these severities will be returned.
Can be: `low`, `medium`, `high`, `critical`
* `ecosystem` (String.t()): A comma-separated list of ecosystems. If specified, only alerts for these ecosystems will be returned.
Can be: `composer`, `go`, `maven`, `npm`, `nuget`, `pip`, `pub`, `rubygems`, `rust`
* `package` (String.t()): A comma-separated list of package names. If specified, only alerts for these packages will be returned.
* `scope` (String.t()): The scope of the vulnerable dependency. If specified, only alerts with this scope will be returned.
* `sort` (String.t()): The property by which to sort the results.
`created` means when the alert was created.
`updated` means when the alert's state last changed.
* `direction` (String.t()): The direction to sort the results by.
* `before` (String.t()): A cursor, as given in the [Link header](https://docs.github.com/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results before this cursor.
* `after` (String.t()): A cursor, as given in the [Link header](https://docs.github.com/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results after this cursor.
* `first` (integer): **Deprecated**. The number of results per page (max 100), starting from the first matching result.
This parameter must not be used in combination with `last`.
Instead, use `per_page` in combination with `after` to fetch the first page of results.
* `last` (integer): **Deprecated**. The number of results per page (max 100), starting from the last matching result.
This parameter must not be used in combination with `first`.
Instead, use `per_page` in combination with `before` to fetch the last page of results.
* `per_page` (integer): The number of results per page (max 100).
## Resources
* [API method documentation](https://docs.github.com/rest/dependabot/alerts#list-dependabot-alerts-for-an-organization)
"""
@spec list_alerts_for_org(String.t(), keyword) ::
{:ok, [GitHub.Dependabot.Alert.WithRepository.t()]} | {:error, GitHub.Error.t()}
def list_alerts_for_org(org, opts \\ []) do
client = opts[:client] || @default_client
query =
Keyword.take(opts, [
:after,
:before,
:direction,
:ecosystem,
:first,
:last,
:package,
:per_page,
:scope,
:severity,
:sort,
:state
])
client.request(%{
args: [org: org],
call: {GitHub.Dependabot, :list_alerts_for_org},
url: "/orgs/#{org}/dependabot/alerts",
method: :get,
query: query,
response: [
{200, {:array, {GitHub.Dependabot.Alert.WithRepository, :t}}},
{304, nil},
{400, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{404, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :simple}}
],
opts: opts
})
end
@doc """
List Dependabot alerts for a repository
## Options
* `state` (String.t()): A comma-separated list of states. If specified, only alerts with these states will be returned.
Can be: `auto_dismissed`, `dismissed`, `fixed`, `open`
* `severity` (String.t()): A comma-separated list of severities. If specified, only alerts with these severities will be returned.
Can be: `low`, `medium`, `high`, `critical`
* `ecosystem` (String.t()): A comma-separated list of ecosystems. If specified, only alerts for these ecosystems will be returned.
Can be: `composer`, `go`, `maven`, `npm`, `nuget`, `pip`, `pub`, `rubygems`, `rust`
* `package` (String.t()): A comma-separated list of package names. If specified, only alerts for these packages will be returned.
* `manifest` (String.t()): A comma-separated list of full manifest paths. If specified, only alerts for these manifests will be returned.
* `scope` (String.t()): The scope of the vulnerable dependency. If specified, only alerts with this scope will be returned.
* `sort` (String.t()): The property by which to sort the results.
`created` means when the alert was created.
`updated` means when the alert's state last changed.
* `direction` (String.t()): The direction to sort the results by.
* `page` (integer): **Deprecated**. Page number of the results to fetch. Use cursor-based pagination with `before` or `after` instead.
* `per_page` (integer): The number of results per page (max 100).
* `before` (String.t()): A cursor, as given in the [Link header](https://docs.github.com/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results before this cursor.
* `after` (String.t()): A cursor, as given in the [Link header](https://docs.github.com/rest/guides/using-pagination-in-the-rest-api#using-link-headers). If specified, the query only searches for results after this cursor.
* `first` (integer): **Deprecated**. The number of results per page (max 100), starting from the first matching result.
This parameter must not be used in combination with `last`.
Instead, use `per_page` in combination with `after` to fetch the first page of results.
* `last` (integer): **Deprecated**. The number of results per page (max 100), starting from the last matching result.
This parameter must not be used in combination with `first`.
Instead, use `per_page` in combination with `before` to fetch the last page of results.
## Resources
* [API method documentation](https://docs.github.com/rest/reference/dependabot#list-dependabot-alerts-for-a-repository)
"""
@spec list_alerts_for_repo(String.t(), String.t(), keyword) ::
{:ok, [GitHub.Dependabot.Alert.t()]} | {:error, GitHub.Error.t()}
def list_alerts_for_repo(owner, repo, opts \\ []) do
client = opts[:client] || @default_client
query =
Keyword.take(opts, [
:after,
:before,
:direction,
:ecosystem,
:first,
:last,
:manifest,
:package,
:page,
:per_page,
:scope,
:severity,
:sort,
:state
])
client.request(%{
args: [owner: owner, repo: repo],
call: {GitHub.Dependabot, :list_alerts_for_repo},
url: "/repos/#{owner}/#{repo}/dependabot/alerts",
method: :get,
query: query,
response: [
{200, {:array, {GitHub.Dependabot.Alert, :t}}},
{304, nil},
{400, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{404, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :simple}}
],
opts: opts
})
end
@doc """
List organization secrets
## Options
* `per_page` (integer): The number of results per page (max 100).
* `page` (integer): Page number of the results to fetch.
## Resources
* [API method documentation](https://docs.github.com/rest/reference/dependabot#list-organization-secrets)
"""
@spec list_org_secrets(String.t(), keyword) :: {:ok, map} | {:error, GitHub.Error.t()}
def list_org_secrets(org, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:page, :per_page])
client.request(%{
args: [org: org],
call: {GitHub.Dependabot, :list_org_secrets},
url: "/orgs/#{org}/dependabot/secrets",
method: :get,
query: query,
response: [{200, :map}],
opts: opts
})
end
@doc """
List repository secrets
## Options
* `per_page` (integer): The number of results per page (max 100).
* `page` (integer): Page number of the results to fetch.
## Resources
* [API method documentation](https://docs.github.com/rest/reference/dependabot#list-repository-secrets)
"""
@spec list_repo_secrets(String.t(), String.t(), keyword) ::
{:ok, map} | {:error, GitHub.Error.t()}
def list_repo_secrets(owner, repo, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:page, :per_page])
client.request(%{
args: [owner: owner, repo: repo],
call: {GitHub.Dependabot, :list_repo_secrets},
url: "/repos/#{owner}/#{repo}/dependabot/secrets",
method: :get,
query: query,
response: [{200, :map}],
opts: opts
})
end
@doc """
List selected repositories for an organization secret
## Options
* `page` (integer): Page number of the results to fetch.
* `per_page` (integer): The number of results per page (max 100).
## Resources
* [API method documentation](https://docs.github.com/rest/reference/dependabot#list-selected-repositories-for-an-organization-secret)
"""
@spec list_selected_repos_for_org_secret(String.t(), String.t(), keyword) ::
{:ok, map} | {:error, GitHub.Error.t()}
def list_selected_repos_for_org_secret(org, secret_name, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:page, :per_page])
client.request(%{
args: [org: org, secret_name: secret_name],
call: {GitHub.Dependabot, :list_selected_repos_for_org_secret},
url: "/orgs/#{org}/dependabot/secrets/#{secret_name}/repositories",
method: :get,
query: query,
response: [{200, :map}],
opts: opts
})
end
@doc """
Remove selected repository from an organization secret
## Resources
* [API method documentation](https://docs.github.com/rest/reference/dependabot#remove-selected-repository-from-an-organization-secret)
"""
@spec remove_selected_repo_from_org_secret(String.t(), String.t(), integer, keyword) ::
:ok | {:error, GitHub.Error.t()}
def remove_selected_repo_from_org_secret(org, secret_name, repository_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [org: org, secret_name: secret_name, repository_id: repository_id],
call: {GitHub.Dependabot, :remove_selected_repo_from_org_secret},
url: "/orgs/#{org}/dependabot/secrets/#{secret_name}/repositories/#{repository_id}",
method: :delete,
response: [{204, nil}, {409, nil}],
opts: opts
})
end
@doc """
Set selected repositories for an organization secret
## Resources
* [API method documentation](https://docs.github.com/rest/reference/dependabot#set-selected-repositories-for-an-organization-secret)
"""
@spec set_selected_repos_for_org_secret(String.t(), String.t(), map, keyword) ::
:ok | {:error, GitHub.Error.t()}
def set_selected_repos_for_org_secret(org, secret_name, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [org: org, secret_name: secret_name, body: body],
call: {GitHub.Dependabot, :set_selected_repos_for_org_secret},
url: "/orgs/#{org}/dependabot/secrets/#{secret_name}/repositories",
body: body,
method: :put,
request: [{"application/json", :map}],
response: [{204, nil}],
opts: opts
})
end
@doc """
Update a Dependabot alert
## Resources
* [API method documentation](https://docs.github.com/rest/reference/dependabot#update-a-dependabot-alert)
"""
@spec update_alert(String.t(), String.t(), integer, map, keyword) ::
{:ok, GitHub.Dependabot.Alert.t()} | {:error, GitHub.Error.t()}
def update_alert(owner, repo, alert_number, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [owner: owner, repo: repo, alert_number: alert_number, body: body],
call: {GitHub.Dependabot, :update_alert},
url: "/repos/#{owner}/#{repo}/dependabot/alerts/#{alert_number}",
body: body,
method: :patch,
request: [{"application/json", :map}],
response: [
{200, {GitHub.Dependabot.Alert, :t}},
{400, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{404, {GitHub.BasicError, :t}},
{409, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :simple}}
],
opts: opts
})
end
end