From 9cec2e75672f68b9415bfc606bd99486f0d7feb4 Mon Sep 17 00:00:00 2001 From: Caleb Webber Date: Sat, 3 May 2025 14:00:16 -0400 Subject: [PATCH] add migrate_gt_to_fj.exs --- migrate_gt_to_fj.exs | 52 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 migrate_gt_to_fj.exs diff --git a/migrate_gt_to_fj.exs b/migrate_gt_to_fj.exs new file mode 100644 index 0000000..24430f0 --- /dev/null +++ b/migrate_gt_to_fj.exs @@ -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)