clouddreamai-cicd-setup 1.0.4 → 1.1.0
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/dist/cli.js +58 -21
- package/dist/cli.js.map +1 -1
- package/dist/utils/package-helper.d.ts +26 -0
- package/dist/utils/package-helper.d.ts.map +1 -0
- package/dist/utils/package-helper.js +176 -0
- package/dist/utils/package-helper.js.map +1 -0
- package/package.json +1 -1
- package/templates/gitlab-ci/nestjs-gitlab.yml +20 -2
- package/templates/gitlab-ci/nestjs.yml +191 -2
- package/templates/gitlab-ci/vue-gitlab.yml +191 -2
- package/templates/gitlab-ci/vue.yml +191 -2
package/dist/cli.js
CHANGED
|
@@ -48,6 +48,7 @@ const prompts_1 = require("./utils/prompts");
|
|
|
48
48
|
const gitlab_client_1 = require("./core/gitlab-client");
|
|
49
49
|
const variables_1 = require("./core/variables");
|
|
50
50
|
const template_1 = require("./utils/template");
|
|
51
|
+
const package_helper_1 = require("./utils/package-helper");
|
|
51
52
|
const path = __importStar(require("path"));
|
|
52
53
|
const fs_1 = require("fs");
|
|
53
54
|
// 读取 package.json 获取版本号
|
|
@@ -77,7 +78,17 @@ program
|
|
|
77
78
|
process.exit(1);
|
|
78
79
|
}
|
|
79
80
|
spinner.succeed(chalk_1.default.green(`GitLab 连接成功 (用户: ${testResult.data?.username})`));
|
|
80
|
-
// 3.
|
|
81
|
+
// 3. 检查并修复 package.json
|
|
82
|
+
spinner.start('检查 package.json scripts...');
|
|
83
|
+
const packageHelper = (0, package_helper_1.createPackageHelper)();
|
|
84
|
+
const packageResult = await packageHelper.ensureLintScripts(options.output, config.project.type);
|
|
85
|
+
if (packageResult.modified) {
|
|
86
|
+
spinner.succeed(chalk_1.default.green(`已添加 ${packageResult.addedScripts.length} 个 script: ${packageResult.addedScripts.join(', ')}`));
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
spinner.succeed(chalk_1.default.green('package.json 检查完成'));
|
|
90
|
+
}
|
|
91
|
+
// 4. 生成文件
|
|
81
92
|
spinner.start('正在生成 CI/CD 配置文件...');
|
|
82
93
|
const templateGenerator = (0, template_1.createTemplateGenerator)();
|
|
83
94
|
const generateResult = await templateGenerator.generateAll(options.output, config.project.type, config.project, config.gitlab.baseUrl, config.registry.type);
|
|
@@ -98,26 +109,52 @@ program
|
|
|
98
109
|
console.log(chalk_1.default.gray(' 3. 或使用 `cicd-setup upload` 命令上传变量\n'));
|
|
99
110
|
return;
|
|
100
111
|
}
|
|
101
|
-
// 4.
|
|
102
|
-
spinner.start('正在获取 GitLab 项目列表...');
|
|
103
|
-
const projectsResult = await gitlabClient.listProjects(1, 10);
|
|
104
|
-
if (!projectsResult.success || !projectsResult.data) {
|
|
105
|
-
spinner.fail(chalk_1.default.red(`获取项目列表失败: ${projectsResult.error}`));
|
|
106
|
-
process.exit(1);
|
|
107
|
-
}
|
|
108
|
-
spinner.stop();
|
|
112
|
+
// 4. 搜索项目
|
|
109
113
|
const inquirer = (await Promise.resolve().then(() => __importStar(require('inquirer')))).default;
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
|
|
114
|
+
let selectedProject = null;
|
|
115
|
+
while (!selectedProject) {
|
|
116
|
+
const { searchKeyword } = await inquirer.prompt([
|
|
117
|
+
{
|
|
118
|
+
type: 'input',
|
|
119
|
+
name: 'searchKeyword',
|
|
120
|
+
message: '搜索 GitLab 项目(输入项目名称关键词):',
|
|
121
|
+
validate: (input) => input ? true : '请输入搜索关键词',
|
|
122
|
+
},
|
|
123
|
+
]);
|
|
124
|
+
spinner.start(`正在搜索项目 "${searchKeyword}"...`);
|
|
125
|
+
const projectsResult = await gitlabClient.listProjects(1, 100);
|
|
126
|
+
if (!projectsResult.success || !projectsResult.data) {
|
|
127
|
+
spinner.fail(chalk_1.default.red(`获取项目列表失败: ${projectsResult.error}`));
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
// 根据关键词过滤项目
|
|
131
|
+
const filteredProjects = projectsResult.data.filter(p => p.path_with_namespace.toLowerCase().includes(searchKeyword.toLowerCase()) ||
|
|
132
|
+
p.name.toLowerCase().includes(searchKeyword.toLowerCase()));
|
|
133
|
+
spinner.stop();
|
|
134
|
+
if (filteredProjects.length === 0) {
|
|
135
|
+
console.log(chalk_1.default.yellow(`\n未找到包含 "${searchKeyword}" 的项目,请重新搜索\n`));
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
console.log(chalk_1.default.green(`\n找到 ${filteredProjects.length} 个匹配的项目:\n`));
|
|
139
|
+
const { projectChoice } = await inquirer.prompt([
|
|
140
|
+
{
|
|
141
|
+
type: 'list',
|
|
142
|
+
name: 'projectChoice',
|
|
143
|
+
message: '选择要配置的项目:',
|
|
144
|
+
choices: [
|
|
145
|
+
...filteredProjects.map((p) => ({
|
|
146
|
+
name: `${p.path_with_namespace} (${p.default_branch})`,
|
|
147
|
+
value: p.id,
|
|
148
|
+
})),
|
|
149
|
+
{ name: '🔍 重新搜索', value: 'search_again' },
|
|
150
|
+
],
|
|
151
|
+
},
|
|
152
|
+
]);
|
|
153
|
+
if (projectChoice === 'search_again') {
|
|
154
|
+
continue;
|
|
155
|
+
}
|
|
156
|
+
selectedProject = projectChoice;
|
|
157
|
+
}
|
|
121
158
|
// 5. 生成并上传变量
|
|
122
159
|
spinner.start('正在生成 CI/CD 变量...');
|
|
123
160
|
const variableConfigurator = (0, variables_1.createVariableConfigurator)();
|
|
@@ -148,7 +185,7 @@ program
|
|
|
148
185
|
console.log(chalk_1.default.yellow('\n⚠️ 已取消上传变量\n'));
|
|
149
186
|
return;
|
|
150
187
|
}
|
|
151
|
-
//
|
|
188
|
+
// 7. 批量上传变量
|
|
152
189
|
spinner.start('正在上传 CI/CD 变量到 GitLab...');
|
|
153
190
|
const uploadResult = await gitlabClient.batchUpsertVariables(selectedProject, variables);
|
|
154
191
|
if (uploadResult.success.length > 0) {
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CloudDreamAI CI/CD Setup - package.json 辅助工具
|
|
3
|
+
* 用于检查和添加必要的 npm scripts
|
|
4
|
+
*/
|
|
5
|
+
import { ProjectType } from '../core/types';
|
|
6
|
+
/**
|
|
7
|
+
* package.json 辅助类
|
|
8
|
+
*/
|
|
9
|
+
export declare class PackageHelper {
|
|
10
|
+
/**
|
|
11
|
+
* 检查并修复 package.json 中的 lint 命令
|
|
12
|
+
*/
|
|
13
|
+
ensureLintScripts(projectDir: string, projectType: ProjectType): Promise<{
|
|
14
|
+
modified: boolean;
|
|
15
|
+
addedScripts: string[];
|
|
16
|
+
}>;
|
|
17
|
+
/**
|
|
18
|
+
* 获取需要添加的脚本
|
|
19
|
+
*/
|
|
20
|
+
private getRequiredScripts;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* 创建 PackageHelper 实例
|
|
24
|
+
*/
|
|
25
|
+
export declare function createPackageHelper(): PackageHelper;
|
|
26
|
+
//# sourceMappingURL=package-helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-helper.d.ts","sourceRoot":"","sources":["../../src/utils/package-helper.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;GAEG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACG,iBAAiB,CACrB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,WAAW,GACvB,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAgEzD;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAyE3B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CloudDreamAI CI/CD Setup - package.json 辅助工具
|
|
4
|
+
* 用于检查和添加必要的 npm scripts
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.PackageHelper = void 0;
|
|
41
|
+
exports.createPackageHelper = createPackageHelper;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
/**
|
|
45
|
+
* package.json 辅助类
|
|
46
|
+
*/
|
|
47
|
+
class PackageHelper {
|
|
48
|
+
/**
|
|
49
|
+
* 检查并修复 package.json 中的 lint 命令
|
|
50
|
+
*/
|
|
51
|
+
async ensureLintScripts(projectDir, projectType) {
|
|
52
|
+
const packageJsonPath = path.join(projectDir, 'package.json');
|
|
53
|
+
if (!fs.existsSync(packageJsonPath)) {
|
|
54
|
+
console.log('\n⚠️ 未找到 package.json,跳过脚本检查\n');
|
|
55
|
+
return { modified: false, addedScripts: [] };
|
|
56
|
+
}
|
|
57
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
58
|
+
const scripts = packageJson.scripts || {};
|
|
59
|
+
const addedScripts = [];
|
|
60
|
+
let modified = false;
|
|
61
|
+
// 根据项目类型确定需要的命令
|
|
62
|
+
const requiredScripts = this.getRequiredScripts(projectType, scripts);
|
|
63
|
+
if (requiredScripts.length === 0) {
|
|
64
|
+
return { modified: false, addedScripts: [] };
|
|
65
|
+
}
|
|
66
|
+
console.log('\n📋 检查 package.json scripts...\n');
|
|
67
|
+
// 询问用户是否添加
|
|
68
|
+
const inquirer = (await Promise.resolve().then(() => __importStar(require('inquirer')))).default;
|
|
69
|
+
const { confirm } = await inquirer.prompt([
|
|
70
|
+
{
|
|
71
|
+
type: 'confirm',
|
|
72
|
+
name: 'confirm',
|
|
73
|
+
message: `检测到缺少以下推荐的 npm scripts,是否自动添加?\n${requiredScripts.map((s) => ` - ${s.name}: ${s.command}`).join('\n')}\n`,
|
|
74
|
+
default: true,
|
|
75
|
+
},
|
|
76
|
+
]);
|
|
77
|
+
if (!confirm) {
|
|
78
|
+
console.log('\n⚠️ 已跳过添加 scripts,CI/CD 将使用智能检测\n');
|
|
79
|
+
return { modified: false, addedScripts: [] };
|
|
80
|
+
}
|
|
81
|
+
// 添加缺失的脚本
|
|
82
|
+
for (const script of requiredScripts) {
|
|
83
|
+
packageJson.scripts[script.name] = script.command;
|
|
84
|
+
addedScripts.push(script.name);
|
|
85
|
+
modified = true;
|
|
86
|
+
}
|
|
87
|
+
if (modified) {
|
|
88
|
+
// 备份原文件
|
|
89
|
+
const backupPath = `${packageJsonPath}.backup`;
|
|
90
|
+
fs.copyFileSync(packageJsonPath, backupPath);
|
|
91
|
+
// 写入更新后的 package.json
|
|
92
|
+
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n', 'utf-8');
|
|
93
|
+
console.log(`\n✅ 已添加 ${addedScripts.length} 个 script`);
|
|
94
|
+
console.log(` 备份文件: ${backupPath}\n`);
|
|
95
|
+
}
|
|
96
|
+
return { modified, addedScripts };
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* 获取需要添加的脚本
|
|
100
|
+
*/
|
|
101
|
+
getRequiredScripts(projectType, existingScripts) {
|
|
102
|
+
const required = [];
|
|
103
|
+
// NestJS 项目
|
|
104
|
+
if (projectType === 'nestjs' || projectType === 'node') {
|
|
105
|
+
// 检查是否有 lint:check
|
|
106
|
+
if (!existingScripts['lint:check']) {
|
|
107
|
+
// 如果有 lint,基于它创建 lint:check
|
|
108
|
+
if (existingScripts['lint']) {
|
|
109
|
+
const lintCommand = existingScripts['lint'];
|
|
110
|
+
// 移除 --fix 参数
|
|
111
|
+
const checkCommand = lintCommand.replace(/\s+--fix\s*$/, '').trim();
|
|
112
|
+
required.push({
|
|
113
|
+
name: 'lint:check',
|
|
114
|
+
command: checkCommand,
|
|
115
|
+
description: 'ESLint 检查(不自动修复)',
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
// 默认 NestJS lint 命令
|
|
120
|
+
required.push({
|
|
121
|
+
name: 'lint:check',
|
|
122
|
+
command: 'eslint "{src,apps,libs,test}/**/*.ts"',
|
|
123
|
+
description: 'ESLint 检查',
|
|
124
|
+
});
|
|
125
|
+
required.push({
|
|
126
|
+
name: 'lint',
|
|
127
|
+
command: 'eslint "{src,apps,libs,test}/**/*.ts" --fix',
|
|
128
|
+
description: 'ESLint 检查并自动修复',
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Vue/React 项目
|
|
134
|
+
if (projectType === 'vue' || projectType === 'react') {
|
|
135
|
+
// 检查是否有 type-check
|
|
136
|
+
if (!existingScripts['type-check']) {
|
|
137
|
+
if (projectType === 'vue') {
|
|
138
|
+
required.push({
|
|
139
|
+
name: 'type-check',
|
|
140
|
+
command: 'vue-tsc --noEmit',
|
|
141
|
+
description: 'TypeScript 类型检查',
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
required.push({
|
|
146
|
+
name: 'type-check',
|
|
147
|
+
command: 'tsc --noEmit',
|
|
148
|
+
description: 'TypeScript 类型检查',
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
// 如果没有 lint:check 也没有 lint
|
|
153
|
+
if (!existingScripts['lint:check'] && !existingScripts['lint']) {
|
|
154
|
+
required.push({
|
|
155
|
+
name: 'lint',
|
|
156
|
+
command: 'eslint . --ext .ts,.tsx,.vue --fix',
|
|
157
|
+
description: 'ESLint 检查并自动修复',
|
|
158
|
+
});
|
|
159
|
+
required.push({
|
|
160
|
+
name: 'lint:check',
|
|
161
|
+
command: 'eslint . --ext .ts,.tsx,.vue',
|
|
162
|
+
description: 'ESLint 检查',
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return required;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
exports.PackageHelper = PackageHelper;
|
|
170
|
+
/**
|
|
171
|
+
* 创建 PackageHelper 实例
|
|
172
|
+
*/
|
|
173
|
+
function createPackageHelper() {
|
|
174
|
+
return new PackageHelper();
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=package-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-helper.js","sourceRoot":"","sources":["../../src/utils/package-helper.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -35,7 +35,7 @@ lint:
|
|
|
35
35
|
- .npm/
|
|
36
36
|
policy: pull-push
|
|
37
37
|
before_script:
|
|
38
|
-
- apk add --no-cache git curl
|
|
38
|
+
- apk add --no-cache git curl jq
|
|
39
39
|
- git --version
|
|
40
40
|
- echo "Setting up Git authentication..."
|
|
41
41
|
- git config --global http.sslVerify false
|
|
@@ -43,7 +43,25 @@ lint:
|
|
|
43
43
|
- git config --global url."https://oauth2:${GITLAB_ACCESS_TOKEN}@{{GITLAB_HOST}}".insteadOf "https://{{GITLAB_HOST}}"
|
|
44
44
|
- npm ci --cache .npm --prefer-offline
|
|
45
45
|
script:
|
|
46
|
-
-
|
|
46
|
+
- |
|
|
47
|
+
# 智能检测并运行 lint 命令
|
|
48
|
+
echo "检测可用的 lint 命令..."
|
|
49
|
+
if npm run | grep -q "lint:check"; then
|
|
50
|
+
echo "✓ 运行 npm run lint:check"
|
|
51
|
+
npm run lint:check
|
|
52
|
+
elif npm run | grep -q "lint"; then
|
|
53
|
+
echo "✓ 运行 npm run lint"
|
|
54
|
+
npm run lint
|
|
55
|
+
elif npm run | grep -q "type-check"; then
|
|
56
|
+
echo "✓ 运行 npm run type-check"
|
|
57
|
+
npm run type-check
|
|
58
|
+
else
|
|
59
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
60
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
61
|
+
echo " - lint:check (推荐)"
|
|
62
|
+
echo " - lint"
|
|
63
|
+
echo " - type-check"
|
|
64
|
+
fi
|
|
47
65
|
only:
|
|
48
66
|
- merge_requests
|
|
49
67
|
- main
|
|
@@ -35,7 +35,26 @@ lint:
|
|
|
35
35
|
- .npm/
|
|
36
36
|
policy: pull-push
|
|
37
37
|
before_script:
|
|
38
|
-
-
|
|
38
|
+
- |
|
|
39
|
+
# 智能检测并运行 lint 命令
|
|
40
|
+
echo "检测可用的 lint 命令..."
|
|
41
|
+
if npm run | grep -q "lint:check"; then
|
|
42
|
+
echo "✓ 运行 npm run lint:check"
|
|
43
|
+
npm run lint:check
|
|
44
|
+
elif npm run | grep -q "lint"; then
|
|
45
|
+
echo "✓ 运行 npm run lint"
|
|
46
|
+
npm run lint
|
|
47
|
+
elif npm run | grep -q "type-check"; then
|
|
48
|
+
echo "✓ 运行 npm run type-check"
|
|
49
|
+
npm run type-check
|
|
50
|
+
else
|
|
51
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
52
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
53
|
+
echo " - lint:check (推荐)"
|
|
54
|
+
echo " - lint"
|
|
55
|
+
echo " - type-check"
|
|
56
|
+
fi
|
|
57
|
+
- apk add --no-cache git curl jq
|
|
39
58
|
- git --version
|
|
40
59
|
- echo "Setting up Git authentication..."
|
|
41
60
|
- git config --global http.sslVerify false
|
|
@@ -43,7 +62,25 @@ lint:
|
|
|
43
62
|
- git config --global url."https://oauth2:${GITLAB_ACCESS_TOKEN}@{{GITLAB_HOST}}".insteadOf "https://{{GITLAB_HOST}}"
|
|
44
63
|
- npm ci --cache .npm --prefer-offline
|
|
45
64
|
script:
|
|
46
|
-
-
|
|
65
|
+
- |
|
|
66
|
+
# 智能检测并运行 lint 命令
|
|
67
|
+
echo "检测可用的 lint 命令..."
|
|
68
|
+
if npm run | grep -q "lint:check"; then
|
|
69
|
+
echo "✓ 运行 npm run lint:check"
|
|
70
|
+
npm run lint:check
|
|
71
|
+
elif npm run | grep -q "lint"; then
|
|
72
|
+
echo "✓ 运行 npm run lint"
|
|
73
|
+
npm run lint
|
|
74
|
+
elif npm run | grep -q "type-check"; then
|
|
75
|
+
echo "✓ 运行 npm run type-check"
|
|
76
|
+
npm run type-check
|
|
77
|
+
else
|
|
78
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
79
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
80
|
+
echo " - lint:check (推荐)"
|
|
81
|
+
echo " - lint"
|
|
82
|
+
echo " - type-check"
|
|
83
|
+
fi
|
|
47
84
|
only:
|
|
48
85
|
- merge_requests
|
|
49
86
|
- main
|
|
@@ -57,10 +94,48 @@ build:
|
|
|
57
94
|
name: docker:24.0.5
|
|
58
95
|
pull_policy: if-not-present
|
|
59
96
|
before_script:
|
|
97
|
+
- |
|
|
98
|
+
# 智能检测并运行 lint 命令
|
|
99
|
+
echo "检测可用的 lint 命令..."
|
|
100
|
+
if npm run | grep -q "lint:check"; then
|
|
101
|
+
echo "✓ 运行 npm run lint:check"
|
|
102
|
+
npm run lint:check
|
|
103
|
+
elif npm run | grep -q "lint"; then
|
|
104
|
+
echo "✓ 运行 npm run lint"
|
|
105
|
+
npm run lint
|
|
106
|
+
elif npm run | grep -q "type-check"; then
|
|
107
|
+
echo "✓ 运行 npm run type-check"
|
|
108
|
+
npm run type-check
|
|
109
|
+
else
|
|
110
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
111
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
112
|
+
echo " - lint:check (推荐)"
|
|
113
|
+
echo " - lint"
|
|
114
|
+
echo " - type-check"
|
|
115
|
+
fi
|
|
60
116
|
- docker info
|
|
61
117
|
- echo "登录到Docker Hub..."
|
|
62
118
|
- echo "$DOCKER_HUB_PASSWORD" | docker login -u $DOCKER_HUB_USERNAME --password-stdin
|
|
63
119
|
script:
|
|
120
|
+
- |
|
|
121
|
+
# 智能检测并运行 lint 命令
|
|
122
|
+
echo "检测可用的 lint 命令..."
|
|
123
|
+
if npm run | grep -q "lint:check"; then
|
|
124
|
+
echo "✓ 运行 npm run lint:check"
|
|
125
|
+
npm run lint:check
|
|
126
|
+
elif npm run | grep -q "lint"; then
|
|
127
|
+
echo "✓ 运行 npm run lint"
|
|
128
|
+
npm run lint
|
|
129
|
+
elif npm run | grep -q "type-check"; then
|
|
130
|
+
echo "✓ 运行 npm run type-check"
|
|
131
|
+
npm run type-check
|
|
132
|
+
else
|
|
133
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
134
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
135
|
+
echo " - lint:check (推荐)"
|
|
136
|
+
echo " - lint"
|
|
137
|
+
echo " - type-check"
|
|
138
|
+
fi
|
|
64
139
|
- echo "尝试拉取最新镜像作为缓存..."
|
|
65
140
|
- docker pull $DOCKER_HUB_IMAGE:latest || true
|
|
66
141
|
- echo "构建Docker镜像..."
|
|
@@ -86,11 +161,49 @@ deploy_dev:
|
|
|
86
161
|
REGISTRY_TYPE: "{{REGISTRY_TYPE}}"
|
|
87
162
|
cache: {}
|
|
88
163
|
before_script:
|
|
164
|
+
- |
|
|
165
|
+
# 智能检测并运行 lint 命令
|
|
166
|
+
echo "检测可用的 lint 命令..."
|
|
167
|
+
if npm run | grep -q "lint:check"; then
|
|
168
|
+
echo "✓ 运行 npm run lint:check"
|
|
169
|
+
npm run lint:check
|
|
170
|
+
elif npm run | grep -q "lint"; then
|
|
171
|
+
echo "✓ 运行 npm run lint"
|
|
172
|
+
npm run lint
|
|
173
|
+
elif npm run | grep -q "type-check"; then
|
|
174
|
+
echo "✓ 运行 npm run type-check"
|
|
175
|
+
npm run type-check
|
|
176
|
+
else
|
|
177
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
178
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
179
|
+
echo " - lint:check (推荐)"
|
|
180
|
+
echo " - lint"
|
|
181
|
+
echo " - type-check"
|
|
182
|
+
fi
|
|
89
183
|
- apk add --no-cache sshpass bash openssl rsync
|
|
90
184
|
- mkdir -p ~/.ssh
|
|
91
185
|
- chmod 700 ~/.ssh
|
|
92
186
|
- chmod 644 ~/.ssh/known_hosts
|
|
93
187
|
script:
|
|
188
|
+
- |
|
|
189
|
+
# 智能检测并运行 lint 命令
|
|
190
|
+
echo "检测可用的 lint 命令..."
|
|
191
|
+
if npm run | grep -q "lint:check"; then
|
|
192
|
+
echo "✓ 运行 npm run lint:check"
|
|
193
|
+
npm run lint:check
|
|
194
|
+
elif npm run | grep -q "lint"; then
|
|
195
|
+
echo "✓ 运行 npm run lint"
|
|
196
|
+
npm run lint
|
|
197
|
+
elif npm run | grep -q "type-check"; then
|
|
198
|
+
echo "✓ 运行 npm run type-check"
|
|
199
|
+
npm run type-check
|
|
200
|
+
else
|
|
201
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
202
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
203
|
+
echo " - lint:check (推荐)"
|
|
204
|
+
echo " - lint"
|
|
205
|
+
echo " - type-check"
|
|
206
|
+
fi
|
|
94
207
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "mkdir -p $DEPLOY_DIR"
|
|
95
208
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "which rsync || apk add --no-cache rsync"
|
|
96
209
|
- sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$TEST_SERVER_HOST:$DEPLOY_DIR/
|
|
@@ -115,11 +228,49 @@ deploy_prod:
|
|
|
115
228
|
REGISTRY_TYPE: "{{REGISTRY_TYPE}}"
|
|
116
229
|
cache: {}
|
|
117
230
|
before_script:
|
|
231
|
+
- |
|
|
232
|
+
# 智能检测并运行 lint 命令
|
|
233
|
+
echo "检测可用的 lint 命令..."
|
|
234
|
+
if npm run | grep -q "lint:check"; then
|
|
235
|
+
echo "✓ 运行 npm run lint:check"
|
|
236
|
+
npm run lint:check
|
|
237
|
+
elif npm run | grep -q "lint"; then
|
|
238
|
+
echo "✓ 运行 npm run lint"
|
|
239
|
+
npm run lint
|
|
240
|
+
elif npm run | grep -q "type-check"; then
|
|
241
|
+
echo "✓ 运行 npm run type-check"
|
|
242
|
+
npm run type-check
|
|
243
|
+
else
|
|
244
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
245
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
246
|
+
echo " - lint:check (推荐)"
|
|
247
|
+
echo " - lint"
|
|
248
|
+
echo " - type-check"
|
|
249
|
+
fi
|
|
118
250
|
- apk add --no-cache sshpass bash openssl rsync
|
|
119
251
|
- mkdir -p ~/.ssh
|
|
120
252
|
- chmod 700 ~/.ssh
|
|
121
253
|
- chmod 644 ~/.ssh/known_hosts
|
|
122
254
|
script:
|
|
255
|
+
- |
|
|
256
|
+
# 智能检测并运行 lint 命令
|
|
257
|
+
echo "检测可用的 lint 命令..."
|
|
258
|
+
if npm run | grep -q "lint:check"; then
|
|
259
|
+
echo "✓ 运行 npm run lint:check"
|
|
260
|
+
npm run lint:check
|
|
261
|
+
elif npm run | grep -q "lint"; then
|
|
262
|
+
echo "✓ 运行 npm run lint"
|
|
263
|
+
npm run lint
|
|
264
|
+
elif npm run | grep -q "type-check"; then
|
|
265
|
+
echo "✓ 运行 npm run type-check"
|
|
266
|
+
npm run type-check
|
|
267
|
+
else
|
|
268
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
269
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
270
|
+
echo " - lint:check (推荐)"
|
|
271
|
+
echo " - lint"
|
|
272
|
+
echo " - type-check"
|
|
273
|
+
fi
|
|
123
274
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "mkdir -p $DEPLOY_DIR"
|
|
124
275
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "which rsync || apk add --no-cache rsync"
|
|
125
276
|
- sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$PROD_SERVER_HOST:$DEPLOY_DIR/
|
|
@@ -142,11 +293,49 @@ rollback:
|
|
|
142
293
|
APP_PORT: "{{PROD_PORT}}"
|
|
143
294
|
cache: {}
|
|
144
295
|
before_script:
|
|
296
|
+
- |
|
|
297
|
+
# 智能检测并运行 lint 命令
|
|
298
|
+
echo "检测可用的 lint 命令..."
|
|
299
|
+
if npm run | grep -q "lint:check"; then
|
|
300
|
+
echo "✓ 运行 npm run lint:check"
|
|
301
|
+
npm run lint:check
|
|
302
|
+
elif npm run | grep -q "lint"; then
|
|
303
|
+
echo "✓ 运行 npm run lint"
|
|
304
|
+
npm run lint
|
|
305
|
+
elif npm run | grep -q "type-check"; then
|
|
306
|
+
echo "✓ 运行 npm run type-check"
|
|
307
|
+
npm run type-check
|
|
308
|
+
else
|
|
309
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
310
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
311
|
+
echo " - lint:check (推荐)"
|
|
312
|
+
echo " - lint"
|
|
313
|
+
echo " - type-check"
|
|
314
|
+
fi
|
|
145
315
|
- apk add --no-cache openssh-client openssl
|
|
146
316
|
- mkdir -p ~/.ssh
|
|
147
317
|
- chmod 700 ~/.ssh
|
|
148
318
|
- chmod 644 ~/.ssh/known_hosts
|
|
149
319
|
script:
|
|
320
|
+
- |
|
|
321
|
+
# 智能检测并运行 lint 命令
|
|
322
|
+
echo "检测可用的 lint 命令..."
|
|
323
|
+
if npm run | grep -q "lint:check"; then
|
|
324
|
+
echo "✓ 运行 npm run lint:check"
|
|
325
|
+
npm run lint:check
|
|
326
|
+
elif npm run | grep -q "lint"; then
|
|
327
|
+
echo "✓ 运行 npm run lint"
|
|
328
|
+
npm run lint
|
|
329
|
+
elif npm run | grep -q "type-check"; then
|
|
330
|
+
echo "✓ 运行 npm run type-check"
|
|
331
|
+
npm run type-check
|
|
332
|
+
else
|
|
333
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
334
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
335
|
+
echo " - lint:check (推荐)"
|
|
336
|
+
echo " - lint"
|
|
337
|
+
echo " - type-check"
|
|
338
|
+
fi
|
|
150
339
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose down"
|
|
151
340
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose pull"
|
|
152
341
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose up -d"
|
|
@@ -35,7 +35,26 @@ lint:
|
|
|
35
35
|
- .npm/
|
|
36
36
|
policy: pull-push
|
|
37
37
|
before_script:
|
|
38
|
-
-
|
|
38
|
+
- |
|
|
39
|
+
# 智能检测并运行 lint 命令
|
|
40
|
+
echo "检测可用的 lint 命令..."
|
|
41
|
+
if npm run | grep -q "lint:check"; then
|
|
42
|
+
echo "✓ 运行 npm run lint:check"
|
|
43
|
+
npm run lint:check
|
|
44
|
+
elif npm run | grep -q "lint"; then
|
|
45
|
+
echo "✓ 运行 npm run lint"
|
|
46
|
+
npm run lint
|
|
47
|
+
elif npm run | grep -q "type-check"; then
|
|
48
|
+
echo "✓ 运行 npm run type-check"
|
|
49
|
+
npm run type-check
|
|
50
|
+
else
|
|
51
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
52
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
53
|
+
echo " - lint:check (推荐)"
|
|
54
|
+
echo " - lint"
|
|
55
|
+
echo " - type-check"
|
|
56
|
+
fi
|
|
57
|
+
- apk add --no-cache git curl jq
|
|
39
58
|
- git --version
|
|
40
59
|
- echo "Setting up Git authentication..."
|
|
41
60
|
- git config --global http.sslVerify false
|
|
@@ -43,7 +62,25 @@ lint:
|
|
|
43
62
|
- git config --global url."https://oauth2:${GITLAB_ACCESS_TOKEN}@{{GITLAB_HOST}}".insteadOf "https://{{GITLAB_HOST}}"
|
|
44
63
|
- npm ci --cache .npm --prefer-offline
|
|
45
64
|
script:
|
|
46
|
-
-
|
|
65
|
+
- |
|
|
66
|
+
# 智能检测并运行 lint 命令
|
|
67
|
+
echo "检测可用的 lint 命令..."
|
|
68
|
+
if npm run | grep -q "lint:check"; then
|
|
69
|
+
echo "✓ 运行 npm run lint:check"
|
|
70
|
+
npm run lint:check
|
|
71
|
+
elif npm run | grep -q "lint"; then
|
|
72
|
+
echo "✓ 运行 npm run lint"
|
|
73
|
+
npm run lint
|
|
74
|
+
elif npm run | grep -q "type-check"; then
|
|
75
|
+
echo "✓ 运行 npm run type-check"
|
|
76
|
+
npm run type-check
|
|
77
|
+
else
|
|
78
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
79
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
80
|
+
echo " - lint:check (推荐)"
|
|
81
|
+
echo " - lint"
|
|
82
|
+
echo " - type-check"
|
|
83
|
+
fi
|
|
47
84
|
only:
|
|
48
85
|
- merge_requests
|
|
49
86
|
- main
|
|
@@ -57,11 +94,49 @@ build:
|
|
|
57
94
|
name: docker:24.0.5
|
|
58
95
|
pull_policy: if-not-present
|
|
59
96
|
before_script:
|
|
97
|
+
- |
|
|
98
|
+
# 智能检测并运行 lint 命令
|
|
99
|
+
echo "检测可用的 lint 命令..."
|
|
100
|
+
if npm run | grep -q "lint:check"; then
|
|
101
|
+
echo "✓ 运行 npm run lint:check"
|
|
102
|
+
npm run lint:check
|
|
103
|
+
elif npm run | grep -q "lint"; then
|
|
104
|
+
echo "✓ 运行 npm run lint"
|
|
105
|
+
npm run lint
|
|
106
|
+
elif npm run | grep -q "type-check"; then
|
|
107
|
+
echo "✓ 运行 npm run type-check"
|
|
108
|
+
npm run type-check
|
|
109
|
+
else
|
|
110
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
111
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
112
|
+
echo " - lint:check (推荐)"
|
|
113
|
+
echo " - lint"
|
|
114
|
+
echo " - type-check"
|
|
115
|
+
fi
|
|
60
116
|
- docker info
|
|
61
117
|
- echo "登录到 GitLab Container Registry..."
|
|
62
118
|
# 使用 GitLab CI 预定义变量登录
|
|
63
119
|
- echo "$CI_REGISTRY_PASSWORD" | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
|
|
64
120
|
script:
|
|
121
|
+
- |
|
|
122
|
+
# 智能检测并运行 lint 命令
|
|
123
|
+
echo "检测可用的 lint 命令..."
|
|
124
|
+
if npm run | grep -q "lint:check"; then
|
|
125
|
+
echo "✓ 运行 npm run lint:check"
|
|
126
|
+
npm run lint:check
|
|
127
|
+
elif npm run | grep -q "lint"; then
|
|
128
|
+
echo "✓ 运行 npm run lint"
|
|
129
|
+
npm run lint
|
|
130
|
+
elif npm run | grep -q "type-check"; then
|
|
131
|
+
echo "✓ 运行 npm run type-check"
|
|
132
|
+
npm run type-check
|
|
133
|
+
else
|
|
134
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
135
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
136
|
+
echo " - lint:check (推荐)"
|
|
137
|
+
echo " - lint"
|
|
138
|
+
echo " - type-check"
|
|
139
|
+
fi
|
|
65
140
|
- echo "尝试拉取最新镜像作为缓存..."
|
|
66
141
|
- docker pull $DOCKER_IMAGE:latest || true
|
|
67
142
|
- echo "构建Docker镜像..."
|
|
@@ -86,6 +161,25 @@ deploy_dev:
|
|
|
86
161
|
APP_PORT: "{{DEV_PORT}}"
|
|
87
162
|
cache: {}
|
|
88
163
|
before_script:
|
|
164
|
+
- |
|
|
165
|
+
# 智能检测并运行 lint 命令
|
|
166
|
+
echo "检测可用的 lint 命令..."
|
|
167
|
+
if npm run | grep -q "lint:check"; then
|
|
168
|
+
echo "✓ 运行 npm run lint:check"
|
|
169
|
+
npm run lint:check
|
|
170
|
+
elif npm run | grep -q "lint"; then
|
|
171
|
+
echo "✓ 运行 npm run lint"
|
|
172
|
+
npm run lint
|
|
173
|
+
elif npm run | grep -q "type-check"; then
|
|
174
|
+
echo "✓ 运行 npm run type-check"
|
|
175
|
+
npm run type-check
|
|
176
|
+
else
|
|
177
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
178
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
179
|
+
echo " - lint:check (推荐)"
|
|
180
|
+
echo " - lint"
|
|
181
|
+
echo " - type-check"
|
|
182
|
+
fi
|
|
89
183
|
- apk add --no-cache sshpass bash openssl rsync
|
|
90
184
|
- mkdir -p ~/.ssh
|
|
91
185
|
- chmod 700 ~/.ssh
|
|
@@ -94,6 +188,25 @@ deploy_dev:
|
|
|
94
188
|
- chmod 600 ~/.ssh/config
|
|
95
189
|
- chmod 644 ~/.ssh/known_hosts
|
|
96
190
|
script:
|
|
191
|
+
- |
|
|
192
|
+
# 智能检测并运行 lint 命令
|
|
193
|
+
echo "检测可用的 lint 命令..."
|
|
194
|
+
if npm run | grep -q "lint:check"; then
|
|
195
|
+
echo "✓ 运行 npm run lint:check"
|
|
196
|
+
npm run lint:check
|
|
197
|
+
elif npm run | grep -q "lint"; then
|
|
198
|
+
echo "✓ 运行 npm run lint"
|
|
199
|
+
npm run lint
|
|
200
|
+
elif npm run | grep -q "type-check"; then
|
|
201
|
+
echo "✓ 运行 npm run type-check"
|
|
202
|
+
npm run type-check
|
|
203
|
+
else
|
|
204
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
205
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
206
|
+
echo " - lint:check (推荐)"
|
|
207
|
+
echo " - lint"
|
|
208
|
+
echo " - type-check"
|
|
209
|
+
fi
|
|
97
210
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "mkdir -p $DEPLOY_DIR"
|
|
98
211
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "which rsync || apk add --no-cache rsync"
|
|
99
212
|
- sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$TEST_SERVER_HOST:$DEPLOY_DIR/
|
|
@@ -118,6 +231,25 @@ deploy_prod:
|
|
|
118
231
|
APP_PORT: "{{PROD_PORT}}"
|
|
119
232
|
cache: {}
|
|
120
233
|
before_script:
|
|
234
|
+
- |
|
|
235
|
+
# 智能检测并运行 lint 命令
|
|
236
|
+
echo "检测可用的 lint 命令..."
|
|
237
|
+
if npm run | grep -q "lint:check"; then
|
|
238
|
+
echo "✓ 运行 npm run lint:check"
|
|
239
|
+
npm run lint:check
|
|
240
|
+
elif npm run | grep -q "lint"; then
|
|
241
|
+
echo "✓ 运行 npm run lint"
|
|
242
|
+
npm run lint
|
|
243
|
+
elif npm run | grep -q "type-check"; then
|
|
244
|
+
echo "✓ 运行 npm run type-check"
|
|
245
|
+
npm run type-check
|
|
246
|
+
else
|
|
247
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
248
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
249
|
+
echo " - lint:check (推荐)"
|
|
250
|
+
echo " - lint"
|
|
251
|
+
echo " - type-check"
|
|
252
|
+
fi
|
|
121
253
|
- apk add --no-cache sshpass bash openssl rsync
|
|
122
254
|
- mkdir -p ~/.ssh
|
|
123
255
|
- chmod 700 ~/.ssh
|
|
@@ -126,6 +258,25 @@ deploy_prod:
|
|
|
126
258
|
- chmod 600 ~/.ssh/config
|
|
127
259
|
- chmod 644 ~/.ssh/known_hosts
|
|
128
260
|
script:
|
|
261
|
+
- |
|
|
262
|
+
# 智能检测并运行 lint 命令
|
|
263
|
+
echo "检测可用的 lint 命令..."
|
|
264
|
+
if npm run | grep -q "lint:check"; then
|
|
265
|
+
echo "✓ 运行 npm run lint:check"
|
|
266
|
+
npm run lint:check
|
|
267
|
+
elif npm run | grep -q "lint"; then
|
|
268
|
+
echo "✓ 运行 npm run lint"
|
|
269
|
+
npm run lint
|
|
270
|
+
elif npm run | grep -q "type-check"; then
|
|
271
|
+
echo "✓ 运行 npm run type-check"
|
|
272
|
+
npm run type-check
|
|
273
|
+
else
|
|
274
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
275
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
276
|
+
echo " - lint:check (推荐)"
|
|
277
|
+
echo " - lint"
|
|
278
|
+
echo " - type-check"
|
|
279
|
+
fi
|
|
129
280
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "mkdir -p $DEPLOY_DIR"
|
|
130
281
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "which rsync || apk add --no-cache rsync"
|
|
131
282
|
- sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$PROD_SERVER_HOST:$DEPLOY_DIR/
|
|
@@ -149,6 +300,25 @@ rollback:
|
|
|
149
300
|
APP_PORT: "{{PROD_PORT}}"
|
|
150
301
|
cache: {}
|
|
151
302
|
before_script:
|
|
303
|
+
- |
|
|
304
|
+
# 智能检测并运行 lint 命令
|
|
305
|
+
echo "检测可用的 lint 命令..."
|
|
306
|
+
if npm run | grep -q "lint:check"; then
|
|
307
|
+
echo "✓ 运行 npm run lint:check"
|
|
308
|
+
npm run lint:check
|
|
309
|
+
elif npm run | grep -q "lint"; then
|
|
310
|
+
echo "✓ 运行 npm run lint"
|
|
311
|
+
npm run lint
|
|
312
|
+
elif npm run | grep -q "type-check"; then
|
|
313
|
+
echo "✓ 运行 npm run type-check"
|
|
314
|
+
npm run type-check
|
|
315
|
+
else
|
|
316
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
317
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
318
|
+
echo " - lint:check (推荐)"
|
|
319
|
+
echo " - lint"
|
|
320
|
+
echo " - type-check"
|
|
321
|
+
fi
|
|
152
322
|
- apk add --no-cache openssh-client openssl
|
|
153
323
|
- mkdir -p ~/.ssh
|
|
154
324
|
- chmod 700 ~/.ssh
|
|
@@ -157,6 +327,25 @@ rollback:
|
|
|
157
327
|
- chmod 600 ~/.ssh/config
|
|
158
328
|
- chmod 644 ~/.ssh/known_hosts
|
|
159
329
|
script:
|
|
330
|
+
- |
|
|
331
|
+
# 智能检测并运行 lint 命令
|
|
332
|
+
echo "检测可用的 lint 命令..."
|
|
333
|
+
if npm run | grep -q "lint:check"; then
|
|
334
|
+
echo "✓ 运行 npm run lint:check"
|
|
335
|
+
npm run lint:check
|
|
336
|
+
elif npm run | grep -q "lint"; then
|
|
337
|
+
echo "✓ 运行 npm run lint"
|
|
338
|
+
npm run lint
|
|
339
|
+
elif npm run | grep -q "type-check"; then
|
|
340
|
+
echo "✓ 运行 npm run type-check"
|
|
341
|
+
npm run type-check
|
|
342
|
+
else
|
|
343
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
344
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
345
|
+
echo " - lint:check (推荐)"
|
|
346
|
+
echo " - lint"
|
|
347
|
+
echo " - type-check"
|
|
348
|
+
fi
|
|
160
349
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose down"
|
|
161
350
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose pull"
|
|
162
351
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose up -d"
|
|
@@ -35,7 +35,26 @@ lint:
|
|
|
35
35
|
- .npm/
|
|
36
36
|
policy: pull-push
|
|
37
37
|
before_script:
|
|
38
|
-
-
|
|
38
|
+
- |
|
|
39
|
+
# 智能检测并运行 lint 命令
|
|
40
|
+
echo "检测可用的 lint 命令..."
|
|
41
|
+
if npm run | grep -q "lint:check"; then
|
|
42
|
+
echo "✓ 运行 npm run lint:check"
|
|
43
|
+
npm run lint:check
|
|
44
|
+
elif npm run | grep -q "lint"; then
|
|
45
|
+
echo "✓ 运行 npm run lint"
|
|
46
|
+
npm run lint
|
|
47
|
+
elif npm run | grep -q "type-check"; then
|
|
48
|
+
echo "✓ 运行 npm run type-check"
|
|
49
|
+
npm run type-check
|
|
50
|
+
else
|
|
51
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
52
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
53
|
+
echo " - lint:check (推荐)"
|
|
54
|
+
echo " - lint"
|
|
55
|
+
echo " - type-check"
|
|
56
|
+
fi
|
|
57
|
+
- apk add --no-cache git curl jq
|
|
39
58
|
- git --version
|
|
40
59
|
- echo "Setting up Git authentication..."
|
|
41
60
|
- git config --global http.sslVerify false
|
|
@@ -43,7 +62,25 @@ lint:
|
|
|
43
62
|
- git config --global url."https://oauth2:${GITLAB_ACCESS_TOKEN}@{{GITLAB_HOST}}".insteadOf "https://{{GITLAB_HOST}}"
|
|
44
63
|
- npm ci --cache .npm --prefer-offline
|
|
45
64
|
script:
|
|
46
|
-
-
|
|
65
|
+
- |
|
|
66
|
+
# 智能检测并运行 lint 命令
|
|
67
|
+
echo "检测可用的 lint 命令..."
|
|
68
|
+
if npm run | grep -q "lint:check"; then
|
|
69
|
+
echo "✓ 运行 npm run lint:check"
|
|
70
|
+
npm run lint:check
|
|
71
|
+
elif npm run | grep -q "lint"; then
|
|
72
|
+
echo "✓ 运行 npm run lint"
|
|
73
|
+
npm run lint
|
|
74
|
+
elif npm run | grep -q "type-check"; then
|
|
75
|
+
echo "✓ 运行 npm run type-check"
|
|
76
|
+
npm run type-check
|
|
77
|
+
else
|
|
78
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
79
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
80
|
+
echo " - lint:check (推荐)"
|
|
81
|
+
echo " - lint"
|
|
82
|
+
echo " - type-check"
|
|
83
|
+
fi
|
|
47
84
|
only:
|
|
48
85
|
- merge_requests
|
|
49
86
|
- main
|
|
@@ -57,10 +94,48 @@ build:
|
|
|
57
94
|
name: docker:24.0.5
|
|
58
95
|
pull_policy: if-not-present
|
|
59
96
|
before_script:
|
|
97
|
+
- |
|
|
98
|
+
# 智能检测并运行 lint 命令
|
|
99
|
+
echo "检测可用的 lint 命令..."
|
|
100
|
+
if npm run | grep -q "lint:check"; then
|
|
101
|
+
echo "✓ 运行 npm run lint:check"
|
|
102
|
+
npm run lint:check
|
|
103
|
+
elif npm run | grep -q "lint"; then
|
|
104
|
+
echo "✓ 运行 npm run lint"
|
|
105
|
+
npm run lint
|
|
106
|
+
elif npm run | grep -q "type-check"; then
|
|
107
|
+
echo "✓ 运行 npm run type-check"
|
|
108
|
+
npm run type-check
|
|
109
|
+
else
|
|
110
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
111
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
112
|
+
echo " - lint:check (推荐)"
|
|
113
|
+
echo " - lint"
|
|
114
|
+
echo " - type-check"
|
|
115
|
+
fi
|
|
60
116
|
- docker info
|
|
61
117
|
- echo "登录到Docker Hub..."
|
|
62
118
|
- echo "$DOCKER_HUB_PASSWORD" | docker login -u $DOCKER_HUB_USERNAME --password-stdin
|
|
63
119
|
script:
|
|
120
|
+
- |
|
|
121
|
+
# 智能检测并运行 lint 命令
|
|
122
|
+
echo "检测可用的 lint 命令..."
|
|
123
|
+
if npm run | grep -q "lint:check"; then
|
|
124
|
+
echo "✓ 运行 npm run lint:check"
|
|
125
|
+
npm run lint:check
|
|
126
|
+
elif npm run | grep -q "lint"; then
|
|
127
|
+
echo "✓ 运行 npm run lint"
|
|
128
|
+
npm run lint
|
|
129
|
+
elif npm run | grep -q "type-check"; then
|
|
130
|
+
echo "✓ 运行 npm run type-check"
|
|
131
|
+
npm run type-check
|
|
132
|
+
else
|
|
133
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
134
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
135
|
+
echo " - lint:check (推荐)"
|
|
136
|
+
echo " - lint"
|
|
137
|
+
echo " - type-check"
|
|
138
|
+
fi
|
|
64
139
|
- echo "尝试拉取最新镜像作为缓存..."
|
|
65
140
|
- docker pull $DOCKER_HUB_IMAGE:latest || true
|
|
66
141
|
- echo "构建Docker镜像..."
|
|
@@ -86,11 +161,49 @@ deploy_dev:
|
|
|
86
161
|
REGISTRY_TYPE: "{{REGISTRY_TYPE}}"
|
|
87
162
|
cache: {}
|
|
88
163
|
before_script:
|
|
164
|
+
- |
|
|
165
|
+
# 智能检测并运行 lint 命令
|
|
166
|
+
echo "检测可用的 lint 命令..."
|
|
167
|
+
if npm run | grep -q "lint:check"; then
|
|
168
|
+
echo "✓ 运行 npm run lint:check"
|
|
169
|
+
npm run lint:check
|
|
170
|
+
elif npm run | grep -q "lint"; then
|
|
171
|
+
echo "✓ 运行 npm run lint"
|
|
172
|
+
npm run lint
|
|
173
|
+
elif npm run | grep -q "type-check"; then
|
|
174
|
+
echo "✓ 运行 npm run type-check"
|
|
175
|
+
npm run type-check
|
|
176
|
+
else
|
|
177
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
178
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
179
|
+
echo " - lint:check (推荐)"
|
|
180
|
+
echo " - lint"
|
|
181
|
+
echo " - type-check"
|
|
182
|
+
fi
|
|
89
183
|
- apk add --no-cache sshpass bash openssl rsync
|
|
90
184
|
- mkdir -p ~/.ssh
|
|
91
185
|
- chmod 700 ~/.ssh
|
|
92
186
|
- chmod 644 ~/.ssh/known_hosts
|
|
93
187
|
script:
|
|
188
|
+
- |
|
|
189
|
+
# 智能检测并运行 lint 命令
|
|
190
|
+
echo "检测可用的 lint 命令..."
|
|
191
|
+
if npm run | grep -q "lint:check"; then
|
|
192
|
+
echo "✓ 运行 npm run lint:check"
|
|
193
|
+
npm run lint:check
|
|
194
|
+
elif npm run | grep -q "lint"; then
|
|
195
|
+
echo "✓ 运行 npm run lint"
|
|
196
|
+
npm run lint
|
|
197
|
+
elif npm run | grep -q "type-check"; then
|
|
198
|
+
echo "✓ 运行 npm run type-check"
|
|
199
|
+
npm run type-check
|
|
200
|
+
else
|
|
201
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
202
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
203
|
+
echo " - lint:check (推荐)"
|
|
204
|
+
echo " - lint"
|
|
205
|
+
echo " - type-check"
|
|
206
|
+
fi
|
|
94
207
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "mkdir -p $DEPLOY_DIR"
|
|
95
208
|
- sshpass -p "$SSH_PASSWORD" ssh root@$TEST_SERVER_HOST "which rsync || apk add --no-cache rsync"
|
|
96
209
|
- sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$TEST_SERVER_HOST:$DEPLOY_DIR/
|
|
@@ -115,11 +228,49 @@ deploy_prod:
|
|
|
115
228
|
REGISTRY_TYPE: "{{REGISTRY_TYPE}}"
|
|
116
229
|
cache: {}
|
|
117
230
|
before_script:
|
|
231
|
+
- |
|
|
232
|
+
# 智能检测并运行 lint 命令
|
|
233
|
+
echo "检测可用的 lint 命令..."
|
|
234
|
+
if npm run | grep -q "lint:check"; then
|
|
235
|
+
echo "✓ 运行 npm run lint:check"
|
|
236
|
+
npm run lint:check
|
|
237
|
+
elif npm run | grep -q "lint"; then
|
|
238
|
+
echo "✓ 运行 npm run lint"
|
|
239
|
+
npm run lint
|
|
240
|
+
elif npm run | grep -q "type-check"; then
|
|
241
|
+
echo "✓ 运行 npm run type-check"
|
|
242
|
+
npm run type-check
|
|
243
|
+
else
|
|
244
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
245
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
246
|
+
echo " - lint:check (推荐)"
|
|
247
|
+
echo " - lint"
|
|
248
|
+
echo " - type-check"
|
|
249
|
+
fi
|
|
118
250
|
- apk add --no-cache sshpass bash openssl rsync
|
|
119
251
|
- mkdir -p ~/.ssh
|
|
120
252
|
- chmod 700 ~/.ssh
|
|
121
253
|
- chmod 644 ~/.ssh/known_hosts
|
|
122
254
|
script:
|
|
255
|
+
- |
|
|
256
|
+
# 智能检测并运行 lint 命令
|
|
257
|
+
echo "检测可用的 lint 命令..."
|
|
258
|
+
if npm run | grep -q "lint:check"; then
|
|
259
|
+
echo "✓ 运行 npm run lint:check"
|
|
260
|
+
npm run lint:check
|
|
261
|
+
elif npm run | grep -q "lint"; then
|
|
262
|
+
echo "✓ 运行 npm run lint"
|
|
263
|
+
npm run lint
|
|
264
|
+
elif npm run | grep -q "type-check"; then
|
|
265
|
+
echo "✓ 运行 npm run type-check"
|
|
266
|
+
npm run type-check
|
|
267
|
+
else
|
|
268
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
269
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
270
|
+
echo " - lint:check (推荐)"
|
|
271
|
+
echo " - lint"
|
|
272
|
+
echo " - type-check"
|
|
273
|
+
fi
|
|
123
274
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "mkdir -p $DEPLOY_DIR"
|
|
124
275
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "which rsync || apk add --no-cache rsync"
|
|
125
276
|
- sshpass -p "$SSH_PASSWORD" rsync -avz --delete --exclude='.git/' --exclude='node_modules/' . root@$PROD_SERVER_HOST:$DEPLOY_DIR/
|
|
@@ -142,11 +293,49 @@ rollback:
|
|
|
142
293
|
APP_PORT: "{{PROD_PORT}}"
|
|
143
294
|
cache: {}
|
|
144
295
|
before_script:
|
|
296
|
+
- |
|
|
297
|
+
# 智能检测并运行 lint 命令
|
|
298
|
+
echo "检测可用的 lint 命令..."
|
|
299
|
+
if npm run | grep -q "lint:check"; then
|
|
300
|
+
echo "✓ 运行 npm run lint:check"
|
|
301
|
+
npm run lint:check
|
|
302
|
+
elif npm run | grep -q "lint"; then
|
|
303
|
+
echo "✓ 运行 npm run lint"
|
|
304
|
+
npm run lint
|
|
305
|
+
elif npm run | grep -q "type-check"; then
|
|
306
|
+
echo "✓ 运行 npm run type-check"
|
|
307
|
+
npm run type-check
|
|
308
|
+
else
|
|
309
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
310
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
311
|
+
echo " - lint:check (推荐)"
|
|
312
|
+
echo " - lint"
|
|
313
|
+
echo " - type-check"
|
|
314
|
+
fi
|
|
145
315
|
- apk add --no-cache openssh-client openssl
|
|
146
316
|
- mkdir -p ~/.ssh
|
|
147
317
|
- chmod 700 ~/.ssh
|
|
148
318
|
- chmod 644 ~/.ssh/known_hosts
|
|
149
319
|
script:
|
|
320
|
+
- |
|
|
321
|
+
# 智能检测并运行 lint 命令
|
|
322
|
+
echo "检测可用的 lint 命令..."
|
|
323
|
+
if npm run | grep -q "lint:check"; then
|
|
324
|
+
echo "✓ 运行 npm run lint:check"
|
|
325
|
+
npm run lint:check
|
|
326
|
+
elif npm run | grep -q "lint"; then
|
|
327
|
+
echo "✓ 运行 npm run lint"
|
|
328
|
+
npm run lint
|
|
329
|
+
elif npm run | grep -q "type-check"; then
|
|
330
|
+
echo "✓ 运行 npm run type-check"
|
|
331
|
+
npm run type-check
|
|
332
|
+
else
|
|
333
|
+
echo "⚠️ 未找到 lint 相关命令,跳过代码检查"
|
|
334
|
+
echo "建议在 package.json 中添加以下命令之一:"
|
|
335
|
+
echo " - lint:check (推荐)"
|
|
336
|
+
echo " - lint"
|
|
337
|
+
echo " - type-check"
|
|
338
|
+
fi
|
|
150
339
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose down"
|
|
151
340
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose pull"
|
|
152
341
|
- sshpass -p "$SSH_PASSWORD" ssh root@$PROD_SERVER_HOST "cd $DEPLOY_DIR && export APP_PORT=$APP_PORT && docker-compose up -d"
|