• Stars
    star
    507
  • Rank 87,068 (Top 2 %)
  • Language
    Python
  • License
    Apache License 2.0
  • Created over 7 years ago
  • Updated 9 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

πŸš€ Detect backward incompatible migrations for your django project

Django migration linter

Detect backward incompatible migrations for your Django project. It will save you time by making sure migrations will not break with a older codebase.

Build Status codecov PyPI PR_Welcome 3YD_Hiring GitHub_Stars

Quick installation

pip install django-migration-linter

And add the migration linter to your INSTALLED_APPS:

INSTALLED_APPS = [
    ...,
    "django_migration_linter",
    ...,
]

Optionally, add a configuration:

MIGRATION_LINTER_OPTIONS = {
    ...
}

For details about configuration options, checkout Usage.

Usage example

$ 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.

Integration

One can either integrate the linter in the CI using its lintmigrations command, or detect incompatibilities during generation of migrations with

$ python manage.py makemigrations --lint

Migrations for 'app_correct':
  tests/test_project/app_correct/migrations/0003_a_column.py
    - Add field column to a
Linting for 'app_correct':
(app_correct, 0003_a_column)... ERR
        NOT NULL constraint on columns

The migration linter detected that this migration is not 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] n
Deleted tests/test_project/app_correct/migrations/0003_a_column.py

The linter found that the newly created migration is not backward compatible and deleted the file after confirmation. This behaviour can be the default of the makemigrations command through the MIGRATION_LINTER_OVERRIDE_MAKEMIGRATIONS Django setting. Find out more about the makemigrations command at docs/makemigrations.md.

More information

Please find more documentation in the docs/ folder.

Some implementation details can be found in the ./docs/internals/ folder.

Blog post

They talk about the linter

Related

  • django-test-migrations - Test django schema and data migrations, including migrations' order and best practices.

License

django-migration-linter is released under the Apache 2.0 License.

Maintained by David Wobrock

More Repositories

1

django-deprecate-fields

This package allows deprecating model fields and allows removing them in a backwards compatible manner.
Python
152
star
2

django-add-default-value

This django Migration Operation can be used to transfer a Fields default value to the database scheme.
Python
129
star
3

kotti

πŸ’… 3YOURMIND’s Vue UI Framework & Design System
TypeScript
77
star
4

django-replace-migrations

Python
12
star
5

fire-pr

πŸ”₯ Create Pull Requests in an approachable way, this extension will streamline your pull request proces
Vue
9
star
6

js-polyfill-docker

🐳Docker container for the polyfill.io service to serve JavaScript bundles per browser efficiently.
Dockerfile
7
star
7

vue-comments

πŸ“ A Vue.js plugin to show comments related to an identifier. This identifier is called projectId internally but since this component is written with a dynamic mindset you can provide your own actions to deal with CRUD operations on comments.
JavaScript
6
star
8

drf-payload-customizer

This package allows you to customize your django-rest-framework serializer i/o in specific ways.
Python
5
star
9

3YDMoeller

A C++ single header implementation of Moeller's Triangle-Triangle & Triangle-Box intersection algorithms for BVH trasversal
C++
5
star
10

yoco

πŸ’Ž Icons used in the applications of 3YOURMIND. MOVED TO THE KOTTI REPOSITORY.
3
star
11

vue-yodify

πŸ’¬ A Vue.js notification plugin with easy installation and usage
Vue
3
star
12

django-model-sync

Python
2
star
13

xfvb-run

fork of a gist
Shell
1
star
14

vscode-frontend-extension-pack

The repository for the 3yourmind Frontend Extension Pack
JavaScript
1
star