summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authormatthewmcgarvey <matthewmcgarvey14@gmail.com>2022-02-11 22:43:16 -0600
committermatthewmcgarvey <matthewmcgarvey14@gmail.com>2022-02-11 22:43:16 -0600
commit59654289cb7c024d3cf7c9d00d38cf4453bc48df (patch)
treed21f2dc1b0d74dee3e2c807972a6349606bddfbb /src
parentcf13c11236de6c4e373b110730530c8e1f305900 (diff)
downloadinvidious-59654289cb7c024d3cf7c9d00d38cf4453bc48df.tar.gz
invidious-59654289cb7c024d3cf7c9d00d38cf4453bc48df.tar.bz2
invidious-59654289cb7c024d3cf7c9d00d38cf4453bc48df.zip
Run migrations through CLI instead of when app starts
Diffstat (limited to 'src')
-rw-r--r--src/invidious.cr9
-rw-r--r--src/invidious/database/migrator.cr7
2 files changed, 15 insertions, 1 deletions
diff --git a/src/invidious.cr b/src/invidious.cr
index e8ad03ef..25ee7c78 100644
--- a/src/invidious.cr
+++ b/src/invidious.cr
@@ -102,6 +102,10 @@ Kemal.config.extra_options do |parser|
puts SOFTWARE.to_pretty_json
exit
end
+ parser.on("--migrate", "Run any migrations") do
+ Invidious::Database::Migrator.new(PG_DB).migrate
+ exit
+ end
end
Kemal::CLI.new ARGV
@@ -113,7 +117,10 @@ OUTPUT = CONFIG.output.upcase == "STDOUT" ? STDOUT : File.open(CONFIG.output, mo
LOGGER = Invidious::LogHandler.new(OUTPUT, CONFIG.log_level)
# Run migrations
-Invidious::Database::Migrator.new(PG_DB).migrate
+if Invidious::Database::Migrator.new(PG_DB).pending_migrations?
+ puts "There are pending migrations. Run `invidious --migrate` to apply the migrations."
+ exit 46
+end
# Check table integrity
Invidious::Database.check_integrity(CONFIG)
diff --git a/src/invidious/database/migrator.cr b/src/invidious/database/migrator.cr
index 2cd869c9..660c3203 100644
--- a/src/invidious/database/migrator.cr
+++ b/src/invidious/database/migrator.cr
@@ -22,6 +22,13 @@ class Invidious::Database::Migrator
puts "No migrations to run." unless ran_migration
end
+ def pending_migrations? : Bool
+ versions = load_versions
+
+ load_migrations.sort_by(&.version)
+ .any? { |migration| !versions.includes?(migration.version) }
+ end
+
private def load_migrations : Array(Invidious::Database::Migration)
self.class.migrations.map(&.new(@db))
end