Read from .kamal/.env

To avoid conflicts with other tools that use .env files, read the files
from .kamal/ instead.

If there are no matching env files in .kamal/, we'll read from the
project root for now and emit a warning.
This commit is contained in:
Donal McBreen
2024-07-30 12:29:44 +01:00
parent ec4aa45852
commit a8837d453c
6 changed files with 34 additions and 17 deletions

View File

@@ -449,7 +449,7 @@ class CliMainTest < CliTestCase
test "envify" do
with_test_dotenv(".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
@@ -463,21 +463,21 @@ class CliMainTest < CliTestCase
with_test_dotenv(".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
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)
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")
@@ -486,7 +486,7 @@ class CliMainTest < CliTestCase
test "envify with clean env" do
with_test_dotenv(".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
@@ -549,8 +549,11 @@ class CliMainTest < CliTestCase
FileUtils.cp_r("test/fixtures/", fixtures_dup)
Dir.chdir(dir) do
files.each do |filename, contents|
File.binwrite(filename.to_s, contents)
FileUtils.mkdir_p(".kamal")
Dir.chdir(".kamal") do
files.each do |filename, contents|
File.binwrite(filename.to_s, contents)
end
end
yield
end

View File

@@ -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:)