chore(mix): wrap produced script and set required variables
We create a shim script that calls the one produced by Mix Release, creating and setting the required configurations.
This commit is contained in:
parent
a5939790c5
commit
62024854e5
|
@ -16,22 +16,18 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2.4.0
|
uses: actions/checkout@v2.4.0
|
||||||
- name: "[hack] make emqx with rebar3 to get configs"
|
|
||||||
run: |
|
|
||||||
make emqx
|
|
||||||
cd _build/emqx/rel/emqx
|
|
||||||
bin/emqx start
|
|
||||||
bin/emqx stop
|
|
||||||
- name: setup mix
|
- name: setup mix
|
||||||
run: |
|
run: |
|
||||||
mix local.hex --force
|
mix local.hex --force
|
||||||
mix local.rebar --force
|
mix local.rebar --force
|
||||||
mix deps.get
|
mix deps.get
|
||||||
|
- name: produce emqx.conf.all template
|
||||||
|
run: make conf-segs
|
||||||
- name: elixir release
|
- name: elixir release
|
||||||
run: ./mix_release.sh
|
run: ./mix_release.sh
|
||||||
- name: start release
|
- name: start release
|
||||||
run: |
|
run: |
|
||||||
cd _build/dev/rel/emqx
|
cd _build/dev/rel/emqx_base
|
||||||
bin/emqx daemon_iex
|
bin/emqx daemon_iex
|
||||||
- name: check if started
|
- name: check if started
|
||||||
run: |
|
run: |
|
||||||
|
|
|
@ -125,6 +125,10 @@ generate_config() {
|
||||||
local CONF_FILE="$CONFIGS_DIR/app.$NOW_TIME.config"
|
local CONF_FILE="$CONFIGS_DIR/app.$NOW_TIME.config"
|
||||||
local HOCON_GEN_ARG_FILE="$CONFIGS_DIR/vm.$NOW_TIME.args"
|
local HOCON_GEN_ARG_FILE="$CONFIGS_DIR/vm.$NOW_TIME.args"
|
||||||
|
|
||||||
|
# This is needed by the Elixir scripts.
|
||||||
|
# Do NOT append `.config`.
|
||||||
|
RELEASE_SYS_CONFIG="$CONFIGS_DIR/app.$NOW_TIME"
|
||||||
|
|
||||||
CONFIG_ARGS="-config $CONF_FILE -args_file $HOCON_GEN_ARG_FILE"
|
CONFIG_ARGS="-config $CONF_FILE -args_file $HOCON_GEN_ARG_FILE"
|
||||||
|
|
||||||
## Merge hocon generated *.args into the vm.args
|
## Merge hocon generated *.args into the vm.args
|
||||||
|
@ -207,7 +211,7 @@ latest_vm_args() {
|
||||||
if [ -f "$vm_args_file" ]; then
|
if [ -f "$vm_args_file" ]; then
|
||||||
echo "$vm_args_file"
|
echo "$vm_args_file"
|
||||||
else
|
else
|
||||||
echoerr "ERRRO: node not initialized?"
|
echoerr "node not initialized?"
|
||||||
echoerr "Generated config file vm.*.args is not found for command '$COMMAND'"
|
echoerr "Generated config file vm.*.args is not found for command '$COMMAND'"
|
||||||
echoerr "in config dir: $CONFIGS_DIR"
|
echoerr "in config dir: $CONFIGS_DIR"
|
||||||
echoerr "In case the file has been deleted while the node is running,"
|
echoerr "In case the file has been deleted while the node is running,"
|
||||||
|
|
72
mix.exs
72
mix.exs
|
@ -93,7 +93,7 @@ defmodule EMQXUmbrella.MixProject do
|
||||||
|
|
||||||
defp releases() do
|
defp releases() do
|
||||||
[
|
[
|
||||||
emqx: [
|
emqx_base: [
|
||||||
applications: [
|
applications: [
|
||||||
logger: :permanent,
|
logger: :permanent,
|
||||||
esasl: :load,
|
esasl: :load,
|
||||||
|
@ -202,24 +202,8 @@ defmodule EMQXUmbrella.MixProject do
|
||||||
force: overwrite?
|
force: overwrite?
|
||||||
)
|
)
|
||||||
|
|
||||||
# This is generated by `scripts/merge-config.escript` or `make
|
|
||||||
# conf-segs`. So, this should be run before the release.
|
|
||||||
# TODO: run as a "compiler" step???
|
|
||||||
|
|
||||||
conf_rebar_template = File.read!("apps/emqx_conf/etc/emqx.conf.all")
|
|
||||||
# we must not consider surrounding space in the template var name
|
|
||||||
# because some help strings contain informative variables that
|
|
||||||
# should not be interpolated, and those have no spaces.
|
|
||||||
conf_eex_template =
|
|
||||||
Regex.replace(
|
|
||||||
~r/\{\{ ([a-zA-Z0-9_]+) \}\}/,
|
|
||||||
conf_rebar_template,
|
|
||||||
"<%= \\g{1} %>"
|
|
||||||
)
|
|
||||||
|
|
||||||
# FIXME: change variables by package type???
|
# FIXME: change variables by package type???
|
||||||
conf_rendered =
|
assigns = [
|
||||||
EEx.eval_string(conf_eex_template,
|
|
||||||
platform_bin_dir: "bin",
|
platform_bin_dir: "bin",
|
||||||
platform_data_dir: "data",
|
platform_data_dir: "data",
|
||||||
platform_etc_dir: "etc",
|
platform_etc_dir: "etc",
|
||||||
|
@ -232,14 +216,51 @@ defmodule EMQXUmbrella.MixProject do
|
||||||
runner_lib_dir: "$RUNNER_ROOT_DIR/lib",
|
runner_lib_dir: "$RUNNER_ROOT_DIR/lib",
|
||||||
runner_log_dir: "$RUNNER_ROOT_DIR/log",
|
runner_log_dir: "$RUNNER_ROOT_DIR/log",
|
||||||
runner_data_dir: "$RUNNER_ROOT_DIR/data",
|
runner_data_dir: "$RUNNER_ROOT_DIR/data",
|
||||||
runner_user: ""
|
runner_user: "",
|
||||||
)
|
release_version: release.version,
|
||||||
|
erts_vsn: release.erts_version,
|
||||||
|
# FIXME: this is empty in `make emqx` ???
|
||||||
|
erl_opts: "",
|
||||||
|
# FIXME: varies with edge/community/enterprise
|
||||||
|
emqx_description: "EMQ X Community Edition"
|
||||||
|
]
|
||||||
|
|
||||||
|
# This is generated by `scripts/merge-config.escript` or `make
|
||||||
|
# conf-segs`. So, this should be run before the release.
|
||||||
|
# TODO: run as a "compiler" step???
|
||||||
|
conf_rendered =
|
||||||
|
File.read!("apps/emqx_conf/etc/emqx.conf.all")
|
||||||
|
|> from_rebar_to_eex_template()
|
||||||
|
|> EEx.eval_string(assigns)
|
||||||
|
|
||||||
File.write!(
|
File.write!(
|
||||||
Path.join(etc, "emqx.conf"),
|
Path.join(etc, "emqx.conf"),
|
||||||
conf_rendered
|
conf_rendered
|
||||||
)
|
)
|
||||||
|
|
||||||
|
vars_rendered =
|
||||||
|
File.read!("data/emqx_vars")
|
||||||
|
|> from_rebar_to_eex_template()
|
||||||
|
|> EEx.eval_string(assigns)
|
||||||
|
|
||||||
|
File.write!(
|
||||||
|
Path.join([release.path, "releases", "emqx_vars"]),
|
||||||
|
vars_rendered
|
||||||
|
)
|
||||||
|
|
||||||
|
Enum.each(
|
||||||
|
[
|
||||||
|
"common_defs.sh",
|
||||||
|
"common_defs2.sh",
|
||||||
|
"common_functions.sh",
|
||||||
|
],
|
||||||
|
&Mix.Generator.copy_file(
|
||||||
|
"bin/#{&1}",
|
||||||
|
Path.join(bin, &1),
|
||||||
|
force: overwrite?
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
release
|
release
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -364,4 +385,15 @@ defmodule EMQXUmbrella.MixProject do
|
||||||
|
|
||||||
String.downcase(opt) != "false"
|
String.downcase(opt) != "false"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp from_rebar_to_eex_template(str) do
|
||||||
|
# we must not consider surrounding space in the template var name
|
||||||
|
# because some help strings contain informative variables that
|
||||||
|
# should not be interpolated, and those have no spaces.
|
||||||
|
Regex.replace(
|
||||||
|
~r/\{\{ ([a-zA-Z0-9_]+) \}\}/,
|
||||||
|
str,
|
||||||
|
"<%= \\g{1} %>"
|
||||||
|
)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
# shellcheck disable=SC1000-SC9999
|
||||||
|
|
||||||
set -ex
|
set -ex
|
||||||
|
|
||||||
|
@ -10,18 +11,19 @@ mix release --overwrite
|
||||||
## Assumes that `make emqx` has been run before the mix build to
|
## Assumes that `make emqx` has been run before the mix build to
|
||||||
## generate the correct configs.
|
## generate the correct configs.
|
||||||
|
|
||||||
mkdir -p _build/dev/rel/emqx/data/configs/
|
# mkdir -p _build/dev/rel/emqx/data/configs/
|
||||||
LATEST_APP_CONFIG=$(ls -rt _build/emqx/rel/emqx/data/configs/app*.config | tail -n 1)
|
# LATEST_APP_CONFIG=$(ls -rt _build/emqx/rel/emqx/data/configs/app*.config | tail -n 1)
|
||||||
|
|
||||||
# FIXME!
|
# FIXME!
|
||||||
cp ${LATEST_APP_CONFIG} _build/dev/rel/emqx/releases/5.0.0-beta.2/sys.config
|
# cp ${LATEST_APP_CONFIG} _build/dev/rel/emqx/releases/5.0.0-beta.2/sys.config
|
||||||
sed -i -E 's#_build/emqx/rel/emqx/etc/emqx.conf#_build/dev/rel/emqx/etc/emqx.conf#g' _build/dev/rel/emqx/releases/5.0.0-beta.2/sys.config
|
# sed -i -E 's#_build/emqx/rel/emqx/etc/emqx.conf#_build/dev/rel/emqx/etc/emqx.conf#g' _build/dev/rel/emqx/releases/5.0.0-beta.2/sys.config
|
||||||
sed -i -E 's#logger_level,warning#logger_level,debug#g' _build/dev/rel/emqx/releases/5.0.0-beta.2/sys.config
|
|
||||||
sed -i -E 's#level => warning#level => debug#g' _build/dev/rel/emqx/releases/5.0.0-beta.2/sys.config
|
# sed -i -E 's#logger_level,warning#logger_level,debug#g' _build/dev/rel/emqx/releases/5.0.0-beta.2/sys.config
|
||||||
|
# sed -i -E 's#level => warning#level => debug#g' _build/dev/rel/emqx/releases/5.0.0-beta.2/sys.config
|
||||||
|
|
||||||
|
|
||||||
# cp _build/emqx/rel/emqx/releases/emqx_vars _build/dev/rel/emqx/releases/
|
# cp _build/emqx/rel/emqx/releases/emqx_vars _build/dev/rel/emqx/releases/
|
||||||
# cp _build/emqx/rel/emqx/etc/emqx.conf _build/dev/rel/emqx/etc/
|
# cp _build/emqx/rel/emqx/etc/emqx.conf _build/dev/rel/emqx/etc/
|
||||||
# cp -r apps/emqx/etc/certs _build/dev/rel/emqx/etc/
|
# cp -r apps/emqx/etc/certs _build/dev/rel/emqx/etc/
|
||||||
|
|
||||||
echo "telemetry { enable = false }" >> _build/dev/rel/emqx/etc/emqx.conf
|
echo "telemetry { enable = false }" >> _build/dev/rel/emqx_base/etc/emqx.conf
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# -*- tab-width:4;indent-tabs-mode:nil -*-
|
||||||
|
# ex: ts=4 sw=4 et
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
BASE="$(cd "$(dirname "$(readlink "$0" || echo "$0")")"/..; pwd -P)"
|
||||||
|
source "$BASE/bin/common_defs.sh"
|
||||||
|
source "$BASE/bin/common_functions.sh"
|
||||||
|
|
||||||
|
# Make sure log directory exists
|
||||||
|
mkdir -p "$RUNNER_LOG_DIR"
|
||||||
|
|
||||||
|
# Make sure data directory exists
|
||||||
|
mkdir -p "$RUNNER_DATA_DIR"
|
||||||
|
|
||||||
|
# Make sure data/configs exists
|
||||||
|
mkdir -p "$CONFIGS_DIR"
|
||||||
|
|
||||||
|
COMMAND="${1:-}"
|
||||||
|
|
||||||
|
## IS_BOOT_COMMAND is set for later to inspect node name and cookie
|
||||||
|
## from hocon config (or env variable), which resides in
|
||||||
|
## `common_defs2.sh`.
|
||||||
|
case "${COMMAND}" in
|
||||||
|
daemon|daemon_iex|start|start_iex)
|
||||||
|
IS_BOOT_COMMAND='yes'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
IS_BOOT_COMMAND='no'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
source "$BASE/bin/common_defs2.sh"
|
||||||
|
|
||||||
|
cd "$ROOTDIR"
|
||||||
|
|
||||||
|
# FIXME!!!
|
||||||
|
generate_config "$NAME_TYPE" "$NAME"
|
||||||
|
# Must be explicitly exported here in order to be picked up correctly
|
||||||
|
export RELEASE_SYS_CONFIG
|
||||||
|
export RELEASE_TMP="$RUNNER_ROOT_DIR"
|
||||||
|
|
||||||
|
exec bin/emqx_base "$@"
|
Loading…
Reference in New Issue