DEV: Promote old post-deploy migrations to pre-deploy migrations (PR #13477)

Having a large number of post-deploy migrations running out-of-numerical-sequence with pre-deploy migrations can be problematic. For example, if we have the sequence

  • db/migrate/2017… - add column
  • db/post_migrate/2018 - drop the column
  • db/migrate/2021… - add the same column again

It will work fine in numerical order. But if you run the pre-deploy migrations followed by the post-deploy migrations, you will not get the same result.

Our post-deploy system is designed to allow for seamless upgrades of Discourse. However, it is reasonable for us to only support this totally seamless experience for a limited period of time. This commit moves all post_deploy migrations which are more than 1 year old (i.e. more than 2 major Discourse versions ago) into the regular pre-deploy migrations directory. This limits the impact of any edge cases caused by out-of-numerical-sequence migrations.

GitHub

Normally we’d wait longer for more buy in on a big change like this, but considering that installing new Discourses is broken I think we need to approve this more urgently.

I am fine with old forums having some errors on upgrade in exchange for fixing installations. We can keep discussing whether to do this long term but it’s important to stop the bleeding.