From 1ee149d01568a46c35f1f31362d0ba76f57351f2 Mon Sep 17 00:00:00 2001 From: Claire Date: Thu, 5 Dec 2024 12:40:30 +0100 Subject: [PATCH] Add explicit migration breakpoints (#33089) --- .github/workflows/test-migrations.yml | 6 ++++++ lib/tasks/db.rake | 10 ++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-migrations.yml b/.github/workflows/test-migrations.yml index 5b80fef037..306191fb8e 100644 --- a/.github/workflows/test-migrations.yml +++ b/.github/workflows/test-migrations.yml @@ -12,6 +12,7 @@ on: - '**/*.rb' - '.github/workflows/test-migrations.yml' - 'lib/tasks/tests.rake' + - 'lib/tasks/db.rake' pull_request: paths: @@ -90,6 +91,11 @@ jobs: bin/rails db:drop bin/rails db:create SKIP_POST_DEPLOYMENT_MIGRATIONS=true bin/rails tests:migrations:prepare_database + + # Migrate up to v4.2.0 breakpoint + bin/rails db:migrate VERSION=20230907150100 + + # Migrate the rest SKIP_POST_DEPLOYMENT_MIGRATIONS=true bin/rails db:migrate bin/rails db:migrate bin/rails tests:migrations:check_database diff --git a/lib/tasks/db.rake b/lib/tasks/db.rake index 73de0c120f..3288e72d46 100644 --- a/lib/tasks/db.rake +++ b/lib/tasks/db.rake @@ -43,8 +43,14 @@ namespace :db do end task pre_migration_check: :environment do - version = ActiveRecord::Base.connection.database_version - abort 'This version of Mastodon requires PostgreSQL 12.0 or newer. Please update PostgreSQL before updating Mastodon.' if version < 120_000 + pg_version = ActiveRecord::Base.connection.database_version + abort 'This version of Mastodon requires PostgreSQL 12.0 or newer. Please update PostgreSQL before updating Mastodon.' if pg_version < 120_000 + + schema_version = ActiveRecord::Migrator.current_version + abort <<~MESSAGE if ENV['SKIP_POST_DEPLOYMENT_MIGRATIONS'] && schema_version < 2023_09_07_150100 + Zero-downtime migrations from Mastodon versions earlier than 4.2.0 are not supported. + Please update to Mastodon 4.2.x first or upgrade by stopping all services and running migrations without `SKIP_POST_DEPLOYMENT_MIGRATIONS`. + MESSAGE end Rake::Task['db:migrate'].enhance(['db:pre_migration_check'])