priv/repo/migrations/20260820025133_complete_forge_deploys_columns.exs

main at 58e6347eeb72 · 866 B

defmodule OpenAgents.Repo.Migrations.CompleteForgeDeploysColumns do
  use Ecto.Migration

  def up do
    for {column, type, opts} <- missing_columns() do
      add_column?(column, type, opts)
    end
  end

  def down do
    # No safe down path for idempotent column additions.
  end

  defp missing_columns do
    [
      {:result, :string, null: false},
      {:canary, :string, []},
      {:push_to_live_ms, :integer, []},
      {:nodes, {:array, :string}, null: false, default: []}
    ]
  end

  defp add_column?(column, type, opts) do
    case repo().query("""
         SELECT 1 FROM information_schema.columns
         WHERE table_name = 'forge_deploys' AND column_name = '#{column}'
         """) do
      {:ok, %{num_rows: 0}} ->
        alter table(:forge_deploys) do
          add column, type, opts
        end

      _ ->
        :ok
    end
  end
end