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:
|
||||
- name: Checkout
|
||||
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
|
||||
run: |
|
||||
mix local.hex --force
|
||||
mix local.rebar --force
|
||||
mix deps.get
|
||||
- name: produce emqx.conf.all template
|
||||
run: make conf-segs
|
||||
- name: elixir release
|
||||
run: ./mix_release.sh
|
||||
- name: start release
|
||||
run: |
|
||||
cd _build/dev/rel/emqx
|
||||
cd _build/dev/rel/emqx_base
|
||||
bin/emqx daemon_iex
|
||||
- name: check if started
|
||||
run: |
|
||||
|
|
|
@ -125,6 +125,10 @@ generate_config() {
|
|||
local CONF_FILE="$CONFIGS_DIR/app.$NOW_TIME.config"
|
||||
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"
|
||||
|
||||
## Merge hocon generated *.args into the vm.args
|
||||
|
@ -207,7 +211,7 @@ latest_vm_args() {
|
|||
if [ -f "$vm_args_file" ]; then
|
||||
echo "$vm_args_file"
|
||||
else
|
||||
echoerr "ERRRO: node not initialized?"
|
||||
echoerr "node not initialized?"
|
||||
echoerr "Generated config file vm.*.args is not found for command '$COMMAND'"
|
||||
echoerr "in config dir: $CONFIGS_DIR"
|
||||
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
|
||||
[
|
||||
emqx: [
|
||||
emqx_base: [
|
||||
applications: [
|
||||
logger: :permanent,
|
||||
esasl: :load,
|
||||
|
@ -202,24 +202,8 @@ defmodule EMQXUmbrella.MixProject do
|
|||
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???
|
||||
conf_rendered =
|
||||
EEx.eval_string(conf_eex_template,
|
||||
assigns = [
|
||||
platform_bin_dir: "bin",
|
||||
platform_data_dir: "data",
|
||||
platform_etc_dir: "etc",
|
||||
|
@ -232,14 +216,51 @@ defmodule EMQXUmbrella.MixProject do
|
|||
runner_lib_dir: "$RUNNER_ROOT_DIR/lib",
|
||||
runner_log_dir: "$RUNNER_ROOT_DIR/log",
|
||||
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!(
|
||||
Path.join(etc, "emqx.conf"),
|
||||
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
|
||||
end
|
||||
|
||||
|
@ -364,4 +385,15 @@ defmodule EMQXUmbrella.MixProject do
|
|||
|
||||
String.downcase(opt) != "false"
|
||||
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
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
#!/bin/bash
|
||||
# shellcheck disable=SC1000-SC9999
|
||||
|
||||
set -ex
|
||||
|
||||
|
@ -10,18 +11,19 @@ mix release --overwrite
|
|||
## Assumes that `make emqx` has been run before the mix build to
|
||||
## generate the correct 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)
|
||||
# mkdir -p _build/dev/rel/emqx/data/configs/
|
||||
# LATEST_APP_CONFIG=$(ls -rt _build/emqx/rel/emqx/data/configs/app*.config | tail -n 1)
|
||||
|
||||
# FIXME!
|
||||
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#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 ${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#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/etc/emqx.conf _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