-
Notifications
You must be signed in to change notification settings - Fork 906
/
use_node
executable file
·103 lines (91 loc) · 3.41 KB
/
use_node
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/bin/sh
#
# SPDX-License-Identifier: Apache-2.0
#
# The OpenSearch Contributors require contributions made to
# this file be licensed under the Apache-2.0 license or a
# compatible open source license.
#
# Any modifications Copyright OpenSearch Contributors. See
# GitHub history for details.
#
# This script will find the appropriate Node.js runtime binary and execute it with any
# parameters passed in.
#
# Set a variable named OSD_USE_NODE_JS_FILE_PATH to have it prefixed with OSD_HOME and executed
# Example: SET OSD_USE_NODE_JS_FILE_PATH=\src\cli\dist
#
# NODE_OPTIONS is built using config/node.options and overridden by any previously set NODE_OPTIONS.
# To pass in any specific defaults that can be overridden by both of them, use OSD_NODE_OPTS_PREFIX.
SCRIPT="$0"
UNAME=$(uname -s)
if [ $UNAME = "FreeBSD" ]; then
OS="freebsd"
elif [ $UNAME = "Darwin" ]; then
OS="darwin"
else
OS="other"
fi
# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
while [ -h "$SCRIPT" ] ; do
loc=$(ls -ld "$SCRIPT")
# Drop everything prior to ->
link=$(expr "$loc" : '.*-> \(.*\)$')
if expr "$link" : '/.*' > /dev/null; then
SCRIPT="$link"
else
SCRIPT=$(dirname "$SCRIPT")/"$link"
fi
done
# Get an absolute path for OSD_HOME
OSD_HOME="$(cd "$(dirname "${SCRIPT}")/.."; pwd)"
CONFIG_DIR=${OSD_PATH_CONF:-"OSD_HOME/config"}
# Places to look for the Node.js binary in order: OSD_NODE_HOME > NODE_HOME > bundled with OSD > system-wide
if [ ! -z "$OSD_NODE_HOME" ]; then
NODE="$OSD_NODE_HOME/bin/node"
NODE_ERROR_MSG="in OSD_NODE_HOME"
NODE_ERROR_SHOW=true
elif [ ! -z "$NODE_HOME" ]; then
NODE="$NODE_HOME/bin/node"
NODE_ERROR_MSG="in NODE_HOME"
NODE_ERROR_SHOW=true
else
# Set these variables outside, as catchalls, to show meaningful errors if needed
NODE="$OSD_HOME/node/bin/node"
NODE_ERROR_MSG="bundled with OpenSearch Dashboards"
# A bin folder at the root is only present in release builds that have a bundled Node.js binary
if [ -d "${OSD_HOME}/bin" ]; then
NODE_ERROR_SHOW=true
# Not all operating systems can run the latest Node.js and the fallback is for them
"${NODE}" -v > /dev/null 2>&1
if [ $? -ne 0 ] && [ -d "${OSD_HOME}/node/fallback" ]; then
NODE="$OSD_HOME/node/fallback/bin/node"
fi
fi
fi
if [ -x "$NODE" ]; then
# Node.js binary was found where it was expected; no need to show an error
NODE_ERROR_SHOW=
elif [ $OS = "freebsd" ]; then
NODE="${LOCALBASE}/bin/node"
else
NODE="$(command -v node)"
fi
if [ ! -x "$NODE" ]; then
# Irrespective of NODE_ERROR_SHOW, if NODE is not found or executable, show the error
echo "Could not find a Node.js runtime binary $NODE_ERROR_MSG or on the system" >&2
exit 1
fi
# Node.js binary was found but not where it was told to be, so show a warning
if [ ! -z "$NODE_ERROR_SHOW" ]; then
echo "Could not find a Node.js runtime binary $NODE_ERROR_MSG but found one at $NODE" >&2
fi
if [ -f "${CONFIG_DIR}/node.options" ]; then
OSD_NODE_OPTS="$(grep -v ^# < ${CONFIG_DIR}/node.options | xargs)"
fi
# If a file path was provided for execution, prefix with OSD_HOME; use relative paths to avoid the need for this.
if [ ! -z "$OSD_USE_NODE_JS_FILE_PATH" ]; then
NODE_OPTIONS="$OSD_NODE_OPTS_PREFIX $OSD_NODE_OPTS $NODE_OPTIONS" exec "${NODE}" "${OSD_HOME}${OSD_USE_NODE_JS_FILE_PATH}" "${@}"
elif [ $# -ne 0 ]; then
NODE_OPTIONS="$OSD_NODE_OPTS_PREFIX $OSD_NODE_OPTS $NODE_OPTIONS" exec "${NODE}" "${@}"
fi