Compare commits

...
Sign in to create a new pull request.

1 commit

Author SHA1 Message Date
3ac7ac846c add migrate_gt_to_fj.exs 2025-05-03 14:03:17 -04:00

52
migrate_gt_to_fj.exs Normal file
View file

@ -0,0 +1,52 @@
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)