StrongMigrations

Build StatusModule VersionHex DocsTotal DownloadLicenseLast Updated

Catch unsafe migrations in your Elixir application

Table of Contents

What is it

strong_migrations is a library that protects your application from invoking unsafe migrations, they needs to be marked as a safe.

  1. Analyze migrations if they are safe.
  2. If migrations are unsafe -> print errors.
  3. If migrations are safe -> use ecto.migrate.

You can also use a macro of StrongMigrations like safety_assured to be sure it's safe and you can run migrations with specific changes. Example

defmodule SafetyAssuredDropTable do
@moduledoc false
use StrongMigrations
def change do
safety_assured do
drop(table(:users))
end
end
end

Features

How to install

The package can be installed by adding strong_migrations to your list of dependencies in mix.exs as follows. Also, it's worth adding an alias like: ecto.migrate -> strong_migrations.migrate and thanks to that you'll be sure that all migrations were checked before running.

Update your mix.exs:

def deps do
[
{:strong_migrations, "~> 0.1"}
]
end

Optionally, you can add an alias:

"ecto.migrate": "strong_migrations.migrate"

And, another option is to use StrongMigrations as a default for generated migrations. Just add following line to your config.exs file.

config :ecto_sql, migration_module: StrongMigrations

How to configure

If you want to specify which classifiers you want to use, please add to your config.exs following lines

config :strong_migrations,
classifiers: [
StrongMigrations.Classifiers.AddIndexConcurrentlyInTransaction,
StrongMigrations.Classifiers.AddIndexNotConcurrently,
StrongMigrations.Classifiers.DropIndexConcurrentlyInTransaction,
StrongMigrations.Classifiers.DropTable,
StrongMigrations.Classifiers.RemoveColumn,
StrongMigrations.Classifiers.RenameColumn
]

If you want to specify migration paths available in your project (not default -> priv/repo/migrations), please add to your config.exs following lines

config :strong_migrations,
migration_paths: [
"priv/repo/migrations",
"apps/*/priv/repo/migrations",
"my/fancy/path/to/migrations"
],

Similar Packages