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

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/django-updates/01070199ac35c0c8-39347c22-1fc6-45ae-bec9-821c54222c35-000000%40eu-central-1.amazonses.com.

Reply via email to