@wjwjq/release-helper 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierignore +13 -0
- package/.prettierrc.json +19 -0
- package/README.md +29 -0
- package/bin/index.js +7 -0
- package/dist/cli.js +56 -0
- package/dist/deploy/nginx/README.md +1 -0
- package/dist/deploy/nginx/pkg/nginx-arm-ssl1.1.1.tar.gz +0 -0
- package/dist/deploy/nginx/pkg/nginx-x86_64-ssl1.0.2.tar.gz +0 -0
- package/dist/deploy/nginx/pkg/nginx-x86_64-ssl1.1.1.tar.gz +0 -0
- package/dist/deploy/nginx/pkg/nginx-x86_64-ssl3.0.7.tar.gz +0 -0
- package/dist/deploy/nginx/script/common.sh +178 -0
- package/dist/deploy/nginx/script/compile.sh +11 -0
- package/dist/deploy/nginx/script/fix.sh +24 -0
- package/dist/deploy/nginx/script/https.sh +79 -0
- package/dist/deploy/nginx/script/install.sh +99 -0
- package/dist/deploy/nginx/script/prompt.sh +10 -0
- package/dist/deploy/nginx/script/upgrade.sh +7 -0
- package/dist/deploy/pkg/nginx/nginx.service.tpl +33 -0
- package/dist/deploy/script/common.sh +183 -0
- package/dist/deploy/script/install.sh +51 -0
- package/dist/deploy/script/nginx.sh +156 -0
- package/dist/deploy/script/prompt.sh +98 -0
- package/dist/deploy/script/readme.md +10 -0
- package/dist/deploy/script/upgrade.sh +50 -0
- package/dist/logger.js +20 -0
- package/dist/pack.js +111 -0
- package/dist/prepare.js +75 -0
- package/dist/publish.js +238 -0
- package/dist/release.js +200 -0
- package/package.json +71 -0
- package/rollup.config.js +78 -0
- package/src/.release/README.md +23 -0
- package/src/.release/doc//351/203/250/347/275/262/346/211/213/345/206/214.md +426 -0
- package/src/.release/nginx/ca/ca.crt +32 -0
- package/src/.release/nginx/ca/ca.key +54 -0
- package/src/.release/nginx/ca/client.crt +100 -0
- package/src/.release/nginx/ca/client.csr +16 -0
- package/src/.release/nginx/ca/client.p12 +0 -0
- package/src/.release/nginx/ca/client.pem +30 -0
- package/src/.release/nginx/ca/server.crt +101 -0
- package/src/.release/nginx/ca/server.csr +17 -0
- package/src/.release/nginx/ca/server.key +27 -0
- package/src/.release/nginx/ca/server.pem +30 -0
- package/src/.release/nginx/nginx.conf +179 -0
- package/src/.release/release.conf.yaml +9 -0
- package/src/cli.ts +99 -0
- package/src/deploy/nginx/README.md +1 -0
- package/src/deploy/nginx/pkg/nginx-arm-ssl1.1.1.tar.gz +0 -0
- package/src/deploy/nginx/pkg/nginx-x86_64-ssl1.0.2.tar.gz +0 -0
- package/src/deploy/nginx/pkg/nginx-x86_64-ssl1.1.1.tar.gz +0 -0
- package/src/deploy/nginx/pkg/nginx-x86_64-ssl3.0.7.tar.gz +0 -0
- package/src/deploy/nginx/script/common.sh +178 -0
- package/src/deploy/nginx/script/compile.sh +11 -0
- package/src/deploy/nginx/script/fix.sh +24 -0
- package/src/deploy/nginx/script/https.sh +79 -0
- package/src/deploy/nginx/script/install.sh +99 -0
- package/src/deploy/nginx/script/prompt.sh +10 -0
- package/src/deploy/nginx/script/upgrade.sh +7 -0
- package/src/deploy/pkg/nginx/nginx.service.tpl +33 -0
- package/src/deploy/script/common.sh +183 -0
- package/src/deploy/script/install.sh +51 -0
- package/src/deploy/script/nginx.sh +156 -0
- package/src/deploy/script/prompt.sh +98 -0
- package/src/deploy/script/readme.md +10 -0
- package/src/deploy/script/upgrade.sh +50 -0
- package/src/logger.ts +18 -0
- package/src/pack.ts +141 -0
- package/src/prepare.ts +105 -0
- package/src/publish.ts +308 -0
- package/src/release.ts +292 -0
- package/tsconfig.json +14 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# 获取脚本的父目录
|
|
3
|
+
project_path=$(echo "$basepath" | sed -e "s/\/script//")
|
|
4
|
+
|
|
5
|
+
# 请勿修改此处, 此处将在打包时自动替换
|
|
6
|
+
app_name=__APP_NAME__
|
|
7
|
+
|
|
8
|
+
# 静态资源存放目录 eg: /opt/posidon-frontend/
|
|
9
|
+
install_path=__INSTALL_PATH__
|
|
10
|
+
|
|
11
|
+
execute_log_path="/var/log/${app_name}_script_execute_logs"
|
|
12
|
+
|
|
13
|
+
log() {
|
|
14
|
+
now=$(date "+%Y-%m-%d %H:%M:%S")
|
|
15
|
+
echo "$now: $1"
|
|
16
|
+
echo "$now: [info] $1" >>"$execute_log_path"
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
log_success() {
|
|
20
|
+
now=$(date "+%Y-%m-%d %H:%M:%S")
|
|
21
|
+
echo "$(tput setaf 2)""$now": "$1""$(tput sgr0)"
|
|
22
|
+
echo "$now: [success] $1" >>"$execute_log_path"
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
log_error() {
|
|
26
|
+
now=$(date "+%Y-%m-%d %H:%M:%S")
|
|
27
|
+
echo "$(tput setaf 1)""$now": "$1" "$(tput sgr0)"
|
|
28
|
+
echo "$now: [error] $1" >>"$execute_log_path"
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
log "-----------execute ${app_name} script-------------"
|
|
32
|
+
|
|
33
|
+
source "$basepath"/prompt.sh
|
|
34
|
+
|
|
35
|
+
if [[ $(whoami) != "root" ]]; then
|
|
36
|
+
echo "user:root is required!"
|
|
37
|
+
exit 1
|
|
38
|
+
fi
|
|
39
|
+
|
|
40
|
+
if [[ -z "${install_path}" ]]; then
|
|
41
|
+
echo "install path not found"
|
|
42
|
+
exit 1
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
echo "install_path: ${install_path}"
|
|
46
|
+
|
|
47
|
+
source "$basepath"/nginx.sh
|
|
48
|
+
|
|
49
|
+
# 创建用户
|
|
50
|
+
create_user_csri() {
|
|
51
|
+
user="csri"
|
|
52
|
+
group="csri"
|
|
53
|
+
|
|
54
|
+
#create group if not exists
|
|
55
|
+
grep "^$group" /etc/group >&/dev/null
|
|
56
|
+
if [ $? -ne 0 ]; then
|
|
57
|
+
groupadd $group
|
|
58
|
+
fi
|
|
59
|
+
|
|
60
|
+
#create user if not exists
|
|
61
|
+
grep "^$user" /etc/passwd >&/dev/null
|
|
62
|
+
if [ $? -ne 0 ]; then
|
|
63
|
+
useradd -g $group $user
|
|
64
|
+
fi
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
find_nginx_pos() {
|
|
68
|
+
confpath=''
|
|
69
|
+
find / -name "nginx" -print0 >tmpfile
|
|
70
|
+
while IFS= read -r -d $'\0'; do
|
|
71
|
+
if [ -d "$REPLY/conf" ]; then # $prefix/etc/nginx
|
|
72
|
+
confpath="$REPLY/conf.d/"
|
|
73
|
+
break
|
|
74
|
+
elif [ -d "$REPLY/conf.d" ]; then # /etc/nginx
|
|
75
|
+
confpath="$REPLY/conf.d/"
|
|
76
|
+
break
|
|
77
|
+
fi
|
|
78
|
+
done <tmpfile
|
|
79
|
+
rm -f tmpfile
|
|
80
|
+
|
|
81
|
+
echo "$confpath"
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
has_nginx_installed=1
|
|
85
|
+
|
|
86
|
+
# 检查 nginx 是否已安装
|
|
87
|
+
if command -v nginx >/dev/null 2>&1; then
|
|
88
|
+
# echo "Nginx is installed."
|
|
89
|
+
has_nginx_installed=1
|
|
90
|
+
# # 检查 nginx 服务是否正在运行
|
|
91
|
+
# if pgrep nginx >/dev/null 2>&1; then
|
|
92
|
+
# echo "Nginx is running."
|
|
93
|
+
# else
|
|
94
|
+
# echo "Nginx is installed but not running."
|
|
95
|
+
# fi
|
|
96
|
+
else
|
|
97
|
+
# echo "Nginx is not installed."
|
|
98
|
+
has_nginx_installed=0
|
|
99
|
+
fi
|
|
100
|
+
|
|
101
|
+
get_old_version() {
|
|
102
|
+
if [ -f "$install_path""version" ]; then
|
|
103
|
+
old_version=$(sed -n '1p' "$install_path""version")
|
|
104
|
+
|
|
105
|
+
echo "$old_version"
|
|
106
|
+
fi
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
install_assets() {
|
|
110
|
+
|
|
111
|
+
# 拷贝静态资源
|
|
112
|
+
cp -rf "${project_path}"/pkg/version "$install_path"
|
|
113
|
+
|
|
114
|
+
mkdir -p "$install_path"assets
|
|
115
|
+
|
|
116
|
+
cp -rf "${project_path}"/pkg/assets/* "$install_path"assets
|
|
117
|
+
|
|
118
|
+
# # 对比行数并合并
|
|
119
|
+
# if [ -f "${backup_path}/settings" ]; then
|
|
120
|
+
# cat $backup_path/settings | sed '/^$/d' >>./settings
|
|
121
|
+
# cat $install_path/settings | sed '/^$/d' >>./settings_new
|
|
122
|
+
|
|
123
|
+
# diffLines=$(diff ./settings ./settings_new | awk 'END{print NR}')
|
|
124
|
+
|
|
125
|
+
# if ((diffLines > 0)); then
|
|
126
|
+
# echo '-------合并前:old--------'
|
|
127
|
+
# cat ./settings
|
|
128
|
+
# old_total_line=$(awk 'END{print NR}' ./settings)
|
|
129
|
+
# start=$(($old_total_line + 1))
|
|
130
|
+
|
|
131
|
+
# echo '-------合并前: new--------'
|
|
132
|
+
# cat ./settings_new
|
|
133
|
+
# total_line=$(awk 'END{print NR}' ./settings_new)
|
|
134
|
+
|
|
135
|
+
# sed -n "${start},${total_line}p" ./settings_new >>./settings
|
|
136
|
+
# echo '---------- 合并后 ----------'
|
|
137
|
+
# cat ./settings
|
|
138
|
+
|
|
139
|
+
# mv -f ./settings $install_path
|
|
140
|
+
# rm -rf ./settings_new
|
|
141
|
+
|
|
142
|
+
# echo "$(tput setaf 2)"settings 已合并,注意检查"$(tput sgr0)"
|
|
143
|
+
# fi
|
|
144
|
+
# fi
|
|
145
|
+
|
|
146
|
+
log_success "$install_path"assets/settings 已覆盖,请注意对比差异
|
|
147
|
+
|
|
148
|
+
# 修改所属用户
|
|
149
|
+
if [[ "$i(stat -c '%U' ${install_path})" != 'csri' ]]; then
|
|
150
|
+
chown -R csri:csri "$install_path"
|
|
151
|
+
fi
|
|
152
|
+
|
|
153
|
+
(chmod 644 -R "$install_path")
|
|
154
|
+
|
|
155
|
+
if [[ $? == 0 ]]; then
|
|
156
|
+
log_success "posidon-frontend deployed successfully"
|
|
157
|
+
else
|
|
158
|
+
log_error "posidon-frontend deployment failed"
|
|
159
|
+
fi
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
start() {
|
|
163
|
+
log "-----------execute ${app_name} script-------------"
|
|
164
|
+
# 创建用户
|
|
165
|
+
create_user_csri
|
|
166
|
+
|
|
167
|
+
now=$(date "+%Y-%m-%d_%H:%M:%S")
|
|
168
|
+
old_version=$(get_old_version)
|
|
169
|
+
|
|
170
|
+
#备份整个服务 eg: /opt/posidon-frontend
|
|
171
|
+
if [[ -n "${old_version}" ]]; then
|
|
172
|
+
parent_store_path=$(echo "$install_path" | sed -e "s/\/${app_name}//")
|
|
173
|
+
backup_path=$parent_store_path""$app_name"_"$old_version"_"$now
|
|
174
|
+
echo "${app_name} assets backup at: $backup_path"
|
|
175
|
+
mv "$install_path" "$backup_path"
|
|
176
|
+
fi
|
|
177
|
+
|
|
178
|
+
mkdir -p "$install_path"
|
|
179
|
+
|
|
180
|
+
copy_nginx_conf_and_write_verison
|
|
181
|
+
add_nginx_service
|
|
182
|
+
install_assets
|
|
183
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# 获取脚本所在的目录
|
|
3
|
+
basepath=$(dirname "$(realpath "${BASH_SOURCE[-1]}")")
|
|
4
|
+
|
|
5
|
+
source "$basepath"/common.sh
|
|
6
|
+
|
|
7
|
+
# 未安装
|
|
8
|
+
if ((has_nginx_installed == 0)); then
|
|
9
|
+
# while true; do
|
|
10
|
+
# read -r -p "Nginx not found, install it?[Y/N]" yn
|
|
11
|
+
# case $yn in
|
|
12
|
+
# [Yy]*)
|
|
13
|
+
# chmod +x "$basepath"/../nginx/script/install.sh
|
|
14
|
+
# sh "$basepath"/../nginx/script/install.sh
|
|
15
|
+
# break
|
|
16
|
+
# ;;
|
|
17
|
+
# [Nn]*) exit ;;
|
|
18
|
+
# *) echo "Please answer yes or no." ;;
|
|
19
|
+
# esac
|
|
20
|
+
# done
|
|
21
|
+
chmod +x "$basepath"/../nginx/script/install.sh
|
|
22
|
+
sh "$basepath"/../nginx/script/install.sh
|
|
23
|
+
|
|
24
|
+
if [[ $? != 0 ]]; then
|
|
25
|
+
echo "$(tput setaf 1)"failed to install!"$(tput sgr0)"
|
|
26
|
+
exit 1
|
|
27
|
+
fi
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
# 已安装 询问是否更新nginx
|
|
31
|
+
if ((has_nginx_installed == 1)); then
|
|
32
|
+
while true; do
|
|
33
|
+
read -r -p "Nginx has been installed, re-install it?[Y/N]" yn
|
|
34
|
+
case $yn in
|
|
35
|
+
[Yy]*)
|
|
36
|
+
chmod +x "$basepath"/../nginx/script/install.sh
|
|
37
|
+
sh "$basepath"/../nginx/script/install.sh "${@}"
|
|
38
|
+
|
|
39
|
+
if [[ $? != 0 ]]; then
|
|
40
|
+
echo "$(tput setaf 1)"failed to install!"$(tput sgr0)"
|
|
41
|
+
exit 1
|
|
42
|
+
fi
|
|
43
|
+
break
|
|
44
|
+
;;
|
|
45
|
+
[Nn]*) break ;;
|
|
46
|
+
*) echo "Please answer yes or no." ;;
|
|
47
|
+
esac
|
|
48
|
+
done
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
start
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# 指定安装目录
|
|
3
|
+
# nginx_conf_install_path="$prefix/etc/nginx_instances/${app_name}/"
|
|
4
|
+
nginx_conf_install_path="$prefix/opt/${app_name}/nginx/"
|
|
5
|
+
|
|
6
|
+
# 安装包所在路径
|
|
7
|
+
pkg_path="${project_path}/pkg"
|
|
8
|
+
|
|
9
|
+
# 配置文件所在路径
|
|
10
|
+
new_nginx_conf_path="${pkg_path}/nginx/nginx.conf"
|
|
11
|
+
|
|
12
|
+
# nginx服务配置文件路径
|
|
13
|
+
nginx_conf_path="${nginx_conf_install_path}nginx.conf"
|
|
14
|
+
|
|
15
|
+
# asset_path="$prefix/opt/posidon-frontend/"
|
|
16
|
+
nginx_log_path="/var/log/nginx"
|
|
17
|
+
nginx_log_file="${app_name}.nginx.log"
|
|
18
|
+
nginx_pid_path="/var/run/${app_name}.nginx.pid"
|
|
19
|
+
|
|
20
|
+
conf_version=$(awk '{print $1}' "${pkg_path}"/version)
|
|
21
|
+
echo "$conf_version"
|
|
22
|
+
|
|
23
|
+
copy_nginx_conf_and_write_verison() {
|
|
24
|
+
mkdir -p "$nginx_conf_install_path"
|
|
25
|
+
|
|
26
|
+
access_log_super="access_log /dev/stdout main"
|
|
27
|
+
error_log_super="error_log /dev/stderr warn"
|
|
28
|
+
access_log="access_log $nginx_log_path/$nginx_log_file main"
|
|
29
|
+
error_log="error_log $nginx_log_path/$nginx_log_file"
|
|
30
|
+
|
|
31
|
+
pid_file="pid $nginx_pid_path"
|
|
32
|
+
|
|
33
|
+
exec=$(get_exec_path)
|
|
34
|
+
|
|
35
|
+
# if [ -f "$nginx_conf_path" ]; then
|
|
36
|
+
# old_version=$(sed -n '1p' "$nginx_conf_path" | sed 's/# version: //' | sed "s/\s\+//g")
|
|
37
|
+
|
|
38
|
+
# if [[ -n "${old_version}" ]]; then
|
|
39
|
+
# now=$(date "+%Y-%m-%d_%H:%M:%S")
|
|
40
|
+
|
|
41
|
+
# # echo "nginx_"$old_version"_"$now".conf"
|
|
42
|
+
# mv "$nginx_conf_path" "${nginx_conf_install_path}"/"$app_name".nginx_"$old_version"_"$now".conf
|
|
43
|
+
# fi
|
|
44
|
+
# fi
|
|
45
|
+
|
|
46
|
+
#nginx -v nginx代码内部使用的stderr输出, 此处需要转换为stdout
|
|
47
|
+
nginx_version=$($exec -v 2>&1)
|
|
48
|
+
|
|
49
|
+
cp "$new_nginx_conf_path" ./nginx.conf
|
|
50
|
+
|
|
51
|
+
sed -i "1i\# ${nginx_version}" ./nginx.conf
|
|
52
|
+
sed -i "1i\# version: ${conf_version}" ./nginx.conf
|
|
53
|
+
|
|
54
|
+
if [[ -n "${prefix}" ]]; then
|
|
55
|
+
n=$(grep -wn "mime.types" ./nginx.conf | awk -F: '{print $1}' | sed -n 1p)
|
|
56
|
+
sed -i "${n}c include conf/mime.types;" ./nginx.conf
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
# n=$(grep -wn "__root__" ./nginx.conf | awk -F: '{print $1}' | sed -n 1p)
|
|
60
|
+
# if [[ -n "${n}" ]]; then
|
|
61
|
+
# sed -i "${n}c root ${asset_path};" ./nginx.conf
|
|
62
|
+
# fi
|
|
63
|
+
|
|
64
|
+
# 替换日志输出路径方式
|
|
65
|
+
n=$(grep -wn "#ERROR_LOG_PLACEHOLDER" ./nginx.conf | awk -F: '{print $1}' | sed -n 1p)
|
|
66
|
+
if [[ -n "${n}" ]]; then
|
|
67
|
+
if ((mode == 2)); then
|
|
68
|
+
sed -i "${n}c ${error_log};" ./nginx.conf
|
|
69
|
+
else
|
|
70
|
+
sed -i "${n}c ${error_log_super};" ./nginx.conf
|
|
71
|
+
fi
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
n=$(grep -wn "#ACCESS_LOG_PLACEHOLDER" ./nginx.conf | awk -F: '{print $1}' | sed -n 1p)
|
|
75
|
+
if [[ -n "${n}" ]]; then
|
|
76
|
+
if ((mode == 2)); then
|
|
77
|
+
sed -i "${n}c ${access_log};" ./nginx.conf
|
|
78
|
+
else
|
|
79
|
+
sed -i "${n}c ${access_log_super};" ./nginx.conf
|
|
80
|
+
fi
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
n=$(grep -wn "#PID_FILE_PALCEHOLDER" ./nginx.conf | awk -F: '{print $1}' | sed -n 1p)
|
|
84
|
+
if [[ -n "${n}" ]]; then
|
|
85
|
+
# 非supervisorctl
|
|
86
|
+
if ((mode == 2)); then
|
|
87
|
+
sed -i "${n}c ${pid_file};" ./nginx.conf
|
|
88
|
+
fi
|
|
89
|
+
fi
|
|
90
|
+
|
|
91
|
+
n=$(grep -wn "daemon off;" ./nginx.conf | awk -F: '{print $1}' | sed -n 1p)
|
|
92
|
+
if [[ -n "${n}" ]]; then
|
|
93
|
+
# 非supervisorctl
|
|
94
|
+
if ((mode == 2)); then
|
|
95
|
+
sed -i "${n}c daemon on;" ./nginx.conf
|
|
96
|
+
fi
|
|
97
|
+
fi
|
|
98
|
+
|
|
99
|
+
mv -fb "./nginx.conf" "$nginx_conf_install_path"
|
|
100
|
+
|
|
101
|
+
cp -fR "$pkg_path"/nginx/ca "$nginx_conf_install_path"
|
|
102
|
+
|
|
103
|
+
mkdir -p /data/command/
|
|
104
|
+
log "nginx start command: $(get_exec_cmd)"
|
|
105
|
+
echo "$exec -c $nginx_conf_path" >/data/command/nginx
|
|
106
|
+
|
|
107
|
+
if [[ $? == 0 ]]; then
|
|
108
|
+
log_success "$conf_version $nginx_conf_path replaced successfully!"
|
|
109
|
+
else
|
|
110
|
+
log_error "$conf_version $nginx_conf_path replaced failed!"
|
|
111
|
+
fi
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
get_exec_path() {
|
|
115
|
+
cmd=''
|
|
116
|
+
if [[ -n "${prefix}" ]]; then
|
|
117
|
+
cmd="${nginx_conf_install_path}/sbin/nginx"
|
|
118
|
+
else
|
|
119
|
+
cmd="/usr/sbin/nginx"
|
|
120
|
+
fi
|
|
121
|
+
|
|
122
|
+
echo "$cmd"
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
get_exec_cmd() {
|
|
126
|
+
exec=$(get_exec_path)
|
|
127
|
+
|
|
128
|
+
echo "$exec -c $nginx_conf_path"
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
add_nginx_service() {
|
|
132
|
+
#添加到服务
|
|
133
|
+
exec_cmd=$(get_exec_cmd)
|
|
134
|
+
cp "$pkg_path"/nginx/nginx.service.tpl ./nginx.service
|
|
135
|
+
|
|
136
|
+
check_cmd="$exec -t -c $nginx_conf_path"
|
|
137
|
+
version=$(echo "$conf_version" | grep -oP '\d+\.\d+\.\d+')
|
|
138
|
+
|
|
139
|
+
sed -i "s#_exec_cmd_#$exec_cmd #g" ./nginx.service
|
|
140
|
+
sed -i "s#_log_path_#$nginx_log_path#g" ./nginx.service
|
|
141
|
+
sed -i "s#_log_file_#$nginx_log_file#g" ./nginx.service
|
|
142
|
+
sed -i "s#_conf_path_#$nginx_conf_path#g" ./nginx.service
|
|
143
|
+
sed -i "s#_version_#$version#g" ./nginx.service
|
|
144
|
+
sed -i "s#_pid_file_#$nginx_pid_path#g" ./nginx.service
|
|
145
|
+
sed -i "s#_start_check_#$check_cmd#g" ./nginx.service
|
|
146
|
+
|
|
147
|
+
if ((mode == 2)); then
|
|
148
|
+
# systemctl enable nginx
|
|
149
|
+
cp ./nginx.service /usr/lib/systemd/system/"$app_name".nginx.service
|
|
150
|
+
systemctl daemon-reload
|
|
151
|
+
|
|
152
|
+
log_success "add ${app_name}.nginx.service to /usr/lib/systemd/system/"
|
|
153
|
+
else
|
|
154
|
+
rm -rf /usr/lib/systemd/system/"$app_name".nginx.service
|
|
155
|
+
fi
|
|
156
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
log "-----------receive parameter: $@------------"
|
|
3
|
+
|
|
4
|
+
# if [ $# == 0 ]; then
|
|
5
|
+
# log_error "Fatal error: parameter -standalone or -cluster is required!"
|
|
6
|
+
# exit 1
|
|
7
|
+
# fi
|
|
8
|
+
|
|
9
|
+
mode=""
|
|
10
|
+
while [ $# -gt 0 ]; do
|
|
11
|
+
case "$1" in
|
|
12
|
+
-S | -standalone)
|
|
13
|
+
mode=1
|
|
14
|
+
shift
|
|
15
|
+
;;
|
|
16
|
+
-C | -cluster)
|
|
17
|
+
mode=2
|
|
18
|
+
shift
|
|
19
|
+
;;
|
|
20
|
+
-h | --help)
|
|
21
|
+
echo "supported parameters: "
|
|
22
|
+
echo "-S, -standalone install for supervisord startup mode, conflict with -C"
|
|
23
|
+
echo "-C, -cluster install for systemd startup mode, conflict with -S"
|
|
24
|
+
echo "-P, -prefix specify the install path"
|
|
25
|
+
exit 0
|
|
26
|
+
;;
|
|
27
|
+
-P | -prefix)
|
|
28
|
+
case "$2" in
|
|
29
|
+
"")
|
|
30
|
+
if [ $# -eq 1 ]; then
|
|
31
|
+
break
|
|
32
|
+
else
|
|
33
|
+
shift 2
|
|
34
|
+
fi
|
|
35
|
+
;;
|
|
36
|
+
-*) shift ;;
|
|
37
|
+
*)
|
|
38
|
+
prefix=$2
|
|
39
|
+
if [ $# -eq 2 ]; then
|
|
40
|
+
break
|
|
41
|
+
else
|
|
42
|
+
shift 2
|
|
43
|
+
fi
|
|
44
|
+
;;
|
|
45
|
+
esac
|
|
46
|
+
;;
|
|
47
|
+
--)
|
|
48
|
+
shift
|
|
49
|
+
break
|
|
50
|
+
;;
|
|
51
|
+
"")
|
|
52
|
+
echo 'no args'
|
|
53
|
+
break
|
|
54
|
+
;;
|
|
55
|
+
*)
|
|
56
|
+
log_error "invalid parameter: {$1}"
|
|
57
|
+
exit 1
|
|
58
|
+
;;
|
|
59
|
+
esac
|
|
60
|
+
done
|
|
61
|
+
|
|
62
|
+
if [[ -z "${mode}" ]]; then
|
|
63
|
+
log_error "Fatal error: parameter -standalone or -cluster is required!"
|
|
64
|
+
exit 1
|
|
65
|
+
# echo "Please choose an redis installation mode!"
|
|
66
|
+
# PS3='Please input the number: '
|
|
67
|
+
# options=("Standalone 1" "Cluster 2" "Quit")
|
|
68
|
+
# select opt in "${options[@]}"; do
|
|
69
|
+
# case $opt in
|
|
70
|
+
# "Standalone 1")
|
|
71
|
+
# mode=1
|
|
72
|
+
# break
|
|
73
|
+
# ;;
|
|
74
|
+
# "Cluster 2")
|
|
75
|
+
# mode=2
|
|
76
|
+
# break
|
|
77
|
+
# ;;
|
|
78
|
+
# "Quit")
|
|
79
|
+
# break
|
|
80
|
+
# ;;
|
|
81
|
+
# *) echo "invalid option $REPLY" ;;
|
|
82
|
+
# esac
|
|
83
|
+
# done
|
|
84
|
+
fi
|
|
85
|
+
|
|
86
|
+
if ((mode == 1)); then
|
|
87
|
+
log "-------------------------------------------------"
|
|
88
|
+
log "-------start to install Standalone mode-------"
|
|
89
|
+
log "-------------------------------------------------"
|
|
90
|
+
fi
|
|
91
|
+
|
|
92
|
+
if ((mode == 2)); then
|
|
93
|
+
log "-------------------------------------------------"
|
|
94
|
+
log "-------start to install Cluster mode-------"
|
|
95
|
+
log "-------------------------------------------------"
|
|
96
|
+
fi
|
|
97
|
+
|
|
98
|
+
# echo "install/upgrade prefix: $prefix"
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# 获取脚本所在的目录
|
|
3
|
+
basepath=$(dirname "$(realpath "${BASH_SOURCE[-1]}")")
|
|
4
|
+
|
|
5
|
+
source "$basepath"/common.sh
|
|
6
|
+
|
|
7
|
+
# 未安装
|
|
8
|
+
if ((has_nginx_installed == 0)); then
|
|
9
|
+
# while true; do
|
|
10
|
+
# read -r -p "Nginx not found, install it?[Y/N]" yn
|
|
11
|
+
# case $yn in
|
|
12
|
+
# [Yy]*)
|
|
13
|
+
# chmod +x "$basepath"/../nginx/script/install.sh
|
|
14
|
+
# sh "$basepath"/../nginx/script/install.sh
|
|
15
|
+
# break
|
|
16
|
+
# ;;
|
|
17
|
+
# [Nn]*) exit ;;
|
|
18
|
+
# *) echo "Please answer yes or no." ;;
|
|
19
|
+
# esac
|
|
20
|
+
# done
|
|
21
|
+
chmod +x "$basepath"/../nginx/script/install.sh
|
|
22
|
+
sh "$basepath"/../nginx/script/install.sh "${@}"
|
|
23
|
+
|
|
24
|
+
if [[ $? != 0 ]]; then
|
|
25
|
+
echo "$(tput setaf 1)"failed to install!"$(tput sgr0)"
|
|
26
|
+
exit 1
|
|
27
|
+
fi
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
# 已安装 询问是否更新nginx
|
|
31
|
+
if ((has_nginx_installed == 1)); then
|
|
32
|
+
while true; do
|
|
33
|
+
read -r -p "Nginx has been installed, re-install it?[Y/N]" yn
|
|
34
|
+
case $yn in
|
|
35
|
+
[Yy]*)
|
|
36
|
+
chmod +x "$basepath"/../nginx/script/install.sh
|
|
37
|
+
sh "$basepath"/../nginx/script/install.sh "${@}"
|
|
38
|
+
if [[ $? != 0 ]]; then
|
|
39
|
+
echo "$(tput setaf 1)"failed to install!"$(tput sgr0)"
|
|
40
|
+
exit 1
|
|
41
|
+
fi
|
|
42
|
+
break
|
|
43
|
+
;;
|
|
44
|
+
[Nn]*) break ;;
|
|
45
|
+
*) echo "Please answer yes or no." ;;
|
|
46
|
+
esac
|
|
47
|
+
done
|
|
48
|
+
fi
|
|
49
|
+
|
|
50
|
+
start
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import pc from 'picocolors';
|
|
2
|
+
|
|
3
|
+
const logger = {
|
|
4
|
+
info: (msg) => {
|
|
5
|
+
console.info(`---------------------- ${msg} ----------------------`);
|
|
6
|
+
},
|
|
7
|
+
error: (msg) => {
|
|
8
|
+
console.log(`---------------------- ${pc.red(msg)} ----------------------`);
|
|
9
|
+
},
|
|
10
|
+
success: (msg) => {
|
|
11
|
+
console.info("--------------------------------------------------------------");
|
|
12
|
+
console.info(`---------\u{1F680} ${pc.green(msg)} ----------------`);
|
|
13
|
+
console.info("--------------------------------------------------------------");
|
|
14
|
+
},
|
|
15
|
+
tip: (msg) => {
|
|
16
|
+
console.log(`---------------------- ${pc.yellow(msg)} ----------------------`);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export { logger };
|
package/dist/pack.js
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import * as inquirer from '@inquirer/prompts';
|
|
4
|
+
import pc from 'picocolors';
|
|
5
|
+
import * as tar from 'tar';
|
|
6
|
+
import { __work_dir, __releaseDir, __dirname, releaseConf } from './prepare.js';
|
|
7
|
+
import { logger } from './logger.js';
|
|
8
|
+
import 'yaml';
|
|
9
|
+
import 'execa';
|
|
10
|
+
import 'node:url';
|
|
11
|
+
|
|
12
|
+
async function pack(version) {
|
|
13
|
+
try {
|
|
14
|
+
if (version === void 0) {
|
|
15
|
+
version = await inquirer.input(
|
|
16
|
+
{
|
|
17
|
+
message: "\u8BF7\u8F93\u5165\u7248\u672C\u53F7\uFF1A"
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
if (version == "") {
|
|
22
|
+
logger.error("\u7248\u672C\u53F7\u4E0D\u80FD\u4E3A\u7A7A\uFF01");
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const packageJson = JSON.parse(fs.readFileSync(path.resolve(__work_dir, "package.json"), { "encoding": "utf-8" }));
|
|
26
|
+
const projectName = packageJson.name;
|
|
27
|
+
if (!projectName) {
|
|
28
|
+
logger.error("\u672A\u5728package.json\u627E\u5230name\u5B9A\u4E49\uFF01");
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const zipFileName = `${projectName}_${version}.tar.gz`;
|
|
32
|
+
logger.tip(`start to pack`);
|
|
33
|
+
const projectDir = path.resolve(__releaseDir, projectName);
|
|
34
|
+
const assetsDir = path.resolve(projectDir, "pkg/assets");
|
|
35
|
+
const nginxDir = path.resolve(projectDir, "pkg/nginx");
|
|
36
|
+
fs.cpSync(path.resolve(__dirname, "deploy"), projectDir, { recursive: true });
|
|
37
|
+
fs.cpSync(path.resolve(__work_dir, releaseConf.assetsDir), assetsDir, { recursive: true });
|
|
38
|
+
fs.writeFileSync(path.resolve(projectDir, "pkg", "version"), version, { encoding: "utf-8" });
|
|
39
|
+
fs.writeFileSync(path.resolve(assetsDir, "version"), version, { encoding: "utf-8" });
|
|
40
|
+
fs.writeFileSync(path.resolve(nginxDir, "version"), version, { encoding: "utf-8" });
|
|
41
|
+
logger.info(pc.green(`version: ${version} added`));
|
|
42
|
+
const assetInstallPath = `/opt/${projectName}/`;
|
|
43
|
+
logger.info(pc.green(`start to replace __APP_NAME__ in common.sh`));
|
|
44
|
+
replaceFileContent({
|
|
45
|
+
filePath: path.resolve(projectDir, "script", "common.sh"),
|
|
46
|
+
replaced: [
|
|
47
|
+
["__APP_NAME__", `"${projectName}"`],
|
|
48
|
+
["__INSTALL_PATH__", assetInstallPath]
|
|
49
|
+
]
|
|
50
|
+
});
|
|
51
|
+
logger.info(pc.green(`start to replace version: ${version} in index.html`));
|
|
52
|
+
replaceFileContent({
|
|
53
|
+
filePath: path.resolve(assetsDir, "index.html"),
|
|
54
|
+
replaced: [["__version__", version]]
|
|
55
|
+
});
|
|
56
|
+
logger.info(pc.green(`start to generate nginx.conf`));
|
|
57
|
+
fs.cpSync(path.resolve(__releaseDir, "nginx"), nginxDir, { recursive: true, force: true });
|
|
58
|
+
replaceFileContent({
|
|
59
|
+
filePath: path.resolve(nginxDir, "nginx.conf"),
|
|
60
|
+
replaced: [["__root__", `${assetInstallPath}/assets/`]]
|
|
61
|
+
// writeToNewFilePath: path.resolve(nginxDir, `${projectName}.conf`)
|
|
62
|
+
});
|
|
63
|
+
logger.info(pc.green(`start to generate ${zipFileName}`));
|
|
64
|
+
const zipFilePath = path.resolve(__releaseDir, zipFileName);
|
|
65
|
+
await genTarPkg(__releaseDir, projectName, zipFilePath);
|
|
66
|
+
logger.success(`done to pack ${pc.green(`${zipFileName} at: ${__releaseDir}`)}`);
|
|
67
|
+
if (fs.existsSync(projectDir)) {
|
|
68
|
+
fs.rmSync(projectDir, { recursive: true, force: true });
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
version,
|
|
72
|
+
pkgName: zipFileName,
|
|
73
|
+
appName: projectName,
|
|
74
|
+
pkgFilePath: zipFilePath
|
|
75
|
+
};
|
|
76
|
+
} catch (error) {
|
|
77
|
+
console.error("Error:", error);
|
|
78
|
+
return Promise.reject(error);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function genTarPkg(releaseDir, projectName, zipFileName) {
|
|
82
|
+
return new Promise((resolve, reject) => {
|
|
83
|
+
const zipStream = fs.createWriteStream(zipFileName);
|
|
84
|
+
zipStream.on("close", () => {
|
|
85
|
+
resolve(true);
|
|
86
|
+
});
|
|
87
|
+
try {
|
|
88
|
+
tar.create(
|
|
89
|
+
{
|
|
90
|
+
z: true,
|
|
91
|
+
cwd: releaseDir
|
|
92
|
+
},
|
|
93
|
+
[projectName]
|
|
94
|
+
).pipe(zipStream);
|
|
95
|
+
} catch (error) {
|
|
96
|
+
reject(error);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
function replaceFileContent(params) {
|
|
101
|
+
const { filePath, writeToNewFilePath, replaced = [] } = params;
|
|
102
|
+
if (fs.existsSync(filePath)) {
|
|
103
|
+
let content = fs.readFileSync(filePath, { encoding: "utf-8" });
|
|
104
|
+
replaced.forEach(([regExp, replaceContent]) => {
|
|
105
|
+
content = content.toString().replace(regExp, replaceContent);
|
|
106
|
+
});
|
|
107
|
+
fs.writeFileSync(writeToNewFilePath ? writeToNewFilePath : filePath, content, { encoding: "utf-8" });
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export { pack };
|