defmodule GitHub.Migrations do
@moduledoc """
Provides API endpoints related to migrations
"""
@default_client GitHub.Client
@doc """
Cancel an import
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/source-imports#cancel-an-import)
"""
@spec cancel_import(String.t(), String.t(), keyword) :: :ok | {:error, GitHub.Error.t()}
def cancel_import(owner, repo, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [owner: owner, repo: repo],
call: {GitHub.Migrations, :cancel_import},
url: "/repos/#{owner}/#{repo}/import",
method: :delete,
response: [{204, nil}, {503, {GitHub.BasicError, :t}}],
opts: opts
})
end
@doc """
Delete a user migration archive
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/users#delete-a-user-migration-archive)
"""
@spec delete_archive_for_authenticated_user(integer, keyword) ::
:ok | {:error, GitHub.Error.t()}
def delete_archive_for_authenticated_user(migration_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [migration_id: migration_id],
call: {GitHub.Migrations, :delete_archive_for_authenticated_user},
url: "/user/migrations/#{migration_id}/archive",
method: :delete,
response: [
{204, nil},
{304, nil},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{404, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc """
Delete an organization migration archive
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/orgs#delete-an-organization-migration-archive)
"""
@spec delete_archive_for_org(String.t(), integer, keyword) :: :ok | {:error, GitHub.Error.t()}
def delete_archive_for_org(org, migration_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [org: org, migration_id: migration_id],
call: {GitHub.Migrations, :delete_archive_for_org},
url: "/orgs/#{org}/migrations/#{migration_id}/archive",
method: :delete,
response: [{204, nil}, {404, {GitHub.BasicError, :t}}],
opts: opts
})
end
@doc """
Download an organization migration archive
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/orgs#download-an-organization-migration-archive)
"""
@spec download_archive_for_org(String.t(), integer, keyword) :: :ok | {:error, GitHub.Error.t()}
def download_archive_for_org(org, migration_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [org: org, migration_id: migration_id],
call: {GitHub.Migrations, :download_archive_for_org},
url: "/orgs/#{org}/migrations/#{migration_id}/archive",
method: :get,
response: [{302, nil}, {404, {GitHub.BasicError, :t}}],
opts: opts
})
end
@doc """
Download a user migration archive
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/users#download-a-user-migration-archive)
"""
@spec get_archive_for_authenticated_user(integer, keyword) :: :ok | {:error, GitHub.Error.t()}
def get_archive_for_authenticated_user(migration_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [migration_id: migration_id],
call: {GitHub.Migrations, :get_archive_for_authenticated_user},
url: "/user/migrations/#{migration_id}/archive",
method: :get,
response: [
{302, nil},
{304, nil},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc """
Get commit authors
## Options
* `since` (integer): A user ID. Only return users with an ID greater than this ID.
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/source-imports#get-commit-authors)
"""
@spec get_commit_authors(String.t(), String.t(), keyword) ::
{:ok, [GitHub.PorterAuthor.t()]} | {:error, GitHub.Error.t()}
def get_commit_authors(owner, repo, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:since])
client.request(%{
args: [owner: owner, repo: repo],
call: {GitHub.Migrations, :get_commit_authors},
url: "/repos/#{owner}/#{repo}/import/authors",
method: :get,
query: query,
response: [
{200, {:array, {GitHub.PorterAuthor, :t}}},
{404, {GitHub.BasicError, :t}},
{503, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc """
Get an import status
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/source-imports#get-an-import-status)
"""
@spec get_import_status(String.t(), String.t(), keyword) ::
{:ok, GitHub.Import.t()} | {:error, GitHub.Error.t()}
def get_import_status(owner, repo, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [owner: owner, repo: repo],
call: {GitHub.Migrations, :get_import_status},
url: "/repos/#{owner}/#{repo}/import",
method: :get,
response: [
{200, {GitHub.Import, :t}},
{404, {GitHub.BasicError, :t}},
{503, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc """
Get large files
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/source-imports#get-large-files)
"""
@spec get_large_files(String.t(), String.t(), keyword) ::
{:ok, [GitHub.PorterLargeFile.t()]} | {:error, GitHub.Error.t()}
def get_large_files(owner, repo, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [owner: owner, repo: repo],
call: {GitHub.Migrations, :get_large_files},
url: "/repos/#{owner}/#{repo}/import/large_files",
method: :get,
response: [{200, {:array, {GitHub.PorterLargeFile, :t}}}, {503, {GitHub.BasicError, :t}}],
opts: opts
})
end
@doc """
Get a user migration status
## Options
* `exclude` ([String.t()]):
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/users#get-a-user-migration-status)
"""
@spec get_status_for_authenticated_user(integer, keyword) ::
{:ok, GitHub.Migration.t()} | {:error, GitHub.Error.t()}
def get_status_for_authenticated_user(migration_id, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:exclude])
client.request(%{
args: [migration_id: migration_id],
call: {GitHub.Migrations, :get_status_for_authenticated_user},
url: "/user/migrations/#{migration_id}",
method: :get,
query: query,
response: [
{200, {GitHub.Migration, :t}},
{304, nil},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{404, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc """
Get an organization migration status
## Options
* `exclude` ([String.t()]): Exclude attributes from the API response to improve performance
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/orgs#get-an-organization-migration-status)
"""
@spec get_status_for_org(String.t(), integer, keyword) ::
{:ok, GitHub.Migration.t()} | {:error, GitHub.Error.t()}
def get_status_for_org(org, migration_id, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:exclude])
client.request(%{
args: [org: org, migration_id: migration_id],
call: {GitHub.Migrations, :get_status_for_org},
url: "/orgs/#{org}/migrations/#{migration_id}",
method: :get,
query: query,
response: [{200, {GitHub.Migration, :t}}, {404, {GitHub.BasicError, :t}}],
opts: opts
})
end
@doc """
List user migrations
## 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/migrations/users#list-user-migrations)
"""
@spec list_for_authenticated_user(keyword) ::
{:ok, [GitHub.Migration.t()]} | {:error, GitHub.Error.t()}
def list_for_authenticated_user(opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:page, :per_page])
client.request(%{
call: {GitHub.Migrations, :list_for_authenticated_user},
url: "/user/migrations",
method: :get,
query: query,
response: [
{200, {:array, {GitHub.Migration, :t}}},
{304, nil},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc """
List organization migrations
## Options
* `per_page` (integer): The number of results per page (max 100).
* `page` (integer): Page number of the results to fetch.
* `exclude` ([String.t()]): Exclude attributes from the API response to improve performance
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/orgs#list-organization-migrations)
"""
@spec list_for_org(String.t(), keyword) ::
{:ok, [GitHub.Migration.t()]} | {:error, GitHub.Error.t()}
def list_for_org(org, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:exclude, :page, :per_page])
client.request(%{
args: [org: org],
call: {GitHub.Migrations, :list_for_org},
url: "/orgs/#{org}/migrations",
method: :get,
query: query,
response: [{200, {:array, {GitHub.Migration, :t}}}],
opts: opts
})
end
@doc """
List repositories for a user migration
## 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/migrations/users#list-repositories-for-a-user-migration)
"""
@spec list_repos_for_authenticated_user(integer, keyword) ::
{:ok, [GitHub.Repository.minimal()]} | {:error, GitHub.Error.t()}
def list_repos_for_authenticated_user(migration_id, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:page, :per_page])
client.request(%{
args: [migration_id: migration_id],
call: {GitHub.Migrations, :list_repos_for_authenticated_user},
url: "/user/migrations/#{migration_id}/repositories",
method: :get,
query: query,
response: [{200, {:array, {GitHub.Repository, :minimal}}}, {404, {GitHub.BasicError, :t}}],
opts: opts
})
end
@doc """
List repositories in an organization migration
## 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/migrations/orgs#list-repositories-in-an-organization-migration)
"""
@spec list_repos_for_org(String.t(), integer, keyword) ::
{:ok, [GitHub.Repository.minimal()]} | {:error, GitHub.Error.t()}
def list_repos_for_org(org, migration_id, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:page, :per_page])
client.request(%{
args: [org: org, migration_id: migration_id],
call: {GitHub.Migrations, :list_repos_for_org},
url: "/orgs/#{org}/migrations/#{migration_id}/repositories",
method: :get,
query: query,
response: [{200, {:array, {GitHub.Repository, :minimal}}}, {404, {GitHub.BasicError, :t}}],
opts: opts
})
end
@doc """
Map a commit author
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/source-imports#map-a-commit-author)
"""
@spec map_commit_author(String.t(), String.t(), integer, map, keyword) ::
{:ok, GitHub.PorterAuthor.t()} | {:error, GitHub.Error.t()}
def map_commit_author(owner, repo, author_id, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [owner: owner, repo: repo, author_id: author_id, body: body],
call: {GitHub.Migrations, :map_commit_author},
url: "/repos/#{owner}/#{repo}/import/authors/#{author_id}",
body: body,
method: :patch,
request: [{"application/json", :map}],
response: [
{200, {GitHub.PorterAuthor, :t}},
{404, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :t}},
{503, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc """
Update Git LFS preference
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/source-imports#update-git-lfs-preference)
"""
@spec set_lfs_preference(String.t(), String.t(), map, keyword) ::
{:ok, GitHub.Import.t()} | {:error, GitHub.Error.t()}
def set_lfs_preference(owner, repo, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [owner: owner, repo: repo, body: body],
call: {GitHub.Migrations, :set_lfs_preference},
url: "/repos/#{owner}/#{repo}/import/lfs",
body: body,
method: :patch,
request: [{"application/json", :map}],
response: [
{200, {GitHub.Import, :t}},
{422, {GitHub.ValidationError, :t}},
{503, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc """
Start a user migration
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/users#start-a-user-migration)
"""
@spec start_for_authenticated_user(map, keyword) ::
{:ok, GitHub.Migration.t()} | {:error, GitHub.Error.t()}
def start_for_authenticated_user(body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [body: body],
call: {GitHub.Migrations, :start_for_authenticated_user},
url: "/user/migrations",
body: body,
method: :post,
request: [{"application/json", :map}],
response: [
{201, {GitHub.Migration, :t}},
{304, nil},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :t}}
],
opts: opts
})
end
@doc """
Start an organization migration
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/orgs#start-an-organization-migration)
"""
@spec start_for_org(String.t(), map, keyword) ::
{:ok, GitHub.Migration.t()} | {:error, GitHub.Error.t()}
def start_for_org(org, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [org: org, body: body],
call: {GitHub.Migrations, :start_for_org},
url: "/orgs/#{org}/migrations",
body: body,
method: :post,
request: [{"application/json", :map}],
response: [
{201, {GitHub.Migration, :t}},
{404, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :t}}
],
opts: opts
})
end
@doc """
Start an import
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/source-imports#start-an-import)
"""
@spec start_import(String.t(), String.t(), map, keyword) ::
{:ok, GitHub.Import.t()} | {:error, GitHub.Error.t()}
def start_import(owner, repo, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [owner: owner, repo: repo, body: body],
call: {GitHub.Migrations, :start_import},
url: "/repos/#{owner}/#{repo}/import",
body: body,
method: :put,
request: [{"application/json", :map}],
response: [
{201, {GitHub.Import, :t}},
{404, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :t}},
{503, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc """
Unlock a user repository
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/users#unlock-a-user-repository)
"""
@spec unlock_repo_for_authenticated_user(integer, String.t(), keyword) ::
:ok | {:error, GitHub.Error.t()}
def unlock_repo_for_authenticated_user(migration_id, repo_name, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [migration_id: migration_id, repo_name: repo_name],
call: {GitHub.Migrations, :unlock_repo_for_authenticated_user},
url: "/user/migrations/#{migration_id}/repos/#{repo_name}/lock",
method: :delete,
response: [
{204, nil},
{304, nil},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{404, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc """
Unlock an organization repository
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/orgs#unlock-an-organization-repository)
"""
@spec unlock_repo_for_org(String.t(), integer, String.t(), keyword) ::
:ok | {:error, GitHub.Error.t()}
def unlock_repo_for_org(org, migration_id, repo_name, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [org: org, migration_id: migration_id, repo_name: repo_name],
call: {GitHub.Migrations, :unlock_repo_for_org},
url: "/orgs/#{org}/migrations/#{migration_id}/repos/#{repo_name}/lock",
method: :delete,
response: [{204, nil}, {404, {GitHub.BasicError, :t}}],
opts: opts
})
end
@doc """
Update an import
## Resources
* [API method documentation](https://docs.github.com/rest/migrations/source-imports#update-an-import)
"""
@spec update_import(String.t(), String.t(), map | nil, keyword) ::
{:ok, GitHub.Import.t()} | {:error, GitHub.Error.t()}
def update_import(owner, repo, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [owner: owner, repo: repo, body: body],
call: {GitHub.Migrations, :update_import},
url: "/repos/#{owner}/#{repo}/import",
body: body,
method: :patch,
request: [{"application/json", {:nullable, :map}}],
response: [{200, {GitHub.Import, :t}}, {503, {GitHub.BasicError, :t}}],
opts: opts
})
end
end