From 1d0e81b00ab7db26acc12c635c764df4c67eb653 Mon Sep 17 00:00:00 2001 From: Donal McBreen Date: Wed, 7 Aug 2024 14:01:28 +0100 Subject: [PATCH] Eager load only CLI for faster commands --- lib/kamal.rb | 3 ++- lib/kamal/cli/base.rb | 4 ++-- lib/kamal/cli/healthcheck/barrier.rb | 2 ++ lib/kamal/cli/lock.rb | 2 ++ lib/kamal/commander.rb | 1 + lib/kamal/configuration.rb | 1 - lib/kamal/sshkit_with_ext.rb | 1 + lib/kamal/utils.rb | 2 ++ test/integration/main_test.rb | 2 +- 9 files changed, 13 insertions(+), 5 deletions(-) diff --git a/lib/kamal.rb b/lib/kamal.rb index b197408e..6625a9e4 100644 --- a/lib/kamal.rb +++ b/lib/kamal.rb @@ -6,8 +6,9 @@ require "active_support" require "zeitwerk" require "yaml" require "tmpdir" +require "pathname" loader = Zeitwerk::Loader.for_gem loader.ignore(File.join(__dir__, "kamal", "sshkit_with_ext.rb")) loader.setup -loader.eager_load # We need all commands loaded. +loader.eager_load_namespace(Kamal::Cli) # We need all commands loaded. diff --git a/lib/kamal/cli/base.rb b/lib/kamal/cli/base.rb index d815560e..d4cac48d 100644 --- a/lib/kamal/cli/base.rb +++ b/lib/kamal/cli/base.rb @@ -74,8 +74,6 @@ module Kamal::Cli if KAMAL.holding_lock? yield else - ensure_run_and_locks_directory - acquire_lock begin @@ -104,6 +102,8 @@ module Kamal::Cli end def acquire_lock + ensure_run_and_locks_directory + raise_if_locked do say "Acquiring the deploy lock...", :magenta on(KAMAL.primary_host) { execute *KAMAL.lock.acquire("Automatic deploy lock", KAMAL.config.version), verbosity: :debug } diff --git a/lib/kamal/cli/healthcheck/barrier.rb b/lib/kamal/cli/healthcheck/barrier.rb index 0fbfb511..a5db919c 100644 --- a/lib/kamal/cli/healthcheck/barrier.rb +++ b/lib/kamal/cli/healthcheck/barrier.rb @@ -1,3 +1,5 @@ +require "concurrent/ivar" + class Kamal::Cli::Healthcheck::Barrier def initialize @ivar = Concurrent::IVar.new diff --git a/lib/kamal/cli/lock.rb b/lib/kamal/cli/lock.rb index 1e4b52cf..7598b662 100644 --- a/lib/kamal/cli/lock.rb +++ b/lib/kamal/cli/lock.rb @@ -13,6 +13,8 @@ class Kamal::Cli::Lock < Kamal::Cli::Base option :message, aliases: "-m", type: :string, desc: "A lock message", required: true def acquire message = options[:message] + ensure_run_and_locks_directory + raise_if_locked do on(KAMAL.primary_host) do execute *KAMAL.server.ensure_run_directory diff --git a/lib/kamal/commander.rb b/lib/kamal/commander.rb index ffe140c4..11914a67 100644 --- a/lib/kamal/commander.rb +++ b/lib/kamal/commander.rb @@ -1,5 +1,6 @@ require "active_support/core_ext/enumerable" require "active_support/core_ext/module/delegation" +require "active_support/core_ext/object/blank" class Kamal::Commander attr_accessor :verbosity, :holding_lock, :connected diff --git a/lib/kamal/configuration.rb b/lib/kamal/configuration.rb index d19a7786..c5133f9a 100644 --- a/lib/kamal/configuration.rb +++ b/lib/kamal/configuration.rb @@ -2,7 +2,6 @@ require "active_support/ordered_options" require "active_support/core_ext/string/inquiry" require "active_support/core_ext/module/delegation" require "active_support/core_ext/hash/keys" -require "pathname" require "erb" require "net/ssh/proxy/jump" diff --git a/lib/kamal/sshkit_with_ext.rb b/lib/kamal/sshkit_with_ext.rb index 2d0257a8..ab6795e7 100644 --- a/lib/kamal/sshkit_with_ext.rb +++ b/lib/kamal/sshkit_with_ext.rb @@ -3,6 +3,7 @@ require "sshkit/dsl" require "net/scp" require "active_support/core_ext/hash/deep_merge" require "json" +require "concurrent/atomic/semaphore" class SSHKit::Backend::Abstract def capture_with_info(*args, **kwargs) diff --git a/lib/kamal/utils.rb b/lib/kamal/utils.rb index 8c6c9321..266d6a96 100644 --- a/lib/kamal/utils.rb +++ b/lib/kamal/utils.rb @@ -1,3 +1,5 @@ +require "active_support/core_ext/object/try" + module Kamal::Utils extend self diff --git a/test/integration/main_test.rb b/test/integration/main_test.rb index 6e8d3bf1..7ed6ee8f 100644 --- a/test/integration/main_test.rb +++ b/test/integration/main_test.rb @@ -107,7 +107,7 @@ class MainTest < IntegrationTest assert_env :HOST_TOKEN, "abcd", version: version, vm: :vm1 assert_env :SECRET_TOKEN, "1234 with \"中文\"", version: version, vm: :vm1 assert_no_env :CLEAR_TAG, version: version, vm: :vm1 - assert_no_env :SECRET_TAG, version: version, vm: :vm11 + assert_no_env :SECRET_TAG, version: version, vm: :vm1 assert_env :CLEAR_TAG, "tagged", version: version, vm: :vm2 assert_env :SECRET_TAG, "TAGME", version: version, vm: :vm2 end