diff --git a/lib/kamal/configuration.rb b/lib/kamal/configuration.rb index e5ecbb53..2311f69c 100644 --- a/lib/kamal/configuration.rb +++ b/lib/kamal/configuration.rb @@ -218,7 +218,7 @@ class Kamal::Configuration def valid? - ensure_destination_if_required && ensure_required_keys_present && ensure_valid_kamal_version + ensure_destination_if_required && ensure_required_keys_present && ensure_valid_kamal_version && ensure_valid_service_name end def to_h @@ -283,6 +283,12 @@ class Kamal::Configuration true end + def ensure_valid_service_name + raise ArgumentError, "Service name can only include alphanumeric characters and hyphens" unless raw_config[:service] =~ /^[a-z0-9-]+$/ + + true + end + def ensure_valid_kamal_version if minimum_version && Gem::Version.new(minimum_version) > Gem::Version.new(Kamal::VERSION) raise ArgumentError, "Current version is #{Kamal::VERSION}, minimum required is #{minimum_version}" diff --git a/test/configuration_test.rb b/test/configuration_test.rb index 392b6afb..b005d2c8 100644 --- a/test/configuration_test.rb +++ b/test/configuration_test.rb @@ -42,6 +42,16 @@ class ConfigurationTest < ActiveSupport::TestCase end end + test "service name valid" do + assert Kamal::Configuration.new(@deploy.tap { _1[:service] = "hey-app1" }).valid? + end + + test "service name invalid" do + assert_raise(ArgumentError) do + Kamal::Configuration.new @deploy.tap { _1[:service] = "app.com" } + end + end + test "roles" do assert_equal %w[ web ], @config.roles.collect(&:name) assert_equal %w[ web workers ], @config_with_roles.roles.collect(&:name) @@ -299,7 +309,7 @@ class ConfigurationTest < ActiveSupport::TestCase assert_equal "alternate_web", config.primary_role assert_equal "1.1.1.4", config.primary_host - assert config.role(:alternate_web).primary? + assert config.role(:alternate_web).primary? assert config.role(:alternate_web).running_traefik? end