Packages

Mix-first deployment tool for bare-metal Elixir releases over SSH. An Elixir port of Kamal using native releases, Caddy, and Elixir configuration.

Current section

Files

Jump to
xamal lib xamal configuration validator.ex
Raw

lib/xamal/configuration/validator.ex

defmodule Xamal.Configuration.Validator do
@moduledoc """
Validates the configuration.
"""
alias Xamal.Configuration
def validate!(%Configuration{} = config) do
validate_service!(config)
validate_servers!(config)
validate_retain_releases!(config)
validate_destination!(config)
:ok
end
defp validate_service!(config) do
service = Configuration.service(config)
unless Regex.match?(~r/^[a-z0-9_-]+$/i, service) do
raise ArgumentError,
"Service name can only include alphanumeric characters, hyphens, and underscores"
end
end
defp validate_servers!(config) do
if config.roles == [] do
raise ArgumentError, "No servers specified"
end
primary_name = Configuration.primary_role_name(config)
unless Configuration.role(config, primary_name) do
raise ArgumentError, "The primary_role '#{primary_name}' isn't defined"
end
primary = Configuration.primary_role(config)
if primary.hosts == [] do
raise ArgumentError, "No servers specified for the #{primary.name} primary_role"
end
end
defp validate_retain_releases!(config) do
if Configuration.retain_releases(config) < 1 do
raise ArgumentError, "Must retain at least 1 release"
end
end
defp validate_destination!(config) do
if Configuration.require_destination?(config) and config.destination == nil do
raise ArgumentError, "You must specify a destination"
end
end
end