diff --git a/lib/kamal/cli/main.rb b/lib/kamal/cli/main.rb index d972da6b..1cc9d98e 100644 --- a/lib/kamal/cli/main.rb +++ b/lib/kamal/cli/main.rb @@ -9,7 +9,8 @@ class Kamal::Cli::Main < Kamal::Cli::Base say "Ensure Docker is installed...", :magenta invoke "kamal:cli:server:bootstrap", [], invoke_options - say "Push env files...", :magenta + say "Evaluate and push env files...", :magenta + invoke "kamal:cli:main:envify", [], invoke_options invoke "kamal:cli:env:push", [], invoke_options invoke "kamal:cli:accessory:boot", [ "all" ], invoke_options @@ -185,11 +186,15 @@ class Kamal::Cli::Main < Kamal::Cli::Base env_path = ".env" end - File.write(env_path, ERB.new(File.read(env_template_path), trim_mode: "-").result, perm: 0600) + if Pathname.new(File.expand_path(env_template_path)).exist? + File.write(env_path, ERB.new(File.read(env_template_path), trim_mode: "-").result, perm: 0600) - unless options[:skip_push] - reload_envs - invoke "kamal:cli:env:push", options + unless options[:skip_push] + reload_envs + invoke "kamal:cli:env:push", options + end + else + puts "Skipping envify (no #{env_template_path} exist)" end end diff --git a/test/cli/main_test.rb b/test/cli/main_test.rb index 20df071e..6149cf0b 100644 --- a/test/cli/main_test.rb +++ b/test/cli/main_test.rb @@ -5,13 +5,14 @@ class CliMainTest < CliTestCase invoke_options = { "config_file" => "test/fixtures/deploy_simple.yml", "version" => "999", "skip_hooks" => false } Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:server:bootstrap", [], invoke_options) + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:main:envify", [], invoke_options) Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:env:push", [], invoke_options) Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:accessory:boot", [ "all" ], invoke_options) Kamal::Cli::Main.any_instance.expects(:deploy) run_command("setup").tap do |output| assert_match /Ensure Docker is installed.../, output - assert_match /Push env files.../, output + assert_match /Evaluate and push env files.../, output end end @@ -20,6 +21,7 @@ class CliMainTest < CliTestCase Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:server:bootstrap", [], invoke_options) Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:env:push", [], invoke_options) + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:main:envify", [], invoke_options) Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:accessory:boot", [ "all" ], invoke_options) # deploy Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:registry:login", [], invoke_options) @@ -32,7 +34,7 @@ class CliMainTest < CliTestCase run_command("setup", "--skip_push").tap do |output| assert_match /Ensure Docker is installed.../, output - assert_match /Push env files.../, output + assert_match /Evaluate and push env files.../, output # deploy assert_match /Acquiring the deploy lock/, output assert_match /Log into image registry/, output @@ -427,6 +429,7 @@ class CliMainTest < CliTestCase end test "envify" do + Pathname.any_instance.expects(:exist?).returns(true).times(3) File.expects(:read).with(".env.erb").returns("HELLO=<%= 'world' %>") File.expects(:write).with(".env", "HELLO=world", perm: 0600) @@ -441,6 +444,7 @@ class CliMainTest < CliTestCase <% end -%> EOF + Pathname.any_instance.expects(:exist?).returns(true).times(3) File.expects(:read).with(".env.erb").returns(file.strip) File.expects(:write).with(".env", "HELLO=world\nKEY=value\n", perm: 0600) @@ -448,6 +452,7 @@ class CliMainTest < CliTestCase end test "envify with destination" do + Pathname.any_instance.expects(:exist?).returns(true).times(4) File.expects(:read).with(".env.world.erb").returns("HELLO=<%= 'world' %>") File.expects(:write).with(".env.world", "HELLO=world", perm: 0600) @@ -455,6 +460,7 @@ class CliMainTest < CliTestCase 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)