Aliases are defined in the configuration file under the `aliases` key. The configuration is a map of alias name to command. When we run the command the we just do a literal replacement of the alias with the string. So if we have: ```yaml aliases: console: app exec -r console -i --reuse "rails console" ``` Then running `kamal console -r workers` will run the command ```sh $ kamal app exec -r console -i --reuse "rails console" -r workers ``` Because of the order Thor parses the arguments, this allows us to override the role from the alias command. There might be cases where we need to munge the command a bit more but that would involve getting into Thor command parsing internals, which are complicated and possibly subject to change. There's a chance that your aliases could conflict with future built-in commands, but there's not likely to be many of those and if it happens you'll get a validation error when you upgrade. Thanks to @dhnaranjo for the idea!
16 lines
446 B
Ruby
16 lines
446 B
Ruby
class Kamal::Configuration::Validator::Alias < Kamal::Configuration::Validator
|
|
def validate!
|
|
super
|
|
|
|
name = context.delete_prefix("aliases/")
|
|
|
|
if name !~ /\A[a-z0-9_-]+\z/
|
|
error "Invalid alias name: '#{name}'. Must only contain lowercase letters, alphanumeric, hyphens and underscores."
|
|
end
|
|
|
|
if Kamal::Cli::Main.commands.include?(name)
|
|
error "Alias '#{name}' conflicts with a built-in command."
|
|
end
|
|
end
|
|
end
|