52 lines
1.4 KiB
Elixir
52 lines
1.4 KiB
Elixir
Mix.install([
|
|
{:req, "~> 0.5.10"}
|
|
]);
|
|
|
|
forgejo_token = System.get_env("FORGEJO_TOKEN")
|
|
gitea_token = System.get_env("GITEA_TOKEN")
|
|
gt_host = System.get_env("GITEA_HOST")
|
|
fj_host = System.get_env("FORGEJO_HOST")
|
|
gt_uid = System.get_env("GITEA_UID")
|
|
|
|
defmodule Forgejo do
|
|
require Req
|
|
|
|
def migrate_all(uid, gt_host, gt_token, fj_host, fj_token) do
|
|
url = "#{gt_host}/api/v1/repos/search"
|
|
params = %{"uid" => uid}
|
|
|
|
case Req.get!(url, params: params, headers: %{"Authorization" => "bearer #{gt_token}"} ) do
|
|
%{status: 200, body: body} ->
|
|
repos = body["data"]
|
|
for repo <- repos do
|
|
migrate(repo, host, gt_token, fj_host, fj_token)
|
|
end
|
|
|
|
{:error, error} ->
|
|
IO.puts("Error fetching repos: #{inspect(error)}")
|
|
end
|
|
end
|
|
|
|
def migrate(repo, gt_token, fj_host, fj_token) do
|
|
clone = repo["clone_url"]
|
|
name = repo["name"]
|
|
private? = repo["private"]
|
|
|
|
migration = %{
|
|
"private" => private?,
|
|
"clone_addr" => clone,
|
|
"auth_token" => gt_token,
|
|
"pull_requests" => true,
|
|
"lfs" => true,
|
|
"releases" => true,
|
|
"repo_name" => name,
|
|
"repo_owner" => "caleb",
|
|
"service" => "gitea"
|
|
} |> :json.encode()
|
|
|
|
Req.post!("#{fj_host}/api/v1/repos/migrate", body: migration, headers: %{"Authorization" => "bearer #{fj_token}", "Content-Type" => "application/json"} )
|
|
end
|
|
end
|
|
|
|
|
|
Forgejo.migrate_all(gt_uid, gt_host, gitea_token, fj_host, forgejo_token)
|