refactor: harden seed only once implementation
This commit is contained in:
parent
c40f3135a1
commit
77012f10ca
6 changed files with 20 additions and 13 deletions
|
|
@ -7,7 +7,7 @@ defmodule Mv.Release do
|
|||
|
||||
- `migrate/0` - Runs all pending Ecto migrations.
|
||||
- `bootstrap_seeds_applied?/0` - Returns whether bootstrap was already applied (admin user exists). Used to skip re-running seeds.
|
||||
- `run_seeds/0` - If bootstrap already applied, skips; otherwise runs bootstrap seeds (fee types, custom fields, roles, settings). In production, set `RUN_DEV_SEEDS=true` to also run dev seeds (members, groups, sample data).
|
||||
- `run_seeds/0` - If bootstrap already applied, skips; otherwise runs bootstrap seeds (fee types, custom fields, roles, settings). Set `FORCE_SEEDS=true` to re-run seeds even when already applied. In production, set `RUN_DEV_SEEDS=true` to also run dev seeds (members, groups, sample data).
|
||||
- `seed_admin/0` - Ensures an admin user exists from ENV (ADMIN_EMAIL, ADMIN_PASSWORD
|
||||
or ADMIN_PASSWORD_FILE). Idempotent; can be run on every deployment or via shell
|
||||
to update the admin password without redeploying.
|
||||
|
|
@ -19,6 +19,7 @@ defmodule Mv.Release do
|
|||
alias Mv.Authorization.Role
|
||||
|
||||
require Ash.Query
|
||||
require Logger
|
||||
|
||||
def migrate do
|
||||
load_app()
|
||||
|
|
@ -46,13 +47,15 @@ defmodule Mv.Release do
|
|||
_ -> false
|
||||
end
|
||||
rescue
|
||||
_ -> false
|
||||
e ->
|
||||
Logger.warning("Could not check seed status (#{inspect(e)}), assuming not applied.")
|
||||
false
|
||||
end
|
||||
|
||||
@doc """
|
||||
Runs seed scripts so the database has required bootstrap data (and optionally dev data).
|
||||
|
||||
- Skips if bootstrap was already applied (Admin role exists); otherwise runs bootstrap seeds.
|
||||
- Skips if bootstrap was already applied (admin user exists); set `FORCE_SEEDS=true` to override and re-run.
|
||||
- If `RUN_DEV_SEEDS` env is set to `"true"`, also runs dev seeds (members, groups, sample data)
|
||||
when bootstrap is run.
|
||||
|
||||
|
|
@ -64,8 +67,8 @@ defmodule Mv.Release do
|
|||
{:error, {app, reason}} -> raise "Failed to start #{inspect(app)}: #{inspect(reason)}"
|
||||
end
|
||||
|
||||
if bootstrap_seeds_applied?() do
|
||||
IO.puts("Seeds already applied (admin user exists). Skipping.")
|
||||
if bootstrap_seeds_applied?() and System.get_env("FORCE_SEEDS") != "true" do
|
||||
IO.puts("Seeds already applied. Skipping. (Set FORCE_SEEDS=true to override)")
|
||||
else
|
||||
priv = :code.priv_dir(@app)
|
||||
bootstrap_path = Path.join(priv, "repo/seeds_bootstrap.exs")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue