#36639: Add CI step to run makemigrations --check against test models
-------------------------------------+-------------------------------------
Reporter: Jacob Walls | Type:
| Cleanup/optimization
Status: new | Component: Core
| (Other)
Version: dev | Severity: Normal
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
When adjusting or adding test models, it is easy to overlook adding
changes to the migration files.
We could add some sort of CI check for this. We'd want a script, not
changes in `django.test`, but here's a dirty version just to surface the
failures. It doesn't work with the parallel runner.
{{{#!diff
diff --git a/django/test/testcases.py b/django/test/testcases.py
index c587f770a6..b33d2cf627 100644
--- a/django/test/testcases.py
+++ b/django/test/testcases.py
@@ -1132,6 +1132,12 @@ class TransactionTestCase(SimpleTestCase):
cls._pre_setup()
cls._pre_setup_ran_eagerly = True
+ try:
+ call_command("makemigrations", "--check", verbosity=0)
+ except SystemExit:
+ call_command("makemigrations", "--check", verbosity=3)
+ raise
+
@classmethod
def tearDownClass(cls):
super().tearDownClass()
}}}
Gives as of 2514857e3fae831106832cca8823237801cf2cad:
{{{#!py
Migrations for 'db_functions':
db_functions/migrations/0003_article_id_author_id_decimalmodel_id_dtmodel_id_and_more.py
+ Add field id to article
+ Add field id to author
+ Add field id to decimalmodel
+ Add field id to dtmodel
+ Add field id to fan
+ Add field id to floatmodel
+ Add field id to integermodel
Full migrations file
'0003_article_id_author_id_decimalmodel_id_dtmodel_id_and_more.py':
# Generated by Django 6.1.dev20251003191637 on 2025-10-03 17:27
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('db_functions', '0002_create_test_models'),
]
operations = [
migrations.AddField(
model_name='article',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True,
serialize=False, verbose_name='ID'),
),
migrations.AddField(
model_name='author',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True,
serialize=False, verbose_name='ID'),
),
migrations.AddField(
model_name='decimalmodel',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True,
serialize=False, verbose_name='ID'),
),
migrations.AddField(
model_name='dtmodel',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True,
serialize=False, verbose_name='ID'),
),
migrations.AddField(
model_name='fan',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True,
serialize=False, verbose_name='ID'),
),
migrations.AddField(
model_name='floatmodel',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True,
serialize=False, verbose_name='ID'),
),
migrations.AddField(
model_name='integermodel',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True,
serialize=False, verbose_name='ID'),
),
]
Migrations for 'migration_test_data_persistence':
migration_test_data_persistence/migrations/0003_unmanaged_alter_book_id.py
+ Create model Unmanaged
~ Alter field id on book
Full migrations file '0003_unmanaged_alter_book_id.py':
# Generated by Django 6.1.dev20251003191637 on 2025-10-03 17:27
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('migration_test_data_persistence', '0002_add_book'),
]
operations = [
migrations.CreateModel(
name='Unmanaged',
fields=[
('id', models.BigAutoField(auto_created=True,
primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=100)),
],
options={
'managed': False,
},
),
migrations.AlterField(
model_name='book',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True,
serialize=False, verbose_name='ID'),
),
]
Migrations for 'postgres_tests':
postgres_tests/migrations/0003_alter_withsizearraymodel_field.py
~ Alter field field on withsizearraymodel
Full migrations file '0003_alter_withsizearraymodel_field.py':
# Generated by Django 6.1.dev20251003191637 on 2025-10-03 17:27
import postgres_tests.fields
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('postgres_tests', '0002_create_test_models'),
]
operations = [
migrations.AlterField(
model_name='withsizearraymodel',
name='field',
field=postgres_tests.fields.DummyArrayField(base_field='',
default=None, size=1),
preserve_default=False,
),
]
Migrations for 'sites_framework':
sites_framework/migrations/0002_alter_customarticle_managers_and_more.py
~ Change managers on customarticle
~ Change managers on exclusivearticle
~ Change managers on syndicatedarticle
~ Alter field id on customarticle
~ Alter field id on exclusivearticle
~ Alter field id on syndicatedarticle
Full migrations file '0002_alter_customarticle_managers_and_more.py':
# Generated by Django 6.1.dev20251003191637 on 2025-10-03 17:27
import django.contrib.sites.managers
import django.db.models.manager
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('sites_framework', '0001_initial'),
]
operations = [
migrations.AlterModelManagers(
name='customarticle',
managers=[
('objects', django.db.models.manager.Manager()),
('on_site',
django.contrib.sites.managers.CurrentSiteManager('places_this_article_should_appear')),
],
),
migrations.AlterModelManagers(
name='exclusivearticle',
managers=[
('objects', django.db.models.manager.Manager()),
('on_site',
django.contrib.sites.managers.CurrentSiteManager()),
],
),
migrations.AlterModelManagers(
name='syndicatedarticle',
managers=[
('objects', django.db.models.manager.Manager()),
('on_site',
django.contrib.sites.managers.CurrentSiteManager()),
],
),
migrations.AlterField(
model_name='customarticle',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True,
serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='exclusivearticle',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True,
serialize=False, verbose_name='ID'),
),
migrations.AlterField(
model_name='syndicatedarticle',
name='id',
field=models.BigAutoField(auto_created=True, primary_key=True,
serialize=False, verbose_name='ID'),
),
]
}}}
--
Ticket URL: <
https://code.djangoproject.com/ticket/36639>
Django <
https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.