#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 [email protected].
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