mirror of
https://github.com/openimsdk/open-im-server.git
synced 2026-04-28 14:29:19 +08:00
feat: set openim lint
Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com>
This commit is contained in:
@@ -3,4 +3,6 @@ go.mod
|
||||
go.sum
|
||||
third_party/
|
||||
translations/
|
||||
log
|
||||
logs
|
||||
.git
|
||||
.golangci.yml
|
||||
+45
-45
@@ -23,7 +23,7 @@ trap 'openim::util::onCtrlC' INT
|
||||
print_with_delay() {
|
||||
text="$1"
|
||||
delay="$2"
|
||||
|
||||
|
||||
for i in $(seq 0 $((${#text}-1))); do
|
||||
printf "${text:$i:1}"
|
||||
sleep $delay
|
||||
@@ -34,7 +34,7 @@ print_with_delay() {
|
||||
print_progress() {
|
||||
total="$1"
|
||||
delay="$2"
|
||||
|
||||
|
||||
printf "["
|
||||
for i in $(seq 1 $total); do
|
||||
printf "#"
|
||||
@@ -44,14 +44,14 @@ print_progress() {
|
||||
}
|
||||
|
||||
function openim_logo() {
|
||||
# Set text color to cyan for header and URL
|
||||
echo -e "\033[0;36m"
|
||||
# Set text color to cyan for header and URL
|
||||
echo -e "\033[0;36m"
|
||||
|
||||
# Display fancy ASCII Art logo
|
||||
# look http://patorjk.com/software/taag/#p=display&h=1&v=1&f=Doh&t=OpenIM
|
||||
print_with_delay '
|
||||
|
||||
|
||||
# Display fancy ASCII Art logo
|
||||
# look http://patorjk.com/software/taag/#p=display&h=1&v=1&f=Doh&t=OpenIM
|
||||
print_with_delay '
|
||||
|
||||
|
||||
OOOOOOOOO IIIIIIIIIIMMMMMMMM MMMMMMMM
|
||||
OO:::::::::OO I::::::::IM:::::::M M:::::::M
|
||||
OO:::::::::::::OO I::::::::IM::::::::M M::::::::M
|
||||
@@ -68,45 +68,45 @@ O:::::::OOO:::::::O p:::::ppppp:::::::pe::::::::e n::::n n::::nII:
|
||||
OO:::::::::::::OO p::::::::::::::::p e::::::::eeeeeeee n::::n n::::nI::::::::IM::::::M M::::::M
|
||||
OO:::::::::OO p::::::::::::::pp ee:::::::::::::e n::::n n::::nI::::::::IM::::::M M::::::M
|
||||
OOOOOOOOO p::::::pppppppp eeeeeeeeeeeeee nnnnnn nnnnnnIIIIIIIIIIMMMMMMMM MMMMMMMM
|
||||
p:::::p
|
||||
p:::::p
|
||||
p:::::::p
|
||||
p:::::::p
|
||||
p:::::::p
|
||||
ppppppppp
|
||||
|
||||
' 0.0001
|
||||
p:::::p
|
||||
p:::::p
|
||||
p:::::::p
|
||||
p:::::::p
|
||||
p:::::::p
|
||||
ppppppppp
|
||||
|
||||
# Display product URL
|
||||
print_with_delay "Discover more and contribute at: https://github.com/openimsdk/open-im-server" 0.01
|
||||
|
||||
# Reset text color back to normal
|
||||
echo -e "\033[0m"
|
||||
|
||||
# Set text color to green for product description
|
||||
echo -e "\033[1;32m"
|
||||
|
||||
print_with_delay "Open-IM-Server: Reinventing Instant Messaging" 0.01
|
||||
print_progress 50 0.02
|
||||
|
||||
print_with_delay "Open-IM-Server is not just a product; it's a revolution. It's about bringing the power of seamless," 0.01
|
||||
print_with_delay "real-time messaging to your fingertips. And it's about joining a global community of developers, dedicated to pushing the boundaries of what's possible." 0.01
|
||||
|
||||
print_progress 50 0.02
|
||||
|
||||
# Reset text color back to normal
|
||||
echo -e "\033[0m"
|
||||
|
||||
# Set text color to yellow for the Slack link
|
||||
echo -e "\033[1;33m"
|
||||
|
||||
print_with_delay "Join our developer community on Slack: https://join.slack.com/t/openimsdk/shared_invite/zt-22720d66b-o_FvKxMTGXtcnnnHiMqe9Q" 0.01
|
||||
|
||||
# Reset text color back to normal
|
||||
echo -e "\033[0m"
|
||||
' 0.0001
|
||||
|
||||
# Display product URL
|
||||
print_with_delay "Discover more and contribute at: https://github.com/openimsdk/open-im-server" 0.01
|
||||
|
||||
# Reset text color back to normal
|
||||
echo -e "\033[0m"
|
||||
|
||||
# Set text color to green for product description
|
||||
echo -e "\033[1;32m"
|
||||
|
||||
print_with_delay "Open-IM-Server: Reinventing Instant Messaging" 0.01
|
||||
print_progress 50 0.02
|
||||
|
||||
print_with_delay "Open-IM-Server is not just a product; it's a revolution. It's about bringing the power of seamless," 0.01
|
||||
print_with_delay "real-time messaging to your fingertips. And it's about joining a global community of developers, dedicated to pushing the boundaries of what's possible." 0.01
|
||||
|
||||
print_progress 50 0.02
|
||||
|
||||
# Reset text color back to normal
|
||||
echo -e "\033[0m"
|
||||
|
||||
# Set text color to yellow for the Slack link
|
||||
echo -e "\033[1;33m"
|
||||
|
||||
print_with_delay "Join our developer community on Slack: https://join.slack.com/t/openimsdk/shared_invite/zt-22720d66b-o_FvKxMTGXtcnnnHiMqe9Q" 0.01
|
||||
|
||||
# Reset text color back to normal
|
||||
echo -e "\033[0m"
|
||||
}
|
||||
|
||||
function main() {
|
||||
openim_logo
|
||||
openim_logo
|
||||
}
|
||||
main "$@"
|
||||
|
||||
Executable
+173
@@ -0,0 +1,173 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
#**************************************************************************
|
||||
# Copyright (C) 2011, Paul Lutus *
|
||||
# *
|
||||
# This program is free software; you can redistribute it and/or modify *
|
||||
# it under the terms of the GNU General Public License as published by *
|
||||
# the Free Software Foundation; either version 2 of the License, or *
|
||||
# (at your option) any later version. *
|
||||
# *
|
||||
# This program is distributed in the hope that it will be useful, *
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
# GNU General Public License for more details. *
|
||||
# *
|
||||
# You should have received a copy of the GNU General Public License *
|
||||
# along with this program; if not, write to the *
|
||||
# Free Software Foundation, Inc., *
|
||||
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
|
||||
#**************************************************************************
|
||||
|
||||
import re
|
||||
import sys
|
||||
|
||||
PVERSION = '1.0'
|
||||
|
||||
|
||||
class BeautifyBash:
|
||||
|
||||
def __init__(self):
|
||||
self.tab_str = ' '
|
||||
self.tab_size = 2
|
||||
|
||||
def read_file(self, fp):
|
||||
with open(fp) as f:
|
||||
return f.read()
|
||||
|
||||
def write_file(self, fp, data):
|
||||
with open(fp, 'w') as f:
|
||||
f.write(data)
|
||||
|
||||
def beautify_string(self, data, path=''):
|
||||
tab = 0
|
||||
case_stack = []
|
||||
in_here_doc = False
|
||||
defer_ext_quote = False
|
||||
in_ext_quote = False
|
||||
ext_quote_string = ''
|
||||
here_string = ''
|
||||
output = []
|
||||
line = 1
|
||||
for record in re.split('\n', data):
|
||||
record = record.rstrip()
|
||||
stripped_record = record.strip()
|
||||
|
||||
# collapse multiple quotes between ' ... '
|
||||
test_record = re.sub(r'\'.*?\'', '', stripped_record)
|
||||
# collapse multiple quotes between " ... "
|
||||
test_record = re.sub(r'".*?"', '', test_record)
|
||||
# collapse multiple quotes between ` ... `
|
||||
test_record = re.sub(r'`.*?`', '', test_record)
|
||||
# collapse multiple quotes between \` ... ' (weird case)
|
||||
test_record = re.sub(r'\\`.*?\'', '', test_record)
|
||||
# strip out any escaped single characters
|
||||
test_record = re.sub(r'\\.', '', test_record)
|
||||
# remove '#' comments
|
||||
test_record = re.sub(r'(\A|\s)(#.*)', '', test_record, 1)
|
||||
if(not in_here_doc):
|
||||
if(re.search('<<-?', test_record)):
|
||||
here_string = re.sub(
|
||||
'.*<<-?\s*[\'|"]?([_|\w]+)[\'|"]?.*', '\\1', stripped_record, 1)
|
||||
in_here_doc = (len(here_string) > 0)
|
||||
if(in_here_doc): # pass on with no changes
|
||||
output.append(record)
|
||||
# now test for here-doc termination string
|
||||
if(re.search(here_string, test_record) and not re.search('<<', test_record)):
|
||||
in_here_doc = False
|
||||
else: # not in here doc
|
||||
if(in_ext_quote):
|
||||
if(re.search(ext_quote_string, test_record)):
|
||||
# provide line after quotes
|
||||
test_record = re.sub(
|
||||
'.*%s(.*)' % ext_quote_string, '\\1', test_record, 1)
|
||||
in_ext_quote = False
|
||||
else: # not in ext quote
|
||||
if(re.search(r'(\A|\s)(\'|")', test_record)):
|
||||
# apply only after this line has been processed
|
||||
defer_ext_quote = True
|
||||
ext_quote_string = re.sub(
|
||||
'.*([\'"]).*', '\\1', test_record, 1)
|
||||
# provide line before quote
|
||||
test_record = re.sub(
|
||||
'(.*)%s.*' % ext_quote_string, '\\1', test_record, 1)
|
||||
if(in_ext_quote):
|
||||
# pass on unchanged
|
||||
output.append(record)
|
||||
else: # not in ext quote
|
||||
inc = len(re.findall(
|
||||
'(\s|\A|;)(case|then|do)(;|\Z|\s)', test_record))
|
||||
inc += len(re.findall('(\{|\(|\[)', test_record))
|
||||
outc = len(re.findall(
|
||||
'(\s|\A|;)(esac|fi|done|elif)(;|\)|\||\Z|\s)', test_record))
|
||||
outc += len(re.findall('(\}|\)|\])', test_record))
|
||||
if(re.search(r'\besac\b', test_record)):
|
||||
if(len(case_stack) == 0):
|
||||
sys.stderr.write(
|
||||
'File %s: error: "esac" before "case" in line %d.\n' % (
|
||||
path, line)
|
||||
)
|
||||
else:
|
||||
outc += case_stack.pop()
|
||||
# sepcial handling for bad syntax within case ... esac
|
||||
if(len(case_stack) > 0):
|
||||
if(re.search('\A[^(]*\)', test_record)):
|
||||
# avoid overcount
|
||||
outc -= 2
|
||||
case_stack[-1] += 1
|
||||
if(re.search(';;', test_record)):
|
||||
outc += 1
|
||||
case_stack[-1] -= 1
|
||||
# an ad-hoc solution for the "else" keyword
|
||||
else_case = (
|
||||
0, -1)[re.search('^(else)', test_record) != None]
|
||||
net = inc - outc
|
||||
tab += min(net, 0)
|
||||
extab = tab + else_case
|
||||
extab = max(0, extab)
|
||||
output.append(
|
||||
(self.tab_str * self.tab_size * extab) + stripped_record)
|
||||
tab += max(net, 0)
|
||||
if(defer_ext_quote):
|
||||
in_ext_quote = True
|
||||
defer_ext_quote = False
|
||||
if(re.search(r'\bcase\b', test_record)):
|
||||
case_stack.append(0)
|
||||
line += 1
|
||||
error = (tab != 0)
|
||||
if(error):
|
||||
sys.stderr.write(
|
||||
'File %s: error: indent/outdent mismatch: %d.\n' % (path, tab))
|
||||
return '\n'.join(output), error
|
||||
|
||||
def beautify_file(self, path):
|
||||
error = False
|
||||
if(path == '-'):
|
||||
data = sys.stdin.read()
|
||||
result, error = self.beautify_string(data, '(stdin)')
|
||||
sys.stdout.write(result)
|
||||
else: # named file
|
||||
data = self.read_file(path)
|
||||
result, error = self.beautify_string(data, path)
|
||||
if(data != result):
|
||||
# make a backup copy
|
||||
self.write_file(path + '~', data)
|
||||
self.write_file(path, result)
|
||||
return error
|
||||
|
||||
def main(self):
|
||||
error = False
|
||||
sys.argv.pop(0)
|
||||
if(len(sys.argv) < 1):
|
||||
sys.stderr.write(
|
||||
'usage: shell script filenames or \"-\" for stdin.\n')
|
||||
else:
|
||||
for path in sys.argv:
|
||||
error |= self.beautify_file(path)
|
||||
sys.exit((0, 1)[error])
|
||||
|
||||
# if not called as a module
|
||||
if(__name__ == '__main__'):
|
||||
BeautifyBash().main()
|
||||
|
||||
@@ -30,8 +30,8 @@ OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
|
||||
source "${OPENIM_ROOT}/scripts/lib/init.sh"
|
||||
|
||||
# CPU core number
|
||||
pushd ""${OPENIM_ROOT}"/tools/ncpu" >/dev/null
|
||||
cpu_count=$(go run .)
|
||||
pushd "${OPENIM_ROOT}/tools/ncpu" >/dev/null
|
||||
cpu_count=$(go run .)
|
||||
popd >/dev/null
|
||||
|
||||
openim::color::echo ${GREEN_PREFIX} "======> cpu_count=$cpu_count"
|
||||
@@ -42,7 +42,7 @@ compile_count=$((cpu_count / 2))
|
||||
# For help output
|
||||
ARGHELP=""
|
||||
if [[ "$#" -gt 0 ]]; then
|
||||
ARGHELP="'$*'"
|
||||
ARGHELP="'$*'"
|
||||
fi
|
||||
|
||||
openim::color::echo $COLOR_CYAN "NOTE: $0 has been replaced by 'make multiarch' or 'make build'"
|
||||
@@ -61,15 +61,15 @@ echo " ./scripts/build-all-service.sh BINS=openim-api V=1 DEBUG=1"
|
||||
echo
|
||||
|
||||
if [ -z "$*" ]; then
|
||||
openim::log::info "no args, build all service"
|
||||
make --no-print-directory -C "${OPENIM_ROOT}" -j$compile_count build
|
||||
openim::log::info "no args, build all service"
|
||||
make --no-print-directory -C "${OPENIM_ROOT}" -j$compile_count build
|
||||
else
|
||||
openim::log::info "build service: $*"
|
||||
make --no-print-directory -C "${OPENIM_ROOT}" -j$compile_count build "$*"
|
||||
openim::log::info "build service: $*"
|
||||
make --no-print-directory -C "${OPENIM_ROOT}" -j$compile_count build "$*"
|
||||
fi
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
openim::log::success "all service build success, run 'make start' or './scripts/start-all.sh'"
|
||||
openim::log::success "all service build success, run 'make start' or './scripts/start-all.sh'"
|
||||
else
|
||||
openim::log::error "make build Error, script exits"
|
||||
openim::log::error "make build Error, script exits"
|
||||
fi
|
||||
|
||||
+18
-18
@@ -14,10 +14,10 @@
|
||||
# limitations under the License.
|
||||
|
||||
# This script is check openim service is running normally
|
||||
#
|
||||
#
|
||||
# Usage: `scripts/check-all.sh`.
|
||||
# Encapsulated as: `make check`.
|
||||
# READ: https://github.com/openimsdk/open-im-server/tree/main/scripts/install/environment.sh
|
||||
# READ: https://github.com/openimsdk/open-im-server/tree/main/scripts/install/environment.sh
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
@@ -34,19 +34,19 @@ openim::log::status "Check all dependent service ports"
|
||||
# Elegant printing function
|
||||
# Elegant printing function
|
||||
print_services_and_ports() {
|
||||
local service_names=("$@")
|
||||
local half_length=$((${#service_names[@]} / 2))
|
||||
local service_ports=("${service_names[@]:half_length}")
|
||||
|
||||
echo "+-------------------------+----------+"
|
||||
echo "| Service Name | Port |"
|
||||
echo "+-------------------------+----------+"
|
||||
|
||||
for ((index=0; index < half_length; index++)); do
|
||||
printf "| %-23s | %-8s |\n" "${service_names[$index]}" "${service_ports[$index]}"
|
||||
done
|
||||
|
||||
echo "+-------------------------+----------+"
|
||||
local service_names=("$@")
|
||||
local half_length=$((${#service_names[@]} / 2))
|
||||
local service_ports=("${service_names[@]:half_length}")
|
||||
|
||||
echo "+-------------------------+----------+"
|
||||
echo "| Service Name | Port |"
|
||||
echo "+-------------------------+----------+"
|
||||
|
||||
for ((index=0; index < half_length; index++)); do
|
||||
printf "| %-23s | %-8s |\n" "${service_names[$index]}" "${service_ports[$index]}"
|
||||
done
|
||||
|
||||
echo "+-------------------------+----------+"
|
||||
}
|
||||
|
||||
# Assuming OPENIM_SERVER_NAME_TARGETS and OPENIM_SERVER_PORT_TARGETS are defined
|
||||
@@ -67,10 +67,10 @@ set +e
|
||||
|
||||
# Later, after discarding Docker, the Docker keyword is unreliable, and Kubepods is used
|
||||
if grep -qE 'docker|kubepods' /proc/1/cgroup || [ -f /.dockerenv ]; then
|
||||
openim::color::echo ${COLOR_CYAN} "Environment in the interior of the container"
|
||||
openim::color::echo ${COLOR_CYAN} "Environment in the interior of the container"
|
||||
else
|
||||
openim::color::echo ${COLOR_CYAN} "The environment is outside the container"
|
||||
openim::util::check_ports ${OPENIM_DEPENDENCY_PORT_LISTARIES[@]} || return 0
|
||||
openim::color::echo ${COLOR_CYAN} "The environment is outside the container"
|
||||
openim::util::check_ports ${OPENIM_DEPENDENCY_PORT_LISTARIES[@]} || return 0
|
||||
fi
|
||||
|
||||
if [[ $? -ne 0 ]]; then
|
||||
|
||||
+66
-66
@@ -118,7 +118,7 @@ function return_to_kansas {
|
||||
openim::log::status "Aborting in-progress git am."
|
||||
git am --abort >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
|
||||
# return to the starting branch and delete the PR text file
|
||||
if [[ -z "${DRY_RUN}" ]]; then
|
||||
echo
|
||||
@@ -137,7 +137,7 @@ function make-a-pr() {
|
||||
rel="$(basename "${BRANCH}")"
|
||||
echo
|
||||
openim::log::status "Creating a pull request on GitHub at ${GITHUB_USER}:${NEWBRANCH}"
|
||||
|
||||
|
||||
local numandtitle
|
||||
numandtitle=$(printf '%s\n' "${SUBJECTS[@]}")
|
||||
prtext=$(cat <<EOF
|
||||
@@ -153,7 +153,7 @@ For details on the cherry pick process, see the [cherry pick requests](https://g
|
||||
EOF
|
||||
)
|
||||
|
||||
gh pr create --title="Automated cherry pick of ${numandtitle}" --body="${prtext}" --head "${GITHUB_USER}:${NEWBRANCH}" --base "${rel}" --repo="${MAIN_REPO_ORG}/${MAIN_REPO_NAME}"
|
||||
gh pr create --title="Automated cherry pick of ${numandtitle}" --body="${prtext}" --head "${GITHUB_USER}:${NEWBRANCH}" --base "${rel}" --repo="${MAIN_REPO_ORG}/${MAIN_REPO_NAME}"
|
||||
}
|
||||
|
||||
git checkout -b "${NEWBRANCHUNIQ}" "${BRANCH}"
|
||||
@@ -161,84 +161,84 @@ cleanbranch="${NEWBRANCHUNIQ}"
|
||||
|
||||
gitamcleanup=true
|
||||
for pull in "${PULLS[@]}"; do
|
||||
openim::log::status "Downloading patch to /tmp/${pull}.patch (in case you need to do this again)"
|
||||
openim::log::status "Downloading patch to /tmp/${pull}.patch (in case you need to do this again)"
|
||||
|
||||
curl -o "/tmp/${pull}.patch" -sSL "https://github.com/${MAIN_REPO_ORG}/${MAIN_REPO_NAME}/pull/${pull}.patch"
|
||||
echo
|
||||
openim::log::status "About to attempt cherry pick of PR. To reattempt:"
|
||||
echo " $ git am -3 /tmp/${pull}.patch"
|
||||
echo
|
||||
git am -3 "/tmp/${pull}.patch" || {
|
||||
conflicts=false
|
||||
while unmerged=$(git status --porcelain | grep ^U) && [[ -n ${unmerged} ]] \
|
||||
|| [[ -e "${REBASEMAGIC}" ]]; do
|
||||
conflicts=true # <-- We should have detected conflicts once
|
||||
echo
|
||||
openim::log::status "Conflicts detected:"
|
||||
echo
|
||||
(git status --porcelain | grep ^U) || echo "!!! None. Did you git am --continue?"
|
||||
echo
|
||||
openim::log::status "Please resolve the conflicts in another window (and remember to 'git add / git am --continue')"
|
||||
read -p "+++ Proceed (anything other than 'y' aborts the cherry-pick)? [y/n] " -r
|
||||
echo
|
||||
if ! [[ "${REPLY}" =~ ^[yY]$ ]]; then
|
||||
echo "Aborting." >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ "${conflicts}" != "true" ]]; then
|
||||
echo "!!! git am failed, likely because of an in-progress 'git am' or 'git rebase'"
|
||||
curl -o "/tmp/${pull}.patch" -sSL "https://github.com/${MAIN_REPO_ORG}/${MAIN_REPO_NAME}/pull/${pull}.patch"
|
||||
echo
|
||||
openim::log::status "About to attempt cherry pick of PR. To reattempt:"
|
||||
echo " $ git am -3 /tmp/${pull}.patch"
|
||||
echo
|
||||
git am -3 "/tmp/${pull}.patch" || {
|
||||
conflicts=false
|
||||
while unmerged=$(git status --porcelain | grep ^U) && [[ -n ${unmerged} ]] \
|
||||
|| [[ -e "${REBASEMAGIC}" ]]; do
|
||||
conflicts=true # <-- We should have detected conflicts once
|
||||
echo
|
||||
openim::log::status "Conflicts detected:"
|
||||
echo
|
||||
(git status --porcelain | grep ^U) || echo "!!! None. Did you git am --continue?"
|
||||
echo
|
||||
openim::log::status "Please resolve the conflicts in another window (and remember to 'git add / git am --continue')"
|
||||
read -p "+++ Proceed (anything other than 'y' aborts the cherry-pick)? [y/n] " -r
|
||||
echo
|
||||
if ! [[ "${REPLY}" =~ ^[yY]$ ]]; then
|
||||
echo "Aborting." >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
done
|
||||
|
||||
if [[ "${conflicts}" != "true" ]]; then
|
||||
echo "!!! git am failed, likely because of an in-progress 'git am' or 'git rebase'"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# set the subject
|
||||
subject=$(grep -m 1 "^Subject" "/tmp/${pull}.patch" | sed -e 's/Subject: \[PATCH//g' | sed 's/.*] //')
|
||||
SUBJECTS+=("#${pull}: ${subject}")
|
||||
# set the subject
|
||||
subject=$(grep -m 1 "^Subject" "/tmp/${pull}.patch" | sed -e 's/Subject: \[PATCH//g' | sed 's/.*] //')
|
||||
SUBJECTS+=("#${pull}: ${subject}")
|
||||
|
||||
# remove the patch file from /tmp
|
||||
rm -f "/tmp/${pull}.patch"
|
||||
# remove the patch file from /tmp
|
||||
rm -f "/tmp/${pull}.patch"
|
||||
done
|
||||
gitamcleanup=false
|
||||
|
||||
# Re-generate docs (if needed)
|
||||
if [[ -n "${REGENERATE_DOCS}" ]]; then
|
||||
echo
|
||||
echo "Regenerating docs..."
|
||||
if ! scripts/generate-docs.sh; then
|
||||
echo
|
||||
echo "Regenerating docs..."
|
||||
if ! scripts/generate-docs.sh; then
|
||||
echo
|
||||
echo "scripts/gendoc.sh FAILED to complete."
|
||||
exit 1
|
||||
fi
|
||||
echo "scripts/gendoc.sh FAILED to complete."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ -n "${DRY_RUN}" ]]; then
|
||||
openim::log::error "!!! Skipping git push and PR creation because you set DRY_RUN."
|
||||
echo "To return to the branch you were in when you invoked this script:"
|
||||
echo
|
||||
echo " git checkout ${STARTINGBRANCH}"
|
||||
echo
|
||||
echo "To delete this branch:"
|
||||
echo
|
||||
echo " git branch -D ${NEWBRANCHUNIQ}"
|
||||
exit 0
|
||||
openim::log::error "!!! Skipping git push and PR creation because you set DRY_RUN."
|
||||
echo "To return to the branch you were in when you invoked this script:"
|
||||
echo
|
||||
echo " git checkout ${STARTINGBRANCH}"
|
||||
echo
|
||||
echo "To delete this branch:"
|
||||
echo
|
||||
echo " git branch -D ${NEWBRANCHUNIQ}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if git remote -v | grep ^"${FORK_REMOTE}" | grep "${MAIN_REPO_ORG}/${MAIN_REPO_NAME}.git"; then
|
||||
echo "!!! You have ${FORK_REMOTE} configured as your ${MAIN_REPO_ORG}/${MAIN_REPO_NAME}.git"
|
||||
echo "This isn't normal. Leaving you with push instructions:"
|
||||
echo
|
||||
openim::log::status "First manually push the branch this script created:"
|
||||
echo
|
||||
echo " git push REMOTE ${NEWBRANCHUNIQ}:${NEWBRANCH}"
|
||||
echo
|
||||
echo "where REMOTE is your personal fork (maybe ${UPSTREAM_REMOTE}? Consider swapping those.)."
|
||||
echo "OR consider setting UPSTREAM_REMOTE and FORK_REMOTE to different values."
|
||||
echo
|
||||
make-a-pr
|
||||
cleanbranch=""
|
||||
exit 0
|
||||
echo "!!! You have ${FORK_REMOTE} configured as your ${MAIN_REPO_ORG}/${MAIN_REPO_NAME}.git"
|
||||
echo "This isn't normal. Leaving you with push instructions:"
|
||||
echo
|
||||
openim::log::status "First manually push the branch this script created:"
|
||||
echo
|
||||
echo " git push REMOTE ${NEWBRANCHUNIQ}:${NEWBRANCH}"
|
||||
echo
|
||||
echo "where REMOTE is your personal fork (maybe ${UPSTREAM_REMOTE}? Consider swapping those.)."
|
||||
echo "OR consider setting UPSTREAM_REMOTE and FORK_REMOTE to different values."
|
||||
echo
|
||||
make-a-pr
|
||||
cleanbranch=""
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo
|
||||
@@ -248,8 +248,8 @@ echo " git push ${FORK_REMOTE} ${NEWBRANCHUNIQ}:${NEWBRANCH}"
|
||||
echo
|
||||
read -p "+++ Proceed (anything other than 'y' aborts the cherry-pick)? [y/n] " -r
|
||||
if ! [[ "${REPLY}" =~ ^[yY]$ ]]; then
|
||||
echo "Aborting." >&2
|
||||
exit 1
|
||||
echo "Aborting." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
git push "${FORK_REMOTE}" -f "${NEWBRANCHUNIQ}:${NEWBRANCH}"
|
||||
|
||||
+287
-286
@@ -42,7 +42,7 @@ OPENIM_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. && pwd -P)
|
||||
|
||||
# Constants
|
||||
readonly OPENIM_BUILD_IMAGE_REPO=openim-build
|
||||
#readonly OPENIM_BUILD_IMAGE_CROSS_TAG="$(cat ""${OPENIM_ROOT}"/build/build-image/cross/VERSION")"
|
||||
#readonly OPENIM_BUILD_IMAGE_CROSS_TAG="$(cat "${OPENIM_ROOT}/build/build-image/cross/VERSION")"
|
||||
|
||||
readonly OPENIM_DOCKER_REGISTRY="${OPENIM_DOCKER_REGISTRY:-k8s.gcr.io}"
|
||||
readonly OPENIM_BASE_IMAGE_REGISTRY="${OPENIM_BASE_IMAGE_REGISTRY:-us.gcr.io/k8s-artifacts-prod/build-image}"
|
||||
@@ -53,7 +53,7 @@ readonly OPENIM_BASE_IMAGE_REGISTRY="${OPENIM_BASE_IMAGE_REGISTRY:-us.gcr.io/k8s
|
||||
#
|
||||
# Increment/change this number if you change the build image (anything under
|
||||
# build/build-image) or change the set of volumes in the data container.
|
||||
#readonly OPENIM_BUILD_IMAGE_VERSION_BASE="$(cat ""${OPENIM_ROOT}"/build/build-image/VERSION")"
|
||||
#readonly OPENIM_BUILD_IMAGE_VERSION_BASE="$(cat "${OPENIM_ROOT}/build/build-image/VERSION")"
|
||||
#readonly OPENIM_BUILD_IMAGE_VERSION="${OPENIM_BUILD_IMAGE_VERSION_BASE}-${OPENIM_BUILD_IMAGE_CROSS_TAG}"
|
||||
|
||||
# Here we map the output directories across both the local and remote _output
|
||||
@@ -66,9 +66,10 @@ readonly OPENIM_BASE_IMAGE_REGISTRY="${OPENIM_BASE_IMAGE_REGISTRY:-us.gcr.io/k8s
|
||||
# is really remote, this is the stuff that has to be copied
|
||||
# back.
|
||||
# OUT_DIR can come in from the Makefile, so honor it.
|
||||
readonly LOCAL_OUTPUT_ROOT=""${OPENIM_ROOT}"/${OUT_DIR:-_output}"
|
||||
readonly LOCAL_OUTPUT_SUBPATH="${LOCAL_OUTPUT_ROOT}/platforms"
|
||||
readonly LOCAL_OUTPUT_BINPATH="${LOCAL_OUTPUT_SUBPATH}"
|
||||
readonly LOCAL_OUTPUT_ROOT="${OPENIM_ROOT}/${OUT_DIR:-_output}"
|
||||
readonly LOCAL_OUTPUT_SUBPATH="${LOCAL_OUTPUT_ROOT}/bin"
|
||||
readonly LOCAL_OUTPUT_BINPATH="${LOCAL_OUTPUT_SUBPATH}/platforms"
|
||||
readonly LOCAL_OUTPUT_BINTOOLSPATH="${LOCAL_OUTPUT_SUBPATH}/tools"
|
||||
readonly LOCAL_OUTPUT_GOPATH="${LOCAL_OUTPUT_SUBPATH}/go"
|
||||
readonly LOCAL_OUTPUT_IMAGE_STAGING="${LOCAL_OUTPUT_ROOT}/images"
|
||||
|
||||
@@ -86,28 +87,28 @@ readonly OPENIM_CONTAINER_RSYNC_PORT=8730
|
||||
#
|
||||
# $1 - server architecture
|
||||
openim::build::get_docker_wrapped_binaries() {
|
||||
local arch=$1
|
||||
local debian_base_version=v2.1.0
|
||||
local debian_iptables_version=v12.1.0
|
||||
### If you change any of these lists, please also update DOCKERIZED_BINARIES
|
||||
### in build/BUILD. And openim::golang::server_image_targets
|
||||
local arch=$1
|
||||
local debian_base_version=v2.1.0
|
||||
local debian_iptables_version=v12.1.0
|
||||
### If you change any of these lists, please also update DOCKERIZED_BINARIES
|
||||
### in build/BUILD. And openim::golang::server_image_targets
|
||||
|
||||
local targets=(
|
||||
"openim-api,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-cmdutils,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-crontask,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-msggateway,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-msgtransfer,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-push,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-rpc-auth,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-rpc-conversation,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-rpc-friend,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-rpc-group,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-rpc-msg,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-rpc-third,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-rpc-user,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
)
|
||||
echo "${targets[@]}"
|
||||
local targets=(
|
||||
"openim-api,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-cmdutils,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-crontask,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-msggateway,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-msgtransfer,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-push,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-rpc-auth,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-rpc-conversation,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-rpc-friend,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-rpc-group,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-rpc-msg,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-rpc-third,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
"openim-rpc-user,${OPENIM_BASE_IMAGE_REGISTRY}/debian-base-${arch}:${debian_base_version}"
|
||||
)
|
||||
echo "${targets[@]}"
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -132,170 +133,170 @@ openim::build::get_docker_wrapped_binaries() {
|
||||
# DOCKER_MOUNT_ARGS
|
||||
# LOCAL_OUTPUT_BUILD_CONTEXT
|
||||
function openim::build::verify_prereqs() {
|
||||
local -r require_docker=${1:-true}
|
||||
openim::log::status "Verifying Prerequisites...."
|
||||
openim::build::ensure_tar || return 1
|
||||
openim::build::ensure_rsync || return 1
|
||||
if ${require_docker}; then
|
||||
openim::build::ensure_docker_in_path || return 1
|
||||
openim::util::ensure_docker_daemon_connectivity || return 1
|
||||
|
||||
if (( OPENIM_VERBOSE > 6 )); then
|
||||
openim::log::status "Docker Version:"
|
||||
"${DOCKER[@]}" version | openim::log::info_from_stdin
|
||||
fi
|
||||
local -r require_docker=${1:-true}
|
||||
openim::log::status "Verifying Prerequisites...."
|
||||
openim::build::ensure_tar || return 1
|
||||
openim::build::ensure_rsync || return 1
|
||||
if ${require_docker}; then
|
||||
openim::build::ensure_docker_in_path || return 1
|
||||
openim::util::ensure_docker_daemon_connectivity || return 1
|
||||
|
||||
if (( OPENIM_VERBOSE > 6 )); then
|
||||
openim::log::status "Docker Version:"
|
||||
"${DOCKER[@]}" version | openim::log::info_from_stdin
|
||||
fi
|
||||
fi
|
||||
|
||||
OPENIM_GIT_BRANCH=$(git symbolic-ref --short -q HEAD 2>/dev/null || true)
|
||||
OPENIM_ROOT_HASH=$(openim::build::short_hash "${HOSTNAME:-}:"${OPENIM_ROOT}":${OPENIM_GIT_BRANCH}")
|
||||
OPENIM_BUILD_IMAGE_TAG_BASE="build-${OPENIM_ROOT_HASH}"
|
||||
#OPENIM_BUILD_IMAGE_TAG="${OPENIM_BUILD_IMAGE_TAG_BASE}-${OPENIM_BUILD_IMAGE_VERSION}"
|
||||
#OPENIM_BUILD_IMAGE="${OPENIM_BUILD_IMAGE_REPO}:${OPENIM_BUILD_IMAGE_TAG}"
|
||||
OPENIM_BUILD_CONTAINER_NAME_BASE="openim-build-${OPENIM_ROOT_HASH}"
|
||||
#OPENIM_BUILD_CONTAINER_NAME="${OPENIM_BUILD_CONTAINER_NAME_BASE}-${OPENIM_BUILD_IMAGE_VERSION}"
|
||||
OPENIM_RSYNC_CONTAINER_NAME_BASE="openim-rsync-${OPENIM_ROOT_HASH}"
|
||||
#OPENIM_RSYNC_CONTAINER_NAME="${OPENIM_RSYNC_CONTAINER_NAME_BASE}-${OPENIM_BUILD_IMAGE_VERSION}"
|
||||
OPENIM_DATA_CONTAINER_NAME_BASE="openim-build-data-${OPENIM_ROOT_HASH}"
|
||||
#OPENIM_DATA_CONTAINER_NAME="${OPENIM_DATA_CONTAINER_NAME_BASE}-${OPENIM_BUILD_IMAGE_VERSION}"
|
||||
#DOCKER_MOUNT_ARGS=(--volumes-from "${OPENIM_DATA_CONTAINER_NAME}")
|
||||
#LOCAL_OUTPUT_BUILD_CONTEXT="${LOCAL_OUTPUT_IMAGE_STAGING}/${OPENIM_BUILD_IMAGE}"
|
||||
OPENIM_GIT_BRANCH=$(git symbolic-ref --short -q HEAD 2>/dev/null || true)
|
||||
OPENIM_ROOT_HASH=$(openim::build::short_hash "${HOSTNAME:-}:${OPENIM_ROOT}:${OPENIM_GIT_BRANCH}")
|
||||
OPENIM_BUILD_IMAGE_TAG_BASE="build-${OPENIM_ROOT_HASH}"
|
||||
#OPENIM_BUILD_IMAGE_TAG="${OPENIM_BUILD_IMAGE_TAG_BASE}-${OPENIM_BUILD_IMAGE_VERSION}"
|
||||
#OPENIM_BUILD_IMAGE="${OPENIM_BUILD_IMAGE_REPO}:${OPENIM_BUILD_IMAGE_TAG}"
|
||||
OPENIM_BUILD_CONTAINER_NAME_BASE="openim-build-${OPENIM_ROOT_HASH}"
|
||||
#OPENIM_BUILD_CONTAINER_NAME="${OPENIM_BUILD_CONTAINER_NAME_BASE}-${OPENIM_BUILD_IMAGE_VERSION}"
|
||||
OPENIM_RSYNC_CONTAINER_NAME_BASE="openim-rsync-${OPENIM_ROOT_HASH}"
|
||||
#OPENIM_RSYNC_CONTAINER_NAME="${OPENIM_RSYNC_CONTAINER_NAME_BASE}-${OPENIM_BUILD_IMAGE_VERSION}"
|
||||
OPENIM_DATA_CONTAINER_NAME_BASE="openim-build-data-${OPENIM_ROOT_HASH}"
|
||||
#OPENIM_DATA_CONTAINER_NAME="${OPENIM_DATA_CONTAINER_NAME_BASE}-${OPENIM_BUILD_IMAGE_VERSION}"
|
||||
#DOCKER_MOUNT_ARGS=(--volumes-from "${OPENIM_DATA_CONTAINER_NAME}")
|
||||
#LOCAL_OUTPUT_BUILD_CONTEXT="${LOCAL_OUTPUT_IMAGE_STAGING}/${OPENIM_BUILD_IMAGE}"
|
||||
|
||||
openim::version::get_version_vars
|
||||
#openim::version::save_version_vars ""${OPENIM_ROOT}"/.dockerized-openim-version-defs"
|
||||
openim::version::get_version_vars
|
||||
#openim::version::save_version_vars "${OPENIM_ROOT}/.dockerized-openim-version-defs"
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Utility functions
|
||||
|
||||
function openim::build::docker_available_on_osx() {
|
||||
if [[ -z "${DOCKER_HOST}" ]]; then
|
||||
if [[ -S "/var/run/docker.sock" ]]; then
|
||||
openim::log::status "Using Docker for MacOS"
|
||||
return 0
|
||||
fi
|
||||
|
||||
openim::log::status "No docker host is set. Checking options for setting one..."
|
||||
if [[ -z "$(which docker-machine)" ]]; then
|
||||
openim::log::status "It looks like you're running Mac OS X, yet neither Docker for Mac nor docker-machine can be found."
|
||||
openim::log::status "See: https://docs.docker.com/engine/installation/mac/ for installation instructions."
|
||||
return 1
|
||||
elif [[ -n "$(which docker-machine)" ]]; then
|
||||
openim::build::prepare_docker_machine
|
||||
fi
|
||||
if [[ -z "${DOCKER_HOST}" ]]; then
|
||||
if [[ -S "/var/run/docker.sock" ]]; then
|
||||
openim::log::status "Using Docker for MacOS"
|
||||
return 0
|
||||
fi
|
||||
|
||||
openim::log::status "No docker host is set. Checking options for setting one..."
|
||||
if [[ -z "$(which docker-machine)" ]]; then
|
||||
openim::log::status "It looks like you're running Mac OS X, yet neither Docker for Mac nor docker-machine can be found."
|
||||
openim::log::status "See: https://docs.docker.com/engine/installation/mac/ for installation instructions."
|
||||
return 1
|
||||
elif [[ -n "$(which docker-machine)" ]]; then
|
||||
openim::build::prepare_docker_machine
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
function openim::build::prepare_docker_machine() {
|
||||
openim::log::status "docker-machine was found."
|
||||
openim::log::status "docker-machine was found."
|
||||
|
||||
local available_memory_bytes
|
||||
available_memory_bytes=$(sysctl -n hw.memsize 2>/dev/null)
|
||||
local available_memory_bytes
|
||||
available_memory_bytes=$(sysctl -n hw.memsize 2>/dev/null)
|
||||
|
||||
local bytes_in_mb=1048576
|
||||
local bytes_in_mb=1048576
|
||||
|
||||
# Give virtualbox 1/2 the system memory. Its necessary to divide by 2, instead
|
||||
# of multiple by .5, because bash can only multiply by ints.
|
||||
local memory_divisor=2
|
||||
# Give virtualbox 1/2 the system memory. Its necessary to divide by 2, instead
|
||||
# of multiple by .5, because bash can only multiply by ints.
|
||||
local memory_divisor=2
|
||||
|
||||
local virtualbox_memory_mb=$(( available_memory_bytes / (bytes_in_mb * memory_divisor) ))
|
||||
local virtualbox_memory_mb=$(( available_memory_bytes / (bytes_in_mb * memory_divisor) ))
|
||||
|
||||
docker-machine inspect "${DOCKER_MACHINE_NAME}" &> /dev/null || {
|
||||
openim::log::status "Creating a machine to build OPENIM"
|
||||
docker-machine create --driver "${DOCKER_MACHINE_DRIVER}" \
|
||||
--virtualbox-memory "${virtualbox_memory_mb}" \
|
||||
--engine-env HTTP_PROXY="${OPENIMRNETES_HTTP_PROXY:-}" \
|
||||
--engine-env HTTPS_PROXY="${OPENIMRNETES_HTTPS_PROXY:-}" \
|
||||
--engine-env NO_PROXY="${OPENIMRNETES_NO_PROXY:-127.0.0.1}" \
|
||||
"${DOCKER_MACHINE_NAME}" > /dev/null || {
|
||||
openim::log::error "Something went wrong creating a machine."
|
||||
openim::log::error "Try the following: "
|
||||
openim::log::error "docker-machine create -d ${DOCKER_MACHINE_DRIVER} --virtualbox-memory ${virtualbox_memory_mb} ${DOCKER_MACHINE_NAME}"
|
||||
return 1
|
||||
}
|
||||
docker-machine inspect "${DOCKER_MACHINE_NAME}" &> /dev/null || {
|
||||
openim::log::status "Creating a machine to build OPENIM"
|
||||
docker-machine create --driver "${DOCKER_MACHINE_DRIVER}" \
|
||||
--virtualbox-memory "${virtualbox_memory_mb}" \
|
||||
--engine-env HTTP_PROXY="${OPENIMRNETES_HTTP_PROXY:-}" \
|
||||
--engine-env HTTPS_PROXY="${OPENIMRNETES_HTTPS_PROXY:-}" \
|
||||
--engine-env NO_PROXY="${OPENIMRNETES_NO_PROXY:-127.0.0.1}" \
|
||||
"${DOCKER_MACHINE_NAME}" > /dev/null || {
|
||||
openim::log::error "Something went wrong creating a machine."
|
||||
openim::log::error "Try the following: "
|
||||
openim::log::error "docker-machine create -d ${DOCKER_MACHINE_DRIVER} --virtualbox-memory ${virtualbox_memory_mb} ${DOCKER_MACHINE_NAME}"
|
||||
return 1
|
||||
}
|
||||
docker-machine start "${DOCKER_MACHINE_NAME}" &> /dev/null
|
||||
# it takes `docker-machine env` a few seconds to work if the machine was just started
|
||||
local docker_machine_out
|
||||
while ! docker_machine_out=$(docker-machine env "${DOCKER_MACHINE_NAME}" 2>&1); do
|
||||
if [[ ${docker_machine_out} =~ "Error checking TLS connection" ]]; then
|
||||
echo "${docker_machine_out}"
|
||||
docker-machine regenerate-certs "${DOCKER_MACHINE_NAME}"
|
||||
else
|
||||
sleep 1
|
||||
fi
|
||||
done
|
||||
eval "$(docker-machine env "${DOCKER_MACHINE_NAME}")"
|
||||
openim::log::status "A Docker host using docker-machine named '${DOCKER_MACHINE_NAME}' is ready to go!"
|
||||
return 0
|
||||
}
|
||||
docker-machine start "${DOCKER_MACHINE_NAME}" &> /dev/null
|
||||
# it takes `docker-machine env` a few seconds to work if the machine was just started
|
||||
local docker_machine_out
|
||||
while ! docker_machine_out=$(docker-machine env "${DOCKER_MACHINE_NAME}" 2>&1); do
|
||||
if [[ ${docker_machine_out} =~ "Error checking TLS connection" ]]; then
|
||||
echo "${docker_machine_out}"
|
||||
docker-machine regenerate-certs "${DOCKER_MACHINE_NAME}"
|
||||
else
|
||||
sleep 1
|
||||
fi
|
||||
done
|
||||
eval "$(docker-machine env "${DOCKER_MACHINE_NAME}")"
|
||||
openim::log::status "A Docker host using docker-machine named '${DOCKER_MACHINE_NAME}' is ready to go!"
|
||||
return 0
|
||||
}
|
||||
|
||||
function openim::build::is_gnu_sed() {
|
||||
[[ $(sed --version 2>&1) == *GNU* ]]
|
||||
[[ $(sed --version 2>&1) == *GNU* ]]
|
||||
}
|
||||
|
||||
function openim::build::ensure_rsync() {
|
||||
if [[ -z "$(which rsync)" ]]; then
|
||||
openim::log::error "Can't find 'rsync' in PATH, please fix and retry."
|
||||
return 1
|
||||
fi
|
||||
if [[ -z "$(which rsync)" ]]; then
|
||||
openim::log::error "Can't find 'rsync' in PATH, please fix and retry."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
function openim::build::update_dockerfile() {
|
||||
if openim::build::is_gnu_sed; then
|
||||
sed_opts=(-i)
|
||||
else
|
||||
sed_opts=(-i '')
|
||||
fi
|
||||
sed "${sed_opts[@]}" "s/OPENIM_BUILD_IMAGE_CROSS_TAG/${OPENIM_BUILD_IMAGE_CROSS_TAG}/" "${LOCAL_OUTPUT_BUILD_CONTEXT}/Dockerfile"
|
||||
if openim::build::is_gnu_sed; then
|
||||
sed_opts=(-i)
|
||||
else
|
||||
sed_opts=(-i '')
|
||||
fi
|
||||
sed "${sed_opts[@]}" "s/OPENIM_BUILD_IMAGE_CROSS_TAG/${OPENIM_BUILD_IMAGE_CROSS_TAG}/" "${LOCAL_OUTPUT_BUILD_CONTEXT}/Dockerfile"
|
||||
}
|
||||
|
||||
function openim::build::set_proxy() {
|
||||
if [[ -n "${OPENIMRNETES_HTTPS_PROXY:-}" ]]; then
|
||||
echo "ENV https_proxy $OPENIMRNETES_HTTPS_PROXY" >> "${LOCAL_OUTPUT_BUILD_CONTEXT}/Dockerfile"
|
||||
fi
|
||||
if [[ -n "${OPENIMRNETES_HTTP_PROXY:-}" ]]; then
|
||||
echo "ENV http_proxy $OPENIMRNETES_HTTP_PROXY" >> "${LOCAL_OUTPUT_BUILD_CONTEXT}/Dockerfile"
|
||||
fi
|
||||
if [[ -n "${OPENIMRNETES_NO_PROXY:-}" ]]; then
|
||||
echo "ENV no_proxy $OPENIMRNETES_NO_PROXY" >> "${LOCAL_OUTPUT_BUILD_CONTEXT}/Dockerfile"
|
||||
fi
|
||||
if [[ -n "${OPENIMRNETES_HTTPS_PROXY:-}" ]]; then
|
||||
echo "ENV https_proxy $OPENIMRNETES_HTTPS_PROXY" >> "${LOCAL_OUTPUT_BUILD_CONTEXT}/Dockerfile"
|
||||
fi
|
||||
if [[ -n "${OPENIMRNETES_HTTP_PROXY:-}" ]]; then
|
||||
echo "ENV http_proxy $OPENIMRNETES_HTTP_PROXY" >> "${LOCAL_OUTPUT_BUILD_CONTEXT}/Dockerfile"
|
||||
fi
|
||||
if [[ -n "${OPENIMRNETES_NO_PROXY:-}" ]]; then
|
||||
echo "ENV no_proxy $OPENIMRNETES_NO_PROXY" >> "${LOCAL_OUTPUT_BUILD_CONTEXT}/Dockerfile"
|
||||
fi
|
||||
}
|
||||
|
||||
function openim::build::ensure_docker_in_path() {
|
||||
if [[ -z "$(which docker)" ]]; then
|
||||
openim::log::error "Can't find 'docker' in PATH, please fix and retry."
|
||||
openim::log::error "See https://docs.docker.com/installation/#installation for installation instructions."
|
||||
return 1
|
||||
fi
|
||||
if [[ -z "$(which docker)" ]]; then
|
||||
openim::log::error "Can't find 'docker' in PATH, please fix and retry."
|
||||
openim::log::error "See https://docs.docker.com/installation/#installation for installation instructions."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
function openim::build::ensure_tar() {
|
||||
if [[ -n "${TAR:-}" ]]; then
|
||||
return
|
||||
fi
|
||||
if [[ -n "${TAR:-}" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
# Find gnu tar if it is available, bomb out if not.
|
||||
TAR=tar
|
||||
if which gtar &>/dev/null; then
|
||||
TAR=gtar
|
||||
else
|
||||
if which gnutar &>/dev/null; then
|
||||
TAR=gnutar
|
||||
fi
|
||||
fi
|
||||
if ! "${TAR}" --version | grep -q GNU; then
|
||||
echo " !!! Cannot find GNU tar. Build on Linux or install GNU tar"
|
||||
echo " on Mac OS X (brew install gnu-tar)."
|
||||
return 1
|
||||
# Find gnu tar if it is available, bomb out if not.
|
||||
TAR=tar
|
||||
if which gtar &>/dev/null; then
|
||||
TAR=gtar
|
||||
else
|
||||
if which gnutar &>/dev/null; then
|
||||
TAR=gnutar
|
||||
fi
|
||||
fi
|
||||
if ! "${TAR}" --version | grep -q GNU; then
|
||||
echo " !!! Cannot find GNU tar. Build on Linux or install GNU tar"
|
||||
echo " on Mac OS X (brew install gnu-tar)."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
function openim::build::has_docker() {
|
||||
which docker &> /dev/null
|
||||
which docker &> /dev/null
|
||||
}
|
||||
|
||||
function openim::build::has_ip() {
|
||||
which ip &> /dev/null && ip -Version | grep 'iproute2' &> /dev/null
|
||||
which ip &> /dev/null && ip -Version | grep 'iproute2' &> /dev/null
|
||||
}
|
||||
|
||||
# Detect if a specific image exists
|
||||
@@ -303,12 +304,12 @@ function openim::build::has_ip() {
|
||||
# $1 - image repo name
|
||||
# $2 - image tag
|
||||
function openim::build::docker_image_exists() {
|
||||
[[ -n $1 && -n $2 ]] || {
|
||||
openim::log::error "Internal error. Image not specified in docker_image_exists."
|
||||
exit 2
|
||||
}
|
||||
[[ -n $1 && -n $2 ]] || {
|
||||
openim::log::error "Internal error. Image not specified in docker_image_exists."
|
||||
exit 2
|
||||
}
|
||||
|
||||
[[ $("${DOCKER[@]}" images -q "${1}:${2}") ]]
|
||||
[[ $("${DOCKER[@]}" images -q "${1}:${2}") ]]
|
||||
}
|
||||
|
||||
# Delete all images that match a tag prefix except for the "current" version
|
||||
@@ -317,21 +318,21 @@ function openim::build::docker_image_exists() {
|
||||
# $2: The tag base. We consider any image that matches $2*
|
||||
# $3: The current image not to delete if provided
|
||||
function openim::build::docker_delete_old_images() {
|
||||
# In Docker 1.12, we can replace this with
|
||||
# docker images "$1" --format "{{.Tag}}"
|
||||
for tag in $("${DOCKER[@]}" images "${1}" | tail -n +2 | awk '{print $2}') ; do
|
||||
if [[ "${tag}" != "${2}"* ]] ; then
|
||||
V=3 openim::log::status "Keeping image ${1}:${tag}"
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ -z "${3:-}" || "${tag}" != "${3}" ]] ; then
|
||||
V=2 openim::log::status "Deleting image ${1}:${tag}"
|
||||
"${DOCKER[@]}" rmi "${1}:${tag}" >/dev/null
|
||||
else
|
||||
V=3 openim::log::status "Keeping image ${1}:${tag}"
|
||||
fi
|
||||
done
|
||||
# In Docker 1.12, we can replace this with
|
||||
# docker images "$1" --format "{{.Tag}}"
|
||||
for tag in $("${DOCKER[@]}" images "${1}" | tail -n +2 | awk '{print $2}') ; do
|
||||
if [[ "${tag}" != "${2}"* ]] ; then
|
||||
V=3 openim::log::status "Keeping image ${1}:${tag}"
|
||||
continue
|
||||
fi
|
||||
|
||||
if [[ -z "${3:-}" || "${tag}" != "${3}" ]] ; then
|
||||
V=2 openim::log::status "Deleting image ${1}:${tag}"
|
||||
"${DOCKER[@]}" rmi "${1}:${tag}" >/dev/null
|
||||
else
|
||||
V=3 openim::log::status "Keeping image ${1}:${tag}"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Stop and delete all containers that match a pattern
|
||||
@@ -339,36 +340,36 @@ function openim::build::docker_delete_old_images() {
|
||||
# $1: The base container prefix
|
||||
# $2: The current container to keep, if provided
|
||||
function openim::build::docker_delete_old_containers() {
|
||||
# In Docker 1.12 we can replace this line with
|
||||
# docker ps -a --format="{{.Names}}"
|
||||
for container in $("${DOCKER[@]}" ps -a | tail -n +2 | awk '{print $NF}') ; do
|
||||
if [[ "${container}" != "${1}"* ]] ; then
|
||||
V=3 openim::log::status "Keeping container ${container}"
|
||||
continue
|
||||
fi
|
||||
if [[ -z "${2:-}" || "${container}" != "${2}" ]] ; then
|
||||
V=2 openim::log::status "Deleting container ${container}"
|
||||
openim::build::destroy_container "${container}"
|
||||
else
|
||||
V=3 openim::log::status "Keeping container ${container}"
|
||||
fi
|
||||
done
|
||||
# In Docker 1.12 we can replace this line with
|
||||
# docker ps -a --format="{{.Names}}"
|
||||
for container in $("${DOCKER[@]}" ps -a | tail -n +2 | awk '{print $NF}') ; do
|
||||
if [[ "${container}" != "${1}"* ]] ; then
|
||||
V=3 openim::log::status "Keeping container ${container}"
|
||||
continue
|
||||
fi
|
||||
if [[ -z "${2:-}" || "${container}" != "${2}" ]] ; then
|
||||
V=2 openim::log::status "Deleting container ${container}"
|
||||
openim::build::destroy_container "${container}"
|
||||
else
|
||||
V=3 openim::log::status "Keeping container ${container}"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Takes $1 and computes a short has for it. Useful for unique tag generation
|
||||
function openim::build::short_hash() {
|
||||
[[ $# -eq 1 ]] || {
|
||||
openim::log::error "Internal error. No data based to short_hash."
|
||||
exit 2
|
||||
}
|
||||
[[ $# -eq 1 ]] || {
|
||||
openim::log::error "Internal error. No data based to short_hash."
|
||||
exit 2
|
||||
}
|
||||
|
||||
local short_hash
|
||||
if which md5 >/dev/null 2>&1; then
|
||||
short_hash=$(md5 -q -s "$1")
|
||||
else
|
||||
short_hash=$(echo -n "$1" | md5sum)
|
||||
fi
|
||||
echo "${short_hash:0:10}"
|
||||
local short_hash
|
||||
if which md5 >/dev/null 2>&1; then
|
||||
short_hash=$(md5 -q -s "$1")
|
||||
else
|
||||
short_hash=$(echo -n "$1" | md5sum)
|
||||
fi
|
||||
echo "${short_hash:0:10}"
|
||||
}
|
||||
|
||||
# Pedantically kill, wait-on and remove a container. The -f -v options
|
||||
@@ -376,15 +377,15 @@ function openim::build::short_hash() {
|
||||
# container, wait to ensure it's stopped, then try the remove. This is
|
||||
# a workaround for bug https://github.com/docker/docker/issues/3968.
|
||||
function openim::build::destroy_container() {
|
||||
"${DOCKER[@]}" kill "$1" >/dev/null 2>&1 || true
|
||||
if [[ $("${DOCKER[@]}" version --format '{{.Server.Version}}') = 17.06.0* ]]; then
|
||||
# Workaround https://github.com/moby/moby/issues/33948.
|
||||
# TODO: remove when 17.06.0 is not relevant anymore
|
||||
DOCKER_API_VERSION=v1.29 "${DOCKER[@]}" wait "$1" >/dev/null 2>&1 || true
|
||||
else
|
||||
"${DOCKER[@]}" wait "$1" >/dev/null 2>&1 || true
|
||||
fi
|
||||
"${DOCKER[@]}" rm -f -v "$1" >/dev/null 2>&1 || true
|
||||
"${DOCKER[@]}" kill "$1" >/dev/null 2>&1 || true
|
||||
if [[ $("${DOCKER[@]}" version --format '{{.Server.Version}}') = 17.06.0* ]]; then
|
||||
# Workaround https://github.com/moby/moby/issues/33948.
|
||||
# TODO: remove when 17.06.0 is not relevant anymore
|
||||
DOCKER_API_VERSION=v1.29 "${DOCKER[@]}" wait "$1" >/dev/null 2>&1 || true
|
||||
else
|
||||
"${DOCKER[@]}" wait "$1" >/dev/null 2>&1 || true
|
||||
fi
|
||||
"${DOCKER[@]}" rm -f -v "$1" >/dev/null 2>&1 || true
|
||||
}
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -392,47 +393,47 @@ function openim::build::destroy_container() {
|
||||
|
||||
|
||||
function openim::build::clean() {
|
||||
if openim::build::has_docker ; then
|
||||
openim::build::docker_delete_old_containers "${OPENIM_BUILD_CONTAINER_NAME_BASE}"
|
||||
openim::build::docker_delete_old_containers "${OPENIM_RSYNC_CONTAINER_NAME_BASE}"
|
||||
openim::build::docker_delete_old_containers "${OPENIM_DATA_CONTAINER_NAME_BASE}"
|
||||
openim::build::docker_delete_old_images "${OPENIM_BUILD_IMAGE_REPO}" "${OPENIM_BUILD_IMAGE_TAG_BASE}"
|
||||
if openim::build::has_docker ; then
|
||||
openim::build::docker_delete_old_containers "${OPENIM_BUILD_CONTAINER_NAME_BASE}"
|
||||
openim::build::docker_delete_old_containers "${OPENIM_RSYNC_CONTAINER_NAME_BASE}"
|
||||
openim::build::docker_delete_old_containers "${OPENIM_DATA_CONTAINER_NAME_BASE}"
|
||||
openim::build::docker_delete_old_images "${OPENIM_BUILD_IMAGE_REPO}" "${OPENIM_BUILD_IMAGE_TAG_BASE}"
|
||||
|
||||
V=2 openim::log::status "Cleaning all untagged docker images"
|
||||
"${DOCKER[@]}" rmi "$("${DOCKER[@]}" images -q --filter 'dangling=true')" 2> /dev/null || true
|
||||
fi
|
||||
|
||||
V=2 openim::log::status "Cleaning all untagged docker images"
|
||||
"${DOCKER[@]}" rmi "$("${DOCKER[@]}" images -q --filter 'dangling=true')" 2> /dev/null || true
|
||||
fi
|
||||
|
||||
if [[ -d "${LOCAL_OUTPUT_ROOT}" ]]; then
|
||||
openim::log::status "Removing _output directory"
|
||||
rm -rf "${LOCAL_OUTPUT_ROOT}"
|
||||
fi
|
||||
if [[ -d "${LOCAL_OUTPUT_ROOT}" ]]; then
|
||||
openim::log::status "Removing _output directory"
|
||||
rm -rf "${LOCAL_OUTPUT_ROOT}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Set up the context directory for the openim-build image and build it.
|
||||
function openim::build::build_image() {
|
||||
mkdir -p "${LOCAL_OUTPUT_BUILD_CONTEXT}"
|
||||
# Make sure the context directory owned by the right user for syncing sources to container.
|
||||
chown -R "${USER_ID}":"${GROUP_ID}" "${LOCAL_OUTPUT_BUILD_CONTEXT}"
|
||||
mkdir -p "${LOCAL_OUTPUT_BUILD_CONTEXT}"
|
||||
# Make sure the context directory owned by the right user for syncing sources to container.
|
||||
chown -R "${USER_ID}":"${GROUP_ID}" "${LOCAL_OUTPUT_BUILD_CONTEXT}"
|
||||
|
||||
cp /etc/localtime "${LOCAL_OUTPUT_BUILD_CONTEXT}/"
|
||||
cp /etc/localtime "${LOCAL_OUTPUT_BUILD_CONTEXT}/"
|
||||
|
||||
cp ""${OPENIM_ROOT}"/build/build-image/Dockerfile" "${LOCAL_OUTPUT_BUILD_CONTEXT}/Dockerfile"
|
||||
cp ""${OPENIM_ROOT}"/build/build-image/rsyncd.sh" "${LOCAL_OUTPUT_BUILD_CONTEXT}/"
|
||||
dd if=/dev/urandom bs=512 count=1 2>/dev/null | LC_ALL=C tr -dc 'A-Za-z0-9' | dd bs=32 count=1 2>/dev/null > "${LOCAL_OUTPUT_BUILD_CONTEXT}/rsyncd.password"
|
||||
chmod go= "${LOCAL_OUTPUT_BUILD_CONTEXT}/rsyncd.password"
|
||||
cp "${OPENIM_ROOT}/build/build-image/Dockerfile" "${LOCAL_OUTPUT_BUILD_CONTEXT}/Dockerfile"
|
||||
cp "${OPENIM_ROOT}/build/build-image/rsyncd.sh" "${LOCAL_OUTPUT_BUILD_CONTEXT}/"
|
||||
dd if=/dev/urandom bs=512 count=1 2>/dev/null | LC_ALL=C tr -dc 'A-Za-z0-9' | dd bs=32 count=1 2>/dev/null > "${LOCAL_OUTPUT_BUILD_CONTEXT}/rsyncd.password"
|
||||
chmod go= "${LOCAL_OUTPUT_BUILD_CONTEXT}/rsyncd.password"
|
||||
|
||||
openim::build::update_dockerfile
|
||||
openim::build::set_proxy
|
||||
openim::build::docker_build "${OPENIM_BUILD_IMAGE}" "${LOCAL_OUTPUT_BUILD_CONTEXT}" 'false'
|
||||
openim::build::update_dockerfile
|
||||
openim::build::set_proxy
|
||||
openim::build::docker_build "${OPENIM_BUILD_IMAGE}" "${LOCAL_OUTPUT_BUILD_CONTEXT}" 'false'
|
||||
|
||||
# Clean up old versions of everything
|
||||
openim::build::docker_delete_old_containers "${OPENIM_BUILD_CONTAINER_NAME_BASE}" "${OPENIM_BUILD_CONTAINER_NAME}"
|
||||
openim::build::docker_delete_old_containers "${OPENIM_RSYNC_CONTAINER_NAME_BASE}" "${OPENIM_RSYNC_CONTAINER_NAME}"
|
||||
openim::build::docker_delete_old_containers "${OPENIM_DATA_CONTAINER_NAME_BASE}" "${OPENIM_DATA_CONTAINER_NAME}"
|
||||
openim::build::docker_delete_old_images "${OPENIM_BUILD_IMAGE_REPO}" "${OPENIM_BUILD_IMAGE_TAG_BASE}" "${OPENIM_BUILD_IMAGE_TAG}"
|
||||
# Clean up old versions of everything
|
||||
openim::build::docker_delete_old_containers "${OPENIM_BUILD_CONTAINER_NAME_BASE}" "${OPENIM_BUILD_CONTAINER_NAME}"
|
||||
openim::build::docker_delete_old_containers "${OPENIM_RSYNC_CONTAINER_NAME_BASE}" "${OPENIM_RSYNC_CONTAINER_NAME}"
|
||||
openim::build::docker_delete_old_containers "${OPENIM_DATA_CONTAINER_NAME_BASE}" "${OPENIM_DATA_CONTAINER_NAME}"
|
||||
openim::build::docker_delete_old_images "${OPENIM_BUILD_IMAGE_REPO}" "${OPENIM_BUILD_IMAGE_TAG_BASE}" "${OPENIM_BUILD_IMAGE_TAG}"
|
||||
|
||||
openim::build::ensure_data_container
|
||||
openim::build::sync_to_container
|
||||
openim::build::ensure_data_container
|
||||
openim::build::sync_to_container
|
||||
}
|
||||
|
||||
# Build a docker image from a Dockerfile.
|
||||
@@ -440,14 +441,14 @@ function openim::build::build_image() {
|
||||
# $2 is the location of the "context" directory, with the Dockerfile at the root.
|
||||
# $3 is the value to set the --pull flag for docker build; true by default
|
||||
function openim::build::docker_build() {
|
||||
local -r image=$1
|
||||
local -r context_dir=$2
|
||||
local -r pull="${3:-true}"
|
||||
local -ra build_cmd=("${DOCKER[@]}" build -t "${image}" "--pull=${pull}" "${context_dir}")
|
||||
local -r image=$1
|
||||
local -r context_dir=$2
|
||||
local -r pull="${3:-true}"
|
||||
local -ra build_cmd=("${DOCKER[@]}" build -t "${image}" "--pull=${pull}" "${context_dir}")
|
||||
|
||||
openim::log::status "Building Docker image ${image}"
|
||||
local docker_output
|
||||
docker_output=$("${build_cmd[@]}" 2>&1) || {
|
||||
openim::log::status "Building Docker image ${image}"
|
||||
local docker_output
|
||||
docker_output=$("${build_cmd[@]}" 2>&1) || {
|
||||
cat <<EOF >&2
|
||||
+++ Docker build command failed for ${image}
|
||||
|
||||
@@ -458,61 +459,61 @@ To retry manually, run:
|
||||
${build_cmd[*]}
|
||||
|
||||
EOF
|
||||
return 1
|
||||
}
|
||||
return 1
|
||||
}
|
||||
}
|
||||
|
||||
function openim::build::ensure_data_container() {
|
||||
# If the data container exists AND exited successfully, we can use it.
|
||||
# Otherwise nuke it and start over.
|
||||
local ret=0
|
||||
local code=0
|
||||
# If the data container exists AND exited successfully, we can use it.
|
||||
# Otherwise nuke it and start over.
|
||||
local ret=0
|
||||
local code=0
|
||||
|
||||
code=$(docker inspect \
|
||||
-f '{{.State.ExitCode}}' \
|
||||
"${OPENIM_DATA_CONTAINER_NAME}" 2>/dev/null) || ret=$?
|
||||
if [[ "${ret}" == 0 && "${code}" != 0 ]]; then
|
||||
openim::build::destroy_container "${OPENIM_DATA_CONTAINER_NAME}"
|
||||
ret=1
|
||||
fi
|
||||
if [[ "${ret}" != 0 ]]; then
|
||||
openim::log::status "Creating data container ${OPENIM_DATA_CONTAINER_NAME}"
|
||||
# We have to ensure the directory exists, or else the docker run will
|
||||
# create it as root.
|
||||
mkdir -p "${LOCAL_OUTPUT_GOPATH}"
|
||||
# We want this to run as root to be able to chown, so non-root users can
|
||||
# later use the result as a data container. This run both creates the data
|
||||
# container and chowns the GOPATH.
|
||||
#
|
||||
# The data container creates volumes for all of the directories that store
|
||||
# intermediates for the Go build. This enables incremental builds across
|
||||
# Docker sessions. The *_cgo paths are re-compiled versions of the go std
|
||||
# libraries for true static building.
|
||||
local -ra docker_cmd=(
|
||||
"${DOCKER[@]}" run
|
||||
--volume "${REMOTE_ROOT}" # white-out the whole output dir
|
||||
--volume /usr/local/go/pkg/linux_386_cgo
|
||||
--volume /usr/local/go/pkg/linux_amd64_cgo
|
||||
--volume /usr/local/go/pkg/linux_arm_cgo
|
||||
--volume /usr/local/go/pkg/linux_arm64_cgo
|
||||
--volume /usr/local/go/pkg/linux_ppc64le_cgo
|
||||
--volume /usr/local/go/pkg/darwin_amd64_cgo
|
||||
--volume /usr/local/go/pkg/darwin_386_cgo
|
||||
--volume /usr/local/go/pkg/windows_amd64_cgo
|
||||
--volume /usr/local/go/pkg/windows_386_cgo
|
||||
--name "${OPENIM_DATA_CONTAINER_NAME}"
|
||||
--hostname "${HOSTNAME}"
|
||||
"${OPENIM_BUILD_IMAGE}"
|
||||
chown -R "${USER_ID}":"${GROUP_ID}"
|
||||
"${REMOTE_ROOT}"
|
||||
/usr/local/go/pkg/
|
||||
)
|
||||
"${docker_cmd[@]}"
|
||||
fi
|
||||
code=$(docker inspect \
|
||||
-f '{{.State.ExitCode}}' \
|
||||
"${OPENIM_DATA_CONTAINER_NAME}" 2>/dev/null) || ret=$?
|
||||
if [[ "${ret}" == 0 && "${code}" != 0 ]]; then
|
||||
openim::build::destroy_container "${OPENIM_DATA_CONTAINER_NAME}"
|
||||
ret=1
|
||||
fi
|
||||
if [[ "${ret}" != 0 ]]; then
|
||||
openim::log::status "Creating data container ${OPENIM_DATA_CONTAINER_NAME}"
|
||||
# We have to ensure the directory exists, or else the docker run will
|
||||
# create it as root.
|
||||
mkdir -p "${LOCAL_OUTPUT_GOPATH}"
|
||||
# We want this to run as root to be able to chown, so non-root users can
|
||||
# later use the result as a data container. This run both creates the data
|
||||
# container and chowns the GOPATH.
|
||||
#
|
||||
# The data container creates volumes for all of the directories that store
|
||||
# intermediates for the Go build. This enables incremental builds across
|
||||
# Docker sessions. The *_cgo paths are re-compiled versions of the go std
|
||||
# libraries for true static building.
|
||||
local -ra docker_cmd=(
|
||||
"${DOCKER[@]}" run
|
||||
--volume "${REMOTE_ROOT}" # white-out the whole output dir
|
||||
--volume /usr/local/go/pkg/linux_386_cgo
|
||||
--volume /usr/local/go/pkg/linux_amd64_cgo
|
||||
--volume /usr/local/go/pkg/linux_arm_cgo
|
||||
--volume /usr/local/go/pkg/linux_arm64_cgo
|
||||
--volume /usr/local/go/pkg/linux_ppc64le_cgo
|
||||
--volume /usr/local/go/pkg/darwin_amd64_cgo
|
||||
--volume /usr/local/go/pkg/darwin_386_cgo
|
||||
--volume /usr/local/go/pkg/windows_amd64_cgo
|
||||
--volume /usr/local/go/pkg/windows_386_cgo
|
||||
--name "${OPENIM_DATA_CONTAINER_NAME}"
|
||||
--hostname "${HOSTNAME}"
|
||||
"${OPENIM_BUILD_IMAGE}"
|
||||
chown -R "${USER_ID}":"${GROUP_ID}"
|
||||
"${REMOTE_ROOT}"
|
||||
/usr/local/go/pkg/
|
||||
)
|
||||
"${docker_cmd[@]}"
|
||||
fi
|
||||
}
|
||||
|
||||
# Build all openim commands.
|
||||
function openim::build::build_command() {
|
||||
openim::log::status "Running build command..."
|
||||
make -C "${OPENIM_ROOT}" multiarch
|
||||
openim::log::status "Running build command..."
|
||||
make -C "${OPENIM_ROOT}" multiarch
|
||||
}
|
||||
|
||||
+6
-6
@@ -19,11 +19,11 @@
|
||||
echo "mode: atomic" > coverage.txt
|
||||
|
||||
for d in $(find ./* -maxdepth 10 -type d); do
|
||||
if ls $d/*.go &> /dev/null; then
|
||||
go test -coverprofile=profile.out -covermode=atomic $d
|
||||
if [ -f profile.out ]; then
|
||||
cat profile.out | grep -v "mode: " >> /tmp/coverage.txt
|
||||
rm profile.out
|
||||
fi
|
||||
if ls $d/*.go &> /dev/null; then
|
||||
go test -coverprofile=profile.out -covermode=atomic $d
|
||||
if [ -f profile.out ]; then
|
||||
cat profile.out | grep -v "mode: " >> /tmp/coverage.txt
|
||||
rm profile.out
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
+11
-11
@@ -15,16 +15,16 @@
|
||||
|
||||
if ! command -v pv &> /dev/null
|
||||
then
|
||||
echo "pv not found, installing..."
|
||||
if [ -e /etc/debian_version ]; then
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y pv
|
||||
echo "pv not found, installing..."
|
||||
if [ -e /etc/debian_version ]; then
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y pv
|
||||
elif [ -e /etc/redhat-release ]; then
|
||||
sudo yum install -y pv
|
||||
else
|
||||
echo "Unsupported OS, please install pv manually."
|
||||
exit 1
|
||||
fi
|
||||
sudo yum install -y pv
|
||||
else
|
||||
echo "Unsupported OS, please install pv manually."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
readonly t_reset=$(tput sgr0)
|
||||
@@ -42,8 +42,8 @@ openim::util::ensure-bash-version
|
||||
trap 'openim::util::onCtrlC' INT
|
||||
|
||||
function openim::util::onCtrlC() {
|
||||
echo -e "\n${t_reset}Ctrl+C Press it. It's exiting openim make init..."
|
||||
exit 0
|
||||
echo -e "\n${t_reset}Ctrl+C Press it. It's exiting openim make init..."
|
||||
exit 0
|
||||
}
|
||||
|
||||
openim::util::desc "========> Welcome to the OpenIM Demo"
|
||||
|
||||
@@ -22,61 +22,61 @@ cd "$OPENIM_ROOT"
|
||||
openim::util::check_docker_and_compose_versions
|
||||
|
||||
progress() {
|
||||
local _main_pid="$1"
|
||||
local _length=20
|
||||
local _ratio=1
|
||||
local _colors=("31" "32" "33" "34" "35" "36" "37")
|
||||
local _wave=("▁" "▂" "▃" "▄" "▅" "▆" "▇" "█" "▇" "▆" "▅" "▄" "▃" "▂")
|
||||
|
||||
while pgrep -P "$_main_pid" &> /dev/null; do
|
||||
local _mark='>'
|
||||
local _progress_bar=
|
||||
for ((i = 1; i <= _length; i++)); do
|
||||
if ((i > _ratio)); then
|
||||
_mark='-'
|
||||
fi
|
||||
_progress_bar="${_progress_bar}${_mark}"
|
||||
done
|
||||
|
||||
local _color_idx=$((_ratio % ${#_colors[@]}))
|
||||
local _color_prefix="\033[${_colors[_color_idx]}m"
|
||||
local _reset_suffix="\033[0m"
|
||||
|
||||
local _wave_idx=$((_ratio % ${#_wave[@]}))
|
||||
local _wave_progress=${_wave[_wave_idx]}
|
||||
|
||||
printf "Progress: ${_color_prefix}${_progress_bar}${_reset_suffix} ${_wave_progress} Countdown: %2ds \r" "$_countdown"
|
||||
((_ratio++))
|
||||
((_ratio > _length)) && _ratio=1
|
||||
sleep 0.1
|
||||
local _main_pid="$1"
|
||||
local _length=20
|
||||
local _ratio=1
|
||||
local _colors=("31" "32" "33" "34" "35" "36" "37")
|
||||
local _wave=("▁" "▂" "▃" "▄" "▅" "▆" "▇" "█" "▇" "▆" "▅" "▄" "▃" "▂")
|
||||
|
||||
while pgrep -P "$_main_pid" &> /dev/null; do
|
||||
local _mark='>'
|
||||
local _progress_bar=
|
||||
for ((i = 1; i <= _length; i++)); do
|
||||
if ((i > _ratio)); then
|
||||
_mark='-'
|
||||
fi
|
||||
_progress_bar="${_progress_bar}${_mark}"
|
||||
done
|
||||
|
||||
local _color_idx=$((_ratio % ${#_colors[@]}))
|
||||
local _color_prefix="\033[${_colors[_color_idx]}m"
|
||||
local _reset_suffix="\033[0m"
|
||||
|
||||
local _wave_idx=$((_ratio % ${#_wave[@]}))
|
||||
local _wave_progress=${_wave[_wave_idx]}
|
||||
|
||||
printf "Progress: ${_color_prefix}${_progress_bar}${_reset_suffix} ${_wave_progress} Countdown: %2ds \r" "$_countdown"
|
||||
((_ratio++))
|
||||
((_ratio > _length)) && _ratio=1
|
||||
sleep 0.1
|
||||
done
|
||||
}
|
||||
|
||||
countdown() {
|
||||
local _duration="$1"
|
||||
|
||||
for ((i = _duration; i >= 1; i--)); do
|
||||
printf "\rCountdown: %2ds \r" "$i"
|
||||
sleep 1
|
||||
done
|
||||
printf "\rCountdown: %2ds \r" "$_duration"
|
||||
local _duration="$1"
|
||||
|
||||
for ((i = _duration; i >= 1; i--)); do
|
||||
printf "\rCountdown: %2ds \r" "$i"
|
||||
sleep 1
|
||||
done
|
||||
printf "\rCountdown: %2ds \r" "$_duration"
|
||||
}
|
||||
|
||||
do_sth() {
|
||||
echo "++++++++++++++++++++++++"
|
||||
progress $$ &
|
||||
local _progress_pid=$!
|
||||
local _countdown=30
|
||||
|
||||
countdown "$_countdown" &
|
||||
local _countdown_pid=$!
|
||||
|
||||
sleep 30
|
||||
|
||||
kill "$_progress_pid" "$_countdown_pid"
|
||||
|
||||
"${SCRIPTS_ROOT}/check-all.sh"
|
||||
echo -e "${PURPLE_PREFIX}=========> Check docker-compose status ${COLOR_SUFFIX} \n"
|
||||
echo "++++++++++++++++++++++++"
|
||||
progress $$ &
|
||||
local _progress_pid=$!
|
||||
local _countdown=30
|
||||
|
||||
countdown "$_countdown" &
|
||||
local _countdown_pid=$!
|
||||
|
||||
sleep 30
|
||||
|
||||
kill "$_progress_pid" "$_countdown_pid"
|
||||
|
||||
"${SCRIPTS_ROOT}/check-all.sh"
|
||||
echo -e "${PURPLE_PREFIX}=========> Check docker-compose status ${COLOR_SUFFIX} \n"
|
||||
}
|
||||
|
||||
set -e
|
||||
|
||||
@@ -28,8 +28,6 @@ openim::log::info "\n# Use Docker to start all openim service"
|
||||
|
||||
trap 'openim::util::onCtrlC' INT
|
||||
|
||||
"${OPENIM_ROOT}"/scripts/init-config.sh --skip
|
||||
|
||||
"${OPENIM_ROOT}"/scripts/start-all.sh
|
||||
|
||||
sleep 5
|
||||
|
||||
@@ -14,11 +14,13 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
|
||||
|
||||
version="${VERSION}"
|
||||
if [ "${version}" == "" ];then
|
||||
version=v`gsemver bump`
|
||||
version=v$(${OPENIM_ROOT}/_output/tools/gsemver bump)
|
||||
fi
|
||||
|
||||
if [ -z "`git tag -l ${version}`" ];then
|
||||
if [ -z "$(git tag -l ${version})" ];then
|
||||
git tag -a -m "release version ${version}" ${version}
|
||||
fi
|
||||
|
||||
@@ -67,7 +67,7 @@ echo -e "=== any\nRepresents an untyped JSON map - see the description of the fi
|
||||
asciidoctor definitions.adoc
|
||||
asciidoctor paths.adoc
|
||||
|
||||
cp ${OPENIM_OUTPUT_TMP}/definitions.html ${OPENIM_OUTPUT_TMP}/_output/
|
||||
cp ${OPENIM_OUTPUT_TMP}/paths.html ${OPENIM_OUTPUT_TMP}/_output/operations.html
|
||||
cp "$OPENIM_OUTPUT_TMP/definitions.html" "$OPENIM_OUTPUT_TMP/_output/"
|
||||
cp "$OPENIM_OUTPUT_TMP/paths.html" "$OPENIM_OUTPUT_TMP/_output/operations.html"
|
||||
|
||||
success "SUCCESS"
|
||||
+11
-19
@@ -25,20 +25,12 @@ OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
|
||||
source "${OPENIM_ROOT}/scripts/lib/init.sh"
|
||||
|
||||
if [ $# -ne 2 ];then
|
||||
openim::log::error "Usage: scripts/genconfig.sh scripts/environment.sh configs/openim-api.yaml"
|
||||
exit 1
|
||||
openim::log::error "Usage: scripts/genconfig.sh scripts/environment.sh configs/config.yaml"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
openim::util::require-dig
|
||||
result=$?
|
||||
if [ $result -ne 0 ]; then
|
||||
openim::log::info "Please install 'dig' to use this feature."
|
||||
openim::log::info "Installation instructions:"
|
||||
openim::log::info " For Ubuntu/Debian: sudo apt-get install dnsutils"
|
||||
openim::log::info " For CentOS/RedHat: sudo yum install bind-utils"
|
||||
openim::log::info " For macOS: 'dig' should be preinstalled. If missing, try: brew install bind"
|
||||
openim::log::info " For Windows: Install BIND9 tools from https://www.isc.org/download/"
|
||||
openim::log::error_exit "Error: 'dig' command is required but not installed."
|
||||
if [ -z "${OPENIM_IP}" ]; then
|
||||
openim::util::require-dig
|
||||
fi
|
||||
|
||||
source "${env_file}"
|
||||
@@ -48,17 +40,17 @@ declare -A envs
|
||||
set +u
|
||||
for env in $(sed -n 's/^[^#].*${\(.*\)}.*/\1/p' ${template_file})
|
||||
do
|
||||
if [ -z "$(eval echo \$${env})" ];then
|
||||
openim::log::error "environment variable '${env}' not set"
|
||||
missing=true
|
||||
fi
|
||||
if [ -z "$(eval echo \$${env})" ];then
|
||||
openim::log::error "environment variable '${env}' not set"
|
||||
missing=true
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "${missing}" ];then
|
||||
openim::log::error 'You may run `source scripts/environment.sh` to set these environment'
|
||||
exit 1
|
||||
openim::log::error "You may run 'source scripts/environment.sh' to set these environment"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
eval "cat << EOF
|
||||
$(cat ${template_file})
|
||||
EOF"
|
||||
EOF"
|
||||
+27
-27
@@ -14,43 +14,43 @@
|
||||
# limitations under the License.
|
||||
|
||||
DEFAULT_DIRS=(
|
||||
"pkg"
|
||||
"internal/pkg"
|
||||
"pkg"
|
||||
"internal/pkg"
|
||||
)
|
||||
BASE_URL="github.com/openimsdk/open-im-server"
|
||||
|
||||
usage() {
|
||||
echo "Usage: $0 [OPTIONS]"
|
||||
echo
|
||||
echo "This script iterates over directories and generates doc.go if necessary."
|
||||
echo "By default, it processes 'pkg' and 'internal/pkg' directories."
|
||||
echo
|
||||
echo "Options:"
|
||||
echo " -d DIRS, --dirs DIRS Specify the directories to be processed, separated by commas. E.g., 'pkg,internal/pkg'."
|
||||
echo " -u URL, --url URL Set the base URL for the import path. Default is '$BASE_URL'."
|
||||
echo " -h, --help Show this help message."
|
||||
echo
|
||||
echo "Usage: $0 [OPTIONS]"
|
||||
echo
|
||||
echo "This script iterates over directories and generates doc.go if necessary."
|
||||
echo "By default, it processes 'pkg' and 'internal/pkg' directories."
|
||||
echo
|
||||
echo "Options:"
|
||||
echo " -d DIRS, --dirs DIRS Specify the directories to be processed, separated by commas. E.g., 'pkg,internal/pkg'."
|
||||
echo " -u URL, --url URL Set the base URL for the import path. Default is '$BASE_URL'."
|
||||
echo " -h, --help Show this help message."
|
||||
echo
|
||||
}
|
||||
|
||||
process_dir() {
|
||||
local dir=$1
|
||||
local base_url=$2
|
||||
|
||||
for d in $(find $dir -type d); do
|
||||
if [ ! -f $d/doc.go ]; then
|
||||
if ls $d/*.go > /dev/null 2>&1; then
|
||||
echo $d/doc.go
|
||||
echo "package $(basename $d) // import \"$base_url/$d\"" > $d/doc.go
|
||||
fi
|
||||
fi
|
||||
done
|
||||
local dir=$1
|
||||
local base_url=$2
|
||||
|
||||
for d in $(find $dir -type d); do
|
||||
if [ ! -f $d/doc.go ]; then
|
||||
if ls $d/*.go > /dev/null 2>&1; then
|
||||
echo $d/doc.go
|
||||
echo "package $(basename $d) // import \"$base_url/$d\"" > $d/doc.go
|
||||
fi
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
key="$1"
|
||||
|
||||
case $key in
|
||||
-d|--dirs)
|
||||
key="$1"
|
||||
|
||||
case $key in
|
||||
-d|--dirs)
|
||||
IFS=',' read -ra DIRS <<< "$2"
|
||||
shift # shift past argument
|
||||
shift # shift past value
|
||||
|
||||
@@ -34,15 +34,15 @@ RED="\e[31m"
|
||||
ENDCOLOR="\e[0m"
|
||||
|
||||
printMessage() {
|
||||
printf "${YELLOW}OpenIM : $1${ENDCOLOR}\n"
|
||||
printf "${YELLOW}OpenIM : $1${ENDCOLOR}\n"
|
||||
}
|
||||
|
||||
printSuccess() {
|
||||
printf "${GREEN}OpenIM : $1${ENDCOLOR}\n"
|
||||
printf "${GREEN}OpenIM : $1${ENDCOLOR}\n"
|
||||
}
|
||||
|
||||
printError() {
|
||||
printf "${RED}OpenIM : $1${ENDCOLOR}\n"
|
||||
printf "${RED}OpenIM : $1${ENDCOLOR}\n"
|
||||
}
|
||||
|
||||
printMessage "Running the OpenIM commit-msg hook."
|
||||
@@ -50,9 +50,9 @@ printMessage "Running the OpenIM commit-msg hook."
|
||||
# This example catches duplicate Signed-off-by lines.
|
||||
|
||||
test "" = "$(grep '^Signed-off-by: ' "$1" |
|
||||
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
|
||||
echo >&2 Duplicate Signed-off-by lines.
|
||||
exit 1
|
||||
sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
|
||||
echo >&2 Duplicate Signed-off-by lines.
|
||||
exit 1
|
||||
}
|
||||
|
||||
# TODO: go-gitlint dir set
|
||||
@@ -60,21 +60,21 @@ OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/../..
|
||||
GITLINT_DIR="$OPENIM_ROOT/_output/tools/go-gitlint"
|
||||
|
||||
$GITLINT_DIR \
|
||||
--msg-file=$1 \
|
||||
--subject-regex="^(build|chore|ci|docs|feat|feature|fix|perf|refactor|revert|style|bot|test)(.*)?:\s?.*" \
|
||||
--subject-maxlen=150 \
|
||||
--subject-minlen=10 \
|
||||
--body-regex=".*" \
|
||||
--max-parents=1
|
||||
--msg-file=$1 \
|
||||
--subject-regex="^(build|chore|ci|docs|feat|feature|fix|perf|refactor|revert|style|bot|test)(.*)?:\s?.*" \
|
||||
--subject-maxlen=150 \
|
||||
--subject-minlen=10 \
|
||||
--body-regex=".*" \
|
||||
--max-parents=1
|
||||
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
if ! command -v $GITLINT_DIR &>/dev/null; then
|
||||
printError "$GITLINT_DIR not found. Please run 'make tools' OR 'make tools.verify.go-gitlint' make verto install it."
|
||||
fi
|
||||
printError "Please fix your commit message to match kubecub coding standards"
|
||||
printError "https://gist.github.com/cubxxw/126b72104ac0b0ca484c9db09c3e5694#file-githook-md"
|
||||
exit 1
|
||||
if ! command -v $GITLINT_DIR &>/dev/null; then
|
||||
printError "$GITLINT_DIR not found. Please run 'make tools' OR 'make tools.verify.go-gitlint' make verto install it."
|
||||
fi
|
||||
printError "Please fix your commit message to match kubecub coding standards"
|
||||
printError "https://gist.github.com/cubxxw/126b72104ac0b0ca484c9db09c3e5694#file-githook-md"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
### Add Sign-off-by line to the end of the commit message
|
||||
@@ -88,5 +88,5 @@ SIGNED_OFF_BY_EXISTS=$?
|
||||
|
||||
# Add "Signed-off-by" line if it doesn't exist
|
||||
if [ $SIGNED_OFF_BY_EXISTS -ne 0 ]; then
|
||||
echo -e "\nSigned-off-by: $NAME <$EMAIL>" >> "$1"
|
||||
echo -e "\nSigned-off-by: $NAME <$EMAIL>" >> "$1"
|
||||
fi
|
||||
@@ -34,15 +34,15 @@ RED="\e[31m"
|
||||
ENDCOLOR="\e[0m"
|
||||
|
||||
printMessage() {
|
||||
printf "${YELLOW}openim : $1${ENDCOLOR}\n"
|
||||
printf "${YELLOW}openim : $1${ENDCOLOR}\n"
|
||||
}
|
||||
|
||||
printSuccess() {
|
||||
printf "${GREEN}openim : $1${ENDCOLOR}\n"
|
||||
printf "${GREEN}openim : $1${ENDCOLOR}\n"
|
||||
}
|
||||
|
||||
printError() {
|
||||
printf "${RED}openim : $1${ENDCOLOR}\n"
|
||||
printf "${RED}openim : $1${ENDCOLOR}\n"
|
||||
}
|
||||
|
||||
printMessage "Running local openim pre-commit hook."
|
||||
@@ -55,9 +55,9 @@ limit=${GIT_FILE_SIZE_LIMIT:-2000000} # Default 2MB
|
||||
limitInMB=$(( $limit / 1000000 ))
|
||||
|
||||
function file_too_large(){
|
||||
filename=$0
|
||||
filesize=$(( $1 / 2**20 ))
|
||||
|
||||
filename=$0
|
||||
filesize=$(( $1 / 2**20 ))
|
||||
|
||||
cat <<HEREDOC
|
||||
|
||||
File $filename is $filesize MB, which is larger than github's maximum
|
||||
@@ -65,8 +65,8 @@ function file_too_large(){
|
||||
Commit aborted
|
||||
|
||||
HEREDOC
|
||||
git status
|
||||
|
||||
git status
|
||||
|
||||
}
|
||||
|
||||
# Move to the repo root so git files paths make sense
|
||||
@@ -77,9 +77,9 @@ empty_tree=$( git hash-object -t tree /dev/null )
|
||||
|
||||
if git rev-parse --verify HEAD > /dev/null 2>&1
|
||||
then
|
||||
against=HEAD
|
||||
against=HEAD
|
||||
else
|
||||
against="$empty_tree"
|
||||
against="$empty_tree"
|
||||
fi
|
||||
|
||||
# Set split so that for loop below can handle spaces in file names by splitting on line breaks
|
||||
@@ -104,7 +104,7 @@ fi
|
||||
|
||||
if [[ ! $local_branch =~ $valid_branch_regex ]]
|
||||
then
|
||||
printError "There is something wrong with your branch name. Branch names in this project must adhere to this contract: $valid_branch_regex.
|
||||
printError "There is something wrong with your branch name. Branch names in this project must adhere to this contract: $valid_branch_regex.
|
||||
Your commit will be rejected. You should rename your branch to a valid name(feat/name OR bug/name) and try again."
|
||||
printError "For more on this, read on: https://gist.github.com/cubxxw/126b72104ac0b0ca484c9db09c3e5694"
|
||||
exit 1
|
||||
|
||||
@@ -25,20 +25,20 @@ local_branch="$(git rev-parse --abbrev-ref HEAD)"
|
||||
valid_branch_regex="^(main|master|develop|release(-[a-zA-Z0-9._-]+)?)$|(feature|feat|openim|hotfix|test|bug|ci|cicd|style|)\/[a-z0-9._-]+$|^HEAD$"
|
||||
|
||||
printMessage() {
|
||||
printf "${YELLOW}OpenIM : $1${ENDCOLOR}\n"
|
||||
printf "${YELLOW}OpenIM : $1${ENDCOLOR}\n"
|
||||
}
|
||||
|
||||
printSuccess() {
|
||||
printf "${GREEN}OpenIM : $1${ENDCOLOR}\n"
|
||||
printf "${GREEN}OpenIM : $1${ENDCOLOR}\n"
|
||||
}
|
||||
|
||||
printError() {
|
||||
printf "${RED}OpenIM : $1${ENDCOLOR}\n"
|
||||
printf "${RED}OpenIM : $1${ENDCOLOR}\n"
|
||||
}
|
||||
|
||||
printMessage "Running local OpenIM pre-push hook."
|
||||
|
||||
if [[ `git status --porcelain` ]]; then
|
||||
if [[ $(git status --porcelain) ]]; then
|
||||
printError "This scripts needs to run against committed code only. Please commit or stash you changes."
|
||||
exit 1
|
||||
fi
|
||||
@@ -101,7 +101,7 @@ print_color "Deleted Files: ${deleted_files}" "${BACKGROUND_GREEN}"
|
||||
|
||||
if [[ ! $local_branch =~ $valid_branch_regex ]]
|
||||
then
|
||||
printError "There is something wrong with your branch name. Branch names in this project must adhere to this contract: $valid_branch_regex.
|
||||
printError "There is something wrong with your branch name. Branch names in this project must adhere to this contract: $valid_branch_regex.
|
||||
Your commit will be rejected. You should rename your branch to a valid name(feat/name OR fix/name) and try again."
|
||||
printError "For more on this, read on: https://gist.github.com/cubxxw/126b72104ac0b0ca484c9db09c3e5694"
|
||||
exit 1
|
||||
|
||||
+25
-23
@@ -31,7 +31,7 @@ readonly ENV_FILE=${ENV_FILE:-"${OPENIM_ROOT}/scripts/install/environment.sh"}
|
||||
# Templates for configuration files
|
||||
declare -A TEMPLATES=(
|
||||
["${OPENIM_ROOT}/deployments/templates/env-template.yaml"]="${OPENIM_ROOT}/.env"
|
||||
["${OPENIM_ROOT}/deployments/templates/openim.yaml"]="${OPENIM_ROOT}/config/config.yaml"
|
||||
["${OPENIM_ROOT}/deployments/templates/config.yaml"]="${OPENIM_ROOT}/config/config.yaml"
|
||||
["${OPENIM_ROOT}/deployments/templates/prometheus.yml"]="${OPENIM_ROOT}/config/prometheus.yml"
|
||||
["${OPENIM_ROOT}/deployments/templates/alertmanager.yml"]="${OPENIM_ROOT}/config/alertmanager.yml"
|
||||
)
|
||||
@@ -39,7 +39,7 @@ declare -A TEMPLATES=(
|
||||
# Templates for example files
|
||||
declare -A EXAMPLES=(
|
||||
["${OPENIM_ROOT}/deployments/templates/env-template.yaml"]="${OPENIM_ROOT}/config/templates/env.template"
|
||||
["${OPENIM_ROOT}/deployments/templates/openim.yaml"]="${OPENIM_ROOT}/config/templates/config.yaml.template"
|
||||
["${OPENIM_ROOT}/deployments/templates/config.yaml"]="${OPENIM_ROOT}/config/templates/config.yaml.template"
|
||||
["${OPENIM_ROOT}/deployments/templates/prometheus.yml"]="${OPENIM_ROOT}/config/templates/prometheus.yml.template"
|
||||
["${OPENIM_ROOT}/deployments/templates/alertmanager.yml"]="${OPENIM_ROOT}/config/templates/alertmanager.yml.template"
|
||||
)
|
||||
@@ -84,7 +84,7 @@ generate_config_files() {
|
||||
local output_file="${TEMPLATES[$template]}"
|
||||
process_file "$template" "$output_file" true
|
||||
done
|
||||
|
||||
|
||||
# Handle COPY_TEMPLATES array
|
||||
for template in "${!COPY_TEMPLATES[@]}"; do
|
||||
local output_file="${COPY_TEMPLATES[$template]}"
|
||||
@@ -95,22 +95,25 @@ generate_config_files() {
|
||||
# Function to generate example files
|
||||
generate_example_files() {
|
||||
env_cmd="env -i"
|
||||
|
||||
env_vars["OPENIM_IP"]="127.0.0.1"
|
||||
env_vars["LOG_STORAGE_LOCATION"]="../../"
|
||||
|
||||
for var in "${!env_vars[@]}"; do
|
||||
env_cmd+=" $var='${env_vars[$var]}'"
|
||||
env_cmd+=" $var='${env_vars[$var]}'"
|
||||
done
|
||||
|
||||
|
||||
# Processing EXAMPLES array
|
||||
for template in "${!EXAMPLES[@]}"; do
|
||||
local example_file="${EXAMPLES[$template]}"
|
||||
process_file "$template" "$example_file" true
|
||||
done
|
||||
|
||||
|
||||
# Processing COPY_EXAMPLES array
|
||||
for template in "${!COPY_EXAMPLES[@]}"; do
|
||||
local example_file="${COPY_EXAMPLES[$template]}"
|
||||
process_file "$template" "$example_file" false
|
||||
done
|
||||
|
||||
}
|
||||
|
||||
# Function to process a single file, either by generating or copying
|
||||
@@ -118,11 +121,11 @@ process_file() {
|
||||
local template=$1
|
||||
local output_file=$2
|
||||
local use_genconfig=$3
|
||||
|
||||
|
||||
if [[ -f "${output_file}" ]]; then
|
||||
if [[ "${FORCE_OVERWRITE}" == true ]]; then
|
||||
openim::log::info "Force overwriting ${output_file}."
|
||||
elif [[ "${SKIP_EXISTING}" == true ]]; then
|
||||
elif [[ "${SKIP_EXISTING}" == true ]]; then
|
||||
openim::log::info "Skipping generation of ${output_file} as it already exists."
|
||||
return
|
||||
else
|
||||
@@ -139,7 +142,7 @@ process_file() {
|
||||
openim::log::info "Generating ${output_file} as it does not exist."
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
if [[ "$use_genconfig" == true ]]; then
|
||||
openim::log::info "⌚ Working with template file: ${template} to generate ${output_file}..."
|
||||
if [[ ! -f "${OPENIM_ROOT}/scripts/genconfig.sh" ]]; then
|
||||
@@ -147,15 +150,15 @@ process_file() {
|
||||
exit 1
|
||||
fi
|
||||
if [[ -n "${env_cmd}" ]]; then
|
||||
eval "$env_cmd ${OPENIM_ROOT}/scripts/genconfig.sh '${ENV_FILE}' '${template}' > '${output_file}'" || {
|
||||
eval "$env_cmd ${OPENIM_ROOT}/scripts/genconfig.sh '${ENV_FILE}' '${template}' > '${output_file}'" || {
|
||||
openim::log::error "Error processing template file ${template}"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
else
|
||||
"${OPENIM_ROOT}/scripts/genconfig.sh" "${ENV_FILE}" "${template}" > "${output_file}" || {
|
||||
"${OPENIM_ROOT}/scripts/genconfig.sh" "${ENV_FILE}" "${template}" > "${output_file}" || {
|
||||
openim::log::error "Error processing template file ${template}"
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
fi
|
||||
else
|
||||
openim::log::info "📋 Copying ${template} to ${output_file}..."
|
||||
@@ -164,7 +167,7 @@ process_file() {
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
|
||||
|
||||
sleep 0.5
|
||||
}
|
||||
|
||||
@@ -181,7 +184,6 @@ clean_config_files() {
|
||||
|
||||
# Function to clean example files
|
||||
clean_example_files() {
|
||||
# 合并 EXAMPLES 和 COPY_EXAMPLES 数组
|
||||
local all_examples=("${EXAMPLES[@]}" "${COPY_EXAMPLES[@]}")
|
||||
|
||||
for example_file in "${all_examples[@]}"; do
|
||||
@@ -197,32 +199,32 @@ while [[ $# -gt 0 ]]; do
|
||||
-h|--help)
|
||||
show_help
|
||||
exit 0
|
||||
;;
|
||||
;;
|
||||
--force)
|
||||
FORCE_OVERWRITE=true
|
||||
shift
|
||||
;;
|
||||
;;
|
||||
--skip)
|
||||
SKIP_EXISTING=true
|
||||
shift
|
||||
;;
|
||||
;;
|
||||
--examples)
|
||||
GENERATE_EXAMPLES=true
|
||||
shift
|
||||
;;
|
||||
;;
|
||||
--clean-config)
|
||||
CLEAN_CONFIG=true
|
||||
shift
|
||||
;;
|
||||
;;
|
||||
--clean-examples)
|
||||
CLEAN_EXAMPLES=true
|
||||
shift
|
||||
;;
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option: $1"
|
||||
show_help
|
||||
exit 1
|
||||
;;
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
|
||||
+5
-5
@@ -25,9 +25,9 @@ source "${OPENIM_ROOT}/scripts/install/common.sh"
|
||||
openim::log::info "\n# Begin Install OpenIM Config"
|
||||
|
||||
for file in "${OPENIM_SERVER_TARGETS[@]}"; do
|
||||
VARNAME="$(echo $file | tr '[:lower:]' '[:upper:]' | tr '.' '_' | tr '-' '_')"
|
||||
VARVALUE="$OPENIM_OUTPUT_HOSTBIN/$file"
|
||||
# /etc/profile.d/openim-env.sh
|
||||
echo "export $VARNAME=$VARVALUE" > /etc/profile.d/openim-env.sh
|
||||
source /etc/profile.d/openim-env.sh
|
||||
VARNAME="$(echo $file | tr '[:lower:]' '[:upper:]' | tr '.' '_' | tr '-' '_')"
|
||||
VARVALUE="$OPENIM_OUTPUT_HOSTBIN/$file"
|
||||
# /etc/profile.d/openim-env.sh
|
||||
echo "export $VARNAME=$VARVALUE" > /etc/profile.d/openim-env.sh
|
||||
source /etc/profile.d/openim-env.sh
|
||||
done
|
||||
|
||||
+48
-48
@@ -39,62 +39,62 @@ OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
|
||||
HOOKS_DIR="${OPENIM_ROOT}/.git/hooks"
|
||||
|
||||
help_info() {
|
||||
echo "Usage: $0 [options]"
|
||||
echo
|
||||
echo "This script helps to manage git hooks."
|
||||
echo
|
||||
echo "Options:"
|
||||
echo " -h, --help Show this help message and exit."
|
||||
echo " -d, --delete Delete the hooks that have been added."
|
||||
echo " By default, it will prompt to enable git hooks."
|
||||
echo "Usage: $0 [options]"
|
||||
echo
|
||||
echo "This script helps to manage git hooks."
|
||||
echo
|
||||
echo "Options:"
|
||||
echo " -h, --help Show this help message and exit."
|
||||
echo " -d, --delete Delete the hooks that have been added."
|
||||
echo " By default, it will prompt to enable git hooks."
|
||||
}
|
||||
|
||||
delete_hooks() {
|
||||
for file in ${OPENIM_ROOT}/scripts/githooks/*.sh; do
|
||||
hook_name=$(basename "$file" .sh) # This removes the .sh extension
|
||||
rm -f "$HOOKS_DIR/$hook_name"
|
||||
done
|
||||
echo "Git hooks have been deleted."
|
||||
for file in "${OPENIM_ROOT}"/scripts/githooks/*.sh; do
|
||||
hook_name=$(basename "$file" .sh) # This removes the .sh extension
|
||||
rm -f "$HOOKS_DIR/$hook_name"
|
||||
done
|
||||
echo "Git hooks have been deleted."
|
||||
}
|
||||
|
||||
enable_hooks() {
|
||||
echo "Would you like to:"
|
||||
echo "1) Enable git hooks mode"
|
||||
echo "2) Delete existing git hooks"
|
||||
echo "Please select a number (or any other key to exit):"
|
||||
read -r choice
|
||||
|
||||
case "$choice" in
|
||||
1)
|
||||
for file in ${OPENIM_ROOT}/scripts/githooks/*.sh; do
|
||||
hook_name=$(basename "$file" .sh) # This removes the .sh extension
|
||||
cp -f "$file" "$HOOKS_DIR/$hook_name"
|
||||
done
|
||||
|
||||
chmod +x $HOOKS_DIR/*
|
||||
|
||||
echo "Git hooks mode has been enabled."
|
||||
echo "With git hooks enabled, every time you perform a git action (e.g. git commit), the corresponding hooks script will be triggered automatically."
|
||||
echo "This means that if the size of the file you're committing exceeds the set limit (e.g. 42MB), the commit will be rejected."
|
||||
;;
|
||||
2)
|
||||
delete_hooks
|
||||
;;
|
||||
*)
|
||||
echo "Exiting without making changes."
|
||||
;;
|
||||
esac
|
||||
echo "Would you like to:"
|
||||
echo "1) Enable git hooks mode"
|
||||
echo "2) Delete existing git hooks"
|
||||
echo "Please select a number (or any other key to exit):"
|
||||
read -r choice
|
||||
|
||||
case "$choice" in
|
||||
1)
|
||||
for file in ${OPENIM_ROOT}/scripts/githooks/*.sh; do
|
||||
hook_name=$(basename "$file" .sh) # This removes the .sh extension
|
||||
cp -f "$file" "$HOOKS_DIR/$hook_name"
|
||||
done
|
||||
|
||||
chmod +x $HOOKS_DIR/*
|
||||
|
||||
echo "Git hooks mode has been enabled."
|
||||
echo "With git hooks enabled, every time you perform a git action (e.g. git commit), the corresponding hooks script will be triggered automatically."
|
||||
echo "This means that if the size of the file you're committing exceeds the set limit (e.g. 42MB), the commit will be rejected."
|
||||
;;
|
||||
2)
|
||||
delete_hooks
|
||||
;;
|
||||
*)
|
||||
echo "Exiting without making changes."
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
help_info
|
||||
;;
|
||||
-d|--delete)
|
||||
delete_hooks
|
||||
;;
|
||||
*)
|
||||
enable_hooks
|
||||
;;
|
||||
-h|--help)
|
||||
help_info
|
||||
;;
|
||||
-d|--delete)
|
||||
delete_hooks
|
||||
;;
|
||||
*)
|
||||
enable_hooks
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright © 2023 OpenIM. All rights reserved.
|
||||
# Copyright © 2024 OpenIM. All rights reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
@@ -13,8 +13,20 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
#
|
||||
# OpenIM Docker Deployment Script
|
||||
#
|
||||
# This script automates the process of building the OpenIM server image
|
||||
# and deploying it using Docker Compose.
|
||||
#
|
||||
# Variables:
|
||||
# - SERVER_IMAGE_VERSION: Version of the server image (default: test)
|
||||
# - IMAGE_REGISTRY: Docker image registry (default: openim)
|
||||
# - DOCKER_COMPOSE_FILE_URL: URL to the docker-compose.yml file
|
||||
#
|
||||
# Usage:
|
||||
# SERVER_IMAGE_VERSION=latest IMAGE_REGISTRY=myregistry ./this_script.sh
|
||||
|
||||
# Common utilities, variables and checks for all build scripts.
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
@@ -28,35 +40,47 @@ chmod +x "${OPENIM_ROOT}"/scripts/*.sh
|
||||
|
||||
openim::util::ensure_docker_daemon_connectivity
|
||||
|
||||
# Default values for variables
|
||||
: ${SERVER_IMAGE_VERSION:=test}
|
||||
: ${IMAGE_REGISTRY:=openim}
|
||||
: ${DOCKER_COMPOSE_FILE_URL:="https://raw.githubusercontent.com/openimsdk/openim-docker/main/docker-compose.yaml"}
|
||||
|
||||
DOCKER_COMPOSE_COMMAND=
|
||||
# Check if docker-compose command is available
|
||||
openim::util::check_docker_and_compose_versions
|
||||
|
||||
if command -v docker compose &> /dev/null
|
||||
then
|
||||
openim::log::info "docker compose command is available"
|
||||
DOCKER_COMPOSE_COMMAND="docker compose"
|
||||
if command -v docker compose &> /dev/null; then
|
||||
openim::log::info "docker compose command is available"
|
||||
DOCKER_COMPOSE_COMMAND="docker compose"
|
||||
else
|
||||
DOCKER_COMPOSE_COMMAND="docker-compose"
|
||||
DOCKER_COMPOSE_COMMAND="docker-compose"
|
||||
fi
|
||||
|
||||
export SERVER_IMAGE_VERSION
|
||||
export IMAGE_REGISTRY
|
||||
"${OPENIM_ROOT}"/scripts/init-config.sh
|
||||
|
||||
pushd "${OPENIM_ROOT}"
|
||||
docker build -t "${IMAGE_REGISTRY}/openim-server:${SERVER_IMAGE_VERSION}" .
|
||||
${DOCKER_COMPOSE_COMMAND} stop
|
||||
curl https://raw.githubusercontent.com/openimsdk/openim-docker/main/docker-compose.yaml -o docker-compose.yml
|
||||
curl "${DOCKER_COMPOSE_FILE_URL}" -o docker-compose.yml
|
||||
${DOCKER_COMPOSE_COMMAND} up -d
|
||||
|
||||
# Function to check container status
|
||||
check_containers() {
|
||||
if ! ${DOCKER_COMPOSE_COMMAND} ps | grep -q 'Up'; then
|
||||
echo "Error: One or more docker containers failed to start."
|
||||
${DOCKER_COMPOSE_COMMAND} logs openim-server
|
||||
${DOCKER_COMPOSE_COMMAND} logs openim-chat
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
# Wait for a short period to allow containers to initialize
|
||||
sleep 30
|
||||
|
||||
# Check the status of the containers
|
||||
if ! ${DOCKER_COMPOSE_COMMAND} ps | grep -q 'Up'; then
|
||||
echo "Error: One or more docker containers failed to start."
|
||||
${DOCKER_COMPOSE_COMMAND} logs
|
||||
fi
|
||||
|
||||
sleep 30 # Keep the original 60-second wait, adjusted for the 10-second check above
|
||||
${DOCKER_COMPOSE_COMMAND} logs openim-server
|
||||
${DOCKER_COMPOSE_COMMAND} ps
|
||||
|
||||
popd
|
||||
check_containers
|
||||
|
||||
popd
|
||||
@@ -24,66 +24,66 @@ OPENIM_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")"/../.. && pwd -P)
|
||||
|
||||
# Start MongoDB service
|
||||
docker run -d \
|
||||
--name mongo \
|
||||
-p 37017:27017 \
|
||||
-v "${DATA_DIR}/components/mongodb/data/db:/data/db" \
|
||||
-v "${DATA_DIR}/components/mongodb/data/logs:/data/logs" \
|
||||
-v "${DATA_DIR}/components/mongodb/data/conf:/etc/mongo" \
|
||||
-v "./scripts/mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh:ro" \
|
||||
-e TZ=Asia/Shanghai \
|
||||
-e wiredTigerCacheSizeGB=1 \
|
||||
-e MONGO_INITDB_ROOT_USERNAME=${OPENIM_USER} \
|
||||
-e MONGO_INITDB_ROOT_PASSWORD=${PASSWORD} \
|
||||
-e MONGO_INITDB_DATABASE=openIM \
|
||||
-e MONGO_OPENIM_USERNAME=${OPENIM_USER} \
|
||||
-e MONGO_OPENIM_PASSWORD=${PASSWORD} \
|
||||
--restart always \
|
||||
mongo:6.0.2 --wiredTigerCacheSizeGB 1 --auth
|
||||
--name mongo \
|
||||
-p 37017:27017 \
|
||||
-v "${DATA_DIR}/components/mongodb/data/db:/data/db" \
|
||||
-v "${DATA_DIR}/components/mongodb/data/logs:/data/logs" \
|
||||
-v "${DATA_DIR}/components/mongodb/data/conf:/etc/mongo" \
|
||||
-v "./scripts/mongo-init.sh:/docker-entrypoint-initdb.d/mongo-init.sh:ro" \
|
||||
-e TZ=Asia/Shanghai \
|
||||
-e wiredTigerCacheSizeGB=1 \
|
||||
-e MONGO_INITDB_ROOT_USERNAME=${OPENIM_USER} \
|
||||
-e MONGO_INITDB_ROOT_PASSWORD=${PASSWORD} \
|
||||
-e MONGO_INITDB_DATABASE=openim_v3 \
|
||||
-e MONGO_OPENIM_USERNAME=${OPENIM_USER} \
|
||||
-e MONGO_OPENIM_PASSWORD=${PASSWORD} \
|
||||
--restart always \
|
||||
mongo:6.0.2 --wiredTigerCacheSizeGB 1 --auth
|
||||
|
||||
# Start Redis service
|
||||
docker run -d \
|
||||
--name redis \
|
||||
-p 16379:6379 \
|
||||
-v "${DATA_DIR}/components/redis/data:/data" \
|
||||
-v "${DATA_DIR}/components/redis/config/redis.conf:/usr/local/redis/config/redis.conf" \
|
||||
-e TZ=Asia/Shanghai \
|
||||
--sysctl net.core.somaxconn=1024 \
|
||||
--restart always \
|
||||
redis:7.0.0 redis-server --requirepass ${PASSWORD} --appendonly yes
|
||||
--name redis \
|
||||
-p 16379:6379 \
|
||||
-v "${DATA_DIR}/components/redis/data:/data" \
|
||||
-v "${DATA_DIR}/components/redis/config/redis.conf:/usr/local/redis/config/redis.conf" \
|
||||
-e TZ=Asia/Shanghai \
|
||||
--sysctl net.core.somaxconn=1024 \
|
||||
--restart always \
|
||||
redis:7.0.0 redis-server --requirepass ${PASSWORD} --appendonly yes
|
||||
|
||||
# Start Zookeeper service
|
||||
docker run -d \
|
||||
--name zookeeper \
|
||||
-p 2181:2181 \
|
||||
-v "/etc/localtime:/etc/localtime" \
|
||||
-e TZ=Asia/Shanghai \
|
||||
--restart always \
|
||||
wurstmeister/zookeeper
|
||||
--name zookeeper \
|
||||
-p 2181:2181 \
|
||||
-v "/etc/localtime:/etc/localtime" \
|
||||
-e TZ=Asia/Shanghai \
|
||||
--restart always \
|
||||
wurstmeister/zookeeper
|
||||
|
||||
# Start Kafka service
|
||||
docker run -d \
|
||||
--name kafka \
|
||||
-p 9092:9092 \
|
||||
-e TZ=Asia/Shanghai \
|
||||
-e KAFKA_BROKER_ID=0 \
|
||||
-e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \
|
||||
-e KAFKA_CREATE_TOPICS="latestMsgToRedis:8:1,msgToPush:8:1,offlineMsgToMongoMysql:8:1" \
|
||||
-e KAFKA_ADVERTISED_LISTENERS="INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9092" \
|
||||
-e KAFKA_LISTENERS="INSIDE://:9092,OUTSIDE://:9093" \
|
||||
-e KAFKA_LISTENER_SECURITY_PROTOCOL_MAP="INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" \
|
||||
-e KAFKA_INTER_BROKER_LISTENER_NAME=INSIDE \
|
||||
--restart always \
|
||||
--link zookeeper \
|
||||
wurstmeister/kafka
|
||||
--name kafka \
|
||||
-p 9092:9092 \
|
||||
-e TZ=Asia/Shanghai \
|
||||
-e KAFKA_BROKER_ID=0 \
|
||||
-e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \
|
||||
-e KAFKA_CREATE_TOPICS="latestMsgToRedis:8:1,msgToPush:8:1,offlineMsgToMongoMysql:8:1" \
|
||||
-e KAFKA_ADVERTISED_LISTENERS="INSIDE://127.0.0.1:9092,OUTSIDE://103.116.45.174:9092" \
|
||||
-e KAFKA_LISTENERS="INSIDE://:9092,OUTSIDE://:9093" \
|
||||
-e KAFKA_LISTENER_SECURITY_PROTOCOL_MAP="INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT" \
|
||||
-e KAFKA_INTER_BROKER_LISTENER_NAME=INSIDE \
|
||||
--restart always \
|
||||
--link zookeeper \
|
||||
wurstmeister/kafka
|
||||
|
||||
# Start MinIO service
|
||||
docker run -d \
|
||||
--name minio \
|
||||
-p 10005:9000 \
|
||||
-p 9090:9090 \
|
||||
-v "/mnt/data:/data" \
|
||||
-v "/mnt/config:/root/.minio" \
|
||||
-e MINIO_ROOT_USER=${OPENIM_USER} \
|
||||
-e MINIO_ROOT_PASSWORD=${PASSWORD} \
|
||||
--restart always \
|
||||
minio/minio server /data --console-address ':9090'
|
||||
--name minio \
|
||||
-p 10005:9000 \
|
||||
-p 9090:9090 \
|
||||
-v "/mnt/data:/data" \
|
||||
-v "/mnt/config:/root/.minio" \
|
||||
-e MINIO_ROOT_USER=${OPENIM_USER} \
|
||||
-e MINIO_ROOT_PASSWORD=${PASSWORD} \
|
||||
--restart always \
|
||||
minio/minio server /data --console-address ':9090'
|
||||
|
||||
@@ -22,13 +22,13 @@
|
||||
OPENIM_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd -P)"
|
||||
|
||||
# 生成文件存放目录
|
||||
LOCAL_OUTPUT_ROOT=""${OPENIM_ROOT}"/${OUT_DIR:-_output}"
|
||||
LOCAL_OUTPUT_ROOT="${OPENIM_ROOT}/${OUT_DIR:-_output}"
|
||||
source "${OPENIM_ROOT}/scripts/lib/init.sh"
|
||||
|
||||
#TODO: Access to the OPENIM_IP networks outside, or you want to use the OPENIM_IP network
|
||||
# OPENIM_IP=127.0.0.1
|
||||
if [ -z "${OPENIM_IP}" ]; then
|
||||
OPENIM_IP=$(openim::util::get_server_ip)
|
||||
OPENIM_IP=$(openim::util::get_server_ip)
|
||||
fi
|
||||
|
||||
# config.gateway custom bridge modes
|
||||
@@ -37,9 +37,9 @@ fi
|
||||
# fi
|
||||
|
||||
function def() {
|
||||
local var_name="$1"
|
||||
local default_value="${2:-}"
|
||||
eval "readonly $var_name=\"\${$var_name:-$(printf '%q' "$default_value")}\""
|
||||
local var_name="$1"
|
||||
local default_value="${2:-}"
|
||||
eval "readonly $var_name=\"\${$var_name:-$(printf '%q' "$default_value")}\""
|
||||
}
|
||||
|
||||
# OpenIM Docker Compose 数据存储的默认路径
|
||||
@@ -52,7 +52,7 @@ def "OPENIM_USER" "root"
|
||||
readonly PASSWORD=${PASSWORD:-'openIM123'}
|
||||
|
||||
# 设置统一的数据库名称,方便管理
|
||||
def "DATABASE_NAME" "openIM_v3"
|
||||
def "DATABASE_NAME" "openim_v3"
|
||||
|
||||
# Linux系统 openim 用户
|
||||
def "LINUX_USERNAME" "openim"
|
||||
@@ -62,7 +62,7 @@ readonly LINUX_PASSWORD=${LINUX_PASSWORD:-"${PASSWORD}"}
|
||||
def "INSTALL_DIR" "${LOCAL_OUTPUT_ROOT}/installs"
|
||||
mkdir -p ${INSTALL_DIR}
|
||||
|
||||
def "ENV_FILE" ""${OPENIM_ROOT}"/scripts/install/environment.sh"
|
||||
def "ENV_FILE" "${OPENIM_ROOT}/scripts/install/environment.sh"
|
||||
|
||||
###################### Docker compose ###################
|
||||
# OPENIM AND CHAT
|
||||
@@ -89,8 +89,8 @@ SUBNET=$(echo $DOCKER_BRIDGE_SUBNET | cut -d '/' -f 2)
|
||||
LAST_OCTET=$(echo $IP_PREFIX | cut -d '.' -f 4)
|
||||
|
||||
generate_ip() {
|
||||
local NEW_IP="$(echo $IP_PREFIX | cut -d '.' -f 1-3).$((LAST_OCTET++))"
|
||||
echo $NEW_IP
|
||||
local NEW_IP="$(echo $IP_PREFIX | cut -d '.' -f 1-3).$((LAST_OCTET++))"
|
||||
echo $NEW_IP
|
||||
}
|
||||
LAST_OCTET=$((LAST_OCTET + 1))
|
||||
DOCKER_BRIDGE_GATEWAY=$(generate_ip)
|
||||
@@ -128,7 +128,7 @@ def "OPENIM_CONFIG_DIR" "/etc/openim/config"
|
||||
def "OPENIM_LOG_DIR" "/var/log/openim"
|
||||
def "CA_FILE" "${OPENIM_CONFIG_DIR}/cert/ca.pem"
|
||||
|
||||
def "OPNEIM_CONFIG" ""${OPENIM_ROOT}"/config"
|
||||
def "OPNEIM_CONFIG" "${OPENIM_ROOT}/config"
|
||||
def "OPENIM_SERVER_ADDRESS" "${DOCKER_BRIDGE_GATEWAY}" # OpenIM服务地址
|
||||
|
||||
# OpenIM Websocket端口
|
||||
@@ -171,13 +171,13 @@ def "MONGO_URI" # MongoDB的URI
|
||||
def "MONGO_PORT" "37017" # MongoDB的端口
|
||||
def "MONGO_ADDRESS" "${DOCKER_BRIDGE_GATEWAY}" # MongoDB的地址
|
||||
def "MONGO_DATABASE" "${DATABASE_NAME}" # MongoDB的数据库名
|
||||
def "MONGO_USERNAME" "root" # MongoDB的管理员身份用户名
|
||||
def "MONGO_USERNAME" "root" # MongoDB的管理员身份用户名
|
||||
# MongoDB的管理员身份密码
|
||||
readonly MONGO_PASSWORD=${MONGO_PASSWORD:-"${PASSWORD}"}
|
||||
# Mongo OpenIM 身份用户名
|
||||
def "MONGO_OPENIM_USERNAME" "openIM"
|
||||
# Mongo OpenIM 身份密码
|
||||
readonly MONGO_OPENIM_PASSWORD=${MONGO_OPENIM_PASSWORD:-'openIM123456'}
|
||||
readonly MONGO_OPENIM_PASSWORD=${MONGO_OPENIM_PASSWORD:-"${PASSWORD}"}
|
||||
|
||||
def "MONGO_MAX_POOL_SIZE" "100" # 最大连接池大小
|
||||
|
||||
@@ -243,8 +243,6 @@ def "KAFKA_CONSUMERGROUPID_PUSH" "push" # `Kafka` 的消费
|
||||
|
||||
###################### openim-web 配置信息 ######################
|
||||
def "OPENIM_WEB_PORT" "11001" # openim-web的端口
|
||||
def "OPENIM_WEB_ADDRESS" "${DOCKER_BRIDGE_GATEWAY}" # openim-web的地址
|
||||
def "OPENIM_WEB_DIST_PATH" "/app/dist" # openim-web的dist路径
|
||||
|
||||
###################### openim-admin-front 配置信息 ######################
|
||||
def "OPENIM_ADMIN_FRONT_PORT" "11002" # openim-admin-front的端口
|
||||
@@ -326,7 +324,7 @@ def "OPENIM_CONVERSATION_NAME" "Conversation" # OpenIM对话服务名称
|
||||
def "OPENIM_THIRD_NAME" "Third" # OpenIM第三方服务名称
|
||||
|
||||
###################### Log Configuration Variables ######################
|
||||
def "LOG_STORAGE_LOCATION" ""${OPENIM_ROOT}"/logs/" # 日志存储位置
|
||||
def "LOG_STORAGE_LOCATION" "${OPENIM_ROOT}/logs/" # 日志存储位置
|
||||
def "LOG_ROTATION_TIME" "24" # 日志轮替时间
|
||||
def "LOG_REMAIN_ROTATION_COUNT" "2" # 保留的日志轮替数量
|
||||
def "LOG_REMAIN_LOG_LEVEL" "6" # 保留的日志级别
|
||||
@@ -414,7 +412,7 @@ readonly MSG_TRANSFER_PROM_ADDRESS_PORT=${MSG_TRANSFER_PROM_ADDRESS_PORT:-"${DOC
|
||||
###################### OpenIM openim-api ######################
|
||||
def "OPENIM_API_HOST" "127.0.0.1"
|
||||
def "OPENIM_API_BINARY" "${OPENIM_OUTPUT_HOSTBIN}/openim-api" # OpenIM openim-api 二进制文件路径
|
||||
def "OPENIM_API_CONFIG" ""${OPENIM_ROOT}"/config/" # OpenIM openim-api 配置文件路径
|
||||
def "OPENIM_API_CONFIG" "${OPENIM_ROOT}/config/" # OpenIM openim-api 配置文件路径
|
||||
def "OPENIM_API_LOG_DIR" "${LOG_STORAGE_LOCATION}/openim-api" # OpenIM openim-api 日志存储路径
|
||||
def "OPENIM_API_LOG_LEVEL" "info" # OpenIM openim-api 日志级别
|
||||
def "OPENIM_API_LOG_MAX_SIZE" "100" # OpenIM openim-api 日志最大大小(MB)
|
||||
@@ -426,7 +424,7 @@ def "OPENIM_API_LOG_WITH_STACK" "${LOG_WITH_STACK}" # OpenIM openim-ap
|
||||
###################### OpenIM openim-cmdutils ######################
|
||||
def "OPENIM_CMDUTILS_HOST" "127.0.0.1"
|
||||
def "OPENIM_CMDUTILS_BINARY" "${OPENIM_OUTPUT_HOSTBIN}/openim-cmdutils" # OpenIM openim-cmdutils 二进制文件路径
|
||||
def "OPENIM_CMDUTILS_CONFIG" ""${OPENIM_ROOT}"/config/" # OpenIM openim-cmdutils 配置文件路径
|
||||
def "OPENIM_CMDUTILS_CONFIG" "${OPENIM_ROOT}/config/" # OpenIM openim-cmdutils 配置文件路径
|
||||
def "OPENIM_CMDUTILS_LOG_DIR" "${LOG_STORAGE_LOCATION}/openim-cmdutils" # OpenIM openim-cmdutils 日志存储路径
|
||||
def "OPENIM_CMDUTILS_LOG_LEVEL" "info" # OpenIM openim-cmdutils 日志级别
|
||||
def "OPENIM_CMDUTILS_LOG_MAX_SIZE" "100" # OpenIM openim-cmdutils 日志最大大小(MB)
|
||||
@@ -438,7 +436,7 @@ def "OPENIM_CMDUTILS_LOG_WITH_STACK" "${LOG_WITH_STACK}" # OpenIM
|
||||
###################### OpenIM openim-crontask ######################
|
||||
def "OPENIM_CRONTASK_HOST" "127.0.0.1"
|
||||
def "OPENIM_CRONTASK_BINARY" "${OPENIM_OUTPUT_HOSTBIN}/openim-crontask" # OpenIM openim-crontask 二进制文件路径
|
||||
def "OPENIM_CRONTASK_CONFIG" ""${OPENIM_ROOT}"/config/" # OpenIM openim-crontask 配置文件路径
|
||||
def "OPENIM_CRONTASK_CONFIG" "${OPENIM_ROOT}/config/" # OpenIM openim-crontask 配置文件路径
|
||||
def "OPENIM_CRONTASK_LOG_DIR" "${LOG_STORAGE_LOCATION}/openim-crontask" # OpenIM openim-crontask 日志存储路径
|
||||
def "OPENIM_CRONTASK_LOG_LEVEL" "info" # OpenIM openim-crontask 日志级别
|
||||
def "OPENIM_CRONTASK_LOG_MAX_SIZE" "100" # OpenIM openim-crontask 日志最大大小(MB)
|
||||
@@ -450,7 +448,7 @@ def "OPENIM_CRONTASK_LOG_WITH_STACK" "${LOG_WITH_STACK}" # OpenIM
|
||||
###################### OpenIM openim-msggateway ######################
|
||||
def "OPENIM_MSGGATEWAY_HOST" "127.0.0.1"
|
||||
def "OPENIM_MSGGATEWAY_BINARY" "${OPENIM_OUTPUT_HOSTBIN}/openim-msggateway"
|
||||
def "OPENIM_MSGGATEWAY_CONFIG" ""${OPENIM_ROOT}"/config/"
|
||||
def "OPENIM_MSGGATEWAY_CONFIG" "${OPENIM_ROOT}/config/"
|
||||
def "OPENIM_MSGGATEWAY_LOG_DIR" "${LOG_STORAGE_LOCATION}/openim-msggateway"
|
||||
def "OPENIM_MSGGATEWAY_LOG_LEVEL" "info"
|
||||
def "OPENIM_MSGGATEWAY_LOG_MAX_SIZE" "100"
|
||||
@@ -465,7 +463,7 @@ readonly OPENIM_MSGGATEWAY_NUM=${OPENIM_MSGGATEWAY_NUM:-'4'}
|
||||
###################### OpenIM openim-msgtransfer ######################
|
||||
def "OPENIM_MSGTRANSFER_HOST" "127.0.0.1"
|
||||
def "OPENIM_MSGTRANSFER_BINARY" "${OPENIM_OUTPUT_HOSTBIN}/openim-msgtransfer" # OpenIM openim-msgtransfer 二进制文件路径
|
||||
def "OPENIM_MSGTRANSFER_CONFIG" ""${OPENIM_ROOT}"/config/" # OpenIM openim-msgtransfer 配置文件路径
|
||||
def "OPENIM_MSGTRANSFER_CONFIG" "${OPENIM_ROOT}/config/" # OpenIM openim-msgtransfer 配置文件路径
|
||||
def "OPENIM_MSGTRANSFER_LOG_DIR" "${LOG_STORAGE_LOCATION}/openim-msgtransfer" # OpenIM openim-msgtransfer 日志存储路径
|
||||
def "OPENIM_MSGTRANSFER_LOG_LEVEL" "info" # OpenIM openim-msgtransfer 日志级别
|
||||
def "OPENIM_MSGTRANSFER_LOG_MAX_SIZE" "100" # OpenIM openim-msgtransfer 日志最大大小(MB)
|
||||
@@ -477,7 +475,7 @@ def "OPENIM_MSGTRANSFER_LOG_WITH_STACK" "${LOG_WITH_STACK}" #
|
||||
###################### OpenIM openim-push ######################
|
||||
def "OPENIM_PUSH_HOST" "127.0.0.1"
|
||||
def "OPENIM_PUSH_BINARY" "${OPENIM_OUTPUT_HOSTBIN}/openim-push" # OpenIM openim-push 二进制文件路径
|
||||
def "OPENIM_PUSH_CONFIG" ""${OPENIM_ROOT}"/config/" # OpenIM openim-push 配置文件路径
|
||||
def "OPENIM_PUSH_CONFIG" "${OPENIM_ROOT}/config/" # OpenIM openim-push 配置文件路径
|
||||
def "OPENIM_PUSH_LOG_DIR" "${LOG_STORAGE_LOCATION}/openim-push" # OpenIM openim-push 日志存储路径
|
||||
def "OPENIM_PUSH_LOG_LEVEL" "info" # OpenIM openim-push 日志级别
|
||||
def "OPENIM_PUSH_LOG_MAX_SIZE" "100" # OpenIM openim-push 日志最大大小(MB)
|
||||
@@ -489,7 +487,7 @@ def "OPENIM_PUSH_LOG_WITH_STACK" "${LOG_WITH_STACK}" # OpenIM openim-
|
||||
###################### OpenIM openim-rpc-auth ######################
|
||||
def "OPENIM_RPC_AUTH_HOST" "127.0.0.1"
|
||||
def "OPENIM_RPC_AUTH_BINARY" "${OPENIM_OUTPUT_HOSTBIN}/openim-rpc-auth" # OpenIM openim-rpc-auth 二进制文件路径
|
||||
def "OPENIM_RPC_AUTH_CONFIG" ""${OPENIM_ROOT}"/config/" # OpenIM openim-rpc-auth 配置文件路径
|
||||
def "OPENIM_RPC_AUTH_CONFIG" "${OPENIM_ROOT}/config/" # OpenIM openim-rpc-auth 配置文件路径
|
||||
def "OPENIM_RPC_AUTH_LOG_DIR" "${LOG_STORAGE_LOCATION}/openim-rpc-auth" # OpenIM openim-rpc-auth 日志存储路径
|
||||
def "OPENIM_RPC_AUTH_LOG_LEVEL" "info" # OpenIM openim-rpc-auth 日志级别
|
||||
def "OPENIM_RPC_AUTH_LOG_MAX_SIZE" "100" # OpenIM openim-rpc-auth 日志最大大小(MB)
|
||||
@@ -501,7 +499,7 @@ def "OPENIM_RPC_AUTH_LOG_WITH_STACK" "${LOG_WITH_STACK}" # OpenIM
|
||||
###################### OpenIM openim-rpc-conversation ######################
|
||||
def "OPENIM_RPC_CONVERSATION_HOST" "127.0.0.1"
|
||||
def "OPENIM_RPC_CONVERSATION_BINARY" "${OPENIM_OUTPUT_HOSTBIN}/openim-rpc-conversation" # OpenIM openim-rpc-conversation 二进制文件路径
|
||||
def "OPENIM_RPC_CONVERSATION_CONFIG" ""${OPENIM_ROOT}"/config/" # OpenIM openim-rpc-conversation 配置文件路径
|
||||
def "OPENIM_RPC_CONVERSATION_CONFIG" "${OPENIM_ROOT}/config/" # OpenIM openim-rpc-conversation 配置文件路径
|
||||
def "OPENIM_RPC_CONVERSATION_LOG_DIR" "${LOG_STORAGE_LOCATION}/openim-rpc-conversation" # OpenIM openim-rpc-conversation 日志存储路径
|
||||
def "OPENIM_RPC_CONVERSATION_LOG_LEVEL" "info" # OpenIM openim-rpc-conversation 日志级别
|
||||
def "OPENIM_RPC_CONVERSATION_LOG_MAX_SIZE" "100" # OpenIM openim-rpc-conversation 日志最大大小(MB)
|
||||
@@ -513,7 +511,7 @@ def "OPENIM_RPC_CONVERSATION_LOG_WITH_STACK" "${LOG_WITH_STACK}"
|
||||
###################### OpenIM openim-rpc-friend ######################
|
||||
def "OPENIM_RPC_FRIEND_HOST" "127.0.0.1"
|
||||
def "OPENIM_RPC_FRIEND_BINARY" "${OPENIM_OUTPUT_HOSTBIN}/openim-rpc-friend" # OpenIM openim-rpc-friend 二进制文件路径
|
||||
def "OPENIM_RPC_FRIEND_CONFIG" ""${OPENIM_ROOT}"/config/" # OpenIM openim-rpc-friend 配置文件路径
|
||||
def "OPENIM_RPC_FRIEND_CONFIG" "${OPENIM_ROOT}/config/" # OpenIM openim-rpc-friend 配置文件路径
|
||||
def "OPENIM_RPC_FRIEND_LOG_DIR" "${LOG_STORAGE_LOCATION}/openim-rpc-friend" # OpenIM openim-rpc-friend 日志存储路径
|
||||
def "OPENIM_RPC_FRIEND_LOG_LEVEL" "info" # OpenIM openim-rpc-friend 日志级别
|
||||
def "OPENIM_RPC_FRIEND_LOG_MAX_SIZE" "100" # OpenIM openim-rpc-friend 日志最大大小(MB)
|
||||
@@ -525,7 +523,7 @@ def "OPENIM_RPC_FRIEND_LOG_WITH_STACK" "${LOG_WITH_STACK}" # Op
|
||||
###################### OpenIM openim-rpc-group ######################
|
||||
def "OPENIM_RPC_GROUP_HOST" "127.0.0.1"
|
||||
def "OPENIM_RPC_GROUP_BINARY" "${OPENIM_OUTPUT_HOSTBIN}/openim-rpc-group" # OpenIM openim-rpc-group 二进制文件路径
|
||||
def "OPENIM_RPC_GROUP_CONFIG" ""${OPENIM_ROOT}"/config/" # OpenIM openim-rpc-group 配置文件路径
|
||||
def "OPENIM_RPC_GROUP_CONFIG" "${OPENIM_ROOT}/config/" # OpenIM openim-rpc-group 配置文件路径
|
||||
def "OPENIM_RPC_GROUP_LOG_DIR" "${LOG_STORAGE_LOCATION}/openim-rpc-group" # OpenIM openim-rpc-group 日志存储路径
|
||||
def "OPENIM_RPC_GROUP_LOG_LEVEL" "info" # OpenIM openim-rpc-group 日志级别
|
||||
def "OPENIM_RPC_GROUP_LOG_MAX_SIZE" "100" # OpenIM openim-rpc-group 日志最大大小(MB)
|
||||
@@ -537,7 +535,7 @@ def "OPENIM_RPC_GROUP_LOG_WITH_STACK" "${LOG_WITH_STACK}" # Open
|
||||
###################### OpenIM openim-rpc-msg ######################
|
||||
def "OPENIM_RPC_MSG_HOST" "127.0.0.1"
|
||||
def "OPENIM_RPC_MSG_BINARY" "${OPENIM_OUTPUT_HOSTBIN}/openim-rpc-msg" # OpenIM openim-rpc-msg 二进制文件路径
|
||||
def "OPENIM_RPC_MSG_CONFIG" ""${OPENIM_ROOT}"/config/" # OpenIM openim-rpc-msg 配置文件路径
|
||||
def "OPENIM_RPC_MSG_CONFIG" "${OPENIM_ROOT}/config/" # OpenIM openim-rpc-msg 配置文件路径
|
||||
def "OPENIM_RPC_MSG_LOG_DIR" "${LOG_STORAGE_LOCATION}/openim-rpc-msg" # OpenIM openim-rpc-msg 日志存储路径
|
||||
def "OPENIM_RPC_MSG_LOG_LEVEL" "info" # OpenIM openim-rpc-msg 日志级别
|
||||
def "OPENIM_RPC_MSG_LOG_MAX_SIZE" "100" # OpenIM openim-rpc-msg 日志最大大小(MB)
|
||||
@@ -549,7 +547,7 @@ def "OPENIM_RPC_MSG_LOG_WITH_STACK" "${LOG_WITH_STACK}" # OpenIM o
|
||||
###################### OpenIM openim-rpc-third ######################
|
||||
def "OPENIM_RPC_THIRD_HOST" "127.0.0.1"
|
||||
def "OPENIM_RPC_THIRD_BINARY" "${OPENIM_OUTPUT_HOSTBIN}/openim-rpc-third" # OpenIM openim-rpc-third 二进制文件路径
|
||||
def "OPENIM_RPC_THIRD_CONFIG" ""${OPENIM_ROOT}"/config/" # OpenIM openim-rpc-third 配置文件路径
|
||||
def "OPENIM_RPC_THIRD_CONFIG" "${OPENIM_ROOT}/config/" # OpenIM openim-rpc-third 配置文件路径
|
||||
def "OPENIM_RPC_THIRD_LOG_DIR" "${LOG_STORAGE_LOCATION}/openim-rpc-third" # OpenIM openim-rpc-third 日志存储路径
|
||||
def "OPENIM_RPC_THIRD_LOG_LEVEL" "info" # OpenIM openim-rpc-third 日志级别
|
||||
def "OPENIM_RPC_THIRD_LOG_MAX_SIZE" "100" # OpenIM openim-rpc-third 日志最大大小(MB)
|
||||
@@ -561,7 +559,7 @@ def "OPENIM_RPC_THIRD_LOG_WITH_STACK" "${LOG_WITH_STACK}" # Open
|
||||
###################### OpenIM openim-rpc-user ######################
|
||||
def "OPENIM_RPC_USER_HOST" "127.0.0.1"
|
||||
def "OPENIM_RPC_USER_BINARY" "${OPENIM_OUTPUT_HOSTBIN}/openim-rpc-user" # OpenIM openim-rpc-user 二进制文件路径
|
||||
def "OPENIM_RPC_USER_CONFIG" ""${OPENIM_ROOT}"/config/" # OpenIM openim-rpc-user 配置文件路径
|
||||
def "OPENIM_RPC_USER_CONFIG" "${OPENIM_ROOT}/config/" # OpenIM openim-rpc-user 配置文件路径
|
||||
def "OPENIM_RPC_USER_LOG_DIR" "${LOG_STORAGE_LOCATION}/openim-rpc-user" # OpenIM openim-rpc-user 日志存储路径
|
||||
def "OPENIM_RPC_USER_LOG_LEVEL" "info" # OpenIM openim-rpc-user 日志级别
|
||||
def "OPENIM_RPC_USER_LOG_MAX_SIZE" "100" # OpenIM openim-rpc-user 日志最大大小(MB)
|
||||
|
||||
@@ -21,17 +21,17 @@
|
||||
# This tool is customized to meet the specific needs of OpenIM and resides in its separate repository.
|
||||
# It can be downloaded from the following link:
|
||||
# https://github.com/OpenIMSDK/Open-IM-Protoc/releases/tag/v1.0.0
|
||||
#
|
||||
#
|
||||
# About the tool:
|
||||
# https://github.com/openimsdk/open-im-server/blob/main/docs/contrib/protoc-tools.md
|
||||
# Download link (Windows): https://github.com/OpenIMSDK/Open-IM-Protoc/releases/download/v1.0.0/windows.zip
|
||||
# Download link (Linux): https://github.com/OpenIMSDK/Open-IM-Protoc/releases/download/v1.0.0/linux.zip
|
||||
#
|
||||
#
|
||||
# Installation steps (taking Windows as an example):
|
||||
# 1. Visit the above link and download the version suitable for Windows.
|
||||
# 2. Extract the downloaded file.
|
||||
# 3. Add the extracted tool to your PATH environment variable so that it can be run directly from the command line.
|
||||
#
|
||||
#
|
||||
# Note: The specific installation and usage instructions may vary based on the tool's actual implementation. It's advised to refer to official documentation.
|
||||
# --------------------------------------------------------------
|
||||
|
||||
@@ -40,79 +40,79 @@ DOWNLOAD_DIR="/tmp/openim-protoc"
|
||||
INSTALL_DIR="/usr/local/bin"
|
||||
|
||||
function help_message {
|
||||
echo "Usage: ./install-protobuf.sh [option]"
|
||||
echo "Options:"
|
||||
echo "-i, --install Install the OpenIM Protoc tool."
|
||||
echo "-u, --uninstall Uninstall the OpenIM Protoc tool."
|
||||
echo "-r, --reinstall Reinstall the OpenIM Protoc tool."
|
||||
echo "-c, --check Check if the OpenIM Protoc tool is installed."
|
||||
echo "-h, --help Display this help message."
|
||||
echo "Usage: ./install-protobuf.sh [option]"
|
||||
echo "Options:"
|
||||
echo "-i, --install Install the OpenIM Protoc tool."
|
||||
echo "-u, --uninstall Uninstall the OpenIM Protoc tool."
|
||||
echo "-r, --reinstall Reinstall the OpenIM Protoc tool."
|
||||
echo "-c, --check Check if the OpenIM Protoc tool is installed."
|
||||
echo "-h, --help Display this help message."
|
||||
}
|
||||
|
||||
function install_protobuf {
|
||||
echo "Installing OpenIM Protoc tool..."
|
||||
|
||||
# Create temporary directory and download the zip file
|
||||
mkdir -p $DOWNLOAD_DIR
|
||||
wget $PROTOC_DOWNLOAD_URL -O $DOWNLOAD_DIR/linux.zip
|
||||
|
||||
# Unzip the file
|
||||
unzip -o $DOWNLOAD_DIR/linux.zip -d $DOWNLOAD_DIR
|
||||
|
||||
# Move binaries to the install directory and make them executable
|
||||
sudo cp $DOWNLOAD_DIR/linux/protoc $INSTALL_DIR/
|
||||
sudo cp $DOWNLOAD_DIR/linux/protoc-gen-go $INSTALL_DIR/
|
||||
sudo chmod +x $INSTALL_DIR/protoc
|
||||
sudo chmod +x $INSTALL_DIR/protoc-gen-go
|
||||
|
||||
# Clean up
|
||||
rm -rf $DOWNLOAD_DIR
|
||||
|
||||
echo "OpenIM Protoc tool installed successfully!"
|
||||
echo "Installing OpenIM Protoc tool..."
|
||||
|
||||
# Create temporary directory and download the zip file
|
||||
mkdir -p $DOWNLOAD_DIR
|
||||
wget $PROTOC_DOWNLOAD_URL -O $DOWNLOAD_DIR/linux.zip
|
||||
|
||||
# Unzip the file
|
||||
unzip -o $DOWNLOAD_DIR/linux.zip -d $DOWNLOAD_DIR
|
||||
|
||||
# Move binaries to the install directory and make them executable
|
||||
sudo cp $DOWNLOAD_DIR/linux/protoc $INSTALL_DIR/
|
||||
sudo cp $DOWNLOAD_DIR/linux/protoc-gen-go $INSTALL_DIR/
|
||||
sudo chmod +x $INSTALL_DIR/protoc
|
||||
sudo chmod +x $INSTALL_DIR/protoc-gen-go
|
||||
|
||||
# Clean up
|
||||
rm -rf $DOWNLOAD_DIR
|
||||
|
||||
echo "OpenIM Protoc tool installed successfully!"
|
||||
}
|
||||
|
||||
function uninstall_protobuf {
|
||||
echo "Uninstalling OpenIM Protoc tool..."
|
||||
|
||||
# Removing binaries from the install directory
|
||||
sudo rm -f $INSTALL_DIR/protoc
|
||||
sudo rm -f $INSTALL_DIR/protoc-gen-go
|
||||
|
||||
echo "OpenIM Protoc tool uninstalled successfully!"
|
||||
echo "Uninstalling OpenIM Protoc tool..."
|
||||
|
||||
# Removing binaries from the install directory
|
||||
sudo rm -f $INSTALL_DIR/protoc
|
||||
sudo rm -f $INSTALL_DIR/protoc-gen-go
|
||||
|
||||
echo "OpenIM Protoc tool uninstalled successfully!"
|
||||
}
|
||||
|
||||
function reinstall_protobuf {
|
||||
echo "Reinstalling OpenIM Protoc tool..."
|
||||
uninstall_protobuf
|
||||
install_protobuf
|
||||
echo "Reinstalling OpenIM Protoc tool..."
|
||||
uninstall_protobuf
|
||||
install_protobuf
|
||||
}
|
||||
|
||||
function check_protobuf {
|
||||
echo "Checking for OpenIM Protoc tool installation..."
|
||||
|
||||
which protoc > /dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "OpenIM Protoc tool is installed."
|
||||
else
|
||||
echo "OpenIM Protoc tool is not installed."
|
||||
fi
|
||||
echo "Checking for OpenIM Protoc tool installation..."
|
||||
|
||||
which protoc > /dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "OpenIM Protoc tool is installed."
|
||||
else
|
||||
echo "OpenIM Protoc tool is not installed."
|
||||
fi
|
||||
}
|
||||
|
||||
while [ "$1" != "" ]; do
|
||||
case $1 in
|
||||
-i | --install ) install_protobuf
|
||||
;;
|
||||
-u | --uninstall ) uninstall_protobuf
|
||||
;;
|
||||
-r | --reinstall ) reinstall_protobuf
|
||||
;;
|
||||
-c | --check ) check_protobuf
|
||||
;;
|
||||
-h | --help ) help_message
|
||||
exit
|
||||
;;
|
||||
* ) help_message
|
||||
exit 1
|
||||
esac
|
||||
shift
|
||||
case $1 in
|
||||
-i | --install ) install_protobuf
|
||||
;;
|
||||
-u | --uninstall ) uninstall_protobuf
|
||||
;;
|
||||
-r | --reinstall ) reinstall_protobuf
|
||||
;;
|
||||
-c | --check ) check_protobuf
|
||||
;;
|
||||
-h | --help ) help_message
|
||||
exit
|
||||
;;
|
||||
* ) help_message
|
||||
exit 1
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
+93
-93
@@ -14,38 +14,38 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
# OpenIM Server Installation Script
|
||||
#
|
||||
#
|
||||
# Description:
|
||||
# This script is designed to handle the installation, Is a deployment solution
|
||||
# This script is designed to handle the installation, Is a deployment solution
|
||||
# that uses the Linux systen extension. uninstallation, and
|
||||
# status checking of OpenIM components on the server. OpenIM is a presumed
|
||||
# communication or messaging platform based on the context.
|
||||
#
|
||||
#
|
||||
# Usage:
|
||||
# To utilize this script, you need to invoke it with specific commands
|
||||
# To utilize this script, you need to invoke it with specific commands
|
||||
# and options as detailed below.
|
||||
#
|
||||
#
|
||||
# Commands:
|
||||
# -i, --install : Use this command to initiate the installation of all
|
||||
# -i, --install : Use this command to initiate the installation of all
|
||||
# OpenIM components.
|
||||
# -u, --uninstall : Use this command to uninstall or remove all
|
||||
# -u, --uninstall : Use this command to uninstall or remove all
|
||||
# OpenIM components from the server.
|
||||
# -s, --status : This command can be used to check and report the
|
||||
# -s, --status : This command can be used to check and report the
|
||||
# current operational status of the installed OpenIM components.
|
||||
# -h, --help : For any assistance or to view the available commands,
|
||||
# use this command to display the help menu.
|
||||
#
|
||||
#
|
||||
# Example Usage:
|
||||
# To install all OpenIM components:
|
||||
# ./scripts/install/install.sh -i
|
||||
# or
|
||||
# ./scripts/install/install.sh --install
|
||||
#
|
||||
# ./scripts/install/install.sh -i
|
||||
# or
|
||||
# ./scripts/install/install.sh --install
|
||||
#
|
||||
# Note:
|
||||
# Ensure you have the necessary privileges to execute installation or
|
||||
# uninstallation operations. It's generally recommended to take a backup
|
||||
# uninstallation operations. It's generally recommended to take a backup
|
||||
# before making major changes.
|
||||
#
|
||||
#
|
||||
###############################################################################
|
||||
|
||||
OPENIM_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")"/../.. && pwd -P)
|
||||
@@ -57,99 +57,99 @@ ${OPENIM_ROOT}/scripts/install/test.sh
|
||||
|
||||
# Detailed help function
|
||||
function openim::install::show_help() {
|
||||
echo "OpenIM Installer"
|
||||
echo "Usage: $0 <command> [options]"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " -i, --install Install all OpenIM components."
|
||||
echo " -u, --uninstall Remove all OpenIM components."
|
||||
echo " -s, --status Check the current status of OpenIM components."
|
||||
echo " -h, --help Show this help menu."
|
||||
echo ""
|
||||
echo "Example: "
|
||||
echo " $0 -i Will install all OpenIM components."
|
||||
echo " $0 --install Same as above."
|
||||
echo "OpenIM Installer"
|
||||
echo "Usage: $0 <command> [options]"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " -i, --install Install all OpenIM components."
|
||||
echo " -u, --uninstall Remove all OpenIM components."
|
||||
echo " -s, --status Check the current status of OpenIM components."
|
||||
echo " -h, --help Show this help menu."
|
||||
echo ""
|
||||
echo "Example: "
|
||||
echo " $0 -i Will install all OpenIM components."
|
||||
echo " $0 --install Same as above."
|
||||
}
|
||||
|
||||
function openim::install::install_openim() {
|
||||
openim::common::sudo "mkdir -p ${OPENIM_DATA_DIR} ${OPENIM_INSTALL_DIR} ${OPENIM_CONFIG_DIR} ${OPENIM_LOG_DIR}"
|
||||
openim::log::info "check openim dependency"
|
||||
openim::common::sudo "cp -r ${OPENIM_ROOT}/config/* ${OPENIM_CONFIG_DIR}/"
|
||||
|
||||
${OPENIM_ROOT}/scripts/genconfig.sh ${ENV_FILE} ${OPENIM_ROOT}/deployments/templates/openim.yaml > ${OPENIM_CONFIG_DIR}/config.yaml
|
||||
${OPENIM_ROOT}/scripts/genconfig.sh ${ENV_FILE} ${OPENIM_ROOT}/deployments/templates/prometheus.yml > ${OPENIM_CONFIG_DIR}/prometheus.yml
|
||||
|
||||
openim::util::check_ports ${OPENIM_DEPENDENCY_PORT_LISTARIES[@]}
|
||||
|
||||
${OPENIM_ROOT}/scripts/install/openim-msggateway.sh openim::msggateway::install || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-msgtransfer.sh openim::msgtransfer::install || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-push.sh openim::push::install || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-crontask.sh openim::crontask::install || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-rpc.sh openim::rpc::install || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-api.sh openim::api::install || return 1
|
||||
|
||||
openim::common::sudo "cp -r ${OPENIM_ROOT}/deployments/templates/openim.target /etc/systemd/system/openim.target"
|
||||
openim::common::sudo "systemctl daemon-reload"
|
||||
openim::common::sudo "systemctl restart openim.target"
|
||||
openim::common::sudo "systemctl enable openim.target"
|
||||
openim::log::success "openim install success"
|
||||
openim::common::sudo "mkdir -p ${OPENIM_DATA_DIR} ${OPENIM_INSTALL_DIR} ${OPENIM_CONFIG_DIR} ${OPENIM_LOG_DIR}"
|
||||
openim::log::info "check openim dependency"
|
||||
openim::common::sudo "cp -r ${OPENIM_ROOT}/config/* ${OPENIM_CONFIG_DIR}/"
|
||||
|
||||
${OPENIM_ROOT}/scripts/genconfig.sh ${ENV_FILE} ${OPENIM_ROOT}/deployments/templates/config.yaml > ${OPENIM_CONFIG_DIR}/config.yaml
|
||||
${OPENIM_ROOT}/scripts/genconfig.sh ${ENV_FILE} ${OPENIM_ROOT}/deployments/templates/prometheus.yml > ${OPENIM_CONFIG_DIR}/prometheus.yml
|
||||
|
||||
openim::util::check_ports ${OPENIM_DEPENDENCY_PORT_LISTARIES[@]}
|
||||
|
||||
${OPENIM_ROOT}/scripts/install/openim-msggateway.sh openim::msggateway::install || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-msgtransfer.sh openim::msgtransfer::install || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-push.sh openim::push::install || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-crontask.sh openim::crontask::install || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-rpc.sh openim::rpc::install || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-api.sh openim::api::install || return 1
|
||||
|
||||
openim::common::sudo "cp -r ${OPENIM_ROOT}/deployments/templates/openim.target /etc/systemd/system/openim.target"
|
||||
openim::common::sudo "systemctl daemon-reload"
|
||||
openim::common::sudo "systemctl restart openim.target"
|
||||
openim::common::sudo "systemctl enable openim.target"
|
||||
openim::log::success "openim install success"
|
||||
}
|
||||
|
||||
function openim::uninstall::uninstall_openim() {
|
||||
openim::log::info "uninstall openim"
|
||||
|
||||
${OPENIM_ROOT}/scripts/install/openim-msggateway.sh openim::msggateway::uninstall || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-msgtransfer.sh openim::msgtransfer::uninstall || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-push.sh openim::push::uninstall || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-crontask.sh openim::crontask::uninstall || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-rpc.sh openim::rpc::uninstall || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-api.sh openim::api::uninstall || return 1
|
||||
|
||||
set +o errexit
|
||||
openim::common::sudo "systemctl stop openim.target"
|
||||
openim::common::sudo "systemctl disable openim.target"
|
||||
openim::common::sudo "rm -f /etc/systemd/system/openim.target"
|
||||
set -o errexit
|
||||
openim::log::success "openim uninstall success"
|
||||
openim::log::info "uninstall openim"
|
||||
|
||||
${OPENIM_ROOT}/scripts/install/openim-msggateway.sh openim::msggateway::uninstall || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-msgtransfer.sh openim::msgtransfer::uninstall || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-push.sh openim::push::uninstall || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-crontask.sh openim::crontask::uninstall || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-rpc.sh openim::rpc::uninstall || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-api.sh openim::api::uninstall || return 1
|
||||
|
||||
set +o errexit
|
||||
openim::common::sudo "systemctl stop openim.target"
|
||||
openim::common::sudo "systemctl disable openim.target"
|
||||
openim::common::sudo "rm -f /etc/systemd/system/openim.target"
|
||||
set -o errexit
|
||||
openim::log::success "openim uninstall success"
|
||||
}
|
||||
|
||||
function openim::install::status() {
|
||||
openim::log::info "check openim status"
|
||||
|
||||
${OPENIM_ROOT}/scripts/install/openim-msggateway.sh openim::msggateway::status || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-msgtransfer.sh openim::msgtransfer::status || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-push.sh openim::push::status || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-crontask.sh openim::crontask::status || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-rpc.sh openim::rpc::status || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-api.sh openim::api::status || return 1
|
||||
|
||||
openim::log::success "openim status success"
|
||||
openim::log::info "check openim status"
|
||||
|
||||
${OPENIM_ROOT}/scripts/install/openim-msggateway.sh openim::msggateway::status || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-msgtransfer.sh openim::msgtransfer::status || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-push.sh openim::push::status || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-crontask.sh openim::crontask::status || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-rpc.sh openim::rpc::status || return 1
|
||||
${OPENIM_ROOT}/scripts/install/openim-api.sh openim::api::status || return 1
|
||||
|
||||
openim::log::success "openim status success"
|
||||
}
|
||||
|
||||
# If no arguments are provided, show help
|
||||
if [[ $# -eq 0 ]]; then
|
||||
openim::install::show_help
|
||||
exit 0
|
||||
openim::install::show_help
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Argument parsing to call functions based on user input
|
||||
while (( "$#" )); do
|
||||
case "$1" in
|
||||
-i|--install)
|
||||
openim::install::install_openim
|
||||
shift
|
||||
;;
|
||||
-u|--uninstall)
|
||||
openim::uninstall::uninstall_openim
|
||||
shift
|
||||
;;
|
||||
-s|--status)
|
||||
openim::install::status
|
||||
shift
|
||||
;;
|
||||
-h|--help|*)
|
||||
openim::install::show_help
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
case "$1" in
|
||||
-i|--install)
|
||||
openim::install::install_openim
|
||||
shift
|
||||
;;
|
||||
-u|--uninstall)
|
||||
openim::uninstall::uninstall_openim
|
||||
shift
|
||||
;;
|
||||
-s|--status)
|
||||
openim::install::status
|
||||
shift
|
||||
;;
|
||||
-h|--help|*)
|
||||
openim::install::show_help
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
done
|
||||
@@ -34,55 +34,55 @@ readonly OPENIM_API_SERVICE_TARGETS=(
|
||||
readonly OPENIM_API_SERVICE_LISTARIES=("${OPENIM_API_SERVICE_TARGETS[@]##*/}")
|
||||
|
||||
function openim::api::start() {
|
||||
echo "++ OPENIM_API_SERVICE_LISTARIES: ${OPENIM_API_SERVICE_LISTARIES[@]}"
|
||||
echo "++ OPENIM_API_PORT_LISTARIES: ${OPENIM_API_PORT_LISTARIES[@]}"
|
||||
echo "++ OpenIM API config path: ${OPENIM_API_CONFIG}"
|
||||
|
||||
openim::log::info "Starting ${SERVER_NAME} ..."
|
||||
|
||||
printf "+------------------------+--------------+\n"
|
||||
printf "| Service Name | Port |\n"
|
||||
printf "+------------------------+--------------+\n"
|
||||
|
||||
length=${#OPENIM_API_SERVICE_LISTARIES[@]}
|
||||
|
||||
for ((i=0; i<$length; i++)); do
|
||||
echo "++ OPENIM_API_SERVICE_LISTARIES: ${OPENIM_API_SERVICE_LISTARIES[@]}"
|
||||
echo "++ OPENIM_API_PORT_LISTARIES: ${OPENIM_API_PORT_LISTARIES[@]}"
|
||||
echo "++ OpenIM API config path: ${OPENIM_API_CONFIG}"
|
||||
|
||||
openim::log::info "Starting ${SERVER_NAME} ..."
|
||||
|
||||
printf "+------------------------+--------------+\n"
|
||||
printf "| Service Name | Port |\n"
|
||||
printf "+------------------------+--------------+\n"
|
||||
|
||||
length=${#OPENIM_API_SERVICE_LISTARIES[@]}
|
||||
|
||||
for ((i=0; i<$length; i++)); do
|
||||
printf "| %-22s | %6s |\n" "${OPENIM_API_SERVICE_LISTARIES[$i]}" "${OPENIM_API_PORT_LISTARIES[$i]}"
|
||||
printf "+------------------------+--------------+\n"
|
||||
done
|
||||
# start all api services
|
||||
for ((i = 0; i < ${#OPENIM_API_SERVICE_LISTARIES[*]}; i++)); do
|
||||
done
|
||||
# start all api services
|
||||
for ((i = 0; i < ${#OPENIM_API_SERVICE_LISTARIES[*]}; i++)); do
|
||||
openim::util::stop_services_on_ports ${OPENIM_API_PORT_LISTARIES[$i]}
|
||||
openim::log::info "OpenIM ${OPENIM_API_SERVICE_LISTARIES[$i]} config path: ${OPENIM_API_CONFIG}"
|
||||
|
||||
|
||||
# Get the service and Prometheus ports.
|
||||
OPENIM_API_SERVICE_PORTS=( $(openim::util::list-to-string ${OPENIM_API_PORT_LISTARIES[$i]}) )
|
||||
|
||||
|
||||
# TODO Only one port is supported. An error occurs on multiple ports
|
||||
if [ ${#OPENIM_API_SERVICE_PORTS[@]} -ne 1 ]; then
|
||||
openim::log::error_exit "Set only one port for ${OPENIM_API_SERVICE_LISTARIES[$i]} service."
|
||||
openim::log::error_exit "Set only one port for ${OPENIM_API_SERVICE_LISTARIES[$i]} service."
|
||||
fi
|
||||
|
||||
|
||||
for ((j = 0; j < ${#OPENIM_API_SERVICE_PORTS[@]}; j++)); do
|
||||
openim::log::info "Starting ${OPENIM_API_SERVICE_LISTARIES[$i]} service, port: ${OPENIM_API_SERVICE_PORTS[j]}, binary root: ${OPENIM_OUTPUT_HOSTBIN}/${OPENIM_API_SERVICE_LISTARIES[$i]}"
|
||||
openim::api::start_service "${OPENIM_API_SERVICE_LISTARIES[$i]}" "${OPENIM_API_PORT_LISTARIES[j]}"
|
||||
sleep 2
|
||||
done
|
||||
openim::log::info "Starting ${OPENIM_API_SERVICE_LISTARIES[$i]} service, port: ${OPENIM_API_SERVICE_PORTS[j]}, binary root: ${OPENIM_OUTPUT_HOSTBIN}/${OPENIM_API_SERVICE_LISTARIES[$i]}"
|
||||
openim::api::start_service "${OPENIM_API_SERVICE_LISTARIES[$i]}" "${OPENIM_API_PORT_LISTARIES[j]}"
|
||||
sleep 2
|
||||
done
|
||||
|
||||
OPENIM_API_PORT_STRINGARIES=( $(openim::util::list-to-string ${OPENIM_API_PORT_LISTARIES[@]}) )
|
||||
openim::util::check_ports ${OPENIM_API_PORT_STRINGARIES[@]}
|
||||
done
|
||||
|
||||
OPENIM_API_PORT_STRINGARIES=( $(openim::util::list-to-string ${OPENIM_API_PORT_LISTARIES[@]}) )
|
||||
openim::util::check_ports ${OPENIM_API_PORT_STRINGARIES[@]}
|
||||
}
|
||||
|
||||
function openim::api::start_service() {
|
||||
local binary_name="$1"
|
||||
local service_port="$2"
|
||||
local prometheus_port="$3"
|
||||
|
||||
|
||||
local cmd="${OPENIM_OUTPUT_HOSTBIN}/${binary_name} --port ${service_port} -c ${OPENIM_API_CONFIG}"
|
||||
|
||||
|
||||
nohup ${cmd} >> "${LOG_FILE}" 2>&1 &
|
||||
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
openim::log::error_exit "Failed to start ${binary_name} on port ${service_port}."
|
||||
fi
|
||||
@@ -100,61 +100,61 @@ EOF
|
||||
|
||||
# install openim-api
|
||||
function openim::api::install() {
|
||||
openim::log::info "Installing ${SERVER_NAME} ..."
|
||||
|
||||
pushd "${OPENIM_ROOT}"
|
||||
|
||||
# 1. Build openim-api
|
||||
make build BINS=${SERVER_NAME}
|
||||
openim::common::sudo "cp -r ${OPENIM_OUTPUT_HOSTBIN}/${SERVER_NAME} ${OPENIM_INSTALL_DIR}/${SERVER_NAME}"
|
||||
openim::log::status "${SERVER_NAME} binary: ${OPENIM_INSTALL_DIR}/${SERVER_NAME}/${SERVER_NAME}"
|
||||
|
||||
# 2. Generate and install the openim-api configuration file (config)
|
||||
openim::log::status "${SERVER_NAME} config file: ${OPENIM_CONFIG_DIR}/config.yaml"
|
||||
|
||||
# 3. Create and install the ${SERVER_NAME} systemd unit file
|
||||
echo ${LINUX_PASSWORD} | sudo -S bash -c \
|
||||
"SERVER_NAME=${SERVER_NAME} ./scripts/genconfig.sh ${ENV_FILE} deployments/templates/openim.service > ${SYSTEM_FILE_PATH}"
|
||||
openim::log::status "${SERVER_NAME} systemd file: ${SYSTEM_FILE_PATH}"
|
||||
|
||||
# 4. Start the openim-api service
|
||||
openim::common::sudo "systemctl daemon-reload"
|
||||
openim::common::sudo "systemctl restart ${SERVER_NAME}"
|
||||
openim::common::sudo "systemctl enable ${SERVER_NAME}"
|
||||
openim::api::status || return 1
|
||||
openim::api::info
|
||||
|
||||
openim::log::info "install ${SERVER_NAME} successfully"
|
||||
popd
|
||||
openim::log::info "Installing ${SERVER_NAME} ..."
|
||||
|
||||
pushd "${OPENIM_ROOT}"
|
||||
|
||||
# 1. Build openim-api
|
||||
make build BINS=${SERVER_NAME}
|
||||
openim::common::sudo "cp -r ${OPENIM_OUTPUT_HOSTBIN}/${SERVER_NAME} ${OPENIM_INSTALL_DIR}/${SERVER_NAME}"
|
||||
openim::log::status "${SERVER_NAME} binary: ${OPENIM_INSTALL_DIR}/${SERVER_NAME}/${SERVER_NAME}"
|
||||
|
||||
# 2. Generate and install the openim-api configuration file (config)
|
||||
openim::log::status "${SERVER_NAME} config file: ${OPENIM_CONFIG_DIR}/config.yaml"
|
||||
|
||||
# 3. Create and install the ${SERVER_NAME} systemd unit file
|
||||
echo ${LINUX_PASSWORD} | sudo -S bash -c \
|
||||
"SERVER_NAME=${SERVER_NAME} ./scripts/genconfig.sh ${ENV_FILE} deployments/templates/openim.service > ${SYSTEM_FILE_PATH}"
|
||||
openim::log::status "${SERVER_NAME} systemd file: ${SYSTEM_FILE_PATH}"
|
||||
|
||||
# 4. Start the openim-api service
|
||||
openim::common::sudo "systemctl daemon-reload"
|
||||
openim::common::sudo "systemctl restart ${SERVER_NAME}"
|
||||
openim::common::sudo "systemctl enable ${SERVER_NAME}"
|
||||
openim::api::status || return 1
|
||||
openim::api::info
|
||||
|
||||
openim::log::info "install ${SERVER_NAME} successfully"
|
||||
popd
|
||||
}
|
||||
|
||||
# Unload
|
||||
function openim::api::uninstall() {
|
||||
openim::log::info "Uninstalling ${SERVER_NAME} ..."
|
||||
|
||||
set +o errexit
|
||||
openim::common::sudo "systemctl stop ${SERVER_NAME}"
|
||||
openim::common::sudo "systemctl disable ${SERVER_NAME}"
|
||||
openim::common::sudo "rm -f ${OPENIM_INSTALL_DIR}/${SERVER_NAME}"
|
||||
openim::common::sudo "rm -f ${OPENIM_CONFIG_DIR}/${SERVER_NAME}.yaml"
|
||||
openim::common::sudo "rm -f /etc/systemd/system/${SERVER_NAME}.service"
|
||||
set -o errexit
|
||||
openim::log::info "uninstall ${SERVER_NAME} successfully"
|
||||
openim::log::info "Uninstalling ${SERVER_NAME} ..."
|
||||
|
||||
set +o errexit
|
||||
openim::common::sudo "systemctl stop ${SERVER_NAME}"
|
||||
openim::common::sudo "systemctl disable ${SERVER_NAME}"
|
||||
openim::common::sudo "rm -f ${OPENIM_INSTALL_DIR}/${SERVER_NAME}"
|
||||
openim::common::sudo "rm -f ${OPENIM_CONFIG_DIR}/${SERVER_NAME}.yaml"
|
||||
openim::common::sudo "rm -f /etc/systemd/system/${SERVER_NAME}.service"
|
||||
set -o errexit
|
||||
openim::log::info "uninstall ${SERVER_NAME} successfully"
|
||||
}
|
||||
|
||||
# Status Check
|
||||
function openim::api::status() {
|
||||
openim::log::info "Checking ${SERVER_NAME} status ..."
|
||||
|
||||
# Check the running status of the ${SERVER_NAME}. If active (running) is displayed, the ${SERVER_NAME} is started successfully.
|
||||
systemctl status ${SERVER_NAME}|grep -q 'active' || {
|
||||
openim::log::error "${SERVER_NAME} failed to start, maybe not installed properly"
|
||||
return 1
|
||||
}
|
||||
|
||||
openim::util::check_ports ${OPENIM_API_PORT_LISTARIES[@]}
|
||||
openim::log::info "Checking ${SERVER_NAME} status ..."
|
||||
|
||||
# Check the running status of the ${SERVER_NAME}. If active (running) is displayed, the ${SERVER_NAME} is started successfully.
|
||||
systemctl status ${SERVER_NAME}|grep -q 'active' || {
|
||||
openim::log::error "${SERVER_NAME} failed to start, maybe not installed properly"
|
||||
return 1
|
||||
}
|
||||
|
||||
openim::util::check_ports ${OPENIM_API_PORT_LISTARIES[@]}
|
||||
}
|
||||
|
||||
if [[ "$*" =~ openim::api:: ]];then
|
||||
eval $*
|
||||
eval $*
|
||||
fi
|
||||
|
||||
@@ -13,12 +13,12 @@
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
#
|
||||
# OpenIM CronTask Control Script
|
||||
#
|
||||
#
|
||||
# Description:
|
||||
# This script provides a control interface for the OpenIM CronTask service within a Linux environment. It supports two installation methods: installation via function calls to systemctl, and direct installation through background processes.
|
||||
#
|
||||
#
|
||||
# Features:
|
||||
# 1. Robust error handling leveraging Bash built-ins such as 'errexit', 'nounset', and 'pipefail'.
|
||||
# 2. Capability to source common utility functions and configurations, ensuring environmental consistency.
|
||||
@@ -30,13 +30,13 @@
|
||||
# 1. Direct Script Execution:
|
||||
# This will start the OpenIM CronTask directly through a background process.
|
||||
# Example: ./openim-crontask.sh openim::crontask::start
|
||||
#
|
||||
#
|
||||
# 2. Controlling through Functions for systemctl operations:
|
||||
# Specific operations like installation, uninstallation, and status check can be executed by passing the respective function name as an argument to the script.
|
||||
# Example: ./openim-crontask.sh openim::crontask::install
|
||||
#
|
||||
#
|
||||
# Note: Ensure that the appropriate permissions and environmental variables are set prior to script execution.
|
||||
#
|
||||
#
|
||||
|
||||
OPENIM_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")"/../.. && pwd -P)
|
||||
[[ -z ${COMMON_SOURCED} ]] && source "${OPENIM_ROOT}"/scripts/install/common.sh
|
||||
@@ -44,14 +44,14 @@ OPENIM_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")"/../.. && pwd -P)
|
||||
SERVER_NAME="openim-crontask"
|
||||
|
||||
function openim::crontask::start() {
|
||||
openim::log::info "Start OpenIM Cron, binary root: ${SERVER_NAME}"
|
||||
openim::log::status "Start OpenIM Cron, path: ${OPENIM_CRONTASK_BINARY}"
|
||||
|
||||
openim::util::stop_services_with_name ${OPENIM_CRONTASK_BINARY}
|
||||
|
||||
openim::log::status "start cron_task process, path: ${OPENIM_CRONTASK_BINARY}"
|
||||
nohup ${OPENIM_CRONTASK_BINARY} -c ${OPENIM_PUSH_CONFIG} >> ${LOG_FILE} 2>&1 &
|
||||
openim::util::check_process_names ${SERVER_NAME}
|
||||
openim::log::info "Start OpenIM Cron, binary root: ${SERVER_NAME}"
|
||||
openim::log::status "Start OpenIM Cron, path: ${OPENIM_CRONTASK_BINARY}"
|
||||
|
||||
openim::util::stop_services_with_name ${OPENIM_CRONTASK_BINARY}
|
||||
|
||||
openim::log::status "start cron_task process, path: ${OPENIM_CRONTASK_BINARY}"
|
||||
nohup ${OPENIM_CRONTASK_BINARY} -c ${OPENIM_PUSH_CONFIG} >> ${LOG_FILE} 2>&1 &
|
||||
openim::util::check_process_names ${SERVER_NAME}
|
||||
}
|
||||
|
||||
###################################### Linux Systemd ######################################
|
||||
@@ -67,28 +67,28 @@ EOF
|
||||
# install openim-crontask
|
||||
function openim::crontask::install() {
|
||||
pushd "${OPENIM_ROOT}"
|
||||
|
||||
|
||||
# 1. Build openim-crontask
|
||||
make build BINS=${SERVER_NAME}
|
||||
|
||||
|
||||
openim::common::sudo "cp -r ${OPENIM_OUTPUT_HOSTBIN}/${SERVER_NAME} ${OPENIM_INSTALL_DIR}/${SERVER_NAME}"
|
||||
openim::log::status "${SERVER_NAME} binary: ${OPENIM_INSTALL_DIR}/${SERVER_NAME}/${SERVER_NAME}"
|
||||
|
||||
|
||||
# 2. Generate and install the openim-crontask configuration file (openim-crontask.yaml)
|
||||
openim::log::status "${SERVER_NAME} config file: ${OPENIM_CONFIG_DIR}/config.yaml"
|
||||
|
||||
|
||||
# 3. Create and install the ${SERVER_NAME} systemd unit file
|
||||
echo ${LINUX_PASSWORD} | sudo -S bash -c \
|
||||
"SERVER_NAME=${SERVER_NAME} ./scripts/genconfig.sh ${ENV_FILE} deployments/templates/openim.service > ${SYSTEM_FILE_PATH}"
|
||||
"SERVER_NAME=${SERVER_NAME} ./scripts/genconfig.sh ${ENV_FILE} deployments/templates/openim.service > ${SYSTEM_FILE_PATH}"
|
||||
openim::log::status "${SERVER_NAME} systemd file: ${SYSTEM_FILE_PATH}"
|
||||
|
||||
|
||||
# 4. Start the openim-crontask service
|
||||
openim::common::sudo "systemctl daemon-reload"
|
||||
openim::common::sudo "systemctl restart ${SERVER_NAME}"
|
||||
openim::common::sudo "systemctl enable ${SERVER_NAME}"
|
||||
openim::crontask::status || return 1
|
||||
openim::crontask::info
|
||||
|
||||
|
||||
openim::log::info "install ${SERVER_NAME} successfully"
|
||||
popd
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
#
|
||||
# Description:
|
||||
# This script manages the man pages for the OpenIM software suite.
|
||||
# It provides facilities to install, uninstall, and verify the
|
||||
# It provides facilities to install, uninstall, and verify the
|
||||
# installation status of the man pages related to OpenIM components.
|
||||
#
|
||||
# Usage:
|
||||
@@ -26,15 +26,15 @@
|
||||
# ./openim-man.sh openim::man::status - Check installation status
|
||||
#
|
||||
# Dependencies:
|
||||
# - Assumes there's a common.sh in ""${OPENIM_ROOT}"/scripts/install/"
|
||||
# - Assumes there's a common.sh in "${OPENIM_ROOT}/scripts/install/"
|
||||
# containing shared functions and variables.
|
||||
# - Relies on the script ""${OPENIM_ROOT}"/scripts/update-generated-docs.sh"
|
||||
# - Relies on the script "${OPENIM_ROOT}/scripts/update-generated-docs.sh"
|
||||
# to generate the man pages.
|
||||
#
|
||||
# Notes:
|
||||
# - This script must be run with appropriate permissions to modify the
|
||||
# - This script must be run with appropriate permissions to modify the
|
||||
# system man directories.
|
||||
# - Always ensure you're in the script's directory or provide the correct
|
||||
# - Always ensure you're in the script's directory or provide the correct
|
||||
# path when executing.
|
||||
################################################################################
|
||||
|
||||
@@ -54,43 +54,43 @@ EOF
|
||||
|
||||
# Install the man pages for openim
|
||||
function openim::man::install() {
|
||||
# Navigate to the openim root directory
|
||||
pushd "${OPENIM_ROOT}" > /dev/null
|
||||
|
||||
# Generate man pages for each component
|
||||
""${OPENIM_ROOT}"/scripts/update-generated-docs.sh"
|
||||
openim::common::sudo "cp docs/man/man1/* /usr/share/man/man1/"
|
||||
|
||||
# Verify installation status
|
||||
if openim::man::status; then
|
||||
openim::log::info "Installed openim-server man page successfully"
|
||||
openim::man::info
|
||||
fi
|
||||
|
||||
# Return to the original directory
|
||||
popd > /dev/null
|
||||
# Navigate to the openim root directory
|
||||
pushd "${OPENIM_ROOT}" > /dev/null
|
||||
|
||||
# Generate man pages for each component
|
||||
"${OPENIM_ROOT}/scripts/update-generated-docs.sh"
|
||||
openim::common::sudo "cp docs/man/man1/* /usr/share/man/man1/"
|
||||
|
||||
# Verify installation status
|
||||
if openim::man::status; then
|
||||
openim::log::info "Installed openim-server man page successfully"
|
||||
openim::man::info
|
||||
fi
|
||||
|
||||
# Return to the original directory
|
||||
popd > /dev/null
|
||||
}
|
||||
|
||||
# Uninstall the man pages for openim
|
||||
function openim::man::uninstall() {
|
||||
# Turn off exit-on-error temporarily to handle non-existing files gracefully
|
||||
set +o errexit
|
||||
openim::common::sudo "rm -f /usr/share/man/man1/openim-*"
|
||||
set -o errexit
|
||||
|
||||
openim::log::info "Uninstalled openim man pages successfully"
|
||||
# Turn off exit-on-error temporarily to handle non-existing files gracefully
|
||||
set +o errexit
|
||||
openim::common::sudo "rm -f /usr/share/man/man1/openim-*"
|
||||
set -o errexit
|
||||
|
||||
openim::log::info "Uninstalled openim man pages successfully"
|
||||
}
|
||||
|
||||
# Check the installation status of the man pages
|
||||
function openim::man::status() {
|
||||
if ! ls /usr/share/man/man1/openim-* &> /dev/null; then
|
||||
openim::log::error "OpenIM man files not found. Perhaps they were not installed correctly."
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
if ! ls /usr/share/man/man1/openim-* &> /dev/null; then
|
||||
openim::log::error "OpenIM man files not found. Perhaps they were not installed correctly."
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
# Execute the appropriate function based on the given arguments
|
||||
if [[ "$*" =~ openim::man:: ]]; then
|
||||
eval "$*"
|
||||
eval "$*"
|
||||
fi
|
||||
|
||||
@@ -26,19 +26,19 @@ openim::util::set_max_fd 200000
|
||||
SERVER_NAME="openim-msggateway"
|
||||
|
||||
function openim::msggateway::start() {
|
||||
openim::log::info "Start OpenIM Msggateway, binary root: ${SERVER_NAME}"
|
||||
openim::log::status "Start OpenIM Msggateway, path: ${OPENIM_MSGGATEWAY_BINARY}"
|
||||
|
||||
openim::util::stop_services_with_name ${OPENIM_MSGGATEWAY_BINARY}
|
||||
|
||||
# OpenIM message gateway service port
|
||||
OPENIM_MESSAGE_GATEWAY_PORTS=$(openim::util::list-to-string ${OPENIM_MESSAGE_GATEWAY_PORT} )
|
||||
openim::log::info "Start OpenIM Msggateway, binary root: ${SERVER_NAME}"
|
||||
openim::log::status "Start OpenIM Msggateway, path: ${OPENIM_MSGGATEWAY_BINARY}"
|
||||
|
||||
openim::util::stop_services_with_name ${OPENIM_MSGGATEWAY_BINARY}
|
||||
|
||||
# OpenIM message gateway service port
|
||||
OPENIM_MESSAGE_GATEWAY_PORTS=$(openim::util::list-to-string ${OPENIM_MESSAGE_GATEWAY_PORT} )
|
||||
read -a OPENIM_MSGGATEWAY_PORTS_ARRAY <<< ${OPENIM_MESSAGE_GATEWAY_PORTS}
|
||||
openim::util::stop_services_on_ports ${OPENIM_MSGGATEWAY_PORTS_ARRAY[*]}
|
||||
# OpenIM WS port
|
||||
OPENIM_WS_PORTS=$(openim::util::list-to-string ${OPENIM_WS_PORT} )
|
||||
read -a OPENIM_WS_PORTS_ARRAY <<< ${OPENIM_WS_PORTS}
|
||||
|
||||
|
||||
# Message Gateway Prometheus port of the service
|
||||
MSG_GATEWAY_PROM_PORTS=$(openim::util::list-to-string ${MSG_GATEWAY_PROM_PORT} )
|
||||
read -a MSG_GATEWAY_PROM_PORTS_ARRAY <<< ${MSG_GATEWAY_PROM_PORTS}
|
||||
@@ -123,7 +123,7 @@ function openim::msggateway::status() {
|
||||
# Check the running status of the ${SERVER_NAME}. If active (running) is displayed, the ${SERVER_NAME} is started successfully.
|
||||
systemctl status ${SERVER_NAME}|grep -q 'active' || {
|
||||
openim::log::error "${SERVER_NAME} failed to start, maybe not installed properly"
|
||||
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
# Use:
|
||||
# ./scripts/install/openim-msgtransfer.sh openim::msgtransfer::start
|
||||
|
||||
# Common utilities, variables and checks for all build scripts.
|
||||
set -o errexit
|
||||
@@ -26,54 +28,59 @@ openim::util::set_max_fd 200000
|
||||
SERVER_NAME="openim-msgtransfer"
|
||||
|
||||
function openim::msgtransfer::start() {
|
||||
openim::log::info "Start OpenIM Msggateway, binary root: ${SERVER_NAME}"
|
||||
openim::log::status "Start OpenIM Msggateway, path: ${OPENIM_MSGTRANSFER_BINARY}"
|
||||
|
||||
openim::util::stop_services_with_name ${OPENIM_MSGTRANSFER_BINARY}
|
||||
|
||||
# Message Transfer Prometheus port list
|
||||
MSG_TRANSFER_PROM_PORTS=(openim::util::list-to-string ${MSG_TRANSFER_PROM_PORT} )
|
||||
|
||||
openim::log::status "OpenIM Prometheus ports: ${MSG_TRANSFER_PROM_PORTS[*]}"
|
||||
|
||||
openim::log::status "OpenIM Msggateway config path: ${OPENIM_MSGTRANSFER_CONFIG}"
|
||||
|
||||
openim::log::info "openim maggateway num: ${OPENIM_MSGGATEWAY_NUM}"
|
||||
|
||||
if [ "${OPENIM_MSGGATEWAY_NUM}" -lt 1 ]; then
|
||||
openim::log::info "Start OpenIM Msggateway, binary root: ${SERVER_NAME}"
|
||||
openim::log::status "Start OpenIM Msggateway, path: ${OPENIM_MSGTRANSFER_BINARY}"
|
||||
|
||||
openim::util::stop_services_with_name ${OPENIM_MSGTRANSFER_BINARY}
|
||||
|
||||
# Message Transfer Prometheus port list
|
||||
MSG_TRANSFER_PROM_PORTS=(openim::util::list-to-string ${MSG_TRANSFER_PROM_PORT} )
|
||||
|
||||
openim::log::status "OpenIM Prometheus ports: ${MSG_TRANSFER_PROM_PORTS[*]}"
|
||||
|
||||
openim::log::status "OpenIM Msggateway config path: ${OPENIM_MSGTRANSFER_CONFIG}"
|
||||
|
||||
openim::log::info "openim maggateway num: ${OPENIM_MSGGATEWAY_NUM}"
|
||||
|
||||
if [ "${OPENIM_MSGGATEWAY_NUM}" -lt 1 ]; then
|
||||
opeim::log::error_exit "OPENIM_MSGGATEWAY_NUM must be greater than 0"
|
||||
fi
|
||||
|
||||
if [ ${OPENIM_MSGGATEWAY_NUM} -ne $((${#MSG_TRANSFER_PROM_PORTS[@]} - 1)) ]; then
|
||||
fi
|
||||
|
||||
if [ ${OPENIM_MSGGATEWAY_NUM} -ne $((${#MSG_TRANSFER_PROM_PORTS[@]} - 1)) ]; then
|
||||
openim::log::error_exit "OPENIM_MSGGATEWAY_NUM must be equal to the number of MSG_TRANSFER_PROM_PORTS"
|
||||
fi
|
||||
|
||||
for (( i=0; i<$OPENIM_MSGGATEWAY_NUM; i++ )) do
|
||||
openim::log::info "prometheus port: ${MSG_TRANSFER_PROM_PORTS[$i]}"
|
||||
PROMETHEUS_PORT_OPTION=""
|
||||
if [[ -n "${OPENIM_PROMETHEUS_PORTS[$i]}" ]]; then
|
||||
PROMETHEUS_PORT_OPTION="--prometheus_port ${OPENIM_PROMETHEUS_PORTS[$i]}"
|
||||
fi
|
||||
|
||||
for (( i=0; i<$OPENIM_MSGGATEWAY_NUM; i++ )) do
|
||||
openim::log::info "prometheus port: ${MSG_TRANSFER_PROM_PORTS[$i]}"
|
||||
PROMETHEUS_PORT_OPTION=""
|
||||
if [[ -n "${OPENIM_PROMETHEUS_PORTS[$i]}" ]]; then
|
||||
PROMETHEUS_PORT_OPTION="--prometheus_port ${OPENIM_PROMETHEUS_PORTS[$i]}"
|
||||
fi
|
||||
nohup ${OPENIM_MSGTRANSFER_BINARY} ${PROMETHEUS_PORT_OPTION} -c ${OPENIM_MSGTRANSFER_CONFIG} -n ${i}>> ${LOG_FILE} 2>&1 &
|
||||
done
|
||||
|
||||
openim::util::check_process_names "${OPENIM_OUTPUT_HOSTBIN}/${SERVER_NAME}"
|
||||
nohup ${OPENIM_MSGTRANSFER_BINARY} ${PROMETHEUS_PORT_OPTION} -c ${OPENIM_MSGTRANSFER_CONFIG} -n ${i}>> ${LOG_FILE} 2>&1 &
|
||||
done
|
||||
|
||||
openim::util::check_process_names "${OPENIM_OUTPUT_HOSTBIN}/${SERVER_NAME}"
|
||||
}
|
||||
|
||||
function openim::msgtransfer::check() {
|
||||
PIDS=$(pgrep -f "${OPENIM_OUTPUT_HOSTBIN}/openim-msgtransfer")
|
||||
|
||||
NUM_PROCESSES=$(echo "$PIDS" | wc -l)
|
||||
# NUM_PROCESSES=$(($NUM_PROCESSES - 1))
|
||||
|
||||
if [ "$NUM_PROCESSES" -eq "$OPENIM_MSGGATEWAY_NUM" ]; then
|
||||
openim::log::info "Found $OPENIM_MSGGATEWAY_NUM processes named $OPENIM_OUTPUT_HOSTBIN"
|
||||
for PID in $PIDS; do
|
||||
PIDS=$(pgrep -f "${OPENIM_OUTPUT_HOSTBIN}/openim-msgtransfer")
|
||||
|
||||
NUM_PROCESSES=$(echo "$PIDS" | wc -l)
|
||||
|
||||
if [ "$NUM_PROCESSES" -eq "$OPENIM_MSGGATEWAY_NUM" ]; then
|
||||
openim::log::info "Found $OPENIM_MSGGATEWAY_NUM processes named $OPENIM_OUTPUT_HOSTBIN"
|
||||
for PID in $PIDS; do
|
||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
ps -p $PID -o pid,cmd
|
||||
done
|
||||
else
|
||||
openim::log::error_exit "Expected $OPENIM_MSGGATEWAY_NUM openim msgtransfer processes, but found $NUM_PROCESSES msgtransfer processes."
|
||||
fi
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
ps -p $PID -o pid,comm
|
||||
else
|
||||
openim::log::error "Unsupported OS type: $OSTYPE"
|
||||
fi
|
||||
done
|
||||
else
|
||||
openim::log::error_exit "Expected $OPENIM_MSGGATEWAY_NUM openim msgtransfer processes, but found $NUM_PROCESSES msgtransfer processes."
|
||||
fi
|
||||
}
|
||||
|
||||
###################################### Linux Systemd ######################################
|
||||
@@ -89,30 +96,30 @@ EOF
|
||||
# install openim-msgtransfer
|
||||
function openim::msgtransfer::install() {
|
||||
pushd "${OPENIM_ROOT}"
|
||||
|
||||
|
||||
# 1. Build openim-msgtransfer
|
||||
make build BINS=${SERVER_NAME}
|
||||
|
||||
|
||||
openim::common::sudo "cp -r ${OPENIM_OUTPUT_HOSTBIN}/${SERVER_NAME} ${OPENIM_INSTALL_DIR}/${SERVER_NAME}"
|
||||
openim::log::status "${SERVER_NAME} binary: ${OPENIM_INSTALL_DIR}/${SERVER_NAME}/${SERVER_NAME}"
|
||||
|
||||
|
||||
openim::log::status "${SERVER_NAME} binary: ${OPENIM_INSTALL_DIR}/bin/${SERVER_NAME}"
|
||||
|
||||
|
||||
# 2. Generate and install the openim-msgtransfer configuration file (openim-msgtransfer.yaml)
|
||||
# nono
|
||||
|
||||
|
||||
# 3. Create and install the ${SERVER_NAME} systemd unit file
|
||||
echo ${LINUX_PASSWORD} | sudo -S bash -c \
|
||||
"SERVER_NAME=${SERVER_NAME} ./scripts/genconfig.sh ${ENV_FILE} deployments/templates/openim.service > ${SYSTEM_FILE_PATH}"
|
||||
"SERVER_NAME=${SERVER_NAME} ./scripts/genconfig.sh ${ENV_FILE} deployments/templates/openim.service > ${SYSTEM_FILE_PATH}"
|
||||
openim::log::status "${SERVER_NAME} systemd file: ${SYSTEM_FILE_PATH}"
|
||||
|
||||
|
||||
# 4. Start the openim-msgtransfer service
|
||||
openim::common::sudo "systemctl daemon-reload"
|
||||
openim::common::sudo "systemctl restart ${SERVER_NAME}"
|
||||
openim::common::sudo "systemctl enable ${SERVER_NAME}"
|
||||
openim::msgtransfer::status || return 1
|
||||
openim::msgtransfer::info
|
||||
|
||||
|
||||
openim::log::info "install ${SERVER_NAME} successfully"
|
||||
popd
|
||||
}
|
||||
|
||||
@@ -14,10 +14,10 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
# OpenIM Push Control Script
|
||||
#
|
||||
#
|
||||
# Description:
|
||||
# This script provides a control interface for the OpenIM Push service within a Linux environment. It supports two installation methods: installation via function calls to systemctl, and direct installation through background processes.
|
||||
#
|
||||
#
|
||||
# Features:
|
||||
# 1. Robust error handling leveraging Bash built-ins such as 'errexit', 'nounset', and 'pipefail'.
|
||||
# 2. Capability to source common utility functions and configurations, ensuring environmental consistency.
|
||||
@@ -29,7 +29,7 @@
|
||||
# 1. Direct Script Execution:
|
||||
# This will start the OpenIM push directly through a background process.
|
||||
# Example: ./openim-push.sh
|
||||
#
|
||||
#
|
||||
# 2. Controlling through Functions for systemctl operations:
|
||||
# Specific operations like installation, uninstallation, and status check can be executed by passing the respective function name as an argument to the script.
|
||||
# Example: ./openim-push.sh openim::push::install
|
||||
@@ -39,7 +39,7 @@
|
||||
# export OPENIM_PUSH_PORT="9090 9091 9092"
|
||||
#
|
||||
# Note: Ensure that the appropriate permissions and environmental variables are set prior to script execution.
|
||||
#
|
||||
#
|
||||
set -o errexit
|
||||
set +o nounset
|
||||
set -o pipefail
|
||||
@@ -50,30 +50,30 @@ OPENIM_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")"/../.. && pwd -P)
|
||||
SERVER_NAME="openim-push"
|
||||
|
||||
function openim::push::start() {
|
||||
openim::log::status "Start OpenIM Push, binary root: ${SERVER_NAME}"
|
||||
openim::log::info "Start OpenIM Push, path: ${OPENIM_PUSH_BINARY}"
|
||||
|
||||
openim::log::status "prepare start push process, path: ${OPENIM_PUSH_BINARY}"
|
||||
openim::log::status "prepare start push process, port: ${OPENIM_PUSH_PORT}, prometheus port: ${PUSH_PROM_PORT}"
|
||||
|
||||
OPENIM_PUSH_PORTS_ARRAY=$(openim::util::list-to-string ${OPENIM_PUSH_PORT} )
|
||||
PUSH_PROM_PORTS_ARRAY=$(openim::util::list-to-string ${PUSH_PROM_PORT} )
|
||||
|
||||
openim::util::stop_services_with_name ${SERVER_NAME}
|
||||
|
||||
openim::log::status "push port list: ${OPENIM_PUSH_PORTS_ARRAY[@]}"
|
||||
openim::log::status "prometheus port list: ${PUSH_PROM_PORTS_ARRAY[@]}"
|
||||
|
||||
if [ ${#OPENIM_PUSH_PORTS_ARRAY[@]} -ne ${#PUSH_PROM_PORTS_ARRAY[@]} ]; then
|
||||
openim::log::error_exit "The length of the two port lists is different!"
|
||||
fi
|
||||
|
||||
for (( i=0; i<${#OPENIM_PUSH_PORTS_ARRAY[@]}; i++ )); do
|
||||
openim::log::info "start push process, port: ${OPENIM_PUSH_PORTS_ARRAY[$i]}, prometheus port: ${PUSH_PROM_PORTS_ARRAY[$i]}"
|
||||
nohup ${OPENIM_PUSH_BINARY} --port ${OPENIM_PUSH_PORTS_ARRAY[$i]} -c ${OPENIM_PUSH_CONFIG} --prometheus_port ${PUSH_PROM_PORTS_ARRAY[$i]} >> ${LOG_FILE} 2>&1 &
|
||||
done
|
||||
|
||||
openim::util::check_process_names ${SERVER_NAME}
|
||||
openim::log::status "Start OpenIM Push, binary root: ${SERVER_NAME}"
|
||||
openim::log::info "Start OpenIM Push, path: ${OPENIM_PUSH_BINARY}"
|
||||
|
||||
openim::log::status "prepare start push process, path: ${OPENIM_PUSH_BINARY}"
|
||||
openim::log::status "prepare start push process, port: ${OPENIM_PUSH_PORT}, prometheus port: ${PUSH_PROM_PORT}"
|
||||
|
||||
OPENIM_PUSH_PORTS_ARRAY=$(openim::util::list-to-string ${OPENIM_PUSH_PORT} )
|
||||
PUSH_PROM_PORTS_ARRAY=$(openim::util::list-to-string ${PUSH_PROM_PORT} )
|
||||
|
||||
openim::util::stop_services_with_name ${SERVER_NAME}
|
||||
|
||||
openim::log::status "push port list: ${OPENIM_PUSH_PORTS_ARRAY[@]}"
|
||||
openim::log::status "prometheus port list: ${PUSH_PROM_PORTS_ARRAY[@]}"
|
||||
|
||||
if [ ${#OPENIM_PUSH_PORTS_ARRAY[@]} -ne ${#PUSH_PROM_PORTS_ARRAY[@]} ]; then
|
||||
openim::log::error_exit "The length of the two port lists is different!"
|
||||
fi
|
||||
|
||||
for (( i=0; i<${#OPENIM_PUSH_PORTS_ARRAY[@]}; i++ )); do
|
||||
openim::log::info "start push process, port: ${OPENIM_PUSH_PORTS_ARRAY[$i]}, prometheus port: ${PUSH_PROM_PORTS_ARRAY[$i]}"
|
||||
nohup ${OPENIM_PUSH_BINARY} --port ${OPENIM_PUSH_PORTS_ARRAY[$i]} -c ${OPENIM_PUSH_CONFIG} --prometheus_port ${PUSH_PROM_PORTS_ARRAY[$i]} >> ${LOG_FILE} 2>&1 &
|
||||
done
|
||||
|
||||
openim::util::check_process_names ${SERVER_NAME}
|
||||
}
|
||||
|
||||
###################################### Linux Systemd ######################################
|
||||
@@ -89,27 +89,27 @@ EOF
|
||||
# install openim-push
|
||||
function openim::push::install() {
|
||||
pushd "${OPENIM_ROOT}"
|
||||
|
||||
|
||||
# 1. Build openim-push
|
||||
make build BINS=${SERVER_NAME}
|
||||
openim::common::sudo "cp -r ${OPENIM_OUTPUT_HOSTBIN}/${SERVER_NAME} ${OPENIM_INSTALL_DIR}/${SERVER_NAME}"
|
||||
openim::log::status "${SERVER_NAME} binary: ${OPENIM_INSTALL_DIR}/${SERVER_NAME}/${SERVER_NAME}"
|
||||
|
||||
|
||||
# 2. Generate and install the openim-push configuration file (config)
|
||||
openim::log::status "${SERVER_NAME} config file: ${OPENIM_CONFIG_DIR}/config.yaml"
|
||||
|
||||
|
||||
# 3. Create and install the ${SERVER_NAME} systemd unit file
|
||||
echo ${LINUX_PASSWORD} | sudo -S bash -c \
|
||||
"SERVER_NAME=${SERVER_NAME} ./scripts/genconfig.sh ${ENV_FILE} deployments/templates/openim.service > ${SYSTEM_FILE_PATH}"
|
||||
"SERVER_NAME=${SERVER_NAME} ./scripts/genconfig.sh ${ENV_FILE} deployments/templates/openim.service > ${SYSTEM_FILE_PATH}"
|
||||
openim::log::status "${SERVER_NAME} systemd file: ${SYSTEM_FILE_PATH}"
|
||||
|
||||
|
||||
# 4. Start the openim-push service
|
||||
openim::common::sudo "systemctl daemon-reload"
|
||||
openim::common::sudo "systemctl restart ${SERVER_NAME}"
|
||||
openim::common::sudo "systemctl enable ${SERVER_NAME}"
|
||||
openim::push::status || return 1
|
||||
openim::push::info
|
||||
|
||||
|
||||
openim::log::info "install ${SERVER_NAME} successfully"
|
||||
popd
|
||||
}
|
||||
@@ -133,7 +133,7 @@ function openim::push::status() {
|
||||
openim::log::error "${SERVER_NAME} failed to start, maybe not installed properly"
|
||||
return 1
|
||||
}
|
||||
|
||||
|
||||
# The listening port is hardcode in the configuration file
|
||||
if echo | telnet ${OPENIM_MSGGATEWAY_HOST} ${OPENIM_PUSH_PORT} 2>&1|grep refused &>/dev/null;then # Assuming a different port for push
|
||||
openim::log::error "cannot access health check port, ${SERVER_NAME} maybe not startup"
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
# OpenIM RPC Service Control Script
|
||||
#
|
||||
#
|
||||
# Description:
|
||||
# This script provides a control interface for the OpenIM RPC service within a Linux environment. It offers functionalities to start multiple RPC services, each denoted by their respective names under openim::rpc::service_name.
|
||||
#
|
||||
#
|
||||
# Features:
|
||||
# 1. Robust error handling using Bash built-ins like 'errexit', 'nounset', and 'pipefail'.
|
||||
# 2. The capability to source common utility functions and configurations to ensure uniform environmental settings.
|
||||
@@ -123,12 +123,13 @@ function openim::rpc::start() {
|
||||
for ((i = 0; i < ${#OPENIM_RPC_SERVICE_LISTARIES[*]}; i++)); do
|
||||
# openim::util::stop_services_with_name ${OPENIM_RPC_SERVICE_LISTARIES
|
||||
openim::util::stop_services_on_ports ${OPENIM_RPC_PORT_LISTARIES[$i]}
|
||||
|
||||
openim::log::info "OpenIM ${OPENIM_RPC_SERVICE_LISTARIES[$i]} config path: ${OPENIM_RPC_CONFIG}"
|
||||
|
||||
|
||||
# Get the service and Prometheus ports.
|
||||
OPENIM_RPC_SERVICE_PORTS=( $(openim::util::list-to-string ${OPENIM_RPC_PORT_LISTARIES[$i]}) )
|
||||
read -a OPENIM_RPC_SERVICE_PORTS_ARRAY <<< ${OPENIM_RPC_SERVICE_PORTS}
|
||||
|
||||
|
||||
OPENIM_RPC_PROM_PORTS=( $(openim::util::list-to-string ${OPENIM_RPC_PROM_PORT_LISTARIES[$i]}) )
|
||||
read -a OPENIM_RPC_PROM_PORTS_ARRAY <<< ${OPENIM_RPC_PROM_PORTS}
|
||||
|
||||
@@ -138,7 +139,7 @@ function openim::rpc::start() {
|
||||
done
|
||||
done
|
||||
|
||||
sleep 1
|
||||
sleep 5
|
||||
|
||||
openim::util::check_ports ${OPENIM_RPC_PORT_TARGETS[@]}
|
||||
# openim::util::check_ports ${OPENIM_RPC_PROM_PORT_TARGETS[@]}
|
||||
|
||||
@@ -18,9 +18,9 @@
|
||||
#
|
||||
# Description:
|
||||
# This script is responsible for managing the lifecycle of OpenIM tools, which include starting, stopping,
|
||||
# and handling pre and post operations. It's designed to be modular and extensible, ensuring that the
|
||||
# and handling pre and post operations. It's designed to be modular and extensible, ensuring that the
|
||||
# individual operations can be managed separately, and integrated seamlessly with Linux systemd.
|
||||
#
|
||||
#
|
||||
# Features:
|
||||
# 1. Robust error handling using Bash built-ins like 'errexit', 'nounset', and 'pipefail'.
|
||||
# 2. The capability to source common utility functions and configurations to ensure uniform environmental settings.
|
||||
@@ -104,7 +104,6 @@ function openim::tools::start_service() {
|
||||
cmd="${cmd} --prometheus_port ${prometheus_port}"
|
||||
fi
|
||||
openim::log::status "Starting ${binary_name}..."
|
||||
# Later, after discarding Docker, the Docker keyword is unreliable, and Kubepods is used
|
||||
${cmd} | tee -a "${LOG_FILE}"
|
||||
}
|
||||
|
||||
|
||||
+629
-582
File diff suppressed because it is too large
Load Diff
+22
-22
@@ -27,15 +27,15 @@ openim::chat::validate() {
|
||||
# validate if in path
|
||||
command -v chat >/dev/null || {
|
||||
openim::log::usage "chat must be in your PATH"
|
||||
openim::log::info "You can use 'hack/install-chat.sh' to install a copy in third_party/."
|
||||
openim::log::info "You can use 'scripts/install-chat.sh' to install a copy in third_party/."
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
# validate chat port is free
|
||||
local port_check_command
|
||||
if command -v ss &> /dev/null && ss -Version | grep 'iproute2' &> /dev/null; then
|
||||
port_check_command="ss"
|
||||
elif command -v netstat &>/dev/null; then
|
||||
elif command -v netstat &>/dev/null; then
|
||||
port_check_command="netstat"
|
||||
else
|
||||
openim::log::usage "unable to identify if chat is bound to port ${CHAT_PORT}. unable to find ss or netstat utilities."
|
||||
@@ -46,24 +46,24 @@ openim::chat::validate() {
|
||||
openim::log::usage "$(${port_check_command} -nat | grep "LISTEN" | grep "[\.:]${CHAT_PORT:?}")"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# need set the env of "CHAT_UNSUPPORTED_ARCH" on unstable arch.
|
||||
arch=$(uname -m)
|
||||
if [[ $arch =~ arm* ]]; then
|
||||
export CHAT_UNSUPPORTED_ARCH=arm
|
||||
export CHAT_UNSUPPORTED_ARCH=arm
|
||||
fi
|
||||
# validate installed version is at least equal to minimum
|
||||
version=$(chat --version | grep Version | head -n 1 | cut -d " " -f 3)
|
||||
if [[ $(openim::chat::version "${CHAT_VERSION}") -gt $(openim::chat::version "${version}") ]]; then
|
||||
export PATH="${OPENIM_ROOT}"/third_party/chat:${PATH}
|
||||
hash chat
|
||||
echo "${PATH}"
|
||||
version=$(chat --version | grep Version | head -n 1 | cut -d " " -f 3)
|
||||
if [[ $(openim::chat::version "${CHAT_VERSION}") -gt $(openim::chat::version "${version}") ]]; then
|
||||
openim::log::usage "chat version ${CHAT_VERSION} or greater required."
|
||||
openim::log::info "You can use 'hack/install-chat.sh' to install a copy in third_party/."
|
||||
exit 1
|
||||
fi
|
||||
export PATH="${OPENIM_ROOT}"/third_party/chat:${PATH}
|
||||
hash chat
|
||||
echo "${PATH}"
|
||||
version=$(chat --version | grep Version | head -n 1 | cut -d " " -f 3)
|
||||
if [[ $(openim::chat::version "${CHAT_VERSION}") -gt $(openim::chat::version "${version}") ]]; then
|
||||
openim::log::usage "chat version ${CHAT_VERSION} or greater required."
|
||||
openim::log::info "You can use 'scripts/install-chat.sh' to install a copy in third_party/."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ openim::chat::version() {
|
||||
openim::chat::start() {
|
||||
# validate before running
|
||||
openim::chat::validate
|
||||
|
||||
|
||||
# Start chat
|
||||
CHAT_DIR=${CHAT_DIR:-$(mktemp -d 2>/dev/null || mktemp -d -t test-chat.XXXXXX)}
|
||||
if [[ -d "${ARTIFACTS:-}" ]]; then
|
||||
@@ -85,7 +85,7 @@ openim::chat::start() {
|
||||
openim::log::info "chat --advertise-client-urls ${OPENIM_INTEGRATION_CHAT_URL} --data-dir ${CHAT_DIR} --listen-client-urls http://${CHAT_HOST}:${CHAT_PORT} --log-level=${CHAT_LOGLEVEL} 2> \"${CHAT_LOGFILE}\" >/dev/null"
|
||||
chat --advertise-client-urls "${OPENIM_INTEGRATION_CHAT_URL}" --data-dir "${CHAT_DIR}" --listen-client-urls "${OPENIM_INTEGRATION_CHAT_URL}" --log-level="${CHAT_LOGLEVEL}" 2> "${CHAT_LOGFILE}" >/dev/null &
|
||||
CHAT_PID=$!
|
||||
|
||||
|
||||
echo "Waiting for chat to come up."
|
||||
openim::util::wait_for_url "${OPENIM_INTEGRATION_CHAT_URL}/health" "chat: " 0.25 80
|
||||
curl -fs -X POST "${OPENIM_INTEGRATION_CHAT_URL}/v3/kv/put" -d '{"key": "X3Rlc3Q=", "value": ""}'
|
||||
@@ -108,7 +108,7 @@ openim::chat::start_scraping() {
|
||||
}
|
||||
|
||||
openim::chat::scrape() {
|
||||
curl -s -S "${OPENIM_INTEGRATION_CHAT_URL}/metrics" > "${CHAT_SCRAPE_DIR}/next" && mv "${CHAT_SCRAPE_DIR}/next" "${CHAT_SCRAPE_DIR}/$(date +%s).scrape"
|
||||
curl -s -S "${OPENIM_INTEGRATION_CHAT_URL}/metrics" > "${CHAT_SCRAPE_DIR}/next" && mv "${CHAT_SCRAPE_DIR}/next" "${CHAT_SCRAPE_DIR}/$(date +%s).scrape"
|
||||
}
|
||||
|
||||
openim::chat::stop() {
|
||||
@@ -144,17 +144,17 @@ openim::chat::install() {
|
||||
(
|
||||
local os
|
||||
local arch
|
||||
|
||||
|
||||
os=$(openim::util::host_os)
|
||||
arch=$(openim::util::host_arch)
|
||||
|
||||
cd ""${OPENIM_ROOT}"/third_party" || return 1
|
||||
|
||||
cd "${OPENIM_ROOT}/third_party" || return 1
|
||||
if [[ $(readlink chat) == chat-v${CHAT_VERSION}-${os}-* ]]; then
|
||||
openim::log::info "chat v${CHAT_VERSION} already installed. To use:"
|
||||
openim::log::info "export PATH=\"$(pwd)/chat:\${PATH}\""
|
||||
return #already installed
|
||||
fi
|
||||
|
||||
|
||||
if [[ ${os} == "darwin" ]]; then
|
||||
download_file="chat-v${CHAT_VERSION}-${os}-${arch}.zip"
|
||||
url="https://github.com/chat-io/chat/releases/download/v${CHAT_VERSION}/${download_file}"
|
||||
@@ -162,7 +162,7 @@ openim::chat::install() {
|
||||
unzip -o "${download_file}"
|
||||
ln -fns "chat-v${CHAT_VERSION}-${os}-${arch}" chat
|
||||
rm "${download_file}"
|
||||
elif [[ ${os} == "linux" ]]; then
|
||||
elif [[ ${os} == "linux" ]]; then
|
||||
url="https://github.com/coreos/chat/releases/download/v${CHAT_VERSION}/chat-v${CHAT_VERSION}-${os}-${arch}.tar.gz"
|
||||
download_file="chat-v${CHAT_VERSION}-${os}-${arch}.tar.gz"
|
||||
openim::util::download_file "${url}" "${download_file}"
|
||||
|
||||
+56
-56
@@ -21,24 +21,24 @@
|
||||
|
||||
# shellcheck disable=SC2034
|
||||
if [ -z "${COLOR_OPEN+x}" ]; then
|
||||
COLOR_OPEN=1
|
||||
COLOR_OPEN=1
|
||||
fi
|
||||
|
||||
# Function for colored echo
|
||||
openim::color::echo() {
|
||||
COLOR=$1
|
||||
[ $COLOR_OPEN -eq 1 ] && echo -e "${COLOR} $(date '+%Y-%m-%d %H:%M:%S') $@ ${COLOR_SUFFIX}"
|
||||
shift
|
||||
COLOR=$1
|
||||
[ $COLOR_OPEN -eq 1 ] && echo -e "${COLOR} $(date '+%Y-%m-%d %H:%M:%S') $@ ${COLOR_SUFFIX}"
|
||||
shift
|
||||
}
|
||||
|
||||
# Define color variables
|
||||
# --- Feature ---
|
||||
# --- Feature ---
|
||||
COLOR_NORMAL='\033[0m';COLOR_BOLD='\033[1m';COLOR_DIM='\033[2m';COLOR_UNDER='\033[4m';
|
||||
COLOR_ITALIC='\033[3m';COLOR_NOITALIC='\033[23m';COLOR_BLINK='\033[5m';
|
||||
COLOR_REVERSE='\033[7m';COLOR_CONCEAL='\033[8m';COLOR_NOBOLD='\033[22m';
|
||||
COLOR_NOUNDER='\033[24m';COLOR_NOBLINK='\033[25m';
|
||||
|
||||
# --- Front color ---
|
||||
# --- Front color ---
|
||||
COLOR_BLACK='\033[30m';
|
||||
COLOR_RED='\033[31m';
|
||||
COLOR_GREEN='\033[32m';
|
||||
@@ -48,13 +48,13 @@ COLOR_MAGENTA='\033[35m';
|
||||
COLOR_CYAN='\033[36m';
|
||||
COLOR_WHITE='\033[37m';
|
||||
|
||||
# --- background color ---
|
||||
# --- background color ---
|
||||
COLOR_BBLACK='\033[40m';COLOR_BRED='\033[41m';
|
||||
COLOR_BGREEN='\033[42m';COLOR_BYELLOW='\033[43m';
|
||||
COLOR_BBLUE='\033[44m';COLOR_BMAGENTA='\033[45m';
|
||||
COLOR_BCYAN='\033[46m';COLOR_BWHITE='\033[47m';
|
||||
|
||||
# --- Color definitions ---
|
||||
# --- Color definitions ---
|
||||
# Color definitions
|
||||
COLOR_SUFFIX="\033[0m" # End all colors and special effects
|
||||
BLACK_PREFIX="\033[30m" # Black prefix
|
||||
@@ -86,54 +86,54 @@ openim::color::print_color() {
|
||||
|
||||
# test functions
|
||||
openim::color::test() {
|
||||
echo "Starting the color tests..."
|
||||
|
||||
echo "Testing normal echo without color"
|
||||
openim::color::echo $COLOR_NORMAL "This is a normal text"
|
||||
|
||||
echo "Testing bold echo"
|
||||
openim::color::echo $COLOR_BOLD "This is bold text"
|
||||
|
||||
echo "Testing dim echo"
|
||||
openim::color::echo $COLOR_DIM "This is dim text"
|
||||
|
||||
echo "Testing underlined echo"
|
||||
openim::color::echo $COLOR_UNDER "This is underlined text"
|
||||
|
||||
echo "Testing italic echo"
|
||||
openim::color::echo $COLOR_ITALIC "This is italic text"
|
||||
|
||||
echo "Testing red color"
|
||||
openim::color::echo $COLOR_RED "This is red text"
|
||||
|
||||
echo "Testing green color"
|
||||
openim::color::echo $COLOR_GREEN "This is green text"
|
||||
|
||||
echo "Testing yellow color"
|
||||
openim::color::echo $COLOR_YELLOW "This is yellow text"
|
||||
|
||||
echo "Testing blue color"
|
||||
openim::color::echo $COLOR_BLUE "This is blue text"
|
||||
|
||||
echo "Testing magenta color"
|
||||
openim::color::echo $COLOR_MAGENTA "This is magenta text"
|
||||
|
||||
echo "Testing cyan color"
|
||||
openim::color::echo $COLOR_CYAN "This is cyan text"
|
||||
|
||||
echo "Testing black background"
|
||||
openim::color::echo $COLOR_BBLACK "This is text with black background"
|
||||
|
||||
echo "Testing red background"
|
||||
openim::color::echo $COLOR_BRED "This is text with red background"
|
||||
|
||||
echo "Testing green background"
|
||||
openim::color::echo $COLOR_BGREEN "This is text with green background"
|
||||
|
||||
echo "Testing blue background"
|
||||
openim::color::echo $COLOR_BBLUE "This is text with blue background"
|
||||
|
||||
echo "All tests completed!"
|
||||
echo "Starting the color tests..."
|
||||
|
||||
echo "Testing normal echo without color"
|
||||
openim::color::echo $COLOR_NORMAL "This is a normal text"
|
||||
|
||||
echo "Testing bold echo"
|
||||
openim::color::echo $COLOR_BOLD "This is bold text"
|
||||
|
||||
echo "Testing dim echo"
|
||||
openim::color::echo $COLOR_DIM "This is dim text"
|
||||
|
||||
echo "Testing underlined echo"
|
||||
openim::color::echo $COLOR_UNDER "This is underlined text"
|
||||
|
||||
echo "Testing italic echo"
|
||||
openim::color::echo $COLOR_ITALIC "This is italic text"
|
||||
|
||||
echo "Testing red color"
|
||||
openim::color::echo $COLOR_RED "This is red text"
|
||||
|
||||
echo "Testing green color"
|
||||
openim::color::echo $COLOR_GREEN "This is green text"
|
||||
|
||||
echo "Testing yellow color"
|
||||
openim::color::echo $COLOR_YELLOW "This is yellow text"
|
||||
|
||||
echo "Testing blue color"
|
||||
openim::color::echo $COLOR_BLUE "This is blue text"
|
||||
|
||||
echo "Testing magenta color"
|
||||
openim::color::echo $COLOR_MAGENTA "This is magenta text"
|
||||
|
||||
echo "Testing cyan color"
|
||||
openim::color::echo $COLOR_CYAN "This is cyan text"
|
||||
|
||||
echo "Testing black background"
|
||||
openim::color::echo $COLOR_BBLACK "This is text with black background"
|
||||
|
||||
echo "Testing red background"
|
||||
openim::color::echo $COLOR_BRED "This is text with red background"
|
||||
|
||||
echo "Testing green background"
|
||||
openim::color::echo $COLOR_BGREEN "This is text with green background"
|
||||
|
||||
echo "Testing blue background"
|
||||
openim::color::echo $COLOR_BBLUE "This is text with blue background"
|
||||
|
||||
echo "All tests completed!"
|
||||
}
|
||||
|
||||
# openim::color::test
|
||||
|
||||
+13
-2
@@ -89,7 +89,7 @@ readonly OPENIM_SERVER_TARGETS
|
||||
readonly OPENIM_SERVER_BINARIES=("${OPENIM_SERVER_TARGETS[@]##*/}")
|
||||
|
||||
# TODO: Label
|
||||
START_SCRIPTS_PATH=""${OPENIM_ROOT}"/scripts/install/"
|
||||
START_SCRIPTS_PATH="${OPENIM_ROOT}/scripts/install/"
|
||||
openim::golang::start_script_list() {
|
||||
local targets=(
|
||||
openim-api.sh
|
||||
@@ -261,7 +261,18 @@ openim::golang::setup_platforms
|
||||
# The set of client targets that we are building for all platforms
|
||||
# If you update this list, please also update build/BUILD.
|
||||
readonly OPENIM_CLIENT_TARGETS=(
|
||||
imctl
|
||||
changelog
|
||||
component
|
||||
conversion-msg
|
||||
conversion-mysql
|
||||
formitychecker
|
||||
imctl
|
||||
infra
|
||||
ncpu
|
||||
openim-web
|
||||
up35
|
||||
versionchecker
|
||||
yamlfmt
|
||||
)
|
||||
readonly OPENIM_CLIENT_BINARIES=("${OPENIM_CLIENT_TARGETS[@]##*/}")
|
||||
|
||||
|
||||
+4
-5
@@ -25,7 +25,7 @@ unset CDPATH
|
||||
|
||||
# Until all GOPATH references are removed from all build scripts as well,
|
||||
# explicitly disable module mode to avoid picking up user-set GO111MODULE preferences.
|
||||
# As individual scripts (like hack/update-vendor.sh) make use of go modules,
|
||||
# As individual scripts (like scripts/update-vendor.sh) make use of go modules,
|
||||
# they can explicitly set GO111MODULE=on
|
||||
export GO111MODULE=on
|
||||
|
||||
@@ -33,7 +33,7 @@ export GO111MODULE=on
|
||||
OPENIM_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd -P)"
|
||||
|
||||
OPENIM_OUTPUT_SUBPATH="${OPENIM_OUTPUT_SUBPATH:-_output}"
|
||||
OPENIM_OUTPUT=""${OPENIM_ROOT}"/${OPENIM_OUTPUT_SUBPATH}"
|
||||
OPENIM_OUTPUT="${OPENIM_ROOT}/${OPENIM_OUTPUT_SUBPATH}"
|
||||
|
||||
OPENIM_OUTPUT_BINPATH="${OPENIM_OUTPUT}/bin/platforms"
|
||||
OPENIM_OUTPUT_BINTOOLPATH="${OPENIM_OUTPUT}/bin/tools"
|
||||
@@ -50,8 +50,8 @@ OPENIM_RSYNC_COMPRESS="${KUBE_RSYNC_COMPRESS:-0}"
|
||||
export no_proxy="127.0.0.1,localhost${no_proxy:+,${no_proxy}}"
|
||||
|
||||
# This is a symlink to binaries for "this platform", e.g. build tools.
|
||||
export THIS_PLATFORM_BIN=""${OPENIM_ROOT}"/_output/bin/platforms"
|
||||
export THIS_PLATFORM_BIN_TOOLS=""${OPENIM_ROOT}"/_output/bin/tools"
|
||||
export THIS_PLATFORM_BIN="${OPENIM_ROOT}/_output/bin/platforms"
|
||||
export THIS_PLATFORM_BIN_TOOLS="${OPENIM_ROOT}/_output/bin/tools"
|
||||
|
||||
. $(dirname ${BASH_SOURCE})/color.sh
|
||||
. $(dirname ${BASH_SOURCE})/util.sh
|
||||
@@ -62,7 +62,6 @@ openim::util::ensure-bash-version
|
||||
|
||||
. $(dirname ${BASH_SOURCE})/version.sh
|
||||
. $(dirname ${BASH_SOURCE})/golang.sh
|
||||
. $(dirname ${BASH_SOURCE})/release.sh
|
||||
. $(dirname ${BASH_SOURCE})/chat.sh
|
||||
|
||||
OPENIM_OUTPUT_HOSTBIN="${OPENIM_OUTPUT_BINPATH}/$(openim::util::host_platform)"
|
||||
|
||||
+27
-27
@@ -21,24 +21,24 @@ ENABLE_LOGGING="${ENABLE_LOGGING:-true}"
|
||||
|
||||
# If OPENIM_OUTPUT is not set, set it to the default value
|
||||
if [ -z "${OPENIM_OUTPUT+x}" ]; then
|
||||
OPENIM_OUTPUT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../_output" && pwd -P)"
|
||||
OPENIM_OUTPUT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../_output" && pwd -P)"
|
||||
fi
|
||||
|
||||
# Set the log file path
|
||||
LOG_FILE="${OPENIM_OUTPUT}/logs/openim_$(date '+%Y%m%d').log"
|
||||
|
||||
if [[ ! -d "${OPENIM_OUTPUT}/logs" ]]; then
|
||||
mkdir -p "${OPENIM_OUTPUT}/logs"
|
||||
touch "$LOG_FILE"
|
||||
mkdir -p "${OPENIM_OUTPUT}/logs"
|
||||
touch "$LOG_FILE"
|
||||
fi
|
||||
|
||||
# Define the logging function
|
||||
function echo_log() {
|
||||
if $ENABLE_LOGGING; then
|
||||
echo -e "$@" | tee -a "${LOG_FILE}"
|
||||
else
|
||||
echo -e "$@"
|
||||
fi
|
||||
if $ENABLE_LOGGING; then
|
||||
echo -e "$@" | tee -a "${LOG_FILE}"
|
||||
else
|
||||
echo -e "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# MAX_LOG_SIZE=10485760 # 10MB
|
||||
@@ -50,11 +50,11 @@ function echo_log() {
|
||||
# Borrowed from https://gist.github.com/ahendrix/7030300
|
||||
openim::log::errexit() {
|
||||
local err="${PIPESTATUS[*]}"
|
||||
|
||||
|
||||
# If the shell we are in doesn't have errexit set (common in subshells) then
|
||||
# don't dump stacks.
|
||||
set +o | grep -qe "-o errexit" || return
|
||||
|
||||
|
||||
set +o xtrace
|
||||
local code="${1:-1}"
|
||||
# Print out the stack trace described by $function_stack
|
||||
@@ -73,7 +73,7 @@ openim::log::install_errexit() {
|
||||
# trap ERR to provide an error handler whenever a command exits nonzero this
|
||||
# is a more verbose version of set -o errexit
|
||||
trap 'openim::log::errexit' ERR
|
||||
|
||||
|
||||
# setting errtrace allows our ERR trap handler to be propagated to functions,
|
||||
# expansions and subshells
|
||||
set -o errtrace
|
||||
@@ -110,7 +110,7 @@ openim::log::error_exit() {
|
||||
local code="${2:-1}"
|
||||
local stack_skip="${3:-0}"
|
||||
stack_skip=$((stack_skip + 1))
|
||||
|
||||
|
||||
if [[ ${OPENIM_VERBOSE} -ge 4 ]]; then
|
||||
local source_file=${BASH_SOURCE[${stack_skip}]}
|
||||
local source_line=${BASH_LINENO[$((stack_skip - 1))]}
|
||||
@@ -118,12 +118,12 @@ openim::log::error_exit() {
|
||||
[[ -z ${1-} ]] || {
|
||||
echo_log " ${1}" >&2
|
||||
}
|
||||
|
||||
|
||||
openim::log::stack ${stack_skip}
|
||||
|
||||
|
||||
echo_log "Exiting with status ${code}" >&2
|
||||
fi
|
||||
|
||||
|
||||
exit "${code}"
|
||||
}
|
||||
|
||||
@@ -152,7 +152,7 @@ openim::log::usage_from_stdin() {
|
||||
while read -r line; do
|
||||
messages+=("${line}")
|
||||
done
|
||||
|
||||
|
||||
openim::log::usage "${messages[@]}"
|
||||
}
|
||||
|
||||
@@ -162,7 +162,7 @@ openim::log::info() {
|
||||
if [[ ${OPENIM_VERBOSE} < ${V} ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
|
||||
for message; do
|
||||
echo_log "${message}"
|
||||
done
|
||||
@@ -181,7 +181,7 @@ openim::log::info_from_stdin() {
|
||||
while read -r line; do
|
||||
messages+=("${line}")
|
||||
done
|
||||
|
||||
|
||||
openim::log::info "${messages[@]}"
|
||||
}
|
||||
|
||||
@@ -191,7 +191,7 @@ openim::log::status() {
|
||||
if [[ ${OPENIM_VERBOSE} < ${V} ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
|
||||
timestamp=$(date +"[%m%d %H:%M:%S]")
|
||||
echo_log "+++ ${timestamp} ${1}"
|
||||
shift
|
||||
@@ -203,20 +203,20 @@ openim::log::status() {
|
||||
openim::log::success() {
|
||||
local V="${V:-0}"
|
||||
if [[ ${OPENIM_VERBOSE} < ${V} ]]; then
|
||||
return
|
||||
return
|
||||
fi
|
||||
timestamp=$(date +"%m%d %H:%M:%S")
|
||||
echo_log -e "${COLOR_GREEN}[success ${timestamp}] ${COLOR_SUFFIX}==> " "$@"
|
||||
}
|
||||
|
||||
function openim::log::test_log() {
|
||||
echo_log "test log"
|
||||
openim::log::info "openim::log::info"
|
||||
openim::log::progress "openim::log::progress"
|
||||
openim::log::status "openim::log::status"
|
||||
openim::log::success "openim::log::success"
|
||||
openim::log::error "openim::log::error"
|
||||
openim::log::error_exit "openim::log::error_exit"
|
||||
echo_log "test log"
|
||||
openim::log::info "openim::log::info"
|
||||
openim::log::progress "openim::log::progress"
|
||||
openim::log::status "openim::log::status"
|
||||
openim::log::success "openim::log::success"
|
||||
openim::log::error "openim::log::error"
|
||||
openim::log::error_exit "openim::log::error_exit"
|
||||
}
|
||||
|
||||
# openim::log::test_log
|
||||
+29
-26
@@ -25,6 +25,7 @@
|
||||
readonly BUCKET="openim-1306374445"
|
||||
readonly REGION="ap-guangzhou"
|
||||
readonly COS_RELEASE_DIR="openim-release"
|
||||
# readonly COS_RELEASE_DIR="openim-advanced-release" # !pro
|
||||
|
||||
# default cos command tool coscli or coscmd
|
||||
readonly COSTOOL="coscli"
|
||||
@@ -37,20 +38,22 @@ readonly RELEASE_IMAGES="${LOCAL_OUTPUT_ROOT}/release-images"
|
||||
# OpenIM github account info
|
||||
readonly OPENIM_GITHUB_ORG=openimsdk
|
||||
readonly OPENIM_GITHUB_REPO=open-im-server
|
||||
readonly CHAT_GITHUB_REPO=chat
|
||||
# readonly OPENIM_GITHUB_REPO=open-im-server-enterprise # !pro
|
||||
|
||||
readonly ARTIFACT=openim.tar.gz
|
||||
# readonly ARTIFACT=openim-enterprise.tar.gz # !pro
|
||||
|
||||
readonly CHECKSUM=${ARTIFACT}.sha1sum
|
||||
|
||||
OPENIM_BUILD_CONFORMANCE=${OPENIM_BUILD_CONFORMANCE:-y}
|
||||
OPENIM_BUILD_PULL_LATEST_IMAGES=${OPENIM_BUILD_PULL_LATEST_IMAGES:-y}
|
||||
|
||||
if [ -z "${OPENIM_ROOT}" ]; then
|
||||
OPENIM_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd -P)"
|
||||
OPENIM_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd -P)"
|
||||
fi
|
||||
|
||||
if [ -z "${TOOLS_DIR}" ]; then
|
||||
TOOLS_DIR="${OPENIM_ROOT}/_output/tools"
|
||||
TOOLS_DIR="${OPENIM_ROOT}/_output/tools"
|
||||
fi
|
||||
|
||||
# Validate a ci version
|
||||
@@ -77,10 +80,10 @@ function openim::release::parse_and_validate_ci_version() {
|
||||
openim::log::error "Invalid ci version: '${version}', must match regex ${version_regex}"
|
||||
return 1
|
||||
}
|
||||
|
||||
|
||||
# The VERSION variables are used when this file is sourced, hence
|
||||
# the shellcheck SC2034 'appears unused' warning is to be ignored.
|
||||
|
||||
|
||||
# shellcheck disable=SC2034
|
||||
VERSION_MAJOR="${BASH_REMATCH[1]}"
|
||||
# shellcheck disable=SC2034
|
||||
@@ -115,7 +118,7 @@ function openim::release::package_tarballs() {
|
||||
openim::release::package_openim_manifests_tarball &
|
||||
openim::release::package_server_tarballs &
|
||||
openim::util::wait-for-jobs || { openim::log::error "previous tarball phase failed"; return 1; }
|
||||
|
||||
|
||||
openim::release::package_final_tarball & # _final depends on some of the previous phases
|
||||
openim::util::wait-for-jobs || { openim::log::error "previous tarball phase failed"; return 1; }
|
||||
}
|
||||
@@ -143,24 +146,24 @@ function openim::release::package_src_tarball() {
|
||||
git archive -o "${src_tarball}" HEAD
|
||||
else
|
||||
find "${OPENIM_ROOT}" -mindepth 1 -maxdepth 1 \
|
||||
! \( \
|
||||
\( -path "${OPENIM_ROOT}"/_\* -o \
|
||||
-path "${OPENIM_ROOT}"/.git\* -o \
|
||||
-path "${OPENIM_ROOT}"/.github\* -o \
|
||||
-path "${OPENIM_ROOT}"/components\* -o \
|
||||
-path "${OPENIM_ROOT}"/logs\* -o \
|
||||
-path "${OPENIM_ROOT}"/.gitignore\* -o \
|
||||
-path "${OPENIM_ROOT}"/.gsemver.yml\* -o \
|
||||
-path "${OPENIM_ROOT}"/.config\* -o \
|
||||
-path "${OPENIM_ROOT}"/.chglog\* -o \
|
||||
-path "${OPENIM_ROOT}"/.gitlint -o \
|
||||
-path "${OPENIM_ROOT}"/.golangci.yml -o \
|
||||
-path "${OPENIM_ROOT}"/build/goreleaser.yaml -o \
|
||||
-path "${OPENIM_ROOT}"/.note.md -o \
|
||||
-path "${OPENIM_ROOT}"/.todo.md \
|
||||
\) -prune \
|
||||
\) -print0 \
|
||||
| "${TAR}" czf "${src_tarball}" --transform "s|${OPENIM_ROOT#/*}|openim|" --null -T -
|
||||
! \( \
|
||||
\( -path "${OPENIM_ROOT}"/_\* -o \
|
||||
-path "${OPENIM_ROOT}"/.git\* -o \
|
||||
-path "${OPENIM_ROOT}"/.github\* -o \
|
||||
-path "${OPENIM_ROOT}"/components\* -o \
|
||||
-path "${OPENIM_ROOT}"/logs\* -o \
|
||||
-path "${OPENIM_ROOT}"/.gitignore\* -o \
|
||||
-path "${OPENIM_ROOT}"/.gsemver.yml\* -o \
|
||||
-path "${OPENIM_ROOT}"/.config\* -o \
|
||||
-path "${OPENIM_ROOT}"/.chglog\* -o \
|
||||
-path "${OPENIM_ROOT}"/.gitlint -o \
|
||||
-path "${OPENIM_ROOT}"/.golangci.yml -o \
|
||||
-path "${OPENIM_ROOT}"/build/goreleaser.yaml -o \
|
||||
-path "${OPENIM_ROOT}"/.note.md -o \
|
||||
-path "${OPENIM_ROOT}"/.todo.md \
|
||||
\) -prune \
|
||||
\) -print0 \
|
||||
| "${TAR}" czf "${src_tarball}" --transform "s|${OPENIM_ROOT#/*}|openim|" --null -T -
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -168,7 +171,7 @@ function openim::release::package_src_tarball() {
|
||||
function openim::release::package_server_tarballs() {
|
||||
# Find all of the built client binaries
|
||||
local long_platforms=("${LOCAL_OUTPUT_BINPATH}"/*/*)
|
||||
|
||||
|
||||
if [[ -n ${OPENIM_BUILD_PLATFORMS-} ]]; then
|
||||
read -ra long_platforms <<< "${OPENIM_BUILD_PLATFORMS}"
|
||||
fi
|
||||
@@ -636,7 +639,7 @@ function openim::release::github_release() {
|
||||
for file in ${RELEASE_TARS}/*.tar.gz; do
|
||||
if [[ -f "$file" ]]; then
|
||||
filename=$(basename "$file")
|
||||
openim::log::info "Update file ${filename} to release vertion ${OPENIM_GIT_VERSION}"
|
||||
openim::log::info "Update file ${filename} to release vertion ${OPENIM_GIT_VERSION}"
|
||||
${TOOLS_DIR}/github-release upload \
|
||||
--user ${OPENIM_GITHUB_ORG} \
|
||||
--repo ${OPENIM_GITHUB_REPO} \
|
||||
|
||||
+240
-240
@@ -30,27 +30,27 @@ function openim:util::setup_ssh_key_copy() {
|
||||
local hosts_file="$1"
|
||||
local username="${2:-root}"
|
||||
local password="${3:-123}"
|
||||
|
||||
|
||||
local sshkey_file=~/.ssh/id_rsa.pub
|
||||
|
||||
# check sshkey file
|
||||
|
||||
# check sshkey file
|
||||
if [[ ! -e $sshkey_file ]]; then
|
||||
expect -c "
|
||||
spawn ssh-keygen -t rsa
|
||||
expect \"Enter*\" { send \"\n\"; exp_continue; }
|
||||
"
|
||||
fi
|
||||
|
||||
|
||||
# get hosts list
|
||||
local hosts=$(awk '/^[^#]/ {print $1}' "${hosts_file}")
|
||||
|
||||
|
||||
ssh_key_copy() {
|
||||
local target=$1
|
||||
|
||||
|
||||
# delete history
|
||||
sed -i "/$target/d" ~/.ssh/known_hosts
|
||||
|
||||
# copy key
|
||||
|
||||
# copy key
|
||||
expect -c "
|
||||
set timeout 100
|
||||
spawn ssh-copy-id $username@$target
|
||||
@@ -62,14 +62,14 @@ function openim:util::setup_ssh_key_copy() {
|
||||
expect eof
|
||||
"
|
||||
}
|
||||
|
||||
|
||||
# auto sshkey pair
|
||||
for host in $hosts; do
|
||||
if ! ping -i 0.2 -c 3 -W 1 "$host" > /dev/null 2>&1; then
|
||||
echo "[ERROR]: Can't connect $host"
|
||||
continue
|
||||
fi
|
||||
|
||||
|
||||
local host_entry=$(awk "/$host/"'{print $1, $2}' /etc/hosts)
|
||||
if [[ $host_entry ]]; then
|
||||
local hostaddr=$(echo "$host_entry" | awk '{print $1}')
|
||||
@@ -102,7 +102,7 @@ openim::util::array_contains() {
|
||||
for element; do
|
||||
if [[ "${element}" == "${search}" ]]; then
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
@@ -113,12 +113,12 @@ openim::util::wait_for_url() {
|
||||
local wait=${3:-1}
|
||||
local times=${4:-30}
|
||||
local maxtime=${5:-1}
|
||||
|
||||
|
||||
command -v curl >/dev/null || {
|
||||
openim::log::usage "curl must be installed"
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
local i
|
||||
for i in $(seq 1 "${times}"); do
|
||||
local out
|
||||
@@ -156,20 +156,20 @@ openim::util::trap_add() {
|
||||
local trap_add_cmd
|
||||
trap_add_cmd=$1
|
||||
shift
|
||||
|
||||
|
||||
for trap_add_name in "$@"; do
|
||||
local existing_cmd
|
||||
local new_cmd
|
||||
|
||||
|
||||
# Grab the currently defined trap commands for this trap
|
||||
existing_cmd=$(trap -p "${trap_add_name}" | awk -F"'" '{print $2}')
|
||||
|
||||
|
||||
if [[ -z "${existing_cmd}" ]]; then
|
||||
new_cmd="${trap_add_cmd}"
|
||||
else
|
||||
new_cmd="${trap_add_cmd};${existing_cmd}"
|
||||
fi
|
||||
|
||||
|
||||
# Assign the test. Disable the shellcheck warning telling that trap
|
||||
# commands should be single quoted to avoid evaluating them at this
|
||||
# point instead evaluating them at run time. The logic of adding new
|
||||
@@ -200,14 +200,14 @@ openim::util::host_os() {
|
||||
case "$(uname -s)" in
|
||||
Darwin)
|
||||
host_os=darwin
|
||||
;;
|
||||
;;
|
||||
Linux)
|
||||
host_os=linux
|
||||
;;
|
||||
;;
|
||||
*)
|
||||
openim::log::error "Unsupported host OS. Must be Linux or Mac OS X."
|
||||
exit 1
|
||||
;;
|
||||
;;
|
||||
esac
|
||||
echo "${host_os}"
|
||||
}
|
||||
@@ -217,70 +217,70 @@ openim::util::host_arch() {
|
||||
case "$(uname -m)" in
|
||||
x86_64*)
|
||||
host_arch=amd64
|
||||
;;
|
||||
;;
|
||||
i?86_64*)
|
||||
host_arch=amd64
|
||||
;;
|
||||
;;
|
||||
amd64*)
|
||||
host_arch=amd64
|
||||
;;
|
||||
;;
|
||||
aarch64*)
|
||||
host_arch=arm64
|
||||
;;
|
||||
;;
|
||||
arm64*)
|
||||
host_arch=arm64
|
||||
;;
|
||||
;;
|
||||
arm*)
|
||||
host_arch=arm
|
||||
;;
|
||||
;;
|
||||
i?86*)
|
||||
host_arch=x86
|
||||
;;
|
||||
;;
|
||||
s390x*)
|
||||
host_arch=s390x
|
||||
;;
|
||||
;;
|
||||
ppc64le*)
|
||||
host_arch=ppc64le
|
||||
;;
|
||||
;;
|
||||
*)
|
||||
openim::log::error "Unsupported host arch. Must be x86_64, 386, arm, arm64, s390x or ppc64le."
|
||||
exit 1
|
||||
;;
|
||||
;;
|
||||
esac
|
||||
echo "${host_arch}"
|
||||
}
|
||||
|
||||
# Define a bash function to check the versions of Docker and Docker Compose
|
||||
openim::util::check_docker_and_compose_versions() {
|
||||
# Define the required versions of Docker and Docker Compose
|
||||
required_docker_version="20.10.0"
|
||||
required_compose_version="2.0"
|
||||
|
||||
# Get the currently installed Docker version
|
||||
installed_docker_version=$(docker --version | awk '{print $3}' | sed 's/,//')
|
||||
|
||||
# Check if the installed Docker version matches the required version
|
||||
if [[ "$installed_docker_version" < "$required_docker_version" ]]; then
|
||||
echo "Docker version mismatch. Installed: $installed_docker_version, Required: $required_docker_version"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Check if the docker compose sub-command is available
|
||||
if ! docker compose version &> /dev/null; then
|
||||
echo "Docker does not support the docker compose sub-command"
|
||||
echo "You need to upgrade Docker to the right version"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Get the currently installed Docker Compose version
|
||||
installed_compose_version=$(docker compose version --short)
|
||||
|
||||
# Check if the installed Docker Compose version matches the required version
|
||||
if [[ "$installed_compose_version" < "$required_compose_version" ]]; then
|
||||
echo "Docker Compose version mismatch. Installed: $installed_compose_version, Required: $required_compose_version"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Define the required versions of Docker and Docker Compose
|
||||
required_docker_version="20.10.0"
|
||||
required_compose_version="2.0"
|
||||
|
||||
# Get the currently installed Docker version
|
||||
installed_docker_version=$(docker --version | awk '{print $3}' | sed 's/,//')
|
||||
|
||||
# Check if the installed Docker version matches the required version
|
||||
if [[ "$installed_docker_version" < "$required_docker_version" ]]; then
|
||||
echo "Docker version mismatch. Installed: $installed_docker_version, Required: $required_docker_version"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Check if the docker compose sub-command is available
|
||||
if ! docker compose version &> /dev/null; then
|
||||
echo "Docker does not support the docker compose sub-command"
|
||||
echo "You need to upgrade Docker to the right version"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Get the currently installed Docker Compose version
|
||||
installed_compose_version=$(docker compose version --short)
|
||||
|
||||
# Check if the installed Docker Compose version matches the required version
|
||||
if [[ "$installed_compose_version" < "$required_compose_version" ]]; then
|
||||
echo "Docker Compose version mismatch. Installed: $installed_compose_version, Required: $required_compose_version"
|
||||
return 1
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -292,80 +292,80 @@ openim::util::check_docker_and_compose_versions() {
|
||||
# openim::util::check_ports 8080 8081 8082
|
||||
# The function returns a status of 1 if any of the processes is not running.
|
||||
openim::util::check_ports() {
|
||||
# An array to collect ports of processes that are not running.
|
||||
local not_started=()
|
||||
|
||||
# An array to collect information about processes that are running.
|
||||
local started=()
|
||||
|
||||
openim::log::info "Checking ports: $*"
|
||||
# Iterate over each given port.
|
||||
for port in "$@"; do
|
||||
# Initialize variables
|
||||
# Check the OS and use the appropriate command
|
||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
if command -v ss > /dev/null 2>&1; then
|
||||
info=$(ss -ltnp | grep ":$port" || true)
|
||||
else
|
||||
info=$(netstat -ltnp | grep ":$port" || true)
|
||||
fi
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
# For macOS, use lsof
|
||||
info=$(lsof -P -i:"$port" | grep "LISTEN" || true)
|
||||
fi
|
||||
|
||||
# Check if any process is using the port
|
||||
if [[ -z $info ]]; then
|
||||
not_started+=($port)
|
||||
else
|
||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
# Extract relevant details for Linux: Process Name, PID, and FD.
|
||||
details=$(echo $info | sed -n 's/.*users:(("\([^"]*\)",pid=\([^,]*\),fd=\([^)]*\))).*/\1 \2 \3/p')
|
||||
command=$(echo $details | awk '{print $1}')
|
||||
pid=$(echo $details | awk '{print $2}')
|
||||
fd=$(echo $details | awk '{print $3}')
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
# Handle extraction for macOS
|
||||
pid=$(echo $info | awk '{print $2}' | cut -d'/' -f1)
|
||||
command=$(ps -p $pid -o comm= | xargs basename)
|
||||
fd=$(echo $info | awk '{print $4}' | cut -d'/' -f1)
|
||||
fi
|
||||
|
||||
# Get the start time of the process using the PID
|
||||
if [[ -z $pid ]]; then
|
||||
start_time="N/A"
|
||||
else
|
||||
start_time=$(ps -p $pid -o lstart=)
|
||||
fi
|
||||
|
||||
started+=("Port $port - Command: $command, PID: $pid, FD: $fd, Started: $start_time")
|
||||
fi
|
||||
done
|
||||
|
||||
# Print information about ports whose processes are not running.
|
||||
if [[ ${#not_started[@]} -ne 0 ]]; then
|
||||
openim::log::info "\n### Not started ports:"
|
||||
for port in "${not_started[@]}"; do
|
||||
openim::log::error "Port $port is not started."
|
||||
done
|
||||
# An array to collect ports of processes that are not running.
|
||||
local not_started=()
|
||||
|
||||
# An array to collect information about processes that are running.
|
||||
local started=()
|
||||
|
||||
openim::log::info "Checking ports: $*"
|
||||
# Iterate over each given port.
|
||||
for port in "$@"; do
|
||||
# Initialize variables
|
||||
# Check the OS and use the appropriate command
|
||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
if command -v ss > /dev/null 2>&1; then
|
||||
info=$(ss -ltnp | grep ":$port" || true)
|
||||
else
|
||||
info=$(netstat -ltnp | grep ":$port" || true)
|
||||
fi
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
# For macOS, use lsof
|
||||
info=$(lsof -P -i:"$port" | grep "LISTEN" || true)
|
||||
fi
|
||||
|
||||
# Print information about ports whose processes are running.
|
||||
if [[ ${#started[@]} -ne 0 ]]; then
|
||||
openim::log::info "\n### Started ports:"
|
||||
for info in "${started[@]}"; do
|
||||
openim::log::info "$info"
|
||||
done
|
||||
fi
|
||||
|
||||
# If any of the processes is not running, return a status of 1.
|
||||
if [[ ${#not_started[@]} -ne 0 ]]; then
|
||||
echo "++++ OpenIM Log >> cat ${LOG_FILE}"
|
||||
return 1
|
||||
|
||||
# Check if any process is using the port
|
||||
if [[ -z $info ]]; then
|
||||
not_started+=($port)
|
||||
else
|
||||
openim::log::success "All specified processes are running."
|
||||
return 0
|
||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
# Extract relevant details for Linux: Process Name, PID, and FD.
|
||||
details=$(echo $info | sed -n 's/.*users:(("\([^"]*\)",pid=\([^,]*\),fd=\([^)]*\))).*/\1 \2 \3/p')
|
||||
command=$(echo $details | awk '{print $1}')
|
||||
pid=$(echo $details | awk '{print $2}')
|
||||
fd=$(echo $details | awk '{print $3}')
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
# Handle extraction for macOS
|
||||
pid=$(echo $info | awk '{print $2}' | cut -d'/' -f1)
|
||||
command=$(ps -p $pid -o comm= | xargs basename)
|
||||
fd=$(echo $info | awk '{print $4}' | cut -d'/' -f1)
|
||||
fi
|
||||
|
||||
# Get the start time of the process using the PID
|
||||
if [[ -z $pid ]]; then
|
||||
start_time="N/A"
|
||||
else
|
||||
start_time=$(ps -p $pid -o lstart=)
|
||||
fi
|
||||
|
||||
started+=("Port $port - Command: $command, PID: $pid, FD: $fd, Started: $start_time")
|
||||
fi
|
||||
done
|
||||
|
||||
# Print information about ports whose processes are not running.
|
||||
if [[ ${#not_started[@]} -ne 0 ]]; then
|
||||
openim::log::info "\n### Not started ports:"
|
||||
for port in "${not_started[@]}"; do
|
||||
openim::log::error "Port $port is not started."
|
||||
done
|
||||
fi
|
||||
|
||||
# Print information about ports whose processes are running.
|
||||
if [[ ${#started[@]} -ne 0 ]]; then
|
||||
openim::log::info "\n### Started ports:"
|
||||
for info in "${started[@]}"; do
|
||||
openim::log::info "$info"
|
||||
done
|
||||
fi
|
||||
|
||||
# If any of the processes is not running, return a status of 1.
|
||||
if [[ ${#not_started[@]} -ne 0 ]]; then
|
||||
echo "++++ OpenIM Log >> cat ${LOG_FILE}"
|
||||
return 1
|
||||
else
|
||||
openim::log::success "All specified processes are running."
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
# set +o errexit
|
||||
@@ -381,75 +381,75 @@ openim::util::check_ports() {
|
||||
# openim::util::check_process_names nginx mysql redis
|
||||
# The function returns a status of 1 if any of the processes is not running.
|
||||
openim::util::check_process_names() {
|
||||
# Function to get the port of a process
|
||||
get_port() {
|
||||
local pid=$1
|
||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
# Linux
|
||||
ss -ltnp 2>/dev/null | grep $pid | awk '{print $4}' | cut -d ':' -f2
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
# macOS
|
||||
lsof -nP -iTCP -sTCP:LISTEN -a -p $pid | awk 'NR>1 {print $9}' | sed 's/.*://'
|
||||
else
|
||||
echo "Unsupported OS"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Arrays to collect details of processes
|
||||
local not_started=()
|
||||
local started=()
|
||||
|
||||
openim::log::info "Checking processes: $*"
|
||||
# Iterate over each given process name
|
||||
for process_name in "$@"; do
|
||||
# Use `pgrep` to find process IDs related to the given process name
|
||||
local pids=($(pgrep -f $process_name))
|
||||
|
||||
# Check if any process IDs were found
|
||||
if [[ ${#pids[@]} -eq 0 ]]; then
|
||||
not_started+=($process_name)
|
||||
else
|
||||
# If there are PIDs, loop through each one
|
||||
for pid in "${pids[@]}"; do
|
||||
local command=$(ps -p $pid -o cmd=)
|
||||
local start_time=$(ps -p $pid -o lstart=)
|
||||
local port=$(get_port $pid)
|
||||
|
||||
# Check if port information was found for the PID
|
||||
if [[ -z $port ]]; then
|
||||
port="N/A"
|
||||
fi
|
||||
|
||||
started+=("Process $process_name - Command: $command, PID: $pid, Port: $port, Start time: $start_time")
|
||||
done
|
||||
fi
|
||||
done
|
||||
|
||||
# Print information
|
||||
if [[ ${#not_started[@]} -ne 0 ]]; then
|
||||
openim::log::info "Not started processes:"
|
||||
for process_name in "${not_started[@]}"; do
|
||||
openim::log::error "Process $process_name is not started."
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ ${#started[@]} -ne 0 ]]; then
|
||||
echo
|
||||
openim::log::info "Started processes:"
|
||||
for info in "${started[@]}"; do
|
||||
openim::log::info "$info"
|
||||
done
|
||||
fi
|
||||
|
||||
# Return status
|
||||
if [[ ${#not_started[@]} -ne 0 ]]; then
|
||||
echo "++++ OpenIM Log >> cat ${LOG_FILE}"
|
||||
return 1
|
||||
# Function to get the port of a process
|
||||
get_port() {
|
||||
local pid=$1
|
||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
||||
# Linux
|
||||
ss -ltnp 2>/dev/null | grep $pid | awk '{print $4}' | cut -d ':' -f2
|
||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
# macOS
|
||||
lsof -nP -iTCP -sTCP:LISTEN -a -p $pid | awk 'NR>1 {print $9}' | sed 's/.*://'
|
||||
else
|
||||
openim::log::success "All processes are running."
|
||||
return 0
|
||||
echo "Unsupported OS"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Arrays to collect details of processes
|
||||
local not_started=()
|
||||
local started=()
|
||||
|
||||
openim::log::info "Checking processes: $*"
|
||||
# Iterate over each given process name
|
||||
for process_name in "$@"; do
|
||||
# Use `pgrep` to find process IDs related to the given process name
|
||||
local pids=($(pgrep -f $process_name))
|
||||
|
||||
# Check if any process IDs were found
|
||||
if [[ ${#pids[@]} -eq 0 ]]; then
|
||||
not_started+=($process_name)
|
||||
else
|
||||
# If there are PIDs, loop through each one
|
||||
for pid in "${pids[@]}"; do
|
||||
local command=$(ps -p $pid -o cmd=)
|
||||
local start_time=$(ps -p $pid -o lstart=)
|
||||
local port=$(get_port $pid)
|
||||
|
||||
# Check if port information was found for the PID
|
||||
if [[ -z $port ]]; then
|
||||
port="N/A"
|
||||
fi
|
||||
|
||||
started+=("Process $process_name - Command: $command, PID: $pid, Port: $port, Start time: $start_time")
|
||||
done
|
||||
fi
|
||||
done
|
||||
|
||||
# Print information
|
||||
if [[ ${#not_started[@]} -ne 0 ]]; then
|
||||
openim::log::info "Not started processes:"
|
||||
for process_name in "${not_started[@]}"; do
|
||||
openim::log::error "Process $process_name is not started."
|
||||
done
|
||||
fi
|
||||
|
||||
if [[ ${#started[@]} -ne 0 ]]; then
|
||||
echo
|
||||
openim::log::info "Started processes:"
|
||||
for info in "${started[@]}"; do
|
||||
openim::log::info "$info"
|
||||
done
|
||||
fi
|
||||
|
||||
# Return status
|
||||
if [[ ${#not_started[@]} -ne 0 ]]; then
|
||||
echo "++++ OpenIM Log >> cat ${LOG_FILE}"
|
||||
return 1
|
||||
else
|
||||
openim::log::success "All processes are running."
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
# openim::util::check_process_names docker-pr
|
||||
@@ -462,30 +462,30 @@ openim::util::check_process_names() {
|
||||
# openim::util::stop_services_on_ports 8080 8081 8082
|
||||
# The function returns a status of 1 if any service couldn't be stopped.
|
||||
openim::util::stop_services_on_ports() {
|
||||
# An array to collect ports of processes that couldn't be stopped.
|
||||
local not_stopped=()
|
||||
|
||||
# An array to collect information about processes that were stopped.
|
||||
local stopped=()
|
||||
|
||||
openim::log::info "Stopping services on ports: $*"
|
||||
# Iterate over each given port.
|
||||
for port in "$@"; do
|
||||
# Use the `lsof` command to find process information related to the given port.
|
||||
info=$(lsof -i :$port -n -P | grep LISTEN || true)
|
||||
|
||||
# If there's process information, it means the process associated with the port is running.
|
||||
if [[ -n $info ]]; then
|
||||
# Extract the Process ID.
|
||||
while read -r line; do
|
||||
local pid=$(echo $line | awk '{print $2}')
|
||||
|
||||
# Try to stop the service by killing its process.
|
||||
if kill -TERM $pid; then
|
||||
stopped+=($port)
|
||||
else
|
||||
not_stopped+=($port)
|
||||
fi
|
||||
# An array to collect ports of processes that couldn't be stopped.
|
||||
local not_stopped=()
|
||||
|
||||
# An array to collect information about processes that were stopped.
|
||||
local stopped=()
|
||||
|
||||
openim::log::info "Stopping services on ports: $*"
|
||||
# Iterate over each given port.
|
||||
for port in "$@"; do
|
||||
# Use the `lsof` command to find process information related to the given port.
|
||||
info=$(lsof -i :$port -n -P | grep LISTEN || true)
|
||||
|
||||
# If there's process information, it means the process associated with the port is running.
|
||||
if [[ -n $info ]]; then
|
||||
# Extract the Process ID.
|
||||
while read -r line; do
|
||||
local pid=$(echo $line | awk '{print $2}')
|
||||
|
||||
# Try to stop the service by killing its process.
|
||||
if kill -TERM $pid; then
|
||||
stopped+=($port)
|
||||
else
|
||||
not_stopped+=($port)
|
||||
fi
|
||||
done <<< "$info"
|
||||
fi
|
||||
done
|
||||
@@ -519,7 +519,7 @@ openim::util::stop_services_on_ports() {
|
||||
# nc -l -p 12345
|
||||
# nc -l -p 123456
|
||||
# ps -ef | grep "nc -l"
|
||||
# openim::util::stop_services_on_ports 1234 12345
|
||||
# openim::util::stop_services_on_ports 1234 12345
|
||||
|
||||
|
||||
# The `openim::util::stop_services_with_name` function stops services with specified names.
|
||||
@@ -1086,7 +1086,7 @@ function openim::util::ensure-install-nginx {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for port in 80
|
||||
for port in "80"
|
||||
do
|
||||
if echo |telnet 127.0.0.1 $port 2>&1|grep refused &>/dev/null;then
|
||||
exit 1
|
||||
@@ -1263,7 +1263,7 @@ function openim:util::setup_ssh_key_copy() {
|
||||
|
||||
local sshkey_file=~/.ssh/id_rsa.pub
|
||||
|
||||
# check sshkey file
|
||||
# check sshkey file
|
||||
if [[ ! -e $sshkey_file ]]; then
|
||||
expect -c "
|
||||
spawn ssh-keygen -t rsa
|
||||
@@ -1280,7 +1280,7 @@ function openim:util::setup_ssh_key_copy() {
|
||||
# delete history
|
||||
sed -i "/$target/d" ~/.ssh/known_hosts
|
||||
|
||||
# copy key
|
||||
# copy key
|
||||
expect -c "
|
||||
set timeout 100
|
||||
spawn ssh-copy-id $username@$target
|
||||
@@ -1571,7 +1571,7 @@ openim::util::check_ports() {
|
||||
else
|
||||
start_time=$(ps -p $pid -o lstart=)
|
||||
fi
|
||||
|
||||
|
||||
started+=("Port $port - Command: $command, PID: $pid, FD: $fd, Started: $start_time")
|
||||
fi
|
||||
done
|
||||
@@ -1639,7 +1639,7 @@ openim::util::check_process_names() {
|
||||
for process_name in "$@"; do
|
||||
# Use `pgrep` to find process IDs related to the given process name
|
||||
local pids=($(pgrep -f $process_name))
|
||||
|
||||
|
||||
# Check if any process IDs were found
|
||||
if [[ ${#pids[@]} -eq 0 ]]; then
|
||||
not_started+=($process_name)
|
||||
@@ -1713,7 +1713,7 @@ openim::util::stop_services_on_ports() {
|
||||
# Extract the Process ID.
|
||||
while read -r line; do
|
||||
local pid=$(echo $line | awk '{print $2}')
|
||||
|
||||
|
||||
# Try to stop the service by killing its process.
|
||||
if kill -TERM $pid; then
|
||||
stopped+=($port)
|
||||
@@ -1753,7 +1753,7 @@ openim::util::stop_services_on_ports() {
|
||||
# nc -l -p 12345
|
||||
# nc -l -p 123456
|
||||
# ps -ef | grep "nc -l"
|
||||
# openim::util::stop_services_on_ports 1234 12345
|
||||
# openim::util::stop_services_on_ports 1234 12345
|
||||
|
||||
|
||||
# The `openim::util::stop_services_with_name` function stops services with specified names.
|
||||
@@ -2320,7 +2320,7 @@ function openim::util::ensure-install-nginx {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
for port in 80
|
||||
for port in "80"
|
||||
do
|
||||
if echo |telnet 127.0.0.1 $port 2>&1|grep refused &>/dev/null;then
|
||||
exit 1
|
||||
@@ -2467,7 +2467,7 @@ function openim::util::desc() {
|
||||
}
|
||||
|
||||
function openim::util:run::prompt() {
|
||||
echo -n "$yellow\$ $reset"
|
||||
echo -n "${yellow}\$ ${reset}"
|
||||
}
|
||||
|
||||
started=""
|
||||
@@ -2488,7 +2488,7 @@ function openim::util::run() {
|
||||
if [ -n "$DEMO_RUN_FAST" ]; then
|
||||
rate=1000
|
||||
fi
|
||||
echo "$green$1$reset" | pv -qL $rate
|
||||
echo "${green}$1${reset}" | pv -qL "$rate"
|
||||
if [ -n "$DEMO_RUN_FAST" ]; then
|
||||
sleep 0.5
|
||||
fi
|
||||
@@ -2516,7 +2516,7 @@ function openim::util::run::relative() {
|
||||
|
||||
# This function retrieves the IP address of the current server.
|
||||
# It primarily uses the `curl` command to fetch the public IP address from ifconfig.me.
|
||||
# If curl or the service is not available, it falls back
|
||||
# If curl or the service is not available, it falls back
|
||||
# to the internal IP address provided by the hostname command.
|
||||
# TODO: If a delay is found, the delay needs to be addressed
|
||||
function openim::util::get_server_ip() {
|
||||
@@ -2524,7 +2524,7 @@ function openim::util::get_server_ip() {
|
||||
if command -v curl &> /dev/null; then
|
||||
# Try to retrieve the public IP address using curl and ifconfig.me
|
||||
IP=$(dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | sed 's/"//g' | tr -d '\n')
|
||||
|
||||
|
||||
# Check if IP retrieval was successful
|
||||
if [[ -z "$IP" ]]; then
|
||||
# If not, get the internal IP address
|
||||
@@ -2534,7 +2534,7 @@ function openim::util::get_server_ip() {
|
||||
# If curl is not available, get the internal IP address
|
||||
IP=$(ip addr show | grep 'inet ' | grep -v 127.0.0.1 | awk '{print $2}' | cut -d'/' -f1 | head -n 1)
|
||||
fi
|
||||
|
||||
|
||||
# Return the fetched IP address
|
||||
echo "$IP"
|
||||
}
|
||||
@@ -2580,7 +2580,7 @@ function openim::util::set_max_fd() {
|
||||
if [ "$desired_fd" = "maximum" ] || [ "$desired_fd" = "max" ]; then
|
||||
desired_fd="$max_fd_limit"
|
||||
fi
|
||||
|
||||
|
||||
# Check if desired_fd is less than or equal to max_fd_limit.
|
||||
if [ "$desired_fd" -le "$max_fd_limit" ]; then
|
||||
ulimit -n "$desired_fd"
|
||||
@@ -2696,7 +2696,7 @@ function openim::util::run::relative() {
|
||||
|
||||
# This function retrieves the IP address of the current server.
|
||||
# It primarily uses the `curl` command to fetch the public IP address from ifconfig.me.
|
||||
# If curl or the service is not available, it falls back
|
||||
# If curl or the service is not available, it falls back
|
||||
# to the internal IP address provided by the hostname command.
|
||||
# TODO: If a delay is found, the delay needs to be addressed
|
||||
function openim::util::get_server_ip() {
|
||||
@@ -2704,7 +2704,7 @@ function openim::util::get_server_ip() {
|
||||
if command -v curl &> /dev/null; then
|
||||
# Try to retrieve the public IP address using curl and ifconfig.me
|
||||
IP=$(dig TXT +short o-o.myaddr.l.google.com @ns1.google.com | sed 's/"//g' | tr -d '\n')
|
||||
|
||||
|
||||
# Check if IP retrieval was successful
|
||||
if [[ -z "$IP" ]]; then
|
||||
# If not, get the internal IP address
|
||||
@@ -2714,7 +2714,7 @@ function openim::util::get_server_ip() {
|
||||
# If curl is not available, get the internal IP address
|
||||
IP=$(ip addr show | grep 'inet ' | grep -v 127.0.0.1 | awk '{print $2}' | cut -d'/' -f1 | head -n 1)
|
||||
fi
|
||||
|
||||
|
||||
# Return the fetched IP address
|
||||
echo "$IP"
|
||||
}
|
||||
@@ -2760,7 +2760,7 @@ function openim::util::set_max_fd() {
|
||||
if [ "$desired_fd" = "maximum" ] || [ "$desired_fd" = "max" ]; then
|
||||
desired_fd="$max_fd_limit"
|
||||
fi
|
||||
|
||||
|
||||
# Check if desired_fd is less than or equal to max_fd_limit.
|
||||
if [ "$desired_fd" -le "$max_fd_limit" ]; then
|
||||
ulimit -n "$desired_fd"
|
||||
|
||||
+14
-14
@@ -12,7 +12,7 @@
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Version management helpers. These functions help to set, save and load the
|
||||
# following variables:
|
||||
@@ -35,7 +35,7 @@ openim::version::get_version_vars() {
|
||||
openim::version::load_version_vars "${OPENIM_GIT_VERSION_FILE}"
|
||||
return
|
||||
fi
|
||||
|
||||
|
||||
# If the iamrnetes source was exported through git archive, then
|
||||
# we likely don't have a git tree, but these magic values may be filled in.
|
||||
# shellcheck disable=SC2016,SC2050
|
||||
@@ -48,12 +48,12 @@ openim::version::get_version_vars() {
|
||||
# something like 'HEAD -> release-1.8, tag: v1.8.3' where then 'tag: '
|
||||
# can be extracted from it.
|
||||
if [[ '$Format:%D$' =~ tag:\ (v[^ ,]+) ]]; then
|
||||
OPENIM_GIT_VERSION="${BASH_REMATCH[1]}"
|
||||
OPENIM_GIT_VERSION="${BASH_REMATCH[1]}"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
local git=(git --work-tree "${OPENIM_ROOT}")
|
||||
|
||||
|
||||
if [[ -n ${OPENIM_GIT_COMMIT-} ]] || OPENIM_GIT_COMMIT=$("${git[@]}" rev-parse "HEAD^{commit}" 2>/dev/null); then
|
||||
if [[ -z ${OPENIM_GIT_TREE_STATE-} ]]; then
|
||||
# Check if the tree is dirty. default to dirty
|
||||
@@ -63,7 +63,7 @@ openim::version::get_version_vars() {
|
||||
OPENIM_GIT_TREE_STATE="dirty"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# Use git describe to find the version based on tags.
|
||||
if [[ -n ${OPENIM_GIT_VERSION-} ]] || OPENIM_GIT_VERSION=$("${git[@]}" describe --tags --always --match='v*' 2>/dev/null); then
|
||||
# This translates the "git describe" to an actual semver.org
|
||||
@@ -81,7 +81,7 @@ openim::version::get_version_vars() {
|
||||
# shellcheck disable=SC2001
|
||||
# We have distance to subversion (v1.1.0-subversion-1-gCommitHash)
|
||||
OPENIM_GIT_VERSION=$(echo "${OPENIM_GIT_VERSION}" | sed "s/-\([0-9]\{1,\}\)-g\([0-9a-f]\{14\}\)$/.\1\+\2/")
|
||||
elif [[ "${DASHES_IN_VERSION}" == "--" ]] ; then
|
||||
elif [[ "${DASHES_IN_VERSION}" == "--" ]] ; then
|
||||
# shellcheck disable=SC2001
|
||||
# We have distance to base tag (v1.1.0-1-gCommitHash)
|
||||
OPENIM_GIT_VERSION=$(echo "${OPENIM_GIT_VERSION}" | sed "s/-g\([0-9a-f]\{14\}\)$/+\1/")
|
||||
@@ -94,7 +94,7 @@ openim::version::get_version_vars() {
|
||||
#OPENIM_GIT_VERSION+="-dirty"
|
||||
:
|
||||
fi
|
||||
|
||||
|
||||
# Try to match the "git describe" output to a regex to try to extract
|
||||
# the "major" and "minor" versions and whether this is the exact tagged
|
||||
# version or whether the tree is between two tagged versions.
|
||||
@@ -105,12 +105,12 @@ openim::version::get_version_vars() {
|
||||
OPENIM_GIT_MINOR+="+"
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# If OPENIM_GIT_VERSION is not a valid Semantic Version, then refuse to build.
|
||||
if ! [[ "${OPENIM_GIT_VERSION}" =~ ^v([0-9]+)\.([0-9]+)(\.[0-9]+)?(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$ ]]; then
|
||||
echo "OPENIM_GIT_VERSION should be a valid Semantic Version. Current value: ${OPENIM_GIT_VERSION}"
|
||||
echo "Please see more details here: https://semver.org"
|
||||
exit 1
|
||||
echo "OPENIM_GIT_VERSION should be a valid Semantic Version. Current value: ${OPENIM_GIT_VERSION}"
|
||||
echo "Please see more details here: https://semver.org"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -123,7 +123,7 @@ openim::version::save_version_vars() {
|
||||
echo "!!! Internal error. No file specified in openim::version::save_version_vars"
|
||||
return 1
|
||||
}
|
||||
|
||||
|
||||
cat <<EOF >"${version_file}"
|
||||
OPENIM_GIT_COMMIT='${OPENIM_GIT_COMMIT-}'
|
||||
OPENIM_GIT_TREE_STATE='${OPENIM_GIT_TREE_STATE-}'
|
||||
@@ -140,6 +140,6 @@ openim::version::load_version_vars() {
|
||||
echo "!!! Internal error. No file specified in openim::version::load_version_vars"
|
||||
return 1
|
||||
}
|
||||
|
||||
|
||||
source "${version_file}"
|
||||
}
|
||||
|
||||
@@ -73,7 +73,8 @@ endif
|
||||
ifeq ($(origin VERSION), undefined)
|
||||
# VERSION := $(shell git describe --tags --always --match='v*')
|
||||
# git describe --tags --always --match="v*" --dirty
|
||||
VERSION := $(shell git describe --tags --always --match="v*" --dirty | sed 's/-/./g') #v2.3.3.631.g00abdc9b.dirty
|
||||
# VERSION := $(shell git describe --tags --always --match="v*" --dirty | sed 's/-/./g') #v2.3.3.631.g00abdc9b.dirty
|
||||
VERSION := $(shell git describe --tags --always --match='v*')
|
||||
# v2.3.3: git tag
|
||||
endif
|
||||
|
||||
@@ -100,7 +101,7 @@ endif
|
||||
# The OS must be linux when building docker images
|
||||
# PLATFORMS ?= linux_amd64 linux_arm64
|
||||
# The OS can be linux/windows/darwin when building binaries
|
||||
PLATFORMS ?= linux_s390x linux_mips64 linux_mips64le darwin_amd64 windows_amd64 linux_amd64 linux_arm64 linux_ppc64le # wasip1_wasm
|
||||
PLATFORMS ?= linux_s390x linux_mips64 linux_mips64le darwin_amd64 darwin_arm64 windows_amd64 linux_amd64 linux_arm64 linux_ppc64le # wasip1_wasm
|
||||
|
||||
# set a specific PLATFORM, defaults to the host platform
|
||||
ifeq ($(origin PLATFORM), undefined)
|
||||
@@ -125,11 +126,11 @@ APIROOT=$(ROOT_DIR)/pkg/proto
|
||||
|
||||
# Linux command settings
|
||||
# TODO: Whether you need to join utils?
|
||||
FIND := find . ! -path './utils/*' ! -path './vendor/*' ! -path './third_party/*'
|
||||
FIND := find . ! -path './utils/*' ! -path './vendor/*' ! -path './third_party/*' ! -path './components/*' ! -path './logs/*'
|
||||
XARGS := xargs -r --no-run-if-empty
|
||||
|
||||
# Linux command settings-CODE DIRS Copyright
|
||||
CODE_DIRS := $(ROOT_DIR)/pkg $(ROOT_DIR)/cmd $(ROOT_DIR)/config $(ROOT_DIR)/.docker-compose_cfg $(ROOT_DIR)/internal $(ROOT_DIR)/scripts $(ROOT_DIR)/test $(ROOT_DIR)/.github $(ROOT_DIR)/build $(ROOT_DIR)/tools $(ROOT_DIR)/deployments
|
||||
CODE_DIRS := $(ROOT_DIR)/pkg $(ROOT_DIR)/cmd $(ROOT_DIR)/config $(ROOT_DIR)/internal $(ROOT_DIR)/scripts $(ROOT_DIR)/test $(ROOT_DIR)/.github $(ROOT_DIR)/build $(ROOT_DIR)/tools $(ROOT_DIR)/deployments
|
||||
FINDS := find $(CODE_DIRS)
|
||||
|
||||
# Makefile settings: Select different behaviors by determining whether V option is set
|
||||
|
||||
@@ -244,7 +244,7 @@ go.imports: tools.verify.goimports
|
||||
|
||||
## go.verify: execute all verity scripts.
|
||||
.PHONY: go.verify
|
||||
go.verify:
|
||||
go.verify: tools.verify.misspell
|
||||
@echo "Starting verification..."
|
||||
@scripts_list=$$(find $(ROOT_DIR)/scripts -type f -name 'verify-*' | sort); \
|
||||
for script in $$scripts_list; do \
|
||||
|
||||
@@ -45,7 +45,8 @@ endif
|
||||
IMAGES_DIR ?= $(wildcard ${ROOT_DIR}/build/images/*)
|
||||
# Determine images names by stripping out the dir names, and filter out the undesired directories
|
||||
# IMAGES ?= $(filter-out Dockerfile,$(foreach image,${IMAGES_DIR},$(notdir ${image})))
|
||||
IMAGES ?= $(filter-out Dockerfile openim-tools openim-cmdutils,$(foreach image,${IMAGES_DIR},$(notdir ${image})))
|
||||
IMAGES ?= $(filter-out Dockerfile openim-tools openim-rpc-extend-msg openim-rpc-encryption openim-cmdutils,$(foreach image,${IMAGES_DIR},$(notdir ${image})))
|
||||
# IMAGES ?= $(filter-out Dockerfile openim-tools openim-cmdutils,$(foreach image,${IMAGES_DIR},$(notdir ${image}))) # !pro
|
||||
|
||||
ifeq (${IMAGES},)
|
||||
$(error Could not determine IMAGES, set ROOT_DIR or run in source dir)
|
||||
|
||||
@@ -146,7 +146,7 @@ install.github-release:
|
||||
# amd64
|
||||
.PHONY: install.coscli
|
||||
install.coscli:
|
||||
@wget -q https://ghproxy.com/https://github.com/tencentyun/coscli/releases/download/v0.13.0-beta/coscli-linux -O ${TOOLS_DIR}/coscli
|
||||
@wget -q https://github.com/tencentyun/coscli/releases/download/v0.19.0-beta/coscli-linux -O ${TOOLS_DIR}/coscli
|
||||
@chmod +x ${TOOLS_DIR}/coscli
|
||||
|
||||
## install.coscmd: Install coscmd, used to upload files to cos
|
||||
@@ -217,6 +217,11 @@ install.depth:
|
||||
install.go-callvis:
|
||||
@$(GO) install github.com/ofabry/go-callvis@latest
|
||||
|
||||
## install.misspell
|
||||
.PHONY: install.misspell
|
||||
install.misspell:
|
||||
@$(GO) install github.com/client9/misspell/cmd/misspell@latest
|
||||
|
||||
## install.gothanks: Install gothanks, used to thank go dependencies
|
||||
.PHONY: install.gothanks
|
||||
install.gothanks:
|
||||
|
||||
@@ -18,7 +18,6 @@ mongosh <<EOF
|
||||
use admin
|
||||
db.auth('$MONGO_INITDB_ROOT_USERNAME', '$MONGO_INITDB_ROOT_PASSWORD')
|
||||
|
||||
|
||||
db = db.getSiblingDB('$MONGO_INITDB_DATABASE')
|
||||
db.createUser({
|
||||
user: "$MONGO_OPENIM_USERNAME",
|
||||
@@ -29,4 +28,3 @@ db.createUser({
|
||||
]
|
||||
});
|
||||
EOF
|
||||
|
||||
|
||||
+58
-58
@@ -14,9 +14,9 @@
|
||||
# limitations under the License.
|
||||
|
||||
# Description:
|
||||
# This script automates the process of building and releasing OpenIM,
|
||||
# This script automates the process of building and releasing OpenIM,
|
||||
# including tasks like setting up the environment, verifying prerequisites,
|
||||
# building commands, packaging tarballs, uploading tarballs, creating GitHub
|
||||
# building commands, packaging tarballs, uploading tarballs, creating GitHub
|
||||
# releases, and generating changelogs.
|
||||
#
|
||||
# Usage:
|
||||
@@ -35,12 +35,12 @@
|
||||
# This script can also be executed via the 'make release' command as an alternative.
|
||||
#
|
||||
# Dependencies:
|
||||
# This script depends on external scripts found in the 'scripts' directory and
|
||||
# assumes the presence of necessary tools and permissions for building and
|
||||
# This script depends on external scripts found in the 'scripts' directory and
|
||||
# assumes the presence of necessary tools and permissions for building and
|
||||
# releasing software.
|
||||
#
|
||||
# Note:
|
||||
# The script uses standard bash script practices with error handling,
|
||||
# The script uses standard bash script practices with error handling,
|
||||
# and it defaults to executing all steps if no specific option is provided.
|
||||
#
|
||||
# Build a OpenIM release. This will build the binaries, create the Docker
|
||||
@@ -58,17 +58,17 @@ OPENIM_RELEASE_RUN_TESTS=${OPENIM_RELEASE_RUN_TESTS-y}
|
||||
|
||||
# Function to show help message
|
||||
show_help() {
|
||||
echo "Usage: $(basename $0) [options]"
|
||||
echo "Options:"
|
||||
echo " -h, --help Show this help message"
|
||||
echo " -se, --setup-env Execute setup environment"
|
||||
echo " -vp, --verify-prereqs Execute prerequisites verification"
|
||||
echo " -bc, --build-command Execute build command"
|
||||
echo " -bi, --build-image Execute build image (default: not executed)"
|
||||
echo " -pt, --package-tarballs Execute package tarballs"
|
||||
echo " -ut, --upload-tarballs Execute upload tarballs"
|
||||
echo " -gr, --github-release Execute GitHub release"
|
||||
echo " -gc, --generate-changelog Execute generate changelog"
|
||||
echo "Usage: $(basename $0) [options]"
|
||||
echo "Options:"
|
||||
echo " -h, --help Show this help message"
|
||||
echo " -se, --setup-env Execute setup environment"
|
||||
echo " -vp, --verify-prereqs Execute prerequisites verification"
|
||||
echo " -bc, --build-command Execute build command"
|
||||
echo " -bi, --build-image Execute build image (default: not executed)"
|
||||
echo " -pt, --package-tarballs Execute package tarballs"
|
||||
echo " -ut, --upload-tarballs Execute upload tarballs"
|
||||
echo " -gr, --github-release Execute GitHub release"
|
||||
echo " -gc, --generate-changelog Execute generate changelog"
|
||||
}
|
||||
|
||||
# Initialize all actions to false
|
||||
@@ -83,57 +83,57 @@ perform_generate_changelog=false
|
||||
|
||||
# Process command-line arguments
|
||||
while getopts "hsevpbciptutgrgc-" opt; do
|
||||
case "${opt}" in
|
||||
h) show_help; exit 0 ;;
|
||||
se) perform_setup_env=true ;;
|
||||
vp) perform_verify_prereqs=true ;;
|
||||
bc) perform_build_command=true ;;
|
||||
bi) perform_build_image=true ;; # Handling new option
|
||||
pt) perform_package_tarballs=true ;;
|
||||
ut) perform_upload_tarballs=true ;;
|
||||
gr) perform_github_release=true ;;
|
||||
gc) perform_generate_changelog=true ;;
|
||||
--) case "${OPTARG}" in
|
||||
help) show_help; exit 0 ;;
|
||||
setup-env) perform_setup_env=true ;;
|
||||
verify-prereqs) perform_verify_prereqs=true ;;
|
||||
build-command) perform_build_command=true ;;
|
||||
build-image) perform_build_image=true ;; # Handling new long option
|
||||
package-tarballs) perform_package_tarballs=true ;;
|
||||
upload-tarballs) perform_upload_tarballs=true ;;
|
||||
github-release) perform_github_release=true ;;
|
||||
generate-changelog) perform_generate_changelog=true ;;
|
||||
*) echo "Invalid option: --${OPTARG}"; show_help; exit 1 ;;
|
||||
esac ;;
|
||||
*) show_help; exit 1 ;;
|
||||
esac
|
||||
case "${opt}" in
|
||||
h) show_help; exit 0 ;;
|
||||
se) perform_setup_env=true ;;
|
||||
vp) perform_verify_prereqs=true ;;
|
||||
bc) perform_build_command=true ;;
|
||||
bi) perform_build_image=true ;; # Handling new option
|
||||
pt) perform_package_tarballs=true ;;
|
||||
ut) perform_upload_tarballs=true ;;
|
||||
gr) perform_github_release=true ;;
|
||||
gc) perform_generate_changelog=true ;;
|
||||
--) case "${OPTARG}" in
|
||||
help) show_help; exit 0 ;;
|
||||
setup-env) perform_setup_env=true ;;
|
||||
verify-prereqs) perform_verify_prereqs=true ;;
|
||||
build-command) perform_build_command=true ;;
|
||||
build-image) perform_build_image=true ;; # Handling new long option
|
||||
package-tarballs) perform_package_tarballs=true ;;
|
||||
upload-tarballs) perform_upload_tarballs=true ;;
|
||||
github-release) perform_github_release=true ;;
|
||||
generate-changelog) perform_generate_changelog=true ;;
|
||||
*) echo "Invalid option: --${OPTARG}"; show_help; exit 1 ;;
|
||||
esac ;;
|
||||
*) show_help; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Enable all actions by default if no options are provided
|
||||
if [ "$#" -eq 0 ]; then
|
||||
perform_setup_env=true
|
||||
perform_verify_prereqs=true
|
||||
perform_build_command=true
|
||||
perform_package_tarballs=true
|
||||
perform_upload_tarballs=true
|
||||
perform_github_release=true
|
||||
perform_generate_changelog=true
|
||||
# TODO: Not enabling build_image by default
|
||||
# perform_build_image=true
|
||||
perform_setup_env=true
|
||||
perform_verify_prereqs=true
|
||||
perform_build_command=true
|
||||
perform_package_tarballs=true
|
||||
perform_upload_tarballs=true
|
||||
perform_github_release=true
|
||||
perform_generate_changelog=true
|
||||
# TODO: Not enabling build_image by default
|
||||
# perform_build_image=true
|
||||
fi
|
||||
|
||||
# Function to perform actions
|
||||
perform_action() {
|
||||
local flag=$1
|
||||
local message=$2
|
||||
local command=$3
|
||||
|
||||
if [ "$flag" == true ]; then
|
||||
openim::log::info "## $message..."
|
||||
if ! $command; then
|
||||
openim::log::errexit "Error in $message"
|
||||
fi
|
||||
local flag=$1
|
||||
local message=$2
|
||||
local command=$3
|
||||
|
||||
if [ "$flag" == true ]; then
|
||||
openim::log::info "## $message..."
|
||||
if ! eval "$command"; then
|
||||
openim::log::errexit "Error in $message"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
echo "Starting script execution..."
|
||||
|
||||
+30
-28
@@ -32,39 +32,41 @@ if [[ $? -ne 0 ]]; then
|
||||
fi
|
||||
set -o errexit
|
||||
|
||||
"${OPENIM_ROOT}"/scripts/init-config.sh --skip
|
||||
|
||||
echo "You need to start the following scripts in order: ${OPENIM_SERVER_SCRIPTARIES[@]}"
|
||||
openim::log::install_errexit
|
||||
|
||||
# Function to execute the scripts.
|
||||
function execute_scripts() {
|
||||
for script_path in "${OPENIM_SERVER_SCRIPT_START_LIST[@]}"; do
|
||||
# Extract the script name without extension for argument generation.
|
||||
script_name_with_prefix=$(basename "$script_path" .sh)
|
||||
|
||||
# Remove the "openim-" prefix.
|
||||
script_name=${script_name_with_prefix#openim-}
|
||||
|
||||
# Construct the argument based on the script name.
|
||||
arg="openim::${script_name}::start"
|
||||
|
||||
# Check if the script file exists and is executable.
|
||||
if [[ -x "$script_path" ]]; then
|
||||
openim::log::status "Starting script: ${script_path##*/}" # Log the script name.
|
||||
|
||||
# Execute the script with the constructed argument.
|
||||
"$script_path" "$arg"
|
||||
|
||||
# Check if the script executed successfully.
|
||||
if [[ $? -eq 0 ]]; then
|
||||
openim::log::info "${script_path##*/} executed successfully."
|
||||
else
|
||||
openim::log::errexit "Error executing ${script_path##*/}."
|
||||
fi
|
||||
else
|
||||
openim::log::errexit "Script ${script_path##*/} is missing or not executable."
|
||||
fi
|
||||
done
|
||||
sleep 0.5
|
||||
for script_path in "${OPENIM_SERVER_SCRIPT_START_LIST[@]}"; do
|
||||
# Extract the script name without extension for argument generation.
|
||||
script_name_with_prefix=$(basename "$script_path" .sh)
|
||||
|
||||
# Remove the "openim-" prefix.
|
||||
script_name=${script_name_with_prefix#openim-}
|
||||
|
||||
# Construct the argument based on the script name.
|
||||
arg="openim::${script_name}::start"
|
||||
|
||||
# Check if the script file exists and is executable.
|
||||
if [[ -x "$script_path" ]]; then
|
||||
openim::log::status "Starting script: ${script_path##*/}" # Log the script name.
|
||||
|
||||
# Execute the script with the constructed argument.
|
||||
"$script_path" "$arg"
|
||||
|
||||
# Check if the script executed successfully.
|
||||
if [[ $? -eq 0 ]]; then
|
||||
openim::log::info "${script_path##*/} executed successfully."
|
||||
else
|
||||
openim::log::errexit "Error executing ${script_path##*/}."
|
||||
fi
|
||||
else
|
||||
openim::log::errexit "Script ${script_path##*/} is missing or not executable."
|
||||
fi
|
||||
done
|
||||
sleep 0.5
|
||||
}
|
||||
|
||||
|
||||
|
||||
+11
-2
@@ -14,7 +14,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
# This script is stop all openim service
|
||||
#
|
||||
#
|
||||
# Usage: `scripts/stop.sh`.
|
||||
# Encapsulated as: `make stop`.
|
||||
|
||||
@@ -34,4 +34,13 @@ openim::util::stop_services_on_ports ${OPENIM_SERVER_PORT_LISTARIES[@]}
|
||||
|
||||
echo -e "\n++ Stop all processes in the path ${OPENIM_OUTPUT_HOSTBIN}"
|
||||
|
||||
openim::util::stop_services_with_name "${OPENIM_OUTPUT_HOSTBIN}"
|
||||
openim::util::stop_services_with_name "${OPENIM_OUTPUT_HOSTBIN}"
|
||||
|
||||
echo -n "Stopping services 15 seconds."
|
||||
for i in {1..15}; do
|
||||
echo -n "."
|
||||
sleep 1
|
||||
done
|
||||
echo -e "\nServices stopped."
|
||||
|
||||
openim::log::success "✨ Wait 15 seconds for all processes to be killed"
|
||||
@@ -23,15 +23,15 @@ set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
|
||||
source "${OPENIM_ROOT}/hack/lib/init.sh"
|
||||
source "${OPENIM_ROOT}/scripts/lib/init.sh"
|
||||
|
||||
openim::golang::setup_env
|
||||
|
||||
BINS=(
|
||||
gendocs
|
||||
genopenimdocs
|
||||
genman
|
||||
genyaml
|
||||
gendocs
|
||||
genopenimdocs
|
||||
genman
|
||||
genyaml
|
||||
)
|
||||
make -C "${OPENIM_ROOT}" WHAT="${BINS[*]}"
|
||||
|
||||
|
||||
@@ -19,9 +19,9 @@ set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
|
||||
source "${OPENIM_ROOT}/hack/lib/init.sh"
|
||||
source "${OPENIM_ROOT}/scripts/lib/init.sh"
|
||||
|
||||
kube::golang::setup_env
|
||||
openim::golang::setup_env
|
||||
|
||||
cd "${OPENIM_ROOT}"
|
||||
|
||||
@@ -40,4 +40,4 @@ find_files() {
|
||||
}
|
||||
|
||||
export GO111MODULE=on
|
||||
find_files | xargs go run tools/yamlfmt/main.go
|
||||
find_files | xargs go run tools/yamlfmt/yamlfmt.go
|
||||
@@ -43,6 +43,54 @@ disabled=(
|
||||
1091
|
||||
# this lint prefers command -v to which, they are not the same
|
||||
2230
|
||||
# Error SC2155 indicates that you should separate variable declaration and assignment to avoid masking the return value of the command.
|
||||
# In Bash scripts, when you declare and assign a local variable at the same time a command is executed, you only get the output of the command, but not the exit status (return value) of the command. #
|
||||
2155
|
||||
# ShellCheck issues SC2086 warnings when you refer to a variable in a script but don't put it in double quotes.This can lead to unexpected behavior when scripts encounter Spaces,
|
||||
# newlines, and wildcards in file names or other data.
|
||||
2086
|
||||
2206
|
||||
|
||||
# TODO: 需要修复,然后开启
|
||||
2034
|
||||
2048
|
||||
2148
|
||||
2059
|
||||
2214
|
||||
2145
|
||||
2128
|
||||
2550
|
||||
2046
|
||||
2181
|
||||
1102
|
||||
2045
|
||||
2068
|
||||
2145
|
||||
2207
|
||||
2231
|
||||
2013
|
||||
2154
|
||||
2120
|
||||
1083
|
||||
2001
|
||||
2012
|
||||
2016
|
||||
2164
|
||||
2223
|
||||
2166
|
||||
2119
|
||||
2162
|
||||
2295
|
||||
2002
|
||||
2004
|
||||
2202
|
||||
2178
|
||||
2064
|
||||
2260
|
||||
2043
|
||||
2178
|
||||
2044
|
||||
2153
|
||||
)
|
||||
# comma separate for passing to shellcheck
|
||||
join_by() {
|
||||
@@ -65,14 +113,18 @@ cd "${OPENIM_ROOT}"
|
||||
# forked should be linted and fixed.
|
||||
all_shell_scripts=()
|
||||
while IFS=$'\n' read -r script;
|
||||
do git check-ignore -q "$script" || all_shell_scripts+=("$script");
|
||||
done < <(find . -name "*.sh" \
|
||||
do git check-ignore -q "$script" || all_shell_scripts+=("$script");
|
||||
done < <(find . -name "*.sh" \
|
||||
-not \( \
|
||||
-path ./_\* -o \
|
||||
-path ./.git\* -o \
|
||||
-path ./vendor\* -o \
|
||||
\( -path ./third_party\* -a -not -path ./third_party/forked\* \) \
|
||||
\))
|
||||
-path ./_\* -o \
|
||||
-path ./.git\* -o \
|
||||
-path ./Godeps\* -o \
|
||||
-path ./_output\* -o \
|
||||
-path ./components\* -o \
|
||||
-path ./logs\* -o \
|
||||
-path ./vendor\* -o \
|
||||
\( -path ./third_party\* -a -not -path ./third_party/forked\* \) \
|
||||
\) -print 2>/dev/null)
|
||||
|
||||
# detect if the host machine has the required shellcheck version installed
|
||||
# if so, we will use that instead.
|
||||
@@ -113,8 +165,8 @@ if ${HAVE_SHELLCHECK}; then
|
||||
else
|
||||
openim::log::info "Using shellcheck ${SHELLCHECK_VERSION} docker image."
|
||||
"${DOCKER}" run \
|
||||
--rm -v ""${OPENIM_ROOT}":"${OPENIM_ROOT}"" -w "${OPENIM_ROOT}" \
|
||||
"${SHELLCHECK_IMAGE}" \
|
||||
--rm -v "${OPENIM_ROOT}:${OPENIM_ROOT}" -w "${OPENIM_ROOT}" \
|
||||
"${SHELLCHECK_IMAGE}" \
|
||||
shellcheck "${SHELLCHECK_OPTIONS[@]}" "${all_shell_scripts[@]}" >&2 || res=$?
|
||||
fi
|
||||
|
||||
|
||||
@@ -25,17 +25,8 @@ OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
|
||||
export OPENIM_ROOT
|
||||
source "${OPENIM_ROOT}/scripts/lib/init.sh"
|
||||
|
||||
# Ensure that we find the binaries we build before anything else.
|
||||
export GOBIN="${KUBE_OUTPUT_BINPATH}"
|
||||
PATH="${GOBIN}:${PATH}"
|
||||
|
||||
# Install tools we need
|
||||
pushd ""${OPENIM_ROOT}"/tools" >/dev/null
|
||||
GO111MODULE=on go install github.com/client9/misspell/cmd/misspell
|
||||
popd >/dev/null
|
||||
|
||||
# Spell checking
|
||||
# All the skipping files are defined in scripts/.spelling_failures
|
||||
skipping_file=""${OPENIM_ROOT}"/scripts/.spelling_failures"
|
||||
skipping_file="${OPENIM_ROOT}/scripts/.spelling_failures"
|
||||
failing_packages=$(sed "s| | -e |g" "${skipping_file}")
|
||||
git ls-files | grep -v -e "${failing_packages}" | xargs misspell -i "Creater,creater,ect" -error -o stderr
|
||||
git ls-files | grep -v -e "${failing_packages}" | xargs "$OPENIM_ROOT/_output/tools/misspell" -i "Creater,creater,ect" -error -o stderr
|
||||
|
||||
@@ -33,7 +33,7 @@ cd "${OPENIM_ROOT}"
|
||||
ret=0
|
||||
TYPECHECK_SERIAL="${TYPECHECK_SERIAL:-false}"
|
||||
scripts/run-in-gopath.sh \
|
||||
go run test/typecheck/typecheck.go "$@" "--serial=$TYPECHECK_SERIAL" || ret=$?
|
||||
go run test/typecheck/typecheck.go "$@" "--serial=$TYPECHECK_SERIAL" || ret=$?
|
||||
if [[ $ret -ne 0 ]]; then
|
||||
openim::log::error "Type Check has failed. This may cause cross platform build failures." >&2
|
||||
openim::log::error "Please see https://github.com/openimsdk/open-im-server/tree/main/test/typecheck for more information." >&2
|
||||
|
||||
@@ -36,13 +36,13 @@ openim::util::trap_add "git worktree remove -f ${_tmpdir}" EXIT
|
||||
cd "${_tmpdir}"
|
||||
|
||||
# Format YAML files
|
||||
hack/update-yamlfmt.sh
|
||||
scripts/update-yamlfmt.sh
|
||||
|
||||
# Test for diffs
|
||||
diffs=$(git status --porcelain | wc -l)
|
||||
if [[ ${diffs} -gt 0 ]]; then
|
||||
echo "YAML files need to be formatted" >&2
|
||||
git diff
|
||||
echo "Please run 'hack/update-yamlfmt.sh'" >&2
|
||||
echo "Please run 'scripts/update-yamlfmt.sh'" >&2
|
||||
exit 1
|
||||
fi
|
||||
+119
-119
@@ -30,119 +30,119 @@ Usage:
|
||||
Timeout in seconds, zero for no timeout
|
||||
-- COMMAND ARGS Execute command with args after the test finishes
|
||||
USAGE
|
||||
exit 1
|
||||
exit 1
|
||||
}
|
||||
|
||||
wait_for() {
|
||||
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
|
||||
echoerr "$WAITFORIT_cmdname: waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
|
||||
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
|
||||
echoerr "$WAITFORIT_cmdname: waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
|
||||
else
|
||||
echoerr "$WAITFORIT_cmdname: waiting for $WAITFORIT_HOST:$WAITFORIT_PORT without a timeout"
|
||||
fi
|
||||
WAITFORIT_start_ts=$(date +%s)
|
||||
while :
|
||||
do
|
||||
if [[ $WAITFORIT_ISBUSY -eq 1 ]]; then
|
||||
nc -z $WAITFORIT_HOST $WAITFORIT_PORT
|
||||
WAITFORIT_result=$?
|
||||
else
|
||||
echoerr "$WAITFORIT_cmdname: waiting for $WAITFORIT_HOST:$WAITFORIT_PORT without a timeout"
|
||||
(echo -n > /dev/tcp/$WAITFORIT_HOST/$WAITFORIT_PORT) >/dev/null 2>&1
|
||||
WAITFORIT_result=$?
|
||||
fi
|
||||
WAITFORIT_start_ts=$(date +%s)
|
||||
while :
|
||||
do
|
||||
if [[ $WAITFORIT_ISBUSY -eq 1 ]]; then
|
||||
nc -z $WAITFORIT_HOST $WAITFORIT_PORT
|
||||
WAITFORIT_result=$?
|
||||
else
|
||||
(echo -n > /dev/tcp/$WAITFORIT_HOST/$WAITFORIT_PORT) >/dev/null 2>&1
|
||||
WAITFORIT_result=$?
|
||||
fi
|
||||
if [[ $WAITFORIT_result -eq 0 ]]; then
|
||||
WAITFORIT_end_ts=$(date +%s)
|
||||
echoerr "$WAITFORIT_cmdname: $WAITFORIT_HOST:$WAITFORIT_PORT is available after $((WAITFORIT_end_ts - WAITFORIT_start_ts)) seconds"
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
return $WAITFORIT_result
|
||||
if [[ $WAITFORIT_result -eq 0 ]]; then
|
||||
WAITFORIT_end_ts=$(date +%s)
|
||||
echoerr "$WAITFORIT_cmdname: $WAITFORIT_HOST:$WAITFORIT_PORT is available after $((WAITFORIT_end_ts - WAITFORIT_start_ts)) seconds"
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
return $WAITFORIT_result
|
||||
}
|
||||
|
||||
wait_for_wrapper() {
|
||||
# In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692
|
||||
if [[ $WAITFORIT_QUIET -eq 1 ]]; then
|
||||
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --quiet --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
|
||||
else
|
||||
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
|
||||
fi
|
||||
WAITFORIT_PID=$!
|
||||
trap "kill -INT -$WAITFORIT_PID" INT
|
||||
wait $WAITFORIT_PID
|
||||
WAITFORIT_RESULT=$?
|
||||
if [[ $WAITFORIT_RESULT -ne 0 ]]; then
|
||||
echoerr "$WAITFORIT_cmdname: timeout occurred after waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
|
||||
fi
|
||||
return $WAITFORIT_RESULT
|
||||
# In order to support SIGINT during timeout: http://unix.stackexchange.com/a/57692
|
||||
if [[ $WAITFORIT_QUIET -eq 1 ]]; then
|
||||
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --quiet --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
|
||||
else
|
||||
timeout $WAITFORIT_BUSYTIMEFLAG $WAITFORIT_TIMEOUT $0 --child --host=$WAITFORIT_HOST --port=$WAITFORIT_PORT --timeout=$WAITFORIT_TIMEOUT &
|
||||
fi
|
||||
WAITFORIT_PID=$!
|
||||
trap "kill -INT -$WAITFORIT_PID" INT
|
||||
wait $WAITFORIT_PID
|
||||
WAITFORIT_RESULT=$?
|
||||
if [[ $WAITFORIT_RESULT -ne 0 ]]; then
|
||||
echoerr "$WAITFORIT_cmdname: timeout occurred after waiting $WAITFORIT_TIMEOUT seconds for $WAITFORIT_HOST:$WAITFORIT_PORT"
|
||||
fi
|
||||
return $WAITFORIT_RESULT
|
||||
}
|
||||
|
||||
# process arguments
|
||||
while [[ $# -gt 0 ]]
|
||||
do
|
||||
case "$1" in
|
||||
*:* )
|
||||
WAITFORIT_hostport=(${1//:/ })
|
||||
WAITFORIT_HOST=${WAITFORIT_hostport[0]}
|
||||
WAITFORIT_PORT=${WAITFORIT_hostport[1]}
|
||||
shift 1
|
||||
;;
|
||||
--child)
|
||||
WAITFORIT_CHILD=1
|
||||
shift 1
|
||||
;;
|
||||
-q | --quiet)
|
||||
WAITFORIT_QUIET=1
|
||||
shift 1
|
||||
;;
|
||||
-s | --strict)
|
||||
WAITFORIT_STRICT=1
|
||||
shift 1
|
||||
;;
|
||||
-h)
|
||||
WAITFORIT_HOST="$2"
|
||||
if [[ $WAITFORIT_HOST == "" ]]; then break; fi
|
||||
shift 2
|
||||
;;
|
||||
--host=*)
|
||||
WAITFORIT_HOST="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
-p)
|
||||
WAITFORIT_PORT="$2"
|
||||
if [[ $WAITFORIT_PORT == "" ]]; then break; fi
|
||||
shift 2
|
||||
;;
|
||||
--port=*)
|
||||
WAITFORIT_PORT="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
-t)
|
||||
WAITFORIT_TIMEOUT="$2"
|
||||
if [[ $WAITFORIT_TIMEOUT == "" ]]; then break; fi
|
||||
shift 2
|
||||
;;
|
||||
--timeout=*)
|
||||
WAITFORIT_TIMEOUT="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
WAITFORIT_CLI=("$@")
|
||||
break
|
||||
;;
|
||||
--help)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
echoerr "Unknown argument: $1"
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
case "$1" in
|
||||
*:* )
|
||||
WAITFORIT_hostport=(${1//:/ })
|
||||
WAITFORIT_HOST=${WAITFORIT_hostport[0]}
|
||||
WAITFORIT_PORT=${WAITFORIT_hostport[1]}
|
||||
shift 1
|
||||
;;
|
||||
--child)
|
||||
WAITFORIT_CHILD=1
|
||||
shift 1
|
||||
;;
|
||||
-q | --quiet)
|
||||
WAITFORIT_QUIET=1
|
||||
shift 1
|
||||
;;
|
||||
-s | --strict)
|
||||
WAITFORIT_STRICT=1
|
||||
shift 1
|
||||
;;
|
||||
-h)
|
||||
WAITFORIT_HOST="$2"
|
||||
if [[ $WAITFORIT_HOST == "" ]]; then break; fi
|
||||
shift 2
|
||||
;;
|
||||
--host=*)
|
||||
WAITFORIT_HOST="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
-p)
|
||||
WAITFORIT_PORT="$2"
|
||||
if [[ $WAITFORIT_PORT == "" ]]; then break; fi
|
||||
shift 2
|
||||
;;
|
||||
--port=*)
|
||||
WAITFORIT_PORT="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
-t)
|
||||
WAITFORIT_TIMEOUT="$2"
|
||||
if [[ $WAITFORIT_TIMEOUT == "" ]]; then break; fi
|
||||
shift 2
|
||||
;;
|
||||
--timeout=*)
|
||||
WAITFORIT_TIMEOUT="${1#*=}"
|
||||
shift 1
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
WAITFORIT_CLI=("$@")
|
||||
break
|
||||
;;
|
||||
--help)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
echoerr "Unknown argument: $1"
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if [[ "$WAITFORIT_HOST" == "" || "$WAITFORIT_PORT" == "" ]]; then
|
||||
echoerr "Error: you need to provide a host and port to test."
|
||||
usage
|
||||
echoerr "Error: you need to provide a host and port to test."
|
||||
usage
|
||||
fi
|
||||
|
||||
WAITFORIT_TIMEOUT=${WAITFORIT_TIMEOUT:-15}
|
||||
@@ -156,36 +156,36 @@ WAITFORIT_TIMEOUT_PATH=$(realpath $WAITFORIT_TIMEOUT_PATH 2>/dev/null || readlin
|
||||
|
||||
WAITFORIT_BUSYTIMEFLAG=""
|
||||
if [[ $WAITFORIT_TIMEOUT_PATH =~ "busybox" ]]; then
|
||||
WAITFORIT_ISBUSY=1
|
||||
# Check if busybox timeout uses -t flag
|
||||
# (recent Alpine versions don't support -t anymore)
|
||||
if timeout &>/dev/stdout | grep -q -e '-t '; then
|
||||
WAITFORIT_BUSYTIMEFLAG="-t"
|
||||
fi
|
||||
WAITFORIT_ISBUSY=1
|
||||
# Check if busybox timeout uses -t flag
|
||||
# (recent Alpine versions don't support -t anymore)
|
||||
if timeout &>/dev/stdout | grep -q -e '-t '; then
|
||||
WAITFORIT_BUSYTIMEFLAG="-t"
|
||||
fi
|
||||
else
|
||||
WAITFORIT_ISBUSY=0
|
||||
WAITFORIT_ISBUSY=0
|
||||
fi
|
||||
|
||||
if [[ $WAITFORIT_CHILD -gt 0 ]]; then
|
||||
wait_for
|
||||
WAITFORIT_RESULT=$?
|
||||
exit $WAITFORIT_RESULT
|
||||
else
|
||||
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
|
||||
wait_for_wrapper
|
||||
WAITFORIT_RESULT=$?
|
||||
else
|
||||
wait_for
|
||||
WAITFORIT_RESULT=$?
|
||||
exit $WAITFORIT_RESULT
|
||||
else
|
||||
if [[ $WAITFORIT_TIMEOUT -gt 0 ]]; then
|
||||
wait_for_wrapper
|
||||
WAITFORIT_RESULT=$?
|
||||
else
|
||||
wait_for
|
||||
WAITFORIT_RESULT=$?
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ $WAITFORIT_CLI != "" ]]; then
|
||||
if [[ $WAITFORIT_RESULT -ne 0 && $WAITFORIT_STRICT -eq 1 ]]; then
|
||||
echoerr "$WAITFORIT_cmdname: strict mode, refusing to execute subprocess"
|
||||
exit $WAITFORIT_RESULT
|
||||
fi
|
||||
exec "${WAITFORIT_CLI[@]}"
|
||||
else
|
||||
if [[ $WAITFORIT_RESULT -ne 0 && $WAITFORIT_STRICT -eq 1 ]]; then
|
||||
echoerr "$WAITFORIT_cmdname: strict mode, refusing to execute subprocess"
|
||||
exit $WAITFORIT_RESULT
|
||||
fi
|
||||
exec "${WAITFORIT_CLI[@]}"
|
||||
else
|
||||
exit $WAITFORIT_RESULT
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user