You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.2 KiB
97 lines
3.2 KiB
|
|
YML_CONFIG_PATH=/conf.yml
|
|
LOCAL_YML_CONFIG_PATH="$SERVICE_CONFIGSTORE$YML_CONFIG_PATH"
|
|
HOST_YML_CONFIG_PATH="$HOST_CONFIGSTORE/$SERVICE_NAME$YML_CONFIG_PATH"
|
|
|
|
|
|
CONFIG_PATH=/setup.ts
|
|
LOCAL_CONFIG_PATH="$SERVICE_CONFIGSTORE$CONFIG_PATH"
|
|
HOST_CONFIG_PATH="$HOST_CONFIGSTORE/$SERVICE_NAME$CONFIG_PATH"
|
|
|
|
DEST_PATH=/var/www/cyclos-ui
|
|
LOCAL_DEST_PATH="$SERVICE_DATASTORE$DEST_PATH"
|
|
HOST_DEST_PATH="$HOST_DATASTORE/$SERVICE_NAME$DEST_PATH"
|
|
|
|
|
|
cyclos_ui.build_builder_image() {
|
|
local last_line
|
|
if out=$(cd "$CHARM_PATH/misc/builder" && docker build . 2>&1); then
|
|
last_line="${out##*$'\n'}"
|
|
if [[ "${last_line}" =~ ^"Successfully built "[a-f0-9]+$ ]]; then
|
|
echo "${last_line##* }"
|
|
return 0
|
|
else
|
|
err "Couldn't find image id:"
|
|
fi
|
|
else
|
|
err "Failed to build the builder image:"
|
|
fi
|
|
e "$out" | prefix " ${DARKGRAY}|${NORMAL} " >&2
|
|
return 1
|
|
}
|
|
|
|
|
|
cyclos_ui.make_base_config_file() {
|
|
local cfg_file_content builder_image_id
|
|
# builder_image_id=$(cyclos_ui.build_builder_image) || return 1
|
|
# cfg_file_content=$(docker run --rm "$builder_image_id" cat src/app/setup.ts) || {
|
|
# err "Couldn't access 'src/app/setup.ts' in given image."
|
|
# return 1
|
|
# }
|
|
service_def=$(get_compose_service_def "$SERVICE_NAME") || return 1
|
|
cfg_file_content=$(echo "$service_def" | shyaml -y get-value "options" 2>/dev/null) || true
|
|
mkdir -p "${LOCAL_YML_CONFIG_PATH%/*}" &&
|
|
e "$cfg_file_content" > "$LOCAL_YML_CONFIG_PATH"
|
|
}
|
|
|
|
|
|
cyclos_ui.generate_website() {
|
|
local builder_image_id hash_file="$LOCAL_DEST_PATH/.hash"
|
|
hash=$(hash_get < "$LOCAL_YML_CONFIG_PATH")
|
|
|
|
if [ -f "${hash_file}" ]; then
|
|
if [[ "$(cat "${hash_file}")" == "$hash" ]]; then
|
|
return 0
|
|
else
|
|
[ -d "$LOCAL_DEST_PATH" ] && echo rm -rf "${LOCAL_DEST_PATH}"
|
|
fi
|
|
fi
|
|
builder_image_id=$(cyclos_ui.build_builder_image) || return 1
|
|
cfg_file_content=$(docker run --rm "$builder_image_id" cat src/app/setup.ts) || {
|
|
err "Couldn't access 'src/app/setup.ts' in given image."
|
|
return 1
|
|
}
|
|
## remove last '}'
|
|
cfg_file_content="${cfg_file_content%\}*}"
|
|
while read-0 k v; do
|
|
json=$(e "$v" | yaml2json) || {
|
|
err "Failed to correct yaml to json"
|
|
return 1
|
|
}
|
|
cfg_file_content+=" Configuration.$(e "$k" | shyaml get-value) = $json;"$'\n'""
|
|
done < <(cat "$LOCAL_YML_CONFIG_PATH" | shyaml -y key-values-0)
|
|
cfg_file_content+="}"
|
|
mkdir -p "${LOCAL_CONFIG_PATH%/*}" &&
|
|
e "$cfg_file_content" > "$LOCAL_CONFIG_PATH"
|
|
docker run --rm \
|
|
-v "$HOST_CONFIG_PATH:/opt/apps/cyclos-ui/src/app/setup.ts:ro" \
|
|
-v "$HOST_DEST_PATH:/opt/apps/cyclos-ui/dist:rw" \
|
|
"${builder_image_id}" \
|
|
npm run build >&2 || {
|
|
err "Failed to build new sources."
|
|
return 1
|
|
}
|
|
e "$hash" > "$hash_file"
|
|
}
|
|
|
|
|
|
cyclos_ui.conf_add() {
|
|
local yaml="$1"
|
|
prev=$([ -f "$LOCAL_YML_CONFIG_PATH" ] && cat "$LOCAL_YML_CONFIG_PATH")
|
|
if ! out=$(merge_yaml_str "$prev" "$yaml"); then
|
|
err "Couldn't merge new configuration."
|
|
exit 1
|
|
fi
|
|
mkdir -p "${LOCAL_CONFIG_PATH%/*}" &&
|
|
e "$out" > "$LOCAL_YML_CONFIG_PATH"
|
|
}
|