class Aggkit::Env
Attributes
env_root[RW]
environment[RW]
name[RW]
project[RW]
Public Class Methods
list(path = Dir.pwd)
click to toggle source
# File lib/aggkit/env.rb, line 26 def self.list(path = Dir.pwd) root = Project.new(path).project_root Pathfinder.new(root).each_env end
new(path)
click to toggle source
# File lib/aggkit/env.rb, line 47 def initialize(path) @project = if File.directory?(File.expand_path(path)) @name = File.basename(File.realpath(File.expand_path(path))) Project.new(path) else @name = path.strip Project.new(Dir.pwd) end unless self.class.list.include?(@name) raise "There no env #{@name.inspect} in project: #{project.project_root.inspect}" end @env_root = File.join(project_root, 'envs', @name) end
with_env(env) { |env| ... }
click to toggle source
# File lib/aggkit/env.rb, line 31 def self.with_env(env) current_env = ENV.to_h env.each_pair do |k, v| ENV[k.to_s] = v.to_s end yield(env) ensure (env.keys.map(&:to_s) - current_env.keys).each do |key| ENV.delete(key.to_s) end current_env.each_pair do |k, v| ENV[k.to_s] = v.to_s end end
Public Instance Methods
config_file()
click to toggle source
# File lib/aggkit/env.rb, line 99 def config_file [File.join(env_root, 'config.yml'), File.join(env_root, 'config.yaml')].compact.select{|f| File.exist?(f) }.uniq.first end
core_dot_file()
click to toggle source
# File lib/aggkit/env.rb, line 87 def core_dot_file begin File.join(core_root, '.env') rescue StandardError nil end end
core_root()
click to toggle source
# File lib/aggkit/env.rb, line 75 def core_root project.core_root end
dot_file()
click to toggle source
# File lib/aggkit/env.rb, line 79 def dot_file File.join(env_root, '.env') end
env_files()
click to toggle source
# File lib/aggkit/env.rb, line 95 def env_files [core_dot_file, project_dot_file, dot_file].compact.select{|f| File.exist?(f) }.uniq end
prepare(release: false)
click to toggle source
# File lib/aggkit/env.rb, line 63 def prepare(release: false) @environment = prepare_environment(release: release) end
project_dot_file()
click to toggle source
# File lib/aggkit/env.rb, line 83 def project_dot_file File.join(project_root, '.env') end
project_root()
click to toggle source
# File lib/aggkit/env.rb, line 71 def project_root project.project_root end
show()
click to toggle source
# File lib/aggkit/env.rb, line 103 def show { name: name, project_root: project_root, core_root: core_root, envfiles: env_files, config_file: config_file, envs: environment } end
with_env(&block)
click to toggle source
# File lib/aggkit/env.rb, line 67 def with_env(&block) Env.with_env(environment) & block end
Private Instance Methods
check_path_variable(path)
click to toggle source
# File lib/aggkit/env.rb, line 164 def check_path_variable(path) if ENV['PATH'][path] ENV['PATH'] else "#{ENV['PATH']}:#{path}" end end
prepare_compose(env, release: false)
click to toggle source
# File lib/aggkit/env.rb, line 138 def prepare_compose(env, release: false) compose_files = if env['COMPOSE_FILE'] env['COMPOSE_FILE'] elsif File.exist?(File.join(env_root, 'docker-compose.yml')) File.join(env_root, 'docker-compose.yml') elsif File.exist?(File.join(env_root, 'docker-compose.yaml')) File.join(env_root, 'docker-compose.yaml') end if compose_files result_file = File.join(env_root, 'compose-result.yml') Env.with_env(env.merge('COMPOSE_FILE' => compose_files)) do if release `aggmerge #{result_file} --skip-build` else `aggmerge #{result_file}` end end { 'COMPOSE_FILE' => result_file } else {} end end
prepare_dot(env)
click to toggle source
# File lib/aggkit/env.rb, line 132 def prepare_dot(env) Env.with_env(env) do Dotenv.load_without_export(*env_files) end end
prepare_environment(release: false)
click to toggle source
# File lib/aggkit/env.rb, line 117 def prepare_environment(release: false) base_env = { 'ENV_ROOT' => env_root, 'PROJECT_ROOT' => project_root, 'CORE_ROOT' => core_root, 'PATH' => check_path_variable(env_root) } dot_env = prepare_dot(base_env) compose_env = prepare_compose(dot_env.merge(base_env), release: release) dot_env.merge(base_env).merge(compose_env) end