@cnbcool/cnb-cli 1.0.0 → 1.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/README.md +2 -37
- package/package.json +26 -6
- package/.cnb.yml +0 -37
- package/DEVELOPMENT.md +0 -345
- package/cag.config.js +0 -57
- package/downloads/1773729361207-dsfgely.png +0 -0
- package/skills/artifact-migrate/README.md +0 -79
- package/skills/artifact-migrate/SKILL.md +0 -674
- package/skills/auto-code/SKILL.md +0 -71
- package/skills/auto-code/hooks/hooks.json +0 -15
- package/skills/cnb-code-import/LICENSE +0 -20
- package/skills/cnb-code-import/README.md +0 -311
- package/skills/cnb-code-import/SKILL.md +0 -368
- package/skills/cnb-code-import/scripts/migrate.sh +0 -371
- package/skills/cnb-skill/SKILL.md +0 -100
- package/skills/code-review/README.md +0 -3
- package/skills/code-review/SKILL.md +0 -131
- package/skills/code-review/hooks/hooks.json +0 -15
- package/skills/diagnose-pr-pipeline/README.md +0 -3
- package/skills/diagnose-pr-pipeline/SKILL.md +0 -88
- package/skills/dialog-ci-log/README.md +0 -16
- package/skills/dialog-ci-log/SKILL.md +0 -41
- package/skills/dialog-ci-log/scrips/get-failed-stage-logs.js +0 -124
- package/skills/pr-diff/README.md +0 -3
- package/skills/pr-diff/SKILL.md +0 -97
- package/skills/pr-summary/README.md +0 -3
- package/skills/pr-summary/SKILL.md +0 -70
- package/skills/tapd-resource-fetcher/README.md +0 -3
- package/skills/tapd-resource-fetcher/SKILL.md +0 -97
- package/skills/text-path-converter/README.md +0 -3
- package/skills/text-path-converter/SKILL.md +0 -30
- package/skills/text-path-converter/scripts/convertLink.js +0 -148
- package/test.js +0 -1
|
@@ -1,371 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# CNB Code Import - Migration Script
|
|
3
|
-
# Usage: ./migrate.sh --source-platform <platform> --source-token <token> --cnb-org <org> --cnb-token <token> [options]
|
|
4
|
-
|
|
5
|
-
set -e
|
|
6
|
-
|
|
7
|
-
# 默认工作目录
|
|
8
|
-
DEFAULT_WORKSPACE="$HOME/code-import-workspace"
|
|
9
|
-
|
|
10
|
-
# Default values
|
|
11
|
-
SOURCE_PLATFORM="coding"
|
|
12
|
-
SOURCE_URL=""
|
|
13
|
-
SOURCE_TOKEN=""
|
|
14
|
-
SOURCE_REPO=""
|
|
15
|
-
SOURCE_PROJECT=""
|
|
16
|
-
CNB_URL="https://cnb.cool"
|
|
17
|
-
CNB_ROOT_ORGANIZATION=""
|
|
18
|
-
CNB_TOKEN=""
|
|
19
|
-
MIGRATE_TYPE="team"
|
|
20
|
-
MIGRATE_CONCURRENCY=5
|
|
21
|
-
MIGRATE_FORCE_PUSH="false"
|
|
22
|
-
MIGRATE_REBASE="false"
|
|
23
|
-
MIGRATE_SKIP_EXISTS_REPO="false"
|
|
24
|
-
MIGRATE_USE_LFS_MIGRATE="true"
|
|
25
|
-
MIGRATE_ALLOW_INCOMPLETE_PUSH="false"
|
|
26
|
-
MIGRATE_LOG_LEVEL="info"
|
|
27
|
-
MIGRATE_ALLOW_SELECT_REPOS="false"
|
|
28
|
-
MIGRATE_DOWNLOAD_ONLY="false"
|
|
29
|
-
SOURCE_AK=""
|
|
30
|
-
SOURCE_SK=""
|
|
31
|
-
SOURCE_REGION="cn-north-4"
|
|
32
|
-
SOURCE_ORGANIZATIONID=""
|
|
33
|
-
SOURCE_USERNAME=""
|
|
34
|
-
SOURCE_PASSWORD=""
|
|
35
|
-
SOURCE_GROUP=""
|
|
36
|
-
WORKSPACE=""
|
|
37
|
-
|
|
38
|
-
# Colors for output
|
|
39
|
-
RED='\033[0;31m'
|
|
40
|
-
GREEN='\033[0;32m'
|
|
41
|
-
YELLOW='\033[1;33m'
|
|
42
|
-
NC='\033[0m' # No Color
|
|
43
|
-
|
|
44
|
-
log_info() {
|
|
45
|
-
echo -e "${GREEN}[INFO]${NC} $1"
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
log_warn() {
|
|
49
|
-
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
log_error() {
|
|
53
|
-
echo -e "${RED}[ERROR]${NC} $1"
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
# Parse arguments
|
|
57
|
-
while [[ $# -gt 0 ]]; do
|
|
58
|
-
case $1 in
|
|
59
|
-
--source-platform)
|
|
60
|
-
SOURCE_PLATFORM="$2"
|
|
61
|
-
shift 2
|
|
62
|
-
;;
|
|
63
|
-
--source-url)
|
|
64
|
-
SOURCE_URL="$2"
|
|
65
|
-
shift 2
|
|
66
|
-
;;
|
|
67
|
-
--source-token)
|
|
68
|
-
SOURCE_TOKEN="$2"
|
|
69
|
-
shift 2
|
|
70
|
-
;;
|
|
71
|
-
--source-repo)
|
|
72
|
-
SOURCE_REPO="$2"
|
|
73
|
-
shift 2
|
|
74
|
-
;;
|
|
75
|
-
--source-project)
|
|
76
|
-
SOURCE_PROJECT="$2"
|
|
77
|
-
shift 2
|
|
78
|
-
;;
|
|
79
|
-
--source-ak)
|
|
80
|
-
SOURCE_AK="$2"
|
|
81
|
-
shift 2
|
|
82
|
-
;;
|
|
83
|
-
--source-sk)
|
|
84
|
-
SOURCE_SK="$2"
|
|
85
|
-
shift 2
|
|
86
|
-
;;
|
|
87
|
-
--source-region)
|
|
88
|
-
SOURCE_REGION="$2"
|
|
89
|
-
shift 2
|
|
90
|
-
;;
|
|
91
|
-
--source-organizationid)
|
|
92
|
-
SOURCE_ORGANIZATIONID="$2"
|
|
93
|
-
shift 2
|
|
94
|
-
;;
|
|
95
|
-
--source-username)
|
|
96
|
-
SOURCE_USERNAME="$2"
|
|
97
|
-
shift 2
|
|
98
|
-
;;
|
|
99
|
-
--source-password)
|
|
100
|
-
SOURCE_PASSWORD="$2"
|
|
101
|
-
shift 2
|
|
102
|
-
;;
|
|
103
|
-
--source-group)
|
|
104
|
-
SOURCE_GROUP="$2"
|
|
105
|
-
shift 2
|
|
106
|
-
;;
|
|
107
|
-
--cnb-url)
|
|
108
|
-
CNB_URL="$2"
|
|
109
|
-
shift 2
|
|
110
|
-
;;
|
|
111
|
-
--cnb-org)
|
|
112
|
-
CNB_ROOT_ORGANIZATION="$2"
|
|
113
|
-
shift 2
|
|
114
|
-
;;
|
|
115
|
-
--cnb-token)
|
|
116
|
-
CNB_TOKEN="$2"
|
|
117
|
-
shift 2
|
|
118
|
-
;;
|
|
119
|
-
--migrate-type)
|
|
120
|
-
MIGRATE_TYPE="$2"
|
|
121
|
-
shift 2
|
|
122
|
-
;;
|
|
123
|
-
--concurrency)
|
|
124
|
-
MIGRATE_CONCURRENCY="$2"
|
|
125
|
-
shift 2
|
|
126
|
-
;;
|
|
127
|
-
--force-push)
|
|
128
|
-
MIGRATE_FORCE_PUSH="$2"
|
|
129
|
-
shift 2
|
|
130
|
-
;;
|
|
131
|
-
--rebase)
|
|
132
|
-
MIGRATE_REBASE="$2"
|
|
133
|
-
shift 2
|
|
134
|
-
;;
|
|
135
|
-
--allow-incomplete-push)
|
|
136
|
-
MIGRATE_ALLOW_INCOMPLETE_PUSH="$2"
|
|
137
|
-
shift 2
|
|
138
|
-
;;
|
|
139
|
-
--skip-exists)
|
|
140
|
-
MIGRATE_SKIP_EXISTS_REPO="$2"
|
|
141
|
-
shift 2
|
|
142
|
-
;;
|
|
143
|
-
--lfs-migrate)
|
|
144
|
-
MIGRATE_USE_LFS_MIGRATE="$2"
|
|
145
|
-
shift 2
|
|
146
|
-
;;
|
|
147
|
-
--log-level)
|
|
148
|
-
MIGRATE_LOG_LEVEL="$2"
|
|
149
|
-
shift 2
|
|
150
|
-
;;
|
|
151
|
-
--allow-select-repos)
|
|
152
|
-
MIGRATE_ALLOW_SELECT_REPOS="$2"
|
|
153
|
-
shift 2
|
|
154
|
-
;;
|
|
155
|
-
--download-only)
|
|
156
|
-
MIGRATE_DOWNLOAD_ONLY="$2"
|
|
157
|
-
shift 2
|
|
158
|
-
;;
|
|
159
|
-
--workspace)
|
|
160
|
-
WORKSPACE="$2"
|
|
161
|
-
shift 2
|
|
162
|
-
;;
|
|
163
|
-
-h|--help)
|
|
164
|
-
echo "CNB Code Import - Migrate code repositories to CNB"
|
|
165
|
-
echo ""
|
|
166
|
-
echo "Usage: $0 --source-platform <platform> --source-token <token> --cnb-org <org> --cnb-token <token> [options]"
|
|
167
|
-
echo ""
|
|
168
|
-
echo "Required:"
|
|
169
|
-
echo " --source-platform Source platform: coding/github/gitlab/gitee/aliyun/cnb/gongfeng/huaweicloud/common"
|
|
170
|
-
echo " --source-token Source platform access token"
|
|
171
|
-
echo " --cnb-org CNB root organization name"
|
|
172
|
-
echo " --cnb-token CNB access token"
|
|
173
|
-
echo ""
|
|
174
|
-
echo "Optional:"
|
|
175
|
-
echo " --source-url Source platform URL (default: auto-detect)"
|
|
176
|
-
echo " --source-repo Specific repos to migrate (comma-separated)"
|
|
177
|
-
echo " --source-project CODING project names (comma-separated, when migrate-type=project)"
|
|
178
|
-
echo " --source-ak HuaweiCloud AK (when source-platform=huaweicloud)"
|
|
179
|
-
echo " --source-sk HuaweiCloud SK (when source-platform=huaweicloud)"
|
|
180
|
-
echo " --source-region HuaweiCloud region (default: cn-north-4)"
|
|
181
|
-
echo " --source-organizationid Aliyun organization ID"
|
|
182
|
-
echo " --source-username Common platform username"
|
|
183
|
-
echo " --source-password Common platform password"
|
|
184
|
-
echo " --source-group CNB source group (when migrating from CNB to CNB)"
|
|
185
|
-
echo " --cnb-url CNB URL (default: https://cnb.cool)"
|
|
186
|
-
echo " --migrate-type Migration type: team/project/repo (default: team)"
|
|
187
|
-
echo " --concurrency Concurrent migration count (default: 5, max: 10)"
|
|
188
|
-
echo " --force-push Force push to CNB (true/false, default: false) ⚠️ DANGEROUS"
|
|
189
|
-
echo " --skip-exists Skip existing repos on CNB (true/false, default: false)"
|
|
190
|
-
echo " --lfs-migrate Use LFS migrate for large files (true/false, default: true)"
|
|
191
|
-
echo " --rebase Use git rebase for sync (true/false, default: false) ⚠️ DANGEROUS"
|
|
192
|
-
echo " --allow-incomplete-push Allow incomplete LFS push (true/false, default: false) ⚠️ DANGEROUS"
|
|
193
|
-
echo " --log-level Log level: debug/info/warn/error (default: info)"
|
|
194
|
-
echo " --allow-select-repos Allow selecting specific repos (true/false, default: false)"
|
|
195
|
-
echo " --download-only Only download repos, don't push to CNB (true/false, default: false)"
|
|
196
|
-
echo " --workspace Custom workspace directory (default: \$HOME/code-import-workspace)"
|
|
197
|
-
echo ""
|
|
198
|
-
echo "Examples:"
|
|
199
|
-
echo " # Migrate all repos from CODING"
|
|
200
|
-
echo " $0 --source-platform coding --source-token xxx --cnb-org myorg --cnb-token xxx"
|
|
201
|
-
echo ""
|
|
202
|
-
echo " # Migrate specific GitHub repos"
|
|
203
|
-
echo " $0 --source-platform github --source-token xxx --cnb-org myorg --cnb-token xxx --source-repo 'user/repo1,user/repo2'"
|
|
204
|
-
echo ""
|
|
205
|
-
echo " # Migrate from HuaweiCloud"
|
|
206
|
-
echo " $0 --source-platform huaweicloud --source-token xxx --source-ak xxx --source-sk xxx --source-region cn-north-4 --cnb-org myorg --cnb-token xxx"
|
|
207
|
-
exit 0
|
|
208
|
-
;;
|
|
209
|
-
*)
|
|
210
|
-
log_error "Unknown option: $1"
|
|
211
|
-
exit 1
|
|
212
|
-
;;
|
|
213
|
-
esac
|
|
214
|
-
done
|
|
215
|
-
|
|
216
|
-
# Validate required parameters
|
|
217
|
-
if [[ -z "$SOURCE_PLATFORM" ]]; then
|
|
218
|
-
log_error "Missing required parameter: --source-platform"
|
|
219
|
-
exit 1
|
|
220
|
-
fi
|
|
221
|
-
|
|
222
|
-
if [[ -z "$CNB_ROOT_ORGANIZATION" ]]; then
|
|
223
|
-
log_error "Missing required parameter: --cnb-org"
|
|
224
|
-
exit 1
|
|
225
|
-
fi
|
|
226
|
-
|
|
227
|
-
if [[ -z "$CNB_TOKEN" ]]; then
|
|
228
|
-
log_error "Missing required parameter: --cnb-token"
|
|
229
|
-
exit 1
|
|
230
|
-
fi
|
|
231
|
-
|
|
232
|
-
# 危险选项二次确认
|
|
233
|
-
DANGER_OPTIONS=()
|
|
234
|
-
[[ "$MIGRATE_FORCE_PUSH" == "true" ]] && DANGER_OPTIONS+=("强制推送 (force-push): 将强制覆盖 CNB 侧仓库历史")
|
|
235
|
-
[[ "$MIGRATE_REBASE" == "true" ]] && DANGER_OPTIONS+=("Rebase 模式 (rebase): 将使用 git rebase 同步,如遇冲突需人工解决")
|
|
236
|
-
[[ "$MIGRATE_ALLOW_INCOMPLETE_PUSH" == "true" ]] && DANGER_OPTIONS+=("不完整推送 (allow-incomplete-push): 可能忽略损坏的 LFS 文件,导致数据不完整")
|
|
237
|
-
|
|
238
|
-
if [[ ${#DANGER_OPTIONS[@]} -gt 0 ]]; then
|
|
239
|
-
log_warn "⚠️ 检测到以下危险选项:"
|
|
240
|
-
for opt in "${DANGER_OPTIONS[@]}"; do
|
|
241
|
-
echo -e "${YELLOW} - $opt${NC}"
|
|
242
|
-
done
|
|
243
|
-
echo ""
|
|
244
|
-
log_warn "⚠️ 这些操作可能导致数据丢失或损坏!"
|
|
245
|
-
echo ""
|
|
246
|
-
read -p "是否确认继续执行?(输入 yes 确认): " CONFIRM
|
|
247
|
-
if [[ "$CONFIRM" != "yes" ]]; then
|
|
248
|
-
log_error "用户取消执行"
|
|
249
|
-
exit 1
|
|
250
|
-
fi
|
|
251
|
-
log_info "用户已确认危险操作,继续执行..."
|
|
252
|
-
echo ""
|
|
253
|
-
fi
|
|
254
|
-
|
|
255
|
-
# Set default SOURCE_URL based on platform
|
|
256
|
-
if [[ -z "$SOURCE_URL" ]]; then
|
|
257
|
-
case $SOURCE_PLATFORM in
|
|
258
|
-
coding)
|
|
259
|
-
SOURCE_URL="https://e.coding.net"
|
|
260
|
-
;;
|
|
261
|
-
github)
|
|
262
|
-
SOURCE_URL="https://github.com"
|
|
263
|
-
;;
|
|
264
|
-
gitlab)
|
|
265
|
-
SOURCE_URL="https://gitlab.com"
|
|
266
|
-
;;
|
|
267
|
-
gitee)
|
|
268
|
-
SOURCE_URL="https://gitee.com"
|
|
269
|
-
;;
|
|
270
|
-
aliyun)
|
|
271
|
-
SOURCE_URL="https://codeup.aliyun.com"
|
|
272
|
-
;;
|
|
273
|
-
cnb)
|
|
274
|
-
SOURCE_URL="https://cnb.cool"
|
|
275
|
-
;;
|
|
276
|
-
gongfeng)
|
|
277
|
-
SOURCE_URL="https://git.woa.com"
|
|
278
|
-
;;
|
|
279
|
-
gitea)
|
|
280
|
-
# Gitea 通常是自建实例,需用户通过 --source-url 指定
|
|
281
|
-
log_error "Gitea requires --source-url to specify the instance URL"
|
|
282
|
-
exit 1
|
|
283
|
-
;;
|
|
284
|
-
huaweicloud)
|
|
285
|
-
SOURCE_URL="https://codearts.devcloud.${SOURCE_REGION}.huaweicloud.com"
|
|
286
|
-
;;
|
|
287
|
-
common)
|
|
288
|
-
SOURCE_URL="https://common.com"
|
|
289
|
-
;;
|
|
290
|
-
*)
|
|
291
|
-
log_error "Unknown source platform: $SOURCE_PLATFORM"
|
|
292
|
-
exit 1
|
|
293
|
-
;;
|
|
294
|
-
esac
|
|
295
|
-
fi
|
|
296
|
-
|
|
297
|
-
# Validate HuaweiCloud parameters
|
|
298
|
-
if [[ "$SOURCE_PLATFORM" == "huaweicloud" ]]; then
|
|
299
|
-
if [[ -z "$SOURCE_AK" || -z "$SOURCE_SK" ]]; then
|
|
300
|
-
log_error "HuaweiCloud requires --source-ak and --source-sk"
|
|
301
|
-
exit 1
|
|
302
|
-
fi
|
|
303
|
-
fi
|
|
304
|
-
|
|
305
|
-
# Validate Aliyun parameters
|
|
306
|
-
if [[ "$SOURCE_PLATFORM" == "aliyun" ]]; then
|
|
307
|
-
if [[ -z "$SOURCE_ORGANIZATIONID" ]]; then
|
|
308
|
-
log_error "Aliyun requires --source-organizationid"
|
|
309
|
-
exit 1
|
|
310
|
-
fi
|
|
311
|
-
fi
|
|
312
|
-
|
|
313
|
-
# Build docker run command
|
|
314
|
-
DOCKER_CMD="docker run --rm"
|
|
315
|
-
|
|
316
|
-
# Add environment variables
|
|
317
|
-
DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_PLATFORM=\"$SOURCE_PLATFORM\""
|
|
318
|
-
DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_URL=\"$SOURCE_URL\""
|
|
319
|
-
DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_TOKEN=\"$SOURCE_TOKEN\""
|
|
320
|
-
DOCKER_CMD="$DOCKER_CMD -e PLUGIN_CNB_ROOT_ORGANIZATION=\"$CNB_ROOT_ORGANIZATION\""
|
|
321
|
-
DOCKER_CMD="$DOCKER_CMD -e PLUGIN_CNB_TOKEN=\"$CNB_TOKEN\""
|
|
322
|
-
|
|
323
|
-
# Optional parameters
|
|
324
|
-
[[ -n "$SOURCE_REPO" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_REPO=\"$SOURCE_REPO\""
|
|
325
|
-
[[ -n "$SOURCE_PROJECT" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_PROJECT=\"$SOURCE_PROJECT\""
|
|
326
|
-
[[ -n "$SOURCE_AK" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_AK=\"$SOURCE_AK\""
|
|
327
|
-
[[ -n "$SOURCE_SK" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_SK=\"$SOURCE_SK\""
|
|
328
|
-
[[ -n "$SOURCE_REGION" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_REGION=\"$SOURCE_REGION\""
|
|
329
|
-
[[ -n "$SOURCE_ORGANIZATIONID" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_ORGANIZATIONID=\"$SOURCE_ORGANIZATIONID\""
|
|
330
|
-
[[ -n "$SOURCE_USERNAME" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_USERNAME=\"$SOURCE_USERNAME\""
|
|
331
|
-
[[ -n "$SOURCE_PASSWORD" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_PASSWORD=\"$SOURCE_PASSWORD\""
|
|
332
|
-
[[ -n "$SOURCE_GROUP" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_SOURCE_GROUP=\"$SOURCE_GROUP\""
|
|
333
|
-
[[ -n "$CNB_URL" && "$CNB_URL" != "https://cnb.cool" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_CNB_URL=\"$CNB_URL\""
|
|
334
|
-
[[ -n "$MIGRATE_TYPE" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_TYPE=\"$MIGRATE_TYPE\""
|
|
335
|
-
[[ -n "$MIGRATE_CONCURRENCY" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_CONCURRENCY=\"$MIGRATE_CONCURRENCY\""
|
|
336
|
-
[[ "$MIGRATE_FORCE_PUSH" == "true" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_FORCE_PUSH=\"true\""
|
|
337
|
-
[[ "$MIGRATE_REBASE" == "true" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_REBASE=\"true\""
|
|
338
|
-
[[ "$MIGRATE_ALLOW_INCOMPLETE_PUSH" == "true" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_ALLOW_INCOMPLETE_PUSH=\"true\""
|
|
339
|
-
[[ "$MIGRATE_SKIP_EXISTS_REPO" == "true" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_SKIP_EXISTS_REPO=\"true\""
|
|
340
|
-
[[ "$MIGRATE_USE_LFS_MIGRATE" == "false" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_USE_LFS_MIGRATE=\"false\""
|
|
341
|
-
[[ -n "$MIGRATE_LOG_LEVEL" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_LOG_LEVEL=\"$MIGRATE_LOG_LEVEL\""
|
|
342
|
-
[[ "$MIGRATE_ALLOW_SELECT_REPOS" == "true" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_ALLOW_SELECT_REPOS=\"true\""
|
|
343
|
-
[[ "$MIGRATE_DOWNLOAD_ONLY" == "true" ]] && DOCKER_CMD="$DOCKER_CMD -e PLUGIN_MIGRATE_DOWNLOAD_ONLY=\"true\""
|
|
344
|
-
|
|
345
|
-
# Add volume mount
|
|
346
|
-
DOCKER_CMD="$DOCKER_CMD -v \$(pwd):\$(pwd) -w \$(pwd)"
|
|
347
|
-
|
|
348
|
-
# Add image (使用 CNB 镜像源,更稳定)
|
|
349
|
-
DOCKER_CMD="$DOCKER_CMD docker.cnb.cool/cnb/plugins/cnbcool/code-import:latest"
|
|
350
|
-
|
|
351
|
-
# 设置工作目录
|
|
352
|
-
if [[ -z "$WORKSPACE" ]]; then
|
|
353
|
-
WORKSPACE="$DEFAULT_WORKSPACE"
|
|
354
|
-
fi
|
|
355
|
-
|
|
356
|
-
# 创建工作目录
|
|
357
|
-
mkdir -p "$WORKSPACE"
|
|
358
|
-
cd "$WORKSPACE"
|
|
359
|
-
|
|
360
|
-
log_info "Starting migration..."
|
|
361
|
-
log_info "Source Platform: $SOURCE_PLATFORM"
|
|
362
|
-
log_info "Source URL: $SOURCE_URL"
|
|
363
|
-
log_info "CNB Organization: $CNB_ROOT_ORGANIZATION"
|
|
364
|
-
log_info "Concurrency: $MIGRATE_CONCURRENCY"
|
|
365
|
-
log_info "Workspace: $WORKSPACE"
|
|
366
|
-
echo ""
|
|
367
|
-
|
|
368
|
-
# Execute docker command
|
|
369
|
-
eval $DOCKER_CMD
|
|
370
|
-
|
|
371
|
-
log_info "Migration completed!"
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: cnb-skill
|
|
3
|
-
description: 提供与CNB(Cloud Native Build)OpenAPI的完整交互能力,支持项目、组织、代码仓库、Issue、PR、合并请求、流水线,制品库等核心功能的增删改查操作。适用于开发协作、代码管理和CI/CD流程管理场景。关键词:CNB、云原生构建、组织、代码仓库、Issue、PR、合并请求、流水线、制品库,查询、新增、修改、删除、评论、合并、审批。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# cnb-skill
|
|
7
|
-
|
|
8
|
-
## 概括
|
|
9
|
-
|
|
10
|
-
本Skill提供完整的CNB的Openapi完整交互能力,用户可以使用此skills对CNB上的资源进行操作。
|
|
11
|
-
|
|
12
|
-
## 适用场景
|
|
13
|
-
|
|
14
|
-
当用户描述对CNB上的资源进行操作时,应该使用此skills进行操作。例如:
|
|
15
|
-
- 查询cnb上某个仓库的Issue列表
|
|
16
|
-
- 对cnb上的某个仓库的Issue或者pr进行评论。
|
|
17
|
-
- ...
|
|
18
|
-
|
|
19
|
-
## 核心原则
|
|
20
|
-
|
|
21
|
-
### 准确性原则
|
|
22
|
-
- **CRITICAL**: 必须先执行 `cnb --help` 获取最新的使用方式
|
|
23
|
-
- **CRITICAL**: 必须通过使用 `cnb`命令行工具,按照帮助信息执行操作
|
|
24
|
-
- **CRITICAL**: 禁止推测或臆断使用方式,严格基于脚本返回的帮助信息进行操作
|
|
25
|
-
- **CRITICAL**: 不要询问用户"是否需要我执行",直接根据帮助信息执行脚本,并返回结果
|
|
26
|
-
|
|
27
|
-
## 脚本使用指南
|
|
28
|
-
|
|
29
|
-
### 第一步:获取帮助信息
|
|
30
|
-
在执行任何任务前,必须先运行以下命令获取最新的使用方式:
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
cnb --help
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
这将显示所有可用的模块及其工具列表。
|
|
37
|
-
|
|
38
|
-
### 第二步:查看具体模块帮助
|
|
39
|
-
使用 `--module` 参数查看特定模块的详细帮助:
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
cnb --module <模块名> -help
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
### 第三步:查看工具详细使用
|
|
46
|
-
使用 `--module` 和 `--tool` 参数查看工具的详细参数说明:
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
cnb --module <模块名> --tool <工具名> --help
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### 第四步:执行工具
|
|
53
|
-
根据第三步获取的参数说明,执行工具:
|
|
54
|
-
|
|
55
|
-
```bash
|
|
56
|
-
cnb --module <模块名> --tool <工具名> --path '{"参数": "值"}' --query '{"参数": "值"}' --data '{"参数": "值"}'
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
**参数说明:**
|
|
60
|
-
- `--module`: 必须参数,模块名称
|
|
61
|
-
- `--tool`: 必须参数,工具名称
|
|
62
|
-
- `--path`: 可选参数,路径参数,JSON字符串格式
|
|
63
|
-
- `--query`: 可选参数,查询参数,JSON字符串格式
|
|
64
|
-
- `--data`: 可选参数,数据参数,JSON字符串格式
|
|
65
|
-
- `--help`: 可选参数,显示帮助文档
|
|
66
|
-
|
|
67
|
-
### 第五步:处理结果
|
|
68
|
-
|
|
69
|
-
每一个工具调用都会返回一个标准的JSON结构:
|
|
70
|
-
- status: 一个http状态码
|
|
71
|
-
- trace: 本次调用的traceID
|
|
72
|
-
- header: 本次调用的header
|
|
73
|
-
- data: 本次调用的openapi返回的实体内容
|
|
74
|
-
|
|
75
|
-
#### header说明
|
|
76
|
-
当请求列表时,会在header中包含以下字段说明列表的情况:
|
|
77
|
-
- `x-cnb-page`: 当前页数
|
|
78
|
-
- `x-cnb-page-size`: 每页条数
|
|
79
|
-
- `x-cnb-total`: 总条数
|
|
80
|
-
|
|
81
|
-
从中可以获取到列表的总条数,以及当前页数和每页条数,避免循环请求。
|
|
82
|
-
|
|
83
|
-
#### status说明
|
|
84
|
-
API 返回标准的 JSON 格式响应。请根据 HTTP 状态码判断请求是否成功:
|
|
85
|
-
|
|
86
|
-
- 200: 请求成功
|
|
87
|
-
- 400: 请求参数错误
|
|
88
|
-
- 401: 未授权
|
|
89
|
-
- 403: 禁止访问
|
|
90
|
-
- 404: 资源不存在
|
|
91
|
-
- 500: 服务器内部错误
|
|
92
|
-
|
|
93
|
-
当本地调用返回的 `status` 在 200 ~ 299 之间,只需要返回 `data` 内容给用户。只有当 `status >= 300` 时,才将 `status` 和 `trace` 返回给用户。
|
|
94
|
-
|
|
95
|
-
#### 资源处理
|
|
96
|
-
|
|
97
|
-
当尝试下载图片进行图片分析时,遇到图片下载异常时,请使用以下工具进行图片下载!
|
|
98
|
-
```bash
|
|
99
|
-
node scripts/core/index.js assets get-imgs --help
|
|
100
|
-
```
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: code-review
|
|
3
|
-
description: PR 代码评审。当用户请求 review、评审、审查代码或 PR 时使用。此技能提供标准化评审流程:获取 diff、按优先级检查安全漏洞/Bug/代码质量、输出结构化 JSON 结果、通过 API 发送行级评论。
|
|
4
|
-
allowed-tools: Bash,Read,Glob,Grep
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# PR 代码评审
|
|
8
|
-
|
|
9
|
-
对 PR 的代码变更进行专业评审,发现安全漏洞、Bug、代码质量和性能问题,并通过 PR Review API 发送行级评论。
|
|
10
|
-
|
|
11
|
-
## 评审步骤
|
|
12
|
-
|
|
13
|
-
### 1. 获取 PR 变更
|
|
14
|
-
|
|
15
|
-
使用 pr-diff Skill 获取 PR 的代码变更。
|
|
16
|
-
|
|
17
|
-
**需过滤的非代码文件**(不评审):
|
|
18
|
-
- 依赖锁文件:`package-lock.json`, `yarn.lock`, `pnpm-lock.yaml`, `go.sum`, `Cargo.lock` 等
|
|
19
|
-
- 图片文件:`*.png`, `*.jpg`, `*.gif`, `*.svg`, `*.ico` 等
|
|
20
|
-
- 字体文件:`*.woff`, `*.ttf`, `*.eot` 等
|
|
21
|
-
- 二进制文件:`*.exe`, `*.dll`, `*.so`, `*.jar`, `*.pyc` 等
|
|
22
|
-
- 压缩文件:`*.zip`, `*.tar.gz`, `*.rar` 等
|
|
23
|
-
- 压缩的代码:`*.min.js`, `*.min.css`, `*.map`
|
|
24
|
-
- 构建产物目录:`dist/`, `build/`, `out/`, `target/`, `.next/`
|
|
25
|
-
- 依赖目录:`node_modules/`, `vendor/`, `.venv/`
|
|
26
|
-
|
|
27
|
-
**文件限制**:
|
|
28
|
-
- 最多评审 30 个文件
|
|
29
|
-
- diff 最大 100000 字符(超出则截断)
|
|
30
|
-
|
|
31
|
-
### 2. 分析代码
|
|
32
|
-
|
|
33
|
-
**评审重点**(按优先级):
|
|
34
|
-
|
|
35
|
-
1. **安全漏洞**:SQL 注入、XSS、CSRF、硬编码凭证、敏感信息泄露、不安全加密
|
|
36
|
-
2. **潜在 Bug**:空指针、数组越界、并发问题、资源泄漏、异常处理不当
|
|
37
|
-
3. **代码质量**:可读性、命名规范、代码重复
|
|
38
|
-
4. **性能问题**:N+1 查询、低效算法、不必要的 I/O
|
|
39
|
-
|
|
40
|
-
**评审原则**:
|
|
41
|
-
- 只评审新增代码(diff 中 `+` 开头的行,不含 `+++` 文件头)
|
|
42
|
-
- **禁止评审**:删除的代码(`-` 开头)、上下文代码、未修改的代码
|
|
43
|
-
- **忽略**:EOF 换行符、行尾空格、缩进风格(应由 linter 处理)
|
|
44
|
-
|
|
45
|
-
**理解上下文**:
|
|
46
|
-
当 diff 上下文不足以理解代码时(如需要看函数定义、类型、依赖关系),使用 Read 工具读取相关源文件理解上下文,并确认准确的行号。
|
|
47
|
-
|
|
48
|
-
### 3. 输出评审结果
|
|
49
|
-
|
|
50
|
-
**必须严格输出以下 JSON 格式**:
|
|
51
|
-
|
|
52
|
-
```json
|
|
53
|
-
{
|
|
54
|
-
"status": "passed | needs_modification | critical",
|
|
55
|
-
"issues": [
|
|
56
|
-
{
|
|
57
|
-
"severity": "critical | warning | info",
|
|
58
|
-
"file": "文件路径",
|
|
59
|
-
"start_line": 起始行号,
|
|
60
|
-
"end_line": 结束行号,
|
|
61
|
-
"problem": "问题:描述问题",
|
|
62
|
-
"suggestion": "建议:修复建议"
|
|
63
|
-
}
|
|
64
|
-
]
|
|
65
|
-
}
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
**字段说明**:
|
|
69
|
-
- `status`: 评审状态
|
|
70
|
-
- `passed`: 通过,无问题
|
|
71
|
-
- `needs_modification`: 需要修改
|
|
72
|
-
- `critical`: 存在严重问题
|
|
73
|
-
- `severity`: 问题严重程度
|
|
74
|
-
- `critical`: 严重(安全漏洞、崩溃 Bug)
|
|
75
|
-
- `warning`: 警告(潜在问题)
|
|
76
|
-
- `info`: 建议(代码质量改进)
|
|
77
|
-
- `start_line` / `end_line`: 问题代码的行号范围(对应新文件行号)
|
|
78
|
-
- `problem` / `suggestion`: 使用 Markdown 格式,提高可读性
|
|
79
|
-
- 使用 \`代码\` 标记变量名、函数名
|
|
80
|
-
- 使用代码块展示修复示例
|
|
81
|
-
|
|
82
|
-
**无问题时**:`issues` 为空数组 `[]`
|
|
83
|
-
|
|
84
|
-
### 4. 发送评审评论
|
|
85
|
-
|
|
86
|
-
**重要**:使用 CNB API 发送评论,API 基础地址从环境变量 `CNB_API_ENDPOINT` 获取(默认 `https://api.cnb.cool`),仓库名从环境变量 `CNB_REPO_SLUG` 获取,PR 编号从环境变量 `CNB_PULL_REQUEST_IID` 获取。
|
|
87
|
-
|
|
88
|
-
**有问题时**:调用 PostPullReview 接口发送行级评审评论:
|
|
89
|
-
|
|
90
|
-
```bash
|
|
91
|
-
curl -X POST \
|
|
92
|
-
"${CNB_API_ENDPOINT:-https://api.cnb.cool}/${CNB_REPO_SLUG}/-/pulls/${CNB_PULL_REQUEST_IID}/reviews" \
|
|
93
|
-
-H "Accept: application/vnd.cnb.api+json" \
|
|
94
|
-
-H "Authorization: Bearer $CNB_TOKEN" \
|
|
95
|
-
-H "Content-Type: application/json" \
|
|
96
|
-
-d '{
|
|
97
|
-
"body": "**评审结果**: 需要修改",
|
|
98
|
-
"event": "comment",
|
|
99
|
-
"comments": [
|
|
100
|
-
{
|
|
101
|
-
"body": "问题: ...\n建议: ...",
|
|
102
|
-
"path": "文件路径",
|
|
103
|
-
"start_line": 起始行号,
|
|
104
|
-
"start_side": "right",
|
|
105
|
-
"end_line": 结束行号,
|
|
106
|
-
"end_side": "right",
|
|
107
|
-
"subject_type": "line"
|
|
108
|
-
}
|
|
109
|
-
]
|
|
110
|
-
}'
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
**无问题时**:调用 PostPullComment 接口发送总结评论:
|
|
114
|
-
|
|
115
|
-
```bash
|
|
116
|
-
curl -X POST \
|
|
117
|
-
"${CNB_API_ENDPOINT:-https://api.cnb.cool}/${CNB_REPO_SLUG}/-/pulls/${CNB_PULL_REQUEST_IID}/comments" \
|
|
118
|
-
-H "Accept: application/vnd.cnb.api+json" \
|
|
119
|
-
-H "Authorization: Bearer $CNB_TOKEN" \
|
|
120
|
-
-H "Content-Type: application/json" \
|
|
121
|
-
-d '{
|
|
122
|
-
"body": "**评审结果**: 通过\n\n代码质量良好,未发现明显问题。"
|
|
123
|
-
}'
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
## 注意事项
|
|
127
|
-
|
|
128
|
-
1. **最多发送 10 条评论**,优先发送严重程度高的问题(critical > warning > info)
|
|
129
|
-
2. 行号必须对应 diff 中的**新文件行号**(右侧行号),务必通过读取源文件确认
|
|
130
|
-
3. 每条评论要具体说明问题原因和修复建议
|
|
131
|
-
4. 评审结果必须是有效的 JSON 格式
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"hooks": {
|
|
3
|
-
"PreToolUse": [
|
|
4
|
-
{
|
|
5
|
-
"matcher": "(?i)(代码评审|代码审查|code\\s*review|review\\s*(this\\s*)?PR|review\\s*(this\\s*)?MR|评审\\s*(这个)?\\s*(PR|MR|合并请求)|帮我\\s*(做)?\\s*(代码)?\\s*review|帮我\\s*评审)",
|
|
6
|
-
"hooks": [
|
|
7
|
-
{
|
|
8
|
-
"type": "prompt",
|
|
9
|
-
"prompt": "用户请求进行代码评审。请使用 code-review 技能来自动获取 PR 变更并进行逐行评审"
|
|
10
|
-
}
|
|
11
|
-
]
|
|
12
|
-
}
|
|
13
|
-
]
|
|
14
|
-
}
|
|
15
|
-
}
|