From 7cac7e6fb0e77c946ea1f2407cb9677499f69adb Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 13 May 2024 15:18:11 -0700 Subject: [PATCH 1/6] Envify during setup --- lib/kamal/cli/main.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/kamal/cli/main.rb b/lib/kamal/cli/main.rb index d972da6b..d1605cff 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:envify", [], invoke_options invoke "kamal:cli:env:push", [], invoke_options invoke "kamal:cli:accessory:boot", [ "all" ], invoke_options From 033f2a340137ef926bb8e3cd43273d5205d56caa Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 13 May 2024 16:59:50 -0700 Subject: [PATCH 2/6] Correct invocation --- lib/kamal/cli/main.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/kamal/cli/main.rb b/lib/kamal/cli/main.rb index d1605cff..dd14ca3f 100644 --- a/lib/kamal/cli/main.rb +++ b/lib/kamal/cli/main.rb @@ -10,7 +10,7 @@ class Kamal::Cli::Main < Kamal::Cli::Base invoke "kamal:cli:server:bootstrap", [], invoke_options say "Evaluate and push env files...", :magenta - invoke "kamal:envify", [], invoke_options + invoke "kamal:cli:main:envify", [], invoke_options invoke "kamal:cli:env:push", [], invoke_options invoke "kamal:cli:accessory:boot", [ "all" ], invoke_options From dc1f707a561c67d6b30f2cdc5575c4a3ebd1a2d8 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 13 May 2024 17:01:50 -0700 Subject: [PATCH 3/6] Fix test --- test/cli/main_test.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/cli/main_test.rb b/test/cli/main_test.rb index 20df071e..8f897ca9 100644 --- a/test/cli/main_test.rb +++ b/test/cli/main_test.rb @@ -5,6 +5,7 @@ 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) @@ -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) From 938ac375a15771bd153b5d4edf9c85808ba4d0cd Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 13 May 2024 17:08:53 -0700 Subject: [PATCH 4/6] Only envify if there is a template file available --- lib/kamal/cli/main.rb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lib/kamal/cli/main.rb b/lib/kamal/cli/main.rb index dd14ca3f..6daa1c65 100644 --- a/lib/kamal/cli/main.rb +++ b/lib/kamal/cli/main.rb @@ -186,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 File.exist?(env_template_path) + 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 From e58d2f67f2fccbec97a0528ec09cbcf72ac74727 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 14 May 2024 10:07:31 -0700 Subject: [PATCH 5/6] Fix env template path check and tests --- lib/kamal/cli/main.rb | 2 +- test/cli/main_test.rb | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/kamal/cli/main.rb b/lib/kamal/cli/main.rb index 6daa1c65..1cc9d98e 100644 --- a/lib/kamal/cli/main.rb +++ b/lib/kamal/cli/main.rb @@ -186,7 +186,7 @@ class Kamal::Cli::Main < Kamal::Cli::Base env_path = ".env" end - if File.exist?(env_template_path) + 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] diff --git a/test/cli/main_test.rb b/test/cli/main_test.rb index 8f897ca9..6c7c0f24 100644 --- a/test/cli/main_test.rb +++ b/test/cli/main_test.rb @@ -12,7 +12,7 @@ class CliMainTest < CliTestCase 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 @@ -34,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 @@ -429,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) From 0bc27c10cc723a3dd6c2ca0bd51370ba72025a19 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 14 May 2024 11:59:42 -0700 Subject: [PATCH 6/6] Fix tests --- test/cli/main_test.rb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/cli/main_test.rb b/test/cli/main_test.rb index 6c7c0f24..6149cf0b 100644 --- a/test/cli/main_test.rb +++ b/test/cli/main_test.rb @@ -444,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) @@ -451,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) @@ -458,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)