@wjwjq/release-helper 0.2.98 → 0.2.99
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/CLAUDE.md +68 -0
- package/README.md +50 -37
- package/REFACTOR_PLAN.md +861 -0
- package/dist/.release/nginx/nginx.conf +2 -1
- package/dist/cli.js +2 -2
- package/dist/deploy/pkg/nginx/nginx.service.tpl +0 -1
- package/dist/deploy/pkg/nginx_binary/binary/compile.sh +15 -9
- package/dist/deploy/pkg/nginx_binary/binary/nginx-arm-ssl1.1.1.tar.gz +0 -0
- package/dist/deploy/pkg/nginx_binary/binary/nginx-x86_64-ssl1.0.2.tar.gz +0 -0
- package/dist/deploy/pkg/nginx_binary/binary/nginx-x86_64-ssl1.1.1.tar.gz +0 -0
- package/dist/deploy/pkg/nginx_binary/binary/nginx-x86_64-ssl3.2.1.tar.gz +0 -0
- package/dist/deploy/pkg/nginx_binary/source/nginx-1.31.0.tar.gz +0 -0
- package/dist/deploy/script/nginx.sh +17 -15
- package/dist/publish.js +5 -8
- package/dist/release.js +4 -7
- package/example/README.md +71 -0
- package/example/example-frontend/package.json +14 -0
- package/example/example-frontend/pnpm-lock.yaml +1135 -0
- package/package.json +1 -1
- package/dist/deploy/pkg/nginx_binary/binary/nginx-oe2203sp4.x86_64-ssl1.1.1wa.tar.gz +0 -0
- package/dist/deploy/pkg/nginx_binary/binary/nginx-x86_64-ssl3.0.7.tar.gz +0 -0
- package/dist/deploy/pkg/nginx_binary/source/nginx-1.22.1.tar.gz +0 -0
package/dist/cli.js
CHANGED
|
@@ -22,12 +22,12 @@ cli.command("init", "generate release configuration").action(async (options) =>
|
|
|
22
22
|
console.error(`release-helper error: `, e);
|
|
23
23
|
}
|
|
24
24
|
});
|
|
25
|
-
cli.command("pack", "start to pack assets").action(async (options) => {
|
|
25
|
+
cli.command("pack", "start to pack assets").option("--ver <version>", `[version] specify version`).action(async (options) => {
|
|
26
26
|
filterDuplicateOptions(options);
|
|
27
27
|
try {
|
|
28
28
|
logger.info("start to pack assets");
|
|
29
29
|
const { pack } = await import('./pack.js');
|
|
30
|
-
await pack();
|
|
30
|
+
await pack(options["ver"]);
|
|
31
31
|
} catch (e) {
|
|
32
32
|
process.exit(1);
|
|
33
33
|
}
|
|
@@ -8,10 +8,12 @@
|
|
|
8
8
|
# # 下载 ansible 依赖包
|
|
9
9
|
# yumdownloader --resolve --destdir=/deps openssl openssl-devel pcre pcre-devel gcc gcc-c++ zlib zlib-devel
|
|
10
10
|
|
|
11
|
+
# x86_64 使用centos 7.9 从源码编译 并打包
|
|
12
|
+
# arm 使用ctyunos 2.0.1 从源码编译 并打包
|
|
11
13
|
|
|
12
|
-
nginx_version="1.
|
|
14
|
+
nginx_version="1.31.0"
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
curl -LO https://nginx.org/download/nginx-${nginx_version}.tar.gz
|
|
15
17
|
|
|
16
18
|
tar -zxvf nginx-${nginx_version}.tar.gz
|
|
17
19
|
|
|
@@ -28,6 +30,7 @@ cd nginx-${nginx_version} || exit
|
|
|
28
30
|
--with-http_gzip_static_module \
|
|
29
31
|
--with-http_stub_status_module \
|
|
30
32
|
--with-stream \
|
|
33
|
+
--with-http_grpc_module \
|
|
31
34
|
--with-pcre
|
|
32
35
|
|
|
33
36
|
make
|
|
@@ -39,25 +42,28 @@ cp -f /etc/nginx/conf/mime.types /etc/nginx/
|
|
|
39
42
|
echo '------------------compile and install done----------------------------'
|
|
40
43
|
|
|
41
44
|
arch=$(uname -m)
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
ssl_version=$(
|
|
45
|
-
system_name_with_arch=$system_name"."$arch
|
|
45
|
+
ssl_version=$(openssl version | awk '{print $2}' | cut -d'-' -f1)
|
|
46
|
+
# 只保留 x.x.x 版本号,去掉后缀如 "1.1.1f" -> "1.1.1"
|
|
47
|
+
ssl_version=$(echo "$ssl_version" | grep -oP '^\d+\.\d+\.\d+')
|
|
46
48
|
|
|
47
49
|
|
|
48
50
|
if [[ -z "${arch}" ]]; then
|
|
49
51
|
arch="x86_64"
|
|
50
52
|
fi
|
|
51
53
|
|
|
52
|
-
if [[ $arch == arm* ]] || [[ $arch ==
|
|
54
|
+
if [[ $arch == arm* ]] || [[ $arch == aarch* ]]; then
|
|
53
55
|
arch="arm"
|
|
54
56
|
fi
|
|
55
57
|
|
|
58
|
+
if [[ $arch == x86_64 ]]; then
|
|
59
|
+
arch="x86_64"
|
|
60
|
+
fi
|
|
61
|
+
|
|
56
62
|
|
|
57
63
|
if [[ -z "${ssl_version}" ]]; then
|
|
58
64
|
ssl_version="1.0.2"
|
|
59
65
|
fi
|
|
60
66
|
|
|
61
|
-
tar -zcvf nginx-"$
|
|
67
|
+
tar -zcvf nginx-"$arch"-ssl"$ssl_version".tar.gz -C /etc nginx/
|
|
62
68
|
|
|
63
|
-
echo "-----------done to pack: nginx-${
|
|
69
|
+
echo "-----------done to pack: nginx-${arch}-ssl${ssl_version}.tar.gz--------------"
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -179,7 +179,7 @@ add_log_rotate(){
|
|
|
179
179
|
|
|
180
180
|
sed -i "s#__usergroup__#$usergroup#g" ./nginx.logrotate
|
|
181
181
|
sed -i "s#__user__#$user#g" ./nginx.logrotate
|
|
182
|
-
sed -i "s#
|
|
182
|
+
sed -i "s#__app_name__#$APP_NAME#g" ./nginx.logrotate
|
|
183
183
|
sed -i "s#__pid_file__#$NGINX_PID_FILE_PATH#g" ./nginx.logrotate
|
|
184
184
|
|
|
185
185
|
cp -f ./nginx.logrotate /etc/logrotate.d/${APP_NAME}.nginx
|
|
@@ -213,25 +213,23 @@ install_nginx_from_binary(){
|
|
|
213
213
|
log "start to install nginx binary"
|
|
214
214
|
|
|
215
215
|
arch=$(uname -m)
|
|
216
|
-
system_name=$(uname -r | awk -F'.' '{print $(NF-1)}')
|
|
217
216
|
ssl_full_version=$(openssl version | awk '{print $2}')
|
|
218
217
|
ssl_fuzzy_version=$(openssl version | grep -oP '\d+\.\d+' | sed -n '1p' 2>&1)
|
|
219
|
-
system_name_with_arch=$system_name"."$arch
|
|
220
218
|
|
|
221
|
-
|
|
222
|
-
|
|
219
|
+
if [[ -z "${arch}" ]]; then
|
|
220
|
+
arch="x86_64"
|
|
221
|
+
fi
|
|
223
222
|
|
|
224
|
-
if [
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
if [[ -z "${arch}" ]]; then
|
|
228
|
-
arch="x86_64"
|
|
229
|
-
fi
|
|
223
|
+
if [[ $arch == arm* ]] || [[ $arch = aarch64 ]]; then
|
|
224
|
+
arch="arm"
|
|
225
|
+
fi
|
|
230
226
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
fi
|
|
227
|
+
# 优先用完整 OpenSSL 版本号匹配(如 nginx-x86_64-ssl3.2.1.tar.gz)
|
|
228
|
+
pkg="$NGINX_BINARY_PKG_PATH"/binary/nginx-"$arch"-ssl"$ssl_full_version".tar.gz
|
|
234
229
|
|
|
230
|
+
if [ -f "$pkg" ]; then
|
|
231
|
+
log "current arch: $arch, current ssl_version: $ssl_full_version (full version match)"
|
|
232
|
+
else
|
|
235
233
|
if [[ "${ssl_fuzzy_version}" == "1.0" ]]; then
|
|
236
234
|
ssl_fuzzy_version="1.0.2"
|
|
237
235
|
fi
|
|
@@ -244,6 +242,10 @@ install_nginx_from_binary(){
|
|
|
244
242
|
ssl_fuzzy_version="3.0.7"
|
|
245
243
|
fi
|
|
246
244
|
|
|
245
|
+
if [[ "${ssl_fuzzy_version}" == "3.2" ]]; then
|
|
246
|
+
ssl_fuzzy_version="3.2.1"
|
|
247
|
+
fi
|
|
248
|
+
|
|
247
249
|
if [[ -z "${ssl_fuzzy_version}" ]]; then
|
|
248
250
|
ssl_fuzzy_version="1.0.2"
|
|
249
251
|
fi
|
|
@@ -255,7 +257,7 @@ install_nginx_from_binary(){
|
|
|
255
257
|
exit 1
|
|
256
258
|
fi
|
|
257
259
|
|
|
258
|
-
log "current arch: $arch, current ssl_version
|
|
260
|
+
log "current arch: $arch, current ssl_version: $ssl_fuzzy_version (fuzzy version match)"
|
|
259
261
|
fi
|
|
260
262
|
|
|
261
263
|
tar -zxvhf "$pkg" -C "$NGINX_BINARY_INSTALL_PATH" --strip-components 1
|
package/dist/publish.js
CHANGED
|
@@ -15,7 +15,7 @@ import 'picocolors';
|
|
|
15
15
|
|
|
16
16
|
async function isGitFlowRepo() {
|
|
17
17
|
try {
|
|
18
|
-
let { stdout } = await execa("git config",
|
|
18
|
+
let { stdout } = await execa("git", ["config", "--get-regexp", `^gitflow.`]);
|
|
19
19
|
return stdout.toString().length > 0;
|
|
20
20
|
} catch (error) {
|
|
21
21
|
console.error("\u{1F680} ~ doGitFlowRelease ~ error:", error);
|
|
@@ -24,13 +24,10 @@ async function isGitFlowRepo() {
|
|
|
24
24
|
}
|
|
25
25
|
async function getRepo() {
|
|
26
26
|
let repo;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const res = await $`git remote -v`;
|
|
32
|
-
repo = res.stdout.split("\n")[1].split(" ")[0].split(" ")[1].replace(".git", "").replace("\n", "");
|
|
33
|
-
}
|
|
27
|
+
const res = await $`git remote -v`;
|
|
28
|
+
const lines = res.stdout.split("\n").filter(Boolean);
|
|
29
|
+
const firstLine = lines[0] || "";
|
|
30
|
+
repo = firstLine.split(/\s+/)[1]?.replace(".git", "") || "";
|
|
34
31
|
if (repo.startsWith("git@")) {
|
|
35
32
|
const ps2 = repo.split("/");
|
|
36
33
|
return {
|
package/dist/release.js
CHANGED
|
@@ -136,7 +136,7 @@ async function doGitFlowRelease(version) {
|
|
|
136
136
|
const hasUncommitted = await hasUncommittedChanges(true);
|
|
137
137
|
if (hasUncommitted) {
|
|
138
138
|
await $`git add -A`;
|
|
139
|
-
await execa("git commit",
|
|
139
|
+
await execa("git", ["commit", "-m", `Release version: ${version}`, "--no-verify"]);
|
|
140
140
|
}
|
|
141
141
|
await execWithPipe(`git flow release finish`, [version, "-m", `Release version: ${version}`]);
|
|
142
142
|
await $`git push --all --no-verify`;
|
|
@@ -175,7 +175,7 @@ async function execGitPullOrigin(remoteTargetBranch) {
|
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
177
|
async function execWithPipe(...args) {
|
|
178
|
-
const execRes = execa(
|
|
178
|
+
const execRes = execa(args[0], args[1], { shell: true });
|
|
179
179
|
execRes.stdout.pipe(process.stdout);
|
|
180
180
|
execRes.stderr.pipe(process.stderr);
|
|
181
181
|
const result = await execRes;
|
|
@@ -185,14 +185,11 @@ async function execGitCheckout(remoteTargetBranch) {
|
|
|
185
185
|
await hasUncommittedChanges();
|
|
186
186
|
const { stdout: prevCurrentBranch } = await $`git branch --show-current`;
|
|
187
187
|
if (prevCurrentBranch !== remoteTargetBranch) {
|
|
188
|
-
|
|
189
|
-
execRes.stdout.pipe(process.stdout);
|
|
190
|
-
execRes.stderr.pipe(process.stderr);
|
|
191
|
-
const result = await execRes;
|
|
188
|
+
await $`git checkout ${remoteTargetBranch}`;
|
|
192
189
|
const { stdout: currentBranch } = await $`git branch --show-current`;
|
|
193
190
|
if (currentBranch !== remoteTargetBranch) {
|
|
194
191
|
logger.error(`\u76EE\u6807\u53D1\u5E03\u5206\u652F[${remoteTargetBranch}] checkout \u5931\u8D25`);
|
|
195
|
-
return Promise.reject(
|
|
192
|
+
return Promise.reject(new Error(`\u76EE\u6807\u53D1\u5E03\u5206\u652F[${remoteTargetBranch}] checkout \u5931\u8D25`));
|
|
196
193
|
}
|
|
197
194
|
}
|
|
198
195
|
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Example Project
|
|
2
|
+
|
|
3
|
+
用于测试 release-helper 完整发版流程的示例项目。
|
|
4
|
+
|
|
5
|
+
## 目录结构
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
example-frontend/
|
|
9
|
+
├── package.json # 前端项目配置,引用本地 release-helper
|
|
10
|
+
├── dist/ # 构建产物目录
|
|
11
|
+
│ └── index.html # 模拟的构建产物
|
|
12
|
+
└── .release/ # 发版配置目录
|
|
13
|
+
├── release.conf.yaml # 打包发版配置
|
|
14
|
+
├── nginx/ # nginx 配置
|
|
15
|
+
│ ├── nginx.conf
|
|
16
|
+
│ └── ca/ # SSL 证书
|
|
17
|
+
└── doc/ # 发版附带文档
|
|
18
|
+
└── 部署手册.md
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 使用
|
|
22
|
+
|
|
23
|
+
### 1. 安装依赖
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
cd example/example-frontend
|
|
27
|
+
pnpm install
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### 2. 配置
|
|
31
|
+
|
|
32
|
+
编辑 `.release/release.conf.yaml`,填写真实的 GitLab 地址和 token:
|
|
33
|
+
|
|
34
|
+
```yaml
|
|
35
|
+
host: 'https://your-gitlab.example.com'
|
|
36
|
+
token: 'your-token-here'
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 3. 测试打包
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pnpm pack
|
|
43
|
+
# 或
|
|
44
|
+
pnpm release-helper pack
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
打包完成后,在 `example-frontend/.release/` 目录下会生成 `example-frontend_x.tar.gz` 文件。
|
|
48
|
+
|
|
49
|
+
### 4. 测试发版
|
|
50
|
+
|
|
51
|
+
配置好 GitLab 信息后:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
pnpm release
|
|
55
|
+
# 或
|
|
56
|
+
pnpm release-helper release
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 验证打包产物
|
|
60
|
+
|
|
61
|
+
解压 tar.gz 检查内部结构:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
tar -tzf .release/example-frontend_*.tar.gz | head -30
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
应包含:
|
|
68
|
+
- `example-frontend/script/` — 安装脚本
|
|
69
|
+
- `example-frontend/pkg/assets/` — 前端静态资源
|
|
70
|
+
- `example-frontend/pkg/nginx/` — nginx 配置
|
|
71
|
+
- `example-frontend/pkg/version` — 版本文件
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "example-frontend",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"description": "example project for testing release-helper",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"build": "echo 'simulating build...' && mkdir -p dist && echo '<!DOCTYPE html><html><head><meta x-v=__version__></head><body><h1>Example Frontend</h1></body></html>' > dist/index.html",
|
|
8
|
+
"pack": "release-helper pack",
|
|
9
|
+
"release": "release-helper release"
|
|
10
|
+
},
|
|
11
|
+
"devDependencies": {
|
|
12
|
+
"@wjwjq/release-helper": "file:../../"
|
|
13
|
+
}
|
|
14
|
+
}
|