defmodule ArcadiaCloud.Sync.Bootstrap do @moduledoc """ First-run bootstrap: ensure the `skyai-internal` DO Project exists and is registered in our `cloud_projects` table. Resources discovered before any tenant project exists land here by default. Idempotent: safe to call on every sync. """ alias ArcadiaCloud.Cloud alias ArcadiaCloud.DigitalOcean.Client @internal_name "skyai-internal" @internal_purpose "skyai-infra" @do_purpose "Service or API" def ensure_skyai_internal do case Cloud.skyai_internal_project() do %{} = project -> {:ok, project} nil -> with {:ok, do_project} <- find_or_create_do_project() do {:ok, _local} = Cloud.ensure_project(%{ provider: "digitalocean", provider_id: do_project["id"], name: @internal_name, purpose: @internal_purpose, metadata: %{ do_purpose: do_project["purpose"], description: do_project["description"] } }) end end end defp find_or_create_do_project do with {:ok, projects} <- Client.list_projects() do case Enum.find(projects, &(&1["name"] == @internal_name)) do nil -> Client.create_project(@internal_name, @do_purpose, "Sky AI internal infrastructure (auto-created by arcadia-cloud)") existing -> {:ok, existing} end end end end