diff --git a/CHANGELOG.md b/CHANGELOG.md index c8d7fd2..74c1c4d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ ### Enhancements * [[`PR-77`](https://github.com/thiagoesteves/deployex/pull/77)] Adding Erlang support + * [[`PR-80`](https://github.com/thiagoesteves/deployex/pull/80)] Adding Erlang hot upgrade support ## 0.3.0-rc21 (2024-10-23) diff --git a/README.md b/README.md index ef57230..4caf54c 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ![Development](https://img.shields.io/badge/STATUS-Development_v0.3.0-blue) [![Build Status](https://github.com/thiagoesteves/deployex/workflows/Deployex%20CI/badge.svg)](https://github.com/thiagoesteves/deployex/actions/workflows/pr-ci.yml) -DeployEx is a lightweight tool designed for managing deployments in Beam applications (Elixir, Gleam and Erlang) without relying on additional deployment tools like Docker or Kubernetes. Its primary goal is to utilize the release package for executing full deployments or hot-upgrades, depending on the package's content, while leveraging OTP distribution for monitoring and data extraction. +DeployEx is a lightweight tool designed for managing deployments for Beam applications (Elixir, Gleam and Erlang) without relying on additional deployment tools like Docker or Kubernetes. Its primary goal is to utilize the release package for executing full deployments or hot-upgrades, depending on the package's content, while leveraging OTP distribution for monitoring and data extraction. DeployEx acts as a central deployment runner, gathering crucial deployment data such as the current version and release package contents. The content of the release package enables it to run for a full deployment or a hot-upgrade. Meanwhile, on the development front, your CI/CD pipeline takes charge of crafting and updating packages for the target release. This integration ensures that DeployEx is always equipped with the latest packages, ready to facilitate deployments. @@ -21,13 +21,15 @@ Upon deployment, the following dashboard becomes available, offering access to l ## 🔉 Features - * Monitors multiple Elixir/Gleam application instances and automatically restarts them if they crash for any reason. + * Monitors multiple Beam application instances (Elixir/Erlang/Gleam) and automatically restarts them if they crash for any reason. * Includes a backoff delay restart mechanism to prevent excessive restarts. * Performs full deployments based solely on the release files generated by: - `mix release` for Elixir. - `gleam export` for Gleam. - - `rebar3 as prod tar` for Elixir. - * Supports hot code reloading for Elixir applications using the [Jellyfish](https://github.com/thiagoesteves/jellyfish) library. + - `rebar3 as prod tar` for Erlang. + * Supports hot code reloading for: + - Elixir applications using the [Jellyfish](https://github.com/thiagoesteves/jellyfish) library. + - Erlang applications using the [rebar3_appup_plugin](https://github.com/lrascao/rebar3_appup_plugin) plugin. * Supports the following cloud providers: - Amazon Web Services (AWS) - Google Cloud Provisioning (GCP) @@ -38,7 +40,7 @@ Upon deployment, the following dashboard becomes available, offering access to l * Provides the ability to run pre-commans prior deployments for Database migrations or any other eval command. * Provides a friendly UI that only authenticated users can access. * Allows setting a previously configured version in the UI, enabling DeployEx to enforce deployment of a specific version. - * Supports individual application restarts via the UI. + * Supports individual application restarts via the UI, including DeployEx itself. * Allows access to current log files (stdout and stderr) for both monitored apps and DeployEx. * Provides access to the shell: - IEx shell for monitored Elixir apps and DeployEx. @@ -50,6 +52,7 @@ Upon deployment, the following dashboard becomes available, offering access to l - Last deployment status - Number of crash restarts - Number of forced restarts + * And much more to come ... > [!NOTE] > All examples and deployments in this project use NGINX as a reverse proxy and load balancer. However, DeployEx does not depend on NGINX; it is used here purely for convenience. @@ -60,7 +63,7 @@ Upon deployment, the following dashboard becomes available, offering access to l - [X] 🚧 Add Gleam support. - [X] 🚧 Add Erlang support. -- [ ] 🚧 Add Erlang hot upgrade support. +- [X] 🚧 Add Erlang hot upgrade support. ### Version 0.4.0 diff --git a/lib/deployex/deployex.ex b/lib/deployex/deployex.ex index 3c3dd6c..8dc5d2f 100644 --- a/lib/deployex/deployex.ex +++ b/lib/deployex/deployex.ex @@ -1,6 +1,6 @@ defmodule Deployex do @moduledoc """ - DeployEx is a lightweight tool designed for managing deployments in Beam + DeployEx is a lightweight tool designed for managing deployments for Beam applications (Elixir, Gleam and Erlang) without relying on additional deployment tools like Docker or Kubernetes. Its primary goal is to utilize the release package for executing full deployments or hot-upgrades, depending