scinote-web/bin/load_report_templates
2024-10-18 14:38:35 +02:00

42 lines
1.4 KiB
Ruby
Executable file

#!/usr/bin/env ruby
require 'httparty'
require 'zip'
template_zip_url_string = ENV.fetch('REPORT_TEMPLATES_ZIP_URL', nil)
return if template_zip_url_string.nil? || template_zip_url_string.empty?
template_zip_url = URI.parse(template_zip_url_string)
contents = case template_zip_url.scheme
when 'https'
HTTParty.get(template_zip_url).body
when 's3'
system("AWS_PAGER=\"\" aws s3api get-object --bucket #{template_zip_url.host} --key #{template_zip_url.path[1..]} #{ENV.fetch('APP_HOME', '.')}/app/views/reports/report_templates.zip")
File.read("#{ENV.fetch('APP_HOME', '.')}/app/views/reports/report_templates.zip")
end
puts "Loaded report templates zip from #{template_zip_url_string}"
root_folder = nil
Zip::File.open_buffer(StringIO.new(contents)) do |zip|
puts 'Extracting report templates...'
zip.each do |entry|
# set root zip folder
root_folder = entry.name and next if entry.name.count('/') == 1
# create path while omitting root zip folder
path = Pathname.new("#{ENV.fetch('APP_HOME', '.')}/app/views/reports/#{entry.name.sub(root_folder, '')}")
path.dirname.mkpath
# don't try and write file if entry is a folder
next if entry.name.end_with?('/')
path.open('wb') do |f|
f.write(entry.get_input_stream.read)
end
puts "Extracted #{path}"
end
end