Compare commits
1 Commits
v1.9.2
...
dot-kamal-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
70096160c9 |
@@ -37,11 +37,24 @@ module Kamal::Cli
|
||||
|
||||
def load_env
|
||||
if destination = options[:destination]
|
||||
Dotenv.load(".env.#{destination}", ".env")
|
||||
if File.exist?(".kamal/env.#{destination}") || File.exist?(".kamal/env")
|
||||
Dotenv.load(".kamal/env.#{destination}", ".kamal/env")
|
||||
else
|
||||
loading_files = [ (".env" if File.exist?(".env")), (".env.#{destination}" if File.exist?(".env.#{destination}")) ].compact
|
||||
if loading_files.any?
|
||||
warn "Loading #{loading_files.join(" and ")} from the project root, use .kamal/env* instead"
|
||||
Dotenv.load(".env.#{destination}", ".env")
|
||||
end
|
||||
end
|
||||
else
|
||||
if File.exist?(".kamal/env")
|
||||
Dotenv.load(".kamal/env")
|
||||
elsif File.exist?(".env")
|
||||
warn "Loading .env from the project root is deprecated, use .kamal/env instead"
|
||||
Dotenv.load(".env")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def reset_env
|
||||
replace_env @original_env
|
||||
|
||||
@@ -182,6 +182,15 @@ class Kamal::Cli::Main < Kamal::Cli::Base
|
||||
desc "envify", "Create .env by evaluating .env.erb (or .env.staging.erb -> .env.staging when using -d staging)"
|
||||
option :skip_push, aliases: "-P", type: :boolean, default: false, desc: "Skip .env file push"
|
||||
def envify
|
||||
if destination = options[:destination]
|
||||
env_template_path = ".kamal/env.#{destination}.erb"
|
||||
env_path = ".kamal/env.#{destination}"
|
||||
else
|
||||
env_template_path = ".kamal/env.erb"
|
||||
env_path = ".kamal/env"
|
||||
end
|
||||
|
||||
unless Pathname.new(File.expand_path(env_template_path)).exist?
|
||||
if destination = options[:destination]
|
||||
env_template_path = ".env.#{destination}.erb"
|
||||
env_path = ".env.#{destination}"
|
||||
@@ -190,6 +199,11 @@ class Kamal::Cli::Main < Kamal::Cli::Base
|
||||
env_path = ".env"
|
||||
end
|
||||
|
||||
if Pathname.new(File.expand_path(env_template_path)).exist?
|
||||
warn "Loading #{env_template_path} from the project root is deprecated, use .kamal/env[.<DESTINATION>].erb instead"
|
||||
end
|
||||
end
|
||||
|
||||
if Pathname.new(File.expand_path(env_template_path)).exist?
|
||||
# Ensure existing env doesn't pollute template evaluation
|
||||
content = with_original_env { ERB.new(File.read(env_template_path), trim_mode: "-").result }
|
||||
|
||||
@@ -447,9 +447,9 @@ class CliMainTest < CliTestCase
|
||||
end
|
||||
|
||||
test "envify" do
|
||||
with_test_dotenv(".env.erb": "HELLO=<%= 'world' %>") do
|
||||
with_test_env_files("env.erb": "HELLO=<%= 'world' %>") do
|
||||
run_command("envify")
|
||||
assert_equal("HELLO=world", File.read(".env"))
|
||||
assert_equal("HELLO=world", File.read(".kamal/env"))
|
||||
end
|
||||
end
|
||||
|
||||
@@ -461,32 +461,32 @@ class CliMainTest < CliTestCase
|
||||
<% end -%>
|
||||
EOF
|
||||
|
||||
with_test_dotenv(".env.erb": file) do
|
||||
with_test_env_files("env.erb": file) do
|
||||
run_command("envify")
|
||||
assert_equal("HELLO=world\nKEY=value\n", File.read(".env"))
|
||||
assert_equal("HELLO=world\nKEY=value\n", File.read(".kamal/env"))
|
||||
end
|
||||
end
|
||||
|
||||
test "envify with destination" do
|
||||
with_test_dotenv(".env.world.erb": "HELLO=<%= 'world' %>") do
|
||||
with_test_env_files("env.world.erb": "HELLO=<%= 'world' %>") do
|
||||
run_command("envify", "-d", "world", config_file: "deploy_for_dest")
|
||||
assert_equal "HELLO=world", File.read(".env.world")
|
||||
assert_equal "HELLO=world", File.read(".kamal/env.world")
|
||||
end
|
||||
end
|
||||
|
||||
test "envify with skip_push" do
|
||||
Pathname.any_instance.expects(:exist?).returns(true).times(1)
|
||||
File.expects(:read).with(".env.erb").returns("HELLO=<%= 'world' %>")
|
||||
File.expects(:write).with(".env", "HELLO=world", perm: 0600)
|
||||
Pathname.any_instance.expects(:exist?).returns(true).times(2)
|
||||
File.expects(:read).with(".kamal/env.erb").returns("HELLO=<%= 'world' %>")
|
||||
File.expects(:write).with(".kamal/env", "HELLO=world", perm: 0600)
|
||||
|
||||
Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:env:push").never
|
||||
run_command("envify", "--skip-push")
|
||||
end
|
||||
|
||||
test "envify with clean env" do
|
||||
with_test_dotenv(".env": "HELLO=already", ".env.erb": "HELLO=<%= ENV.fetch 'HELLO', 'never' %>") do
|
||||
with_test_env_files("env": "HELLO=already", "env.erb": "HELLO=<%= ENV.fetch 'HELLO', 'never' %>") do
|
||||
run_command("envify", "--skip-push")
|
||||
assert_equal "HELLO=never", File.read(".env")
|
||||
assert_equal "HELLO=never", File.read(".kamal/env")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -542,16 +542,19 @@ class CliMainTest < CliTestCase
|
||||
stdouted { Kamal::Cli::Main.start([ *command, "-c", "test/fixtures/#{config_file}.yml" ]) }
|
||||
end
|
||||
|
||||
def with_test_dotenv(**files)
|
||||
def with_test_env_files(**files)
|
||||
Dir.mktmpdir do |dir|
|
||||
fixtures_dup = File.join(dir, "test")
|
||||
FileUtils.mkdir_p(fixtures_dup)
|
||||
FileUtils.cp_r("test/fixtures/", fixtures_dup)
|
||||
|
||||
Dir.chdir(dir) do
|
||||
FileUtils.mkdir_p(".kamal")
|
||||
Dir.chdir(".kamal") do
|
||||
files.each do |filename, contents|
|
||||
File.binwrite(filename.to_s, contents)
|
||||
end
|
||||
end
|
||||
yield
|
||||
end
|
||||
end
|
||||
|
||||
@@ -97,7 +97,7 @@ class MainTest < IntegrationTest
|
||||
|
||||
private
|
||||
def assert_local_env_file(contents)
|
||||
assert_equal contents, deployer_exec("cat .env", capture: true)
|
||||
assert_equal contents, deployer_exec("cat .kamal/env", capture: true)
|
||||
end
|
||||
|
||||
def assert_envs(version:)
|
||||
@@ -127,7 +127,7 @@ class MainTest < IntegrationTest
|
||||
end
|
||||
|
||||
def remove_local_env_file
|
||||
deployer_exec("rm .env")
|
||||
deployer_exec("rm .kamal/env")
|
||||
end
|
||||
|
||||
def assert_remote_env_file(contents, vm:)
|
||||
|
||||
Reference in New Issue
Block a user