Initial commit
This commit is contained in:
71
scripts/bootstrap-app-staging.rb
Normal file
71
scripts/bootstrap-app-staging.rb
Normal file
@@ -0,0 +1,71 @@
|
||||
#!/usr/bin/env ruby
|
||||
# frozen_string_literal: true
|
||||
|
||||
# Build config/app.staging.yml from app.production.yml (preferred) or example template.
|
||||
# Usage: ruby scripts/bootstrap-app-staging.rb
|
||||
#
|
||||
# Run from Alvand-P root. Does not overwrite if app.staging.yml is already a valid Hash
|
||||
# unless BOOTSTRAP_FORCE=1.
|
||||
|
||||
require 'yaml'
|
||||
|
||||
ROOT = File.expand_path('..', __dir__)
|
||||
STAGING_PATH = File.join(ROOT, 'config/app.staging.yml')
|
||||
PRODUCTION_PATH = File.join(ROOT, 'config/app.production.yml')
|
||||
EXAMPLE_PATH = File.join(ROOT, 'config/app.staging.yml.example')
|
||||
|
||||
def load_hash(path)
|
||||
return nil unless File.exist?(path)
|
||||
|
||||
data = YAML.load_file(path)
|
||||
return data if data.is_a?(Hash)
|
||||
|
||||
warn "WARN: #{path} is #{data.class}, not Hash — ignored"
|
||||
nil
|
||||
end
|
||||
|
||||
def deep_merge(base, overlay)
|
||||
base.merge(overlay) do |_key, old_val, new_val|
|
||||
if old_val.is_a?(Hash) && new_val.is_a?(Hash)
|
||||
deep_merge(old_val, new_val)
|
||||
else
|
||||
new_val
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
staging_overlay = {
|
||||
'app' => {
|
||||
'domain' => 'fibitex.com',
|
||||
'subdomain' => 'beta',
|
||||
'shahoo_subdomain' => 'shahoo'
|
||||
},
|
||||
'images' => {
|
||||
'peatio' => 'custom/dena:1',
|
||||
'barong' => 'custom/dalan:1',
|
||||
'frontend' => 'custom/gereh:1',
|
||||
'gereh' => 'custom/gereh:1',
|
||||
'shahoo' => 'custom/shahoo:1',
|
||||
'shahoo_bff' => 'custom/shahoo-bff:1'
|
||||
}
|
||||
}
|
||||
|
||||
existing = load_hash(STAGING_PATH)
|
||||
if existing && ENV['BOOTSTRAP_FORCE'] != '1'
|
||||
puts "OK: #{STAGING_PATH} already exists and is a valid Hash."
|
||||
puts 'Set BOOTSTRAP_FORCE=1 to regenerate.'
|
||||
exit 0
|
||||
end
|
||||
|
||||
source = load_hash(PRODUCTION_PATH) || load_hash(EXAMPLE_PATH)
|
||||
unless source
|
||||
warn 'ERROR: Need config/app.production.yml or config/app.staging.yml.example'
|
||||
exit 1
|
||||
end
|
||||
|
||||
merged = deep_merge(source, staging_overlay)
|
||||
File.write(STAGING_PATH, merged.to_yaml)
|
||||
puts "Wrote #{STAGING_PATH}"
|
||||
puts 'Next:'
|
||||
puts ' export OPENDAX_ENV=staging'
|
||||
puts ' bundle exec rake render:config'
|
||||
Reference in New Issue
Block a user