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)