All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Improve error messaging when parsing definitions
- Builds with stable Rust
- Added a new
execcommand as a shorthand for running commands within the working directory of a service (eg.exec backend -- poetry install).
- Added a set of
configcli commands (get,set,toggle,remove) for editing config file options. - Added a mechanism with which environment variables from the users shell configuration can be periodically refreshed. This eliminates the need for the user to need to perform a daemon restart whenever they need to reload some shell configuration (eg. a change in a
.zshrcfile). This feature is experimental and is disabled by default. - Added a
viewcommand to view values for all options. - Daemon port can now be configured via the
daemon.portoption inconfig.toml. - Add experimental
interactive_shelloption that when enabled and ashellcommand is given, the process will be spawned in an interactive shell based on the one the client is running on.
- The global configuration file has been switched from
YAMLtoTOML(this is different from the module definitions file which will remain as YAML). This means that upon upgrading any existing config will be lost and will need to be migrated. - Liveness status will now update correctly when a process exits.
- Probes of type
execwill now timeout if their command takes more than 2 seconds. - Daemon will now be dissasociated from its controlling terminal by default.
- Fixed misalignment in non-emoji supporting terminals.
- Fixed white rendering as grey on light themed terminals.
- Stop group completion messages from being printed if not running in a terminal.
- Allow tasks to specify
timeoutindividually rather than have a global one.
- Improve error messages for common errors.
- Error messages now print to
stderr.
- Provide additional context for some parsing errors.
- Fixed a bug that caused more detailed error messages to be supressed.
- Bump task timeout to five minutes (up from three).
- Allow services to specify services / tasks that should always be deployed "after" them, but should not constitute a direct dependency.
- Checks can now define a
suggested_fixsection with a command that can be run, should users choose to, in order to fix the issue the check tests for.
daemon restartwill start the daemon if it is not running
- Allow executable probe and shell definitions to also use the
shellshortcut (instead of specifying a command). - Add
daemon restartshortcut for restarting the daemon
- Supress output of
stderrfrom checks
- The
always_await_readiness_probeoption will now default totrueinstead offalse.
- Do not skip deployment of any tasks when
--forceis active.
- Log files for tasks can now also be viewed with
logs <task-name>
- Fixed an issue where where a group's tasks would always redeploy regardless of whether the services were deployed.
- Tasks will now no longer deploy if the service is in a healthy state and running.
- Allow check definitions to also use the
shellshortcut (instead of specifying a command). - The
pscommand is now coloured by default making failed services more easily stand out. This may be disabled using-n/--no-color.
- Fixed usage of
shellon tasks when ran with therun <task>option. - Fixed a bug where the same check would be run twice when include by two different services.
- Services can now define
environment_setsto allow configuring environment variables for a deployment. Using-e .../--env ...as extra arguments todeploycan activate one or more environment sets. - Added a new
shelloption for services and tasks (on the same level ascommand) to make invoking shell commands less verbose.
- Added support for parallel deployment. The
deploycommand will now deploy modules in parallel by default. - Added
--threads/-tto control how many threads to use to deploy in parallel. Also, added--serial/-kto force serial deployment.
- Fixed an issue where dependencies would be deployed in the wrong order.
- Added a new
ordered_dependenciesmodule option for specifying dependencies of a services that need to be run sequentially.
- Fixed a panic in the daemon that would cause readiness probes to always fail.
- Fixed an issue where the daemon would be relaunched unnessecarily.
- Added daemon launcher script for launching the daemon while opening shell terminals.
- Reworked the healthchecks system into
readinessandlivenessprobes which can be independently used to check whether a service has started (readiness) and whether the services continues to live (liveness). Previous configuration entry ofhealthcheckhas been renamed toreadiness_probe, and a new module configuration block namedliveness_probehas been introduced. - Added a new option to
psto show liveness status. - Allow specifying shell type to invoke using
-t/--type, and adding atypeon a shell definition. - Improved error messages when specifying dependencies that don't exist.
- Improvements to the way the daemon is run to better support shell based environments.
- A service with a failing liveness probe will now always be redeployed.
- Added a new healthcheck of type
netwhich allows monitoring the health of a service by trying to obtain a TCP connection. The healthcheck attempts to establish a connection, which upon established will make the healthcheck succeed. On a TCP reset the healthcheck is considered failed and will also time out after 100ms. - Added a new
-ooption to allow deploying only selected modules and not their dependencies. - Added a new
-w/--waitoption for enforcing all deployed modules to pass their healthcheck before continuing. - Added a new
shellcommand and module type for defining and opening a shell to a service.
- Renamed the module definition file extension from
.yamlto.yml.
- Fixed an issue in working directory resolution for shell definitions.
- Changed flag for skipping checks to
-zand--no-checks. - Improved the error message when a healthcheck failed due to misconfiguration.
- Daemon default port changed to
13754to reduce chance of conflict. - Changed release status to
beta.
- Attempting to stop or restart a module that doesn't exist now returns an appropriate error message.
- Skip checks flag (
-z) is now under the correct command.
- Allow forcing deployments to always redeploy using
-for--force. - Introduced a new type of healthcheck (
log_line) which allows for considering a service healthy when a certain line has appeared in its stdout. - Introduced a new client configuration file to contain persisted options.
- Add
daemon_portoption to allow configuring the daemon port via the client configuration file - Add
default_diroption to allow configuring the default directory to look for module definition files in. Note that this directory is always last in precedence. - Allow skipping healthchecks using
-s/--no-healthchecks.
- Minor improvements to wait spinners.
- Module file can now be discovered on any path ancestral to the path the command was called.
- Modules can now be overriden with user specific settings with an overrides file (
.override.yaml') or using-o <override_file>.
- Fixed an issue where healthcheck would always run regardless of dependencies.
- Print help when no subcommand specified.
- Healthchecks are not awaited by default. Only when there is a dependency on the module (or a
post_uptask is defined) then the healtheck will be awaited. This behaviour may be overriden withalways_wait_healthcheckin the module definition.
- Introduced two new options
postandpost_upto add tasks to be performed after a service has been deployed (post) / or has passed its healthcheck (post_up) respectively (experimental).
- Fixed an issue where the paths failed to resolve if
working_dirwas not specified.
- Made retries for a healthcheck configurable via the
retriesproperty.
- Added aliases for most commands (eg.
deploy,d,restart,rr,run,r,stop,s). - Added two new options for logs
--alland--follow. - The path to the module definition file can now be specified with
-for--file.
- Added the ability for the
stopcommand to stop multiple services at once. - Added a new
downcommand to allow stopping every running service without having to specify names.
- Healthcheck
kindhas been renamed totypeand it's values are now lowercase (eg.type: exec). - Increased the number of attempts for a healthcheck by 4 seconds.
- Paths within module definitions are now correctly resolved relative to the client rather than the daemon.
- Fixed an issue where the healthchecks command stdout will be printed on the daemon stdout.
- Added a new
Groupdeclaration to allow for modules whose sole purpose is to group other modules. They can be deployed, specified as a dependency, or have checks just like other modules. - Added cleanup for child processes on SIGINT or SIGTERM
- Services can now define a
healthchecksection to implement checks which must pass before further dependencies are started (experimental).
- Changed the default pager from
lesstotailwith a default 30 line output.
- Fix incorrectly labeled log files. Services now have a
.servicesuffix and tasks have.task.
- Allow termination signal to be specified on services using
termination_signalon the YAML config.
- Switched to
SIGKILLas the default kill signal. Fixes a race condition with contention on the log file during restarts.
- Increased the timeout for deploying tasks.
- Improved error message when trying to view logs of non existant service.
- The daemon will now attempt to also kill descendant processes (rather than only terminating the parent and leaving orphans behind). This is only implemented for Unix based systems and is not foolproof.
- Fixed a bug that would cause a panic during dependency resolution.
- The
environmentanddependenciesoptions are now optional. - The
pscommand now has better output with long service names. - The error messages when a service fails to start are now slightly more helpful.
- Resolution for the tilde in
working_dirpaths. - Running with no command now prints the cli help.
- Added a changelog!
- Added
restartcommand line option for restarting services that may have failed to start or are stuck.
- Initial version of the project