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:
@@ -37,9 +37,23 @@ module Kamal::Cli
|
|||||||
|
|
||||||
def load_env
|
def load_env
|
||||||
if destination = options[:destination]
|
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, in future they will be loaded from .kamal/"
|
||||||
|
Dotenv.load(".env.#{destination}", ".env")
|
||||||
|
end
|
||||||
|
end
|
||||||
else
|
else
|
||||||
Dotenv.load(".env")
|
if File.exist?(".kamal/.env")
|
||||||
|
Dotenv.load(".kamal/.env")
|
||||||
|
elsif File.exist?(".env")
|
||||||
|
$stderr.puts caller
|
||||||
|
warn "Loading .env from the project root, in future it will be loaded then from .kamal/.env"
|
||||||
|
Dotenv.load(".env")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -179,15 +179,15 @@ class Kamal::Cli::Main < Kamal::Cli::Base
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
desc "envify", "Create .env by evaluating .env.erb (or .env.staging.erb -> .env.staging when using -d staging)"
|
desc "envify", "Create .kamal/.env by evaluating .kamal/.env.erb (or .kamal/.env.staging.erb -> .kamal/.env.staging when using -d staging)"
|
||||||
option :skip_push, aliases: "-P", type: :boolean, default: false, desc: "Skip .env file push"
|
option :skip_push, aliases: "-P", type: :boolean, default: false, desc: "Skip .env file push"
|
||||||
def envify
|
def envify
|
||||||
if destination = options[:destination]
|
if destination = options[:destination]
|
||||||
env_template_path = ".env.#{destination}.erb"
|
env_template_path = ".kamal/.env.#{destination}.erb"
|
||||||
env_path = ".env.#{destination}"
|
env_path = ".kamal/.env.#{destination}"
|
||||||
else
|
else
|
||||||
env_template_path = ".env.erb"
|
env_template_path = ".kamal/.env.erb"
|
||||||
env_path = ".env"
|
env_path = ".kamal/.env"
|
||||||
end
|
end
|
||||||
|
|
||||||
if Pathname.new(File.expand_path(env_template_path)).exist?
|
if Pathname.new(File.expand_path(env_template_path)).exist?
|
||||||
|
|||||||
@@ -449,7 +449,7 @@ class CliMainTest < CliTestCase
|
|||||||
test "envify" do
|
test "envify" do
|
||||||
with_test_dotenv(".env.erb": "HELLO=<%= 'world' %>") do
|
with_test_dotenv(".env.erb": "HELLO=<%= 'world' %>") do
|
||||||
run_command("envify")
|
run_command("envify")
|
||||||
assert_equal("HELLO=world", File.read(".env"))
|
assert_equal("HELLO=world", File.read(".kamal/.env"))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -463,21 +463,21 @@ class CliMainTest < CliTestCase
|
|||||||
|
|
||||||
with_test_dotenv(".env.erb": file) do
|
with_test_dotenv(".env.erb": file) do
|
||||||
run_command("envify")
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
test "envify with destination" do
|
test "envify with destination" do
|
||||||
with_test_dotenv(".env.world.erb": "HELLO=<%= 'world' %>") do
|
with_test_dotenv(".env.world.erb": "HELLO=<%= 'world' %>") do
|
||||||
run_command("envify", "-d", "world", config_file: "deploy_for_dest")
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
test "envify with skip_push" do
|
test "envify with skip_push" do
|
||||||
Pathname.any_instance.expects(:exist?).returns(true).times(1)
|
Pathname.any_instance.expects(:exist?).returns(true).times(1)
|
||||||
File.expects(:read).with(".env.erb").returns("HELLO=<%= 'world' %>")
|
File.expects(:read).with(".kamal/.env.erb").returns("HELLO=<%= 'world' %>")
|
||||||
File.expects(:write).with(".env", "HELLO=world", perm: 0600)
|
File.expects(:write).with(".kamal/.env", "HELLO=world", perm: 0600)
|
||||||
|
|
||||||
Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:env:push").never
|
Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:env:push").never
|
||||||
run_command("envify", "--skip-push")
|
run_command("envify", "--skip-push")
|
||||||
@@ -486,7 +486,7 @@ class CliMainTest < CliTestCase
|
|||||||
test "envify with clean env" do
|
test "envify with clean env" do
|
||||||
with_test_dotenv(".env": "HELLO=already", ".env.erb": "HELLO=<%= ENV.fetch 'HELLO', 'never' %>") do
|
with_test_dotenv(".env": "HELLO=already", ".env.erb": "HELLO=<%= ENV.fetch 'HELLO', 'never' %>") do
|
||||||
run_command("envify", "--skip-push")
|
run_command("envify", "--skip-push")
|
||||||
assert_equal "HELLO=never", File.read(".env")
|
assert_equal "HELLO=never", File.read(".kamal/.env")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -549,8 +549,11 @@ class CliMainTest < CliTestCase
|
|||||||
FileUtils.cp_r("test/fixtures/", fixtures_dup)
|
FileUtils.cp_r("test/fixtures/", fixtures_dup)
|
||||||
|
|
||||||
Dir.chdir(dir) do
|
Dir.chdir(dir) do
|
||||||
files.each do |filename, contents|
|
FileUtils.mkdir_p(".kamal")
|
||||||
File.binwrite(filename.to_s, contents)
|
Dir.chdir(".kamal") do
|
||||||
|
files.each do |filename, contents|
|
||||||
|
File.binwrite(filename.to_s, contents)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
yield
|
yield
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ class MainTest < IntegrationTest
|
|||||||
|
|
||||||
private
|
private
|
||||||
def assert_local_env_file(contents)
|
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
|
end
|
||||||
|
|
||||||
def assert_envs(version:)
|
def assert_envs(version:)
|
||||||
@@ -127,7 +127,7 @@ class MainTest < IntegrationTest
|
|||||||
end
|
end
|
||||||
|
|
||||||
def remove_local_env_file
|
def remove_local_env_file
|
||||||
deployer_exec("rm .env")
|
deployer_exec("rm .kamal/.env")
|
||||||
end
|
end
|
||||||
|
|
||||||
def assert_remote_env_file(contents, vm:)
|
def assert_remote_env_file(contents, vm:)
|
||||||
|
|||||||
Reference in New Issue
Block a user