diff --git a/config/deploy.rb b/config/deploy.rb index 5689f7e26..c3a875367 100644 --- a/config/deploy.rb +++ b/config/deploy.rb @@ -46,6 +46,9 @@ namespace :deploy do before "deploy:migrate", "remove_local_census_records_duplicates" after "deploy:migrate", "add_new_settings" + + before :publishing, "smtp_secrets" + after :publishing, "deploy:restart" after :published, "delayed_job:restart" after :published, "refresh_sitemap" @@ -127,3 +130,13 @@ task :setup_puma do end end end + +task :smtp_secrets do + on roles(:app) do + within release_path do + with rails_env: fetch(:rails_env) do + execute :rake, "secrets:smtp" + end + end + end +end diff --git a/lib/tasks/secrets.rake b/lib/tasks/secrets.rake new file mode 100644 index 000000000..0b7ed7c6b --- /dev/null +++ b/lib/tasks/secrets.rake @@ -0,0 +1,23 @@ +namespace :secrets do + desc "Add SMTP settings to secrets.yml" + task smtp: :environment do + exit if Rails.application.secrets.smtp_settings + + current_settings = { + "mailer_delivery_method" => ActionMailer::Base.delivery_method.to_s, + "smtp_settings" => ActionMailer::Base.smtp_settings.stringify_keys + } + + secrets = Rails.application.config.paths["config/secrets"].first + stream = Psych.parse_stream(File.read(secrets)) + nodes = stream.children.first.children.first + + environment_index = nodes.children.index do |child| + child.is_a?(Psych::Nodes::Scalar) && child.value == Rails.env + end + + nodes.children[environment_index + 1].children.push(*Psych.parse(current_settings.to_yaml).children.first.children) + + File.open(secrets, "w") { |file| file.write stream.to_yaml } + end +end