:rocket: Detect backward incompatible migrations for your django project
Detect backward incompatible migrations for your Django project. It will save you time by making sure migrations will not break with a older codebase.
pip install django-migration-linter
And add the migration linter your
INSTALLED_APPS = [ ..., "django_migration_linter", ..., ]
$ python manage.py lintmigrations
(app_add_not_null_column, 0001_create_table)... OK (app_add_not_null_column, 0002_add_new_not_null_field)... ERR NOT NULL constraint on columns (app_drop_table, 0001_initial)... OK (app_drop_table, 0002_delete_a)... ERR DROPPING table (app_ignore_migration, 0001_initial)... OK (app_ignore_migration, 0002_ignore_migration)... IGNORE (app_rename_table, 0001_initial)... OK (app_rename_table, 0002_auto_20190414_1500)... ERR RENAMING tables
* Summary * Valid migrations: 4/8 Erroneous migrations: 3/8 Migrations with warnings: 0/8 Ignored migrations: 1/8
The linter analysed all migrations from the Django project. It found 3 migrations that are doing backward incompatible operations and 1 that is explicitly ignored. The list of incompatibilities that the linter analyses can be found at docs/incompatibilities.md.
More advanced usages of the linter and options can be found at docs/usage.md.
One can either integrate the linter in the CI and the
lintmigrationscommand, or detect incompatibilities during generation with ``` $ python manage.py makemigrations --lint
Migrations for 'appcorrect': tests/testproject/appcorrect/migrations/0003acolumn.py - Add field column to a Linting for 'appcorrect': (appcorrect, 0003a_column)... ERR NOT NULL constraint on columns
The migration linter detected that this migration is not be backward compatible. - If you keep the migration, you will want to fix the issue or ignore the migration. - By default, the newly created migration file will be deleted. Do you want to keep the migration? [y/N] [...] Deleted tests/testproject/appcorrect/migrations/0003acolumn.py ```
The linter found that the newly created migration is not backward compatible and deletes the files. This behaviour can be the default of the
makemigrationscommand through the
MIGRATION_LINTER_OVERRIDE_MAKEMIGRATIONSDjango settings. Find out more about the makemigrations command at docs/makemigrations.md.
Please find more documentation generally in the docs/ folder.
Some implementation details can found in the ./docs/internals/ folder.
django-migration-linter is released under the Apache 2.0 License.