Opened 70 minutes ago
#36639 new Cleanup/optimization
Add CI step to run makemigrations --check against test models
Reported by: | Jacob Walls | Owned by: | |
---|---|---|---|
Component: | Core (Other) | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
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.
-
django/test/testcases.py
diff --git a/django/test/testcases.py b/django/test/testcases.py index c587f770a6..b33d2cf627 100644
a b class TransactionTestCase(SimpleTestCase): 1132 1132 cls._pre_setup() 1133 1133 cls._pre_setup_ran_eagerly = True 1134 1134 1135 try: 1136 call_command("makemigrations", "--check", verbosity=0) 1137 except SystemExit: 1138 call_command("makemigrations", "--check", verbosity=3) 1139 raise 1140 1135 1141 @classmethod 1136 1142 def tearDownClass(cls): 1137 1143 super().tearDownClass()
Gives as of 2514857e3fae831106832cca8823237801cf2cad:
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'), ), ]
Note:
See TracTickets
for help on using tickets.