hensei-api/lib/tasks/deploy.rake
Justin Edmund d71b78e5f8
Update post-deploy script and Rails credentials (#155)
* Fresh credentials.yml.enc

* Update .ruby-gemset

* Made PostDeploymentManager modular

We broke PostDeploymentManager out into several files to make it easier to maintain.

We also added a "force" mode that forces the script to consider all CSV files. This is useful for testing the post-deploy script itself. This should only be used in test mode or you will dirty your database.

We also fine tuned some of the logging to make sure that both verbose and non-verbose modes are helpful.
2025-01-15 14:56:38 -08:00

83 lines
2.3 KiB
Ruby

# frozen_string_literal: true
require_relative '../post_deployment/manager'
require_relative '../logging_helper'
namespace :deploy do
desc 'Post-deployment tasks: Run migrations, import data, download images, and rebuild search indices. Options: TEST=true for test mode, VERBOSE=true for verbose output, STORAGE=local|s3|both'
task post_deployment: :environment do
include LoggingHelper
# Load all required files
Dir[Rails.root.join('lib', 'post_deployment', '**', '*.rb')].each { |file| require file }
Dir[Rails.root.join('lib', 'granblue', '**', '*.rb')].each { |file| require file }
# Ensure Rails environment is loaded
Rails.application.eager_load!
begin
display_startup_banner
options = parse_and_validate_options
display_configuration(options)
# Execute the deployment tasks
manager = PostDeployment::Manager.new(options)
manager.run
rescue StandardError => e
display_error(e)
exit 1
end
end
private
def display_startup_banner
puts "Starting deployment process...\n"
end
def parse_and_validate_options
storage = parse_storage_option
{
test_mode: ENV['TEST'] == 'true',
verbose: ENV['VERBOSE'] == 'true',
storage: storage,
force: ENV['FORCE'] == 'true'
}
end
def parse_storage_option
storage = (ENV['STORAGE'] || 'both').to_sym
unless [:local, :s3, :both].include?(storage)
raise ArgumentError, 'Invalid STORAGE option. Must be one of: local, s3, both'
end
storage
end
def display_configuration(options)
log_header('Configuration', '-')
puts "\n"
display_status("Test mode", options[:test_mode])
display_status("Verbose output", options[:verbose])
display_status("Process all", options[:force])
puts "Storage mode:\t#{options[:storage]}"
puts "\n"
end
def display_status(label, enabled)
status = enabled ? "✅ Enabled" : "❌ Disabled"
puts "#{label}:\t#{status}"
end
def display_error(error)
puts "\n❌ Error during deployment:"
puts " #{error.class}: #{error.message}"
puts "\nStack trace:" if ENV['VERBOSE'] == 'true'
puts error.backtrace.take(10) if ENV['VERBOSE'] == 'true'
puts "\nDeployment failed! Please check the logs for details."
end
end