Library
Module
Module type
Parameter
Class
Class type
A module to manage service configurations.
An app’s configuration is everything that is likely to vary between deploys (staging, production, developer environments, etc).
This includes:
(Source: https://12factor.net/config)
type ('ctor, 'ty) schema = (string, 'ctor, 'ty) Conformist.t
A list of key-value pairs of strings representing the configuration key like SMTP_HOST and a value.
make schema data
returns a configuration containing the configuration schema
and the configuration data
.
val empty : t
empty
is an empty configuration without any schema or data.
commands configurations
returns the list of CLI commands given a list of configurations.
Configuration might come from various sources like .env files, environment variables or as data provided directly to services or the app.
val store : data -> unit
store data
stores the configuration data
.
A configuration is a list of key-value string pairs.
Using the schema validator conformist it is easy to validate and decode configuration values. Conformist schemas can express a richer set of requirements than static types, which can be used in services to validate configurations at start time.
Validating configuration when starting services can lead to run-time exceptions, but they occur early in the app lifecycle. This minimizes the feedback loop and makes sure, that services start only with valid configuration.
root_path
contains the path to the project root. It reads the value of ROOT_PATH
. If that environment variable is not set, it goes up directories until a .git
, .hg
, .svn
, .bzr
or _darcs
directory is found. If none of these are found until /
is reached, None
is returned.
env_files_path
contains the path where the env files are kept. It reads the value of ENV_FILES_PATH
. If that environment variable is not set, root_path
is used. If no root path can be found, None
is returned.
read_env_file ()
reads an .env
file from the directory given by env_files_path
and returns the key-value pairs as data
. If SIHL_ENV
is set to test
, .env.test
is read. Otherwise .env
is read. If the file doesn't exist or the directory containing the file can't be found, None
is returned.
val read : ('ctor, 'ty) schema -> 'ty
read schema
returns the decoded, statically typed version of configuration t
of the schema
. This is used in services to declaratively define a valid configuration.
The configuration data t
is merged with the environment variable and, if present, an .env file.
It fails with Exception
and prints descriptive message of invalid configuration.
read_string key
returns the configuration value with key
if present. The function is memoized, the first call caches the returned value and subsequent calls are fast.
read_secret unit
returns the value of SIHL_SECRET if it is set. If SIHL_SECRET was not set, it fails in production and in testing or local development the value is set to "secret".
read_int key
returns the configuration value with key
if present. the first call caches the returned value and subsequent calls are fast.
read_bool key
returns the configuration value with key
if present. the first call caches the returned value and subsequent calls are fast.
is_test ()
returns true if Sihl is running in a test environment, meaning if tests are executing parts of Sihl.
is_development ()
returns true if Sihl is running in a local environment.
is_production ()
returns true if Sihl is running in a production environment.
val require : ('ctor, 'ty) schema -> unit
require t
raises an exception if the stored configuration doesn't contain the configurations provided by the list of configurations t
.