@comate/zulu 1.2.1-beta.2 → 1.3.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/comate-engine/assets/skills/auto-commit-comate/SKILL.md +260 -0
- package/comate-engine/assets/skills/auto-commit-comate/references/data_structures.md +189 -0
- package/comate-engine/assets/skills/auto-commit-comate/references/new_version_instruction.md +209 -0
- package/comate-engine/assets/skills/auto-commit-comate/references/old_version_instruction.md +208 -0
- package/comate-engine/assets/skills/auto-commit-comate/scripts/git_diff_cli.py +196 -0
- package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/git_utils.py +20 -10
- package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/icafe/client.py +69 -40
- package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/icafe/farseer.py +8 -9
- package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/icafe/matching.py +65 -9
- package/comate-engine/assets/skills/auto-commit-comate/scripts/match_card_cli.py +37 -0
- package/comate-engine/assets/skills/cnap-comate/SKILL.md +157 -0
- package/comate-engine/assets/skills/cnap-comate/references/cases.md +198 -0
- package/comate-engine/assets/skills/cnap-comate/references/deploy-troubleshoot.md +15 -0
- package/comate-engine/assets/skills/cnap-comate/references/install.md +43 -0
- package/comate-engine/assets/skills/cnap-comate/references/kubectl.md +55 -0
- package/comate-engine/assets/skills/cnap-comate/references/login.md +125 -0
- package/comate-engine/assets/skills/cnap-comate/references/oncall.md +24 -0
- package/comate-engine/assets/skills/cnap-comate/scripts/install_cnap_cli.sh +36 -0
- package/comate-engine/assets/skills/code-security/SKILL.md +176 -0
- package/comate-engine/assets/skills/code-security/references/credential_hosting.md +102 -0
- package/comate-engine/assets/skills/code-security/references/vul_repair_sensitive.md +219 -0
- package/comate-engine/assets/skills/code-security/scripts/build_repair_info.py +0 -0
- package/comate-engine/assets/skills/code-security/scripts/credential_hosting.py +99 -0
- package/comate-engine/assets/skills/code-security/scripts/credential_poll.py +350 -0
- package/comate-engine/assets/skills/code-security/scripts/http_client.py +173 -0
- package/comate-engine/assets/skills/code-security/scripts/parse_scan_result.py +301 -0
- package/comate-engine/assets/skills/code-security/scripts/repair_vulnerability.py +261 -0
- package/comate-engine/assets/skills/code-security/scripts/report_chat.py +198 -0
- package/comate-engine/assets/skills/code-security/scripts/scan_vulnerability.py +316 -0
- package/comate-engine/assets/skills/code-security-comate/SKILL.md +219 -0
- package/comate-engine/assets/skills/code-security-comate/references/credential_hosting.md +102 -0
- package/comate-engine/assets/skills/code-security-comate/references/vul_repair-go_sql_injection.md +399 -0
- package/comate-engine/assets/skills/code-security-comate/references/vul_repair-java_sql_injection.md +591 -0
- package/comate-engine/assets/skills/code-security-comate/references/vul_repair-php_sql_injection.md +318 -0
- package/comate-engine/assets/skills/code-security-comate/references/vul_repair-python_sql_injection.md +198 -0
- package/comate-engine/assets/skills/code-security-comate/references/vul_repair_sensitive.md +219 -0
- package/comate-engine/assets/skills/code-security-comate/scripts/credential_hosting.py +87 -0
- package/comate-engine/assets/skills/code-security-comate/scripts/credential_poll.py +345 -0
- package/comate-engine/assets/skills/code-security-comate/scripts/http_client.py +173 -0
- package/comate-engine/assets/skills/code-security-comate/scripts/parse_scan_result.py +392 -0
- package/comate-engine/assets/skills/code-security-comate/scripts/repair_vulnerability.py +245 -0
- package/comate-engine/assets/skills/code-security-comate/scripts/report_chat.py +145 -0
- package/comate-engine/assets/skills/code-security-comate/scripts/scan_vulnerability.py +444 -0
- package/comate-engine/assets/skills/code-security-comate/scripts/utils.py +153 -0
- package/comate-engine/assets/skills/comate-docs-comate/SKILL.md +148 -0
- package/comate-engine/assets/skills/comate-docs-comate/references/doc-map-extended.md +78 -0
- package/comate-engine/assets/skills/comate-docs-comate/references/models-and-billing.md +51 -0
- package/comate-engine/assets/skills/comate-docs-comate/references/product-overview.md +73 -0
- package/comate-engine/assets/skills/comate-docs-comate/references/query_content.md +83 -0
- package/comate-engine/assets/skills/comate-docs-comate/references/query_repo.md +57 -0
- package/comate-engine/assets/skills/comate-docs-comate/scripts/ku_operator.py +1575 -0
- package/comate-engine/assets/skills/create-image-comate/SKILL.md +278 -0
- package/comate-engine/assets/skills/create-skill-comate/SKILL.md +308 -217
- package/comate-engine/assets/skills/create-skill-comate/agents/analyzer.md +274 -0
- package/comate-engine/assets/skills/create-skill-comate/agents/comparator.md +202 -0
- package/comate-engine/assets/skills/create-skill-comate/agents/grader.md +223 -0
- package/comate-engine/assets/skills/create-skill-comate/assets/eval_review.html +146 -0
- package/comate-engine/assets/skills/create-skill-comate/eval-viewer/generate_review.py +489 -0
- package/comate-engine/assets/skills/create-skill-comate/eval-viewer/viewer.html +1325 -0
- package/comate-engine/assets/skills/create-skill-comate/references/schemas.md +430 -0
- package/comate-engine/assets/skills/create-skill-comate/scripts/__init__.py +0 -0
- package/comate-engine/assets/skills/create-skill-comate/scripts/__pycache__/__init__.cpython-311.pyc +0 -0
- package/comate-engine/assets/skills/create-skill-comate/scripts/__pycache__/aggregate_benchmark.cpython-311.pyc +0 -0
- package/comate-engine/assets/skills/create-skill-comate/scripts/aggregate_benchmark.py +412 -0
- package/comate-engine/assets/skills/create-skill-comate/scripts/generate_report.py +334 -0
- package/comate-engine/assets/skills/create-skill-comate/scripts/package_skill.py +140 -0
- package/comate-engine/assets/skills/create-skill-comate/scripts/utils.py +53 -0
- package/comate-engine/assets/skills/find-skills-comate/SKILL.md +15 -12
- package/comate-engine/assets/skills/find-skills-comate/scripts/fetch_skills.py +32 -3
- package/comate-engine/assets/skills/get-ugate-token-comate/SKILL.md +159 -0
- package/comate-engine/assets/skills/get-ugate-token-comate/getUgateToken.py +150 -0
- package/comate-engine/assets/skills/icafe-comate/SKILL.md +240 -0
- package/comate-engine/assets/skills/icafe-comate/references/ai-workflows.md +233 -0
- package/comate-engine/assets/skills/icafe-comate/references/commands.md +1147 -0
- package/comate-engine/assets/skills/icafe-comate/references/error-handling.md +164 -0
- package/comate-engine/assets/skills/icafe-comate/references/git-auto-bindcard-workflow.md +201 -0
- package/comate-engine/assets/skills/icafe-comate/references/git-bindcard-workflow.md +327 -0
- package/comate-engine/assets/skills/icafe-comate/references/iql-syntax.md +327 -0
- package/comate-engine/assets/skills/icafe-comate/references/platform-concepts.md +317 -0
- package/comate-engine/assets/skills/icafe-comate/references/smart-create-workflow.md +171 -0
- package/comate-engine/assets/skills/icafe-comate/references/smart-find-workflow.md +127 -0
- package/comate-engine/assets/skills/icafe-comate/references/smart-update-workflow.md +118 -0
- package/comate-engine/assets/skills/icode-comate/SKILL.md +366 -0
- package/comate-engine/assets/skills/icode-comate/references/api/add_reviewers.md +44 -0
- package/comate-engine/assets/skills/icode-comate/references/api/build_fetch_command.md +89 -0
- package/comate-engine/assets/skills/icode-comate/references/api/check_repo_permission.md +89 -0
- package/comate-engine/assets/skills/icode-comate/references/api/create_branch.md +79 -0
- package/comate-engine/assets/skills/icode-comate/references/api/create_draft_comment.md +109 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_ai_cr_result.md +190 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_ai_review.md +97 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_diff_content.md +92 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_diff_file.md +88 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_machine_check.md +73 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_my_reviews.md +115 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_person_commit.md +89 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_person_repo.md +63 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_repo_branch.md +62 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_repo_config.md +91 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_repo_members.md +118 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_repo_reviews.md +91 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_review_comments.md +87 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_review_info.md +81 -0
- package/comate-engine/assets/skills/icode-comate/references/api/get_submit_settings.md +105 -0
- package/comate-engine/assets/skills/icode-comate/references/api/icode-api.md +86 -0
- package/comate-engine/assets/skills/icode-comate/references/api/publish_comments.md +72 -0
- package/comate-engine/assets/skills/icode-comate/references/api/set_review_score.md +58 -0
- package/comate-engine/assets/skills/icode-comate/references/api/start_ai_review.md +77 -0
- package/comate-engine/assets/skills/icode-comate/references/api/submit_review.md +50 -0
- package/comate-engine/assets/skills/icode-comate/references/api/trigger_ai_cr.md +63 -0
- package/comate-engine/assets/skills/icode-comate/references/feature/add-reviewer.md +92 -0
- package/comate-engine/assets/skills/icode-comate/references/feature/fix-machine-check.md +144 -0
- package/comate-engine/assets/skills/icode-comate/references/feature/merge-cr.md +100 -0
- package/comate-engine/assets/skills/icode-comate/references/feature/ssh-setup.md +106 -0
- package/comate-engine/assets/skills/icode-comate/references/feature/submit-acr.md +135 -0
- package/comate-engine/assets/skills/icode-comate/references/feature/submit-cr.md +123 -0
- package/comate-engine/assets/skills/icode-comate/references/git/clone.md +67 -0
- package/comate-engine/assets/skills/icode-comate/references/git/icode-git.md +68 -0
- package/comate-engine/assets/skills/icode-comate/references/git/push.md +64 -0
- package/comate-engine/assets/skills/icode-comate/references/git/push_cr.md +103 -0
- package/comate-engine/assets/skills/icode-comate/references/install.md +144 -0
- package/comate-engine/assets/skills/icode-comate/references/login.md +111 -0
- package/comate-engine/assets/skills/icode-comate/scripts/add-reviewer.sh +154 -0
- package/comate-engine/assets/skills/icode-comate/scripts/common.sh +145 -0
- package/comate-engine/assets/skills/icode-comate/scripts/fix-machine-check.sh +131 -0
- package/comate-engine/assets/skills/icode-comate/scripts/merge-cr.sh +105 -0
- package/comate-engine/assets/skills/icode-comate/scripts/ssh-setup.sh +159 -0
- package/comate-engine/assets/skills/icode-comate/scripts/submit-acr.sh +236 -0
- package/comate-engine/assets/skills/icode-comate/scripts/submit-cr.sh +104 -0
- package/comate-engine/assets/skills/icode-comate/scripts/test-preflight.sh +89 -0
- package/comate-engine/assets/skills/ku-operator-comate/SKILL.md +121 -0
- package/comate-engine/assets/skills/ku-operator-comate/examples.md +190 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/add_member.md +49 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/change_scope.md +38 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/copy_doc.md +50 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/create_doc.md +61 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/delete_doc.md +31 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/edit_content.md +568 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/move_doc.md +45 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/query_comment.md +79 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/query_content.md +83 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/query_flowchart.md +84 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/query_permission.md +38 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/query_recent_view.md +67 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/query_repo.md +57 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/query_user_info.md +37 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/update_member.md +41 -0
- package/comate-engine/assets/skills/ku-operator-comate/references/upload_attachment.md +52 -0
- package/comate-engine/assets/skills/ku-operator-comate/scripts/ku_operator.py +1575 -0
- package/comate-engine/node_modules/better-sqlite3/node_modules/.bin/prebuild-install +2 -2
- package/comate-engine/node_modules/tree-sitter-bash/node_modules/.bin/node-gyp-build +2 -2
- package/comate-engine/node_modules/tree-sitter-bash/node_modules/.bin/node-gyp-build-optional +2 -2
- package/comate-engine/node_modules/tree-sitter-bash/node_modules/.bin/node-gyp-build-test +2 -2
- package/comate-engine/package.json +2 -0
- package/comate-engine/server.js +263 -79
- package/dist/bundle/index.js +3 -3
- package/package.json +1 -1
- package/comate-engine/assets/skills/figma2code-comate/codeConnect.md +0 -37
- package/comate-engine/assets/skills/figma2code-comate/designToken.md +0 -3
- package/comate-engine/assets/skills/figma2code-comate/f2cMcp.md +0 -59
- package/comate-engine/assets/skills/smart-commit/SKILL.md +0 -646
- package/comate-engine/node_modules/@comate/plugin-host/dist/index-AZIho4HV.js +0 -1
- package/comate-engine/node_modules/@comate/plugin-host/dist/user-BIpzRUfb.js +0 -44
- /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/references/issue_type_mapping.json +0 -0
- /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/references/query_reference.md +0 -0
- /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/compat.py +0 -0
- /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/create_card_cli.py +0 -0
- /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/icafe/__init__.py +0 -0
- /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/logger.py +0 -0
- /package/comate-engine/assets/skills/{smart-commit → auto-commit-comate}/scripts/recognize_card_cli.py +0 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# common.sh - icode 公共函数库
|
|
3
|
+
# 被其他脚本 source 引用
|
|
4
|
+
|
|
5
|
+
# ========== 颜色定义 ==========
|
|
6
|
+
RED='\033[0;31m'
|
|
7
|
+
GREEN='\033[0;32m'
|
|
8
|
+
YELLOW='\033[1;33m'
|
|
9
|
+
BLUE='\033[0;34m'
|
|
10
|
+
CYAN='\033[0;36m'
|
|
11
|
+
NC='\033[0m' # No Color
|
|
12
|
+
|
|
13
|
+
# ========== 日志函数 ==========
|
|
14
|
+
log_info() {
|
|
15
|
+
echo -e "${GREEN}[INFO]${NC} $1"
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
log_warn() {
|
|
19
|
+
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
log_error() {
|
|
23
|
+
echo -e "${RED}[ERROR]${NC} $1"
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
log_step() {
|
|
27
|
+
echo -e "${BLUE}[STEP]${NC} $1"
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
log_phase() {
|
|
31
|
+
echo -e "${CYAN}[PHASE]${NC} $1"
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
log_success() {
|
|
35
|
+
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
# ========== icode-cli 检测 ==========
|
|
39
|
+
get_icode_cli() {
|
|
40
|
+
if command -v icode-cli &> /dev/null; then
|
|
41
|
+
echo "icode-cli"
|
|
42
|
+
elif [ -x "$HOME/.icode/bin/icode-cli" ]; then
|
|
43
|
+
echo "$HOME/.icode/bin/icode-cli"
|
|
44
|
+
else
|
|
45
|
+
log_error "icode-cli 未找到,请先安装"
|
|
46
|
+
log_error "安装命令: curl -fsSL http://icode-cli.bj.bcebos.com/install.sh | bash -s -- --no-skills"
|
|
47
|
+
exit 1
|
|
48
|
+
fi
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
# ========== Git 仓库检测 ==========
|
|
52
|
+
check_git_repo() {
|
|
53
|
+
if ! git rev-parse --is-inside-work-tree &> /dev/null; then
|
|
54
|
+
log_error "当前目录不是 git 仓库"
|
|
55
|
+
exit 1
|
|
56
|
+
fi
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
# ========== 登录状态检测 ==========
|
|
60
|
+
# 返回用户名,失败则退出
|
|
61
|
+
check_login() {
|
|
62
|
+
local cli=$1
|
|
63
|
+
log_step "检查登录状态..."
|
|
64
|
+
|
|
65
|
+
local login_output
|
|
66
|
+
login_output=$("$cli" login 2>&1)
|
|
67
|
+
|
|
68
|
+
if echo "$login_output" | grep -q "Not logged in"; then
|
|
69
|
+
log_error "未登录,请先完成认证"
|
|
70
|
+
echo "$login_output"
|
|
71
|
+
exit 1
|
|
72
|
+
fi
|
|
73
|
+
|
|
74
|
+
local username
|
|
75
|
+
# 匹配 "Already logged in as: username (method)" 或 "Logged in as: username (method)" 格式
|
|
76
|
+
username=$(echo "$login_output" | grep -oE 'logged in as: [^ ]+' | sed 's/logged in as: //')
|
|
77
|
+
|
|
78
|
+
if [ -z "$username" ]; then
|
|
79
|
+
log_error "无法获取用户名"
|
|
80
|
+
exit 1
|
|
81
|
+
fi
|
|
82
|
+
|
|
83
|
+
log_info "当前用户: $username"
|
|
84
|
+
echo "$username"
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
# ========== 获取仓库名 ==========
|
|
88
|
+
get_repo_name() {
|
|
89
|
+
local remote_url
|
|
90
|
+
remote_url=$(git remote get-url origin 2>/dev/null)
|
|
91
|
+
|
|
92
|
+
if [ -z "$remote_url" ]; then
|
|
93
|
+
log_error "无法获取 origin 远程地址"
|
|
94
|
+
exit 1
|
|
95
|
+
fi
|
|
96
|
+
|
|
97
|
+
local repo_name=""
|
|
98
|
+
if [[ "$remote_url" == ssh://* ]]; then
|
|
99
|
+
repo_name=$(echo "$remote_url" | sed -E 's|ssh://[^/]+/||')
|
|
100
|
+
elif [[ "$remote_url" == git@* ]]; then
|
|
101
|
+
repo_name=$(echo "$remote_url" | sed -E 's|git@[^:]+:||')
|
|
102
|
+
elif [[ "$remote_url" == http* ]]; then
|
|
103
|
+
repo_name=$(echo "$remote_url" | sed -E 's|https?://[^/]+/||')
|
|
104
|
+
else
|
|
105
|
+
log_error "无法解析远程 URL: $remote_url"
|
|
106
|
+
exit 1
|
|
107
|
+
fi
|
|
108
|
+
|
|
109
|
+
echo "${repo_name%.git}"
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
# ========== 获取当前 CR ==========
|
|
113
|
+
# 参数: $1=cli路径 $2=仓库名 $3=用户名
|
|
114
|
+
get_current_cr() {
|
|
115
|
+
local cli=$1
|
|
116
|
+
local repo_name=$2
|
|
117
|
+
local username=$3
|
|
118
|
+
local local_commit
|
|
119
|
+
local_commit=$(git rev-parse HEAD)
|
|
120
|
+
|
|
121
|
+
local cr_list
|
|
122
|
+
cr_list=$("$cli" api get_repo_reviews --repo "$repo_name" --status NEW -o json 2>/dev/null || echo '{"data":{"changes":[]}}')
|
|
123
|
+
|
|
124
|
+
echo "$cr_list" | "$cli" jq -r ".data.changes[] | select(.owner.username == \"$username\" and .current_revision == \"$local_commit\") | ._number" 2>/dev/null | head -1 || true
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
# ========== 初始化环境 ==========
|
|
128
|
+
# 执行常见的初始化检查,返回 ICODE_CLI, USERNAME, REPO_NAME
|
|
129
|
+
init_toolkit_env() {
|
|
130
|
+
check_git_repo
|
|
131
|
+
|
|
132
|
+
ICODE_CLI=$(get_icode_cli)
|
|
133
|
+
export ICODE_CLI
|
|
134
|
+
|
|
135
|
+
# 获取用户名(check_login 会输出日志,我们只要最后一行的用户名)
|
|
136
|
+
local login_result
|
|
137
|
+
login_result=$(check_login "$ICODE_CLI")
|
|
138
|
+
USERNAME=$(echo "$login_result" | tail -1)
|
|
139
|
+
export USERNAME
|
|
140
|
+
|
|
141
|
+
log_step "获取仓库信息..."
|
|
142
|
+
REPO_NAME=$(get_repo_name)
|
|
143
|
+
export REPO_NAME
|
|
144
|
+
log_info "仓库: $REPO_NAME"
|
|
145
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# fix-machine-check.sh - 修复机器检查问题脚本 (Linux/macOS)
|
|
3
|
+
# 自动检测 CR 的机器检查结果,输出问题详情,供 Agent 分析修复
|
|
4
|
+
#
|
|
5
|
+
# 使用方法:
|
|
6
|
+
# ./fix-machine-check.sh [CR编号] [最大重试次数]
|
|
7
|
+
#
|
|
8
|
+
# 示例:
|
|
9
|
+
# ./fix-machine-check.sh # 自动检测 CR,默认重试 5 次
|
|
10
|
+
# ./fix-machine-check.sh 120247220 # 指定 CR
|
|
11
|
+
# ./fix-machine-check.sh 120247220 10 # 指定 CR 和最大重试次数
|
|
12
|
+
|
|
13
|
+
set -e
|
|
14
|
+
|
|
15
|
+
# 加载公共函数
|
|
16
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
17
|
+
source "$SCRIPT_DIR/common.sh"
|
|
18
|
+
|
|
19
|
+
# 获取机器检查结果
|
|
20
|
+
get_machine_check() {
|
|
21
|
+
local change_number=$1
|
|
22
|
+
"$ICODE_CLI" api get_machine_check --change-number "$change_number" -o json 2>/dev/null
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
# 检查是否有失败项
|
|
26
|
+
check_has_failures() {
|
|
27
|
+
local result=$1
|
|
28
|
+
local failed_count
|
|
29
|
+
failed_count=$(echo "$result" | "$ICODE_CLI" jq '[.data.style.operations[]? | select(.status != "SUCCESS" or .score < 0)] | length' 2>/dev/null || echo "0")
|
|
30
|
+
|
|
31
|
+
[[ "$failed_count" -gt 0 ]]
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
# 输出失败项详情
|
|
35
|
+
print_failures() {
|
|
36
|
+
local result=$1
|
|
37
|
+
|
|
38
|
+
echo ""
|
|
39
|
+
log_warn "========== 机器检查失败项 =========="
|
|
40
|
+
echo ""
|
|
41
|
+
|
|
42
|
+
echo "$result" | "$ICODE_CLI" jq -r '
|
|
43
|
+
.data.style.operations[]? |
|
|
44
|
+
select(.status != "SUCCESS" or .score < 0) |
|
|
45
|
+
"【检查项】\(.name)\n【状态】\(.status)\n【评分】\(.score)\n【说明】\(.comment)\n"
|
|
46
|
+
' 2>/dev/null
|
|
47
|
+
|
|
48
|
+
local line_comments
|
|
49
|
+
line_comments=$(echo "$result" | "$ICODE_CLI" jq -r '
|
|
50
|
+
.data.style.operations[]? |
|
|
51
|
+
select(.status != "SUCCESS" or .score < 0) |
|
|
52
|
+
select(.lineComments != null and .lineComments != {}) |
|
|
53
|
+
.lineComments | to_entries[] |
|
|
54
|
+
"【文件】\(.key)\n" + (.value[]? | " 行 \(.line): \(.message // .comment // "无详细信息")")
|
|
55
|
+
' 2>/dev/null || true)
|
|
56
|
+
|
|
57
|
+
if [[ -n "$line_comments" ]]; then
|
|
58
|
+
echo ""
|
|
59
|
+
log_warn "========== 行内评论 =========="
|
|
60
|
+
echo "$line_comments"
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
echo ""
|
|
64
|
+
log_warn "=================================="
|
|
65
|
+
echo ""
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
# ========== 主流程 ==========
|
|
69
|
+
|
|
70
|
+
# 初始化环境
|
|
71
|
+
init_toolkit_env
|
|
72
|
+
|
|
73
|
+
CHANGE_NUMBER=${1:-""}
|
|
74
|
+
MAX_RETRIES=${2:-5}
|
|
75
|
+
|
|
76
|
+
# 如果没有指定 CR 编号,自动检测
|
|
77
|
+
if [ -z "$CHANGE_NUMBER" ]; then
|
|
78
|
+
log_step "检测当前 CR..."
|
|
79
|
+
CHANGE_NUMBER=$(get_current_cr "$ICODE_CLI" "$REPO_NAME" "$USERNAME")
|
|
80
|
+
|
|
81
|
+
if [ -z "$CHANGE_NUMBER" ]; then
|
|
82
|
+
log_error "未找到当前 commit 对应的 CR"
|
|
83
|
+
log_warn "请先执行 submit-cr.sh 提交 CR,或手动指定 CR 编号"
|
|
84
|
+
exit 1
|
|
85
|
+
fi
|
|
86
|
+
fi
|
|
87
|
+
|
|
88
|
+
log_info "CR 编号: $CHANGE_NUMBER"
|
|
89
|
+
log_info "最大重试次数: $MAX_RETRIES"
|
|
90
|
+
echo ""
|
|
91
|
+
|
|
92
|
+
# 修复循环
|
|
93
|
+
RETRY_COUNT=0
|
|
94
|
+
|
|
95
|
+
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
|
|
96
|
+
RETRY_COUNT=$((RETRY_COUNT + 1))
|
|
97
|
+
|
|
98
|
+
log_step "第 $RETRY_COUNT 次检查 (共 $MAX_RETRIES 次)..."
|
|
99
|
+
|
|
100
|
+
RESULT=$(get_machine_check "$CHANGE_NUMBER")
|
|
101
|
+
|
|
102
|
+
if [ -z "$RESULT" ]; then
|
|
103
|
+
log_error "无法获取机器检查结果"
|
|
104
|
+
exit 1
|
|
105
|
+
fi
|
|
106
|
+
|
|
107
|
+
if ! check_has_failures "$RESULT"; then
|
|
108
|
+
echo ""
|
|
109
|
+
log_info "=========================================="
|
|
110
|
+
log_info "✓ 机器检查全部通过!"
|
|
111
|
+
log_info "=========================================="
|
|
112
|
+
exit 0
|
|
113
|
+
fi
|
|
114
|
+
|
|
115
|
+
print_failures "$RESULT"
|
|
116
|
+
|
|
117
|
+
if [ $RETRY_COUNT -lt $MAX_RETRIES ]; then
|
|
118
|
+
log_warn "请 Agent 分析上述问题并修复代码"
|
|
119
|
+
log_warn "修复完成后:"
|
|
120
|
+
log_warn " 1. 使用 Edit 工具修复代码"
|
|
121
|
+
log_warn " 2. 执行 submit-cr.sh 提交"
|
|
122
|
+
log_warn " 3. 再次运行: $0 $CHANGE_NUMBER $MAX_RETRIES"
|
|
123
|
+
exit 2
|
|
124
|
+
fi
|
|
125
|
+
done
|
|
126
|
+
|
|
127
|
+
echo ""
|
|
128
|
+
log_error "=========================================="
|
|
129
|
+
log_error "✗ 修复失败,已达到最大重试次数 ($MAX_RETRIES)"
|
|
130
|
+
log_error "=========================================="
|
|
131
|
+
exit 1
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# merge-cr.sh - 合入代码评审脚本 (Linux/macOS)
|
|
3
|
+
# 尝试打分 +2 并合入,通过打分结果判断是否有合入权限
|
|
4
|
+
#
|
|
5
|
+
# 使用方法:
|
|
6
|
+
# ./merge-cr.sh [CR编号]
|
|
7
|
+
#
|
|
8
|
+
# 示例:
|
|
9
|
+
# ./merge-cr.sh # 自动检测 CR
|
|
10
|
+
# ./merge-cr.sh 120247220 # 指定 CR
|
|
11
|
+
|
|
12
|
+
set -e
|
|
13
|
+
|
|
14
|
+
# 加载公共函数
|
|
15
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
16
|
+
source "$SCRIPT_DIR/common.sh"
|
|
17
|
+
|
|
18
|
+
# 打分 +2
|
|
19
|
+
set_score() {
|
|
20
|
+
local repo_name=$1
|
|
21
|
+
local change_number=$2
|
|
22
|
+
|
|
23
|
+
local result
|
|
24
|
+
result=$("$ICODE_CLI" api set_review_score --repo "$repo_name" --change-number "$change_number" --score 2 -o json 2>/dev/null || echo '{"status":"FAIL"}')
|
|
25
|
+
|
|
26
|
+
local status
|
|
27
|
+
status=$(echo "$result" | "$ICODE_CLI" jq -r '.status' 2>/dev/null || echo "FAIL")
|
|
28
|
+
|
|
29
|
+
[ "$status" = "OK" ]
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
# 合入 CR
|
|
33
|
+
submit_cr() {
|
|
34
|
+
local repo_name=$1
|
|
35
|
+
local change_number=$2
|
|
36
|
+
|
|
37
|
+
local result
|
|
38
|
+
result=$("$ICODE_CLI" api submit_review --repo "$repo_name" --change-number "$change_number" -o json 2>/dev/null)
|
|
39
|
+
|
|
40
|
+
local status
|
|
41
|
+
status=$(echo "$result" | "$ICODE_CLI" jq -r '.status' 2>/dev/null || echo "FAIL")
|
|
42
|
+
|
|
43
|
+
local message
|
|
44
|
+
message=$(echo "$result" | "$ICODE_CLI" jq -r '.message' 2>/dev/null || echo "未知错误")
|
|
45
|
+
|
|
46
|
+
if [ "$status" = "OK" ]; then
|
|
47
|
+
return 0
|
|
48
|
+
else
|
|
49
|
+
echo "$message"
|
|
50
|
+
return 1
|
|
51
|
+
fi
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
# ========== 主流程 ==========
|
|
55
|
+
|
|
56
|
+
# 初始化环境
|
|
57
|
+
init_toolkit_env
|
|
58
|
+
|
|
59
|
+
CHANGE_NUMBER=${1:-""}
|
|
60
|
+
|
|
61
|
+
# 如果没有指定 CR 编号,自动检测
|
|
62
|
+
if [ -z "$CHANGE_NUMBER" ]; then
|
|
63
|
+
log_step "检测当前 CR..."
|
|
64
|
+
CHANGE_NUMBER=$(get_current_cr "$ICODE_CLI" "$REPO_NAME" "$USERNAME")
|
|
65
|
+
|
|
66
|
+
if [ -z "$CHANGE_NUMBER" ]; then
|
|
67
|
+
log_error "未找到当前 commit 对应的 CR"
|
|
68
|
+
log_warn "请先执行 submit-cr.sh 提交 CR,或手动指定 CR 编号"
|
|
69
|
+
exit 1
|
|
70
|
+
fi
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
log_info "CR 编号: $CHANGE_NUMBER"
|
|
74
|
+
echo ""
|
|
75
|
+
|
|
76
|
+
# 尝试打分 +2(同时检测权限)
|
|
77
|
+
log_step "尝试打分 +2..."
|
|
78
|
+
if set_score "$REPO_NAME" "$CHANGE_NUMBER"; then
|
|
79
|
+
log_info "打分成功,有合入权限"
|
|
80
|
+
echo ""
|
|
81
|
+
|
|
82
|
+
log_step "尝试合入 CR..."
|
|
83
|
+
MERGE_ERROR=""
|
|
84
|
+
if MERGE_ERROR=$(submit_cr "$REPO_NAME" "$CHANGE_NUMBER"); then
|
|
85
|
+
echo ""
|
|
86
|
+
log_success "=========================================="
|
|
87
|
+
log_success "✓ CR #$CHANGE_NUMBER 合入成功!"
|
|
88
|
+
log_success "=========================================="
|
|
89
|
+
exit 0
|
|
90
|
+
else
|
|
91
|
+
echo ""
|
|
92
|
+
log_error "=========================================="
|
|
93
|
+
log_error "✗ CR 合入失败"
|
|
94
|
+
log_error "=========================================="
|
|
95
|
+
log_warn "失败原因: $MERGE_ERROR"
|
|
96
|
+
exit 1
|
|
97
|
+
fi
|
|
98
|
+
else
|
|
99
|
+
echo ""
|
|
100
|
+
log_error "=========================================="
|
|
101
|
+
log_error "✗ 打分失败,无合入权限"
|
|
102
|
+
log_error "=========================================="
|
|
103
|
+
log_warn "请联系仓库管理员添加权限,或找有权限的评审人帮忙合入"
|
|
104
|
+
exit 1
|
|
105
|
+
fi
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# ssh-setup.sh - SSH 密钥检测与配置
|
|
3
|
+
# 自动检测本地 SSH 密钥,如不存在则生成,并引导用户完成 iCode 绑定
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
# 获取脚本所在目录
|
|
8
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
+
|
|
10
|
+
# 引入公共函数
|
|
11
|
+
source "$SCRIPT_DIR/common.sh"
|
|
12
|
+
|
|
13
|
+
# ========== SSH 密钥路径 ==========
|
|
14
|
+
SSH_DIR="$HOME/.ssh"
|
|
15
|
+
ED25519_KEY="$SSH_DIR/id_ed25519"
|
|
16
|
+
ED25519_PUB="$SSH_DIR/id_ed25519.pub"
|
|
17
|
+
RSA_KEY="$SSH_DIR/id_rsa"
|
|
18
|
+
RSA_PUB="$SSH_DIR/id_rsa.pub"
|
|
19
|
+
|
|
20
|
+
# iCode 密钥管理页面
|
|
21
|
+
ICODE_KEYS_URL="https://console.cloud.baidu-int.com/devops/icode/account/keys"
|
|
22
|
+
|
|
23
|
+
# ========== 检测 SSH 密钥 ==========
|
|
24
|
+
detect_ssh_key() {
|
|
25
|
+
log_step "检测本地 SSH 密钥..."
|
|
26
|
+
|
|
27
|
+
if [ -f "$ED25519_KEY" ] && [ -f "$ED25519_PUB" ]; then
|
|
28
|
+
log_info "检测到已有 SSH 密钥: $ED25519_KEY"
|
|
29
|
+
echo "$ED25519_PUB"
|
|
30
|
+
return 0
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
if [ -f "$RSA_KEY" ] && [ -f "$RSA_PUB" ]; then
|
|
34
|
+
log_info "检测到已有 SSH 密钥: $RSA_KEY"
|
|
35
|
+
echo "$RSA_PUB"
|
|
36
|
+
return 0
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
log_warn "未检测到 SSH 密钥"
|
|
40
|
+
echo ""
|
|
41
|
+
return 0
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
# ========== 生成 SSH 密钥 ==========
|
|
45
|
+
generate_ssh_key() {
|
|
46
|
+
log_step "生成新的 SSH 密钥 (ed25519)..."
|
|
47
|
+
|
|
48
|
+
# 确保 .ssh 目录存在
|
|
49
|
+
if [ ! -d "$SSH_DIR" ]; then
|
|
50
|
+
mkdir -p "$SSH_DIR"
|
|
51
|
+
chmod 700 "$SSH_DIR"
|
|
52
|
+
log_info "创建目录: $SSH_DIR"
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
# 生成密钥(无密码)
|
|
56
|
+
ssh-keygen -t ed25519 -f "$ED25519_KEY" -N "" -C "icode-$(whoami)@$(hostname)"
|
|
57
|
+
|
|
58
|
+
if [ -f "$ED25519_PUB" ]; then
|
|
59
|
+
log_success "SSH 密钥生成成功: $ED25519_KEY"
|
|
60
|
+
echo "$ED25519_PUB"
|
|
61
|
+
else
|
|
62
|
+
log_error "SSH 密钥生成失败"
|
|
63
|
+
exit 1
|
|
64
|
+
fi
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
# ========== 复制公钥到剪贴板 ==========
|
|
68
|
+
copy_to_clipboard() {
|
|
69
|
+
local pub_key_file=$1
|
|
70
|
+
local pub_key_content
|
|
71
|
+
pub_key_content=$(cat "$pub_key_file")
|
|
72
|
+
|
|
73
|
+
log_step "复制公钥到剪贴板..."
|
|
74
|
+
|
|
75
|
+
# macOS
|
|
76
|
+
if command -v pbcopy &> /dev/null; then
|
|
77
|
+
echo "$pub_key_content" | pbcopy
|
|
78
|
+
log_success "公钥已复制到剪贴板 (pbcopy)"
|
|
79
|
+
return 0
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
# Linux - xclip
|
|
83
|
+
if command -v xclip &> /dev/null; then
|
|
84
|
+
echo "$pub_key_content" | xclip -selection clipboard
|
|
85
|
+
log_success "公钥已复制到剪贴板 (xclip)"
|
|
86
|
+
return 0
|
|
87
|
+
fi
|
|
88
|
+
|
|
89
|
+
# Linux - xsel
|
|
90
|
+
if command -v xsel &> /dev/null; then
|
|
91
|
+
echo "$pub_key_content" | xsel --clipboard
|
|
92
|
+
log_success "公钥已复制到剪贴板 (xsel)"
|
|
93
|
+
return 0
|
|
94
|
+
fi
|
|
95
|
+
|
|
96
|
+
# 无剪贴板工具 - 打印公钥
|
|
97
|
+
log_warn "未找到剪贴板工具,请手动复制以下公钥内容:"
|
|
98
|
+
echo ""
|
|
99
|
+
echo "========== 公钥内容开始 =========="
|
|
100
|
+
echo "$pub_key_content"
|
|
101
|
+
echo "========== 公钥内容结束 =========="
|
|
102
|
+
echo ""
|
|
103
|
+
return 1
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
# ========== 显示引导信息 ==========
|
|
107
|
+
show_guidance() {
|
|
108
|
+
local copied=$1
|
|
109
|
+
|
|
110
|
+
echo ""
|
|
111
|
+
log_phase "===== SSH 密钥配置完成 ====="
|
|
112
|
+
echo ""
|
|
113
|
+
|
|
114
|
+
if [ "$copied" = "true" ]; then
|
|
115
|
+
echo "✅ 公钥已复制到剪贴板"
|
|
116
|
+
else
|
|
117
|
+
echo "⚠️ 请手动复制上方的公钥内容"
|
|
118
|
+
fi
|
|
119
|
+
|
|
120
|
+
echo ""
|
|
121
|
+
echo "📋 下一步操作:"
|
|
122
|
+
echo " 1. 打开 iCode 密钥管理页面:"
|
|
123
|
+
echo " ${CYAN}${ICODE_KEYS_URL}${NC}"
|
|
124
|
+
echo ""
|
|
125
|
+
echo " 2. 点击「添加 SSH 密钥」"
|
|
126
|
+
echo ""
|
|
127
|
+
echo " 3. 粘贴公钥内容并保存"
|
|
128
|
+
echo ""
|
|
129
|
+
echo "💡 完成后可使用以下命令测试连接:"
|
|
130
|
+
echo " ssh -T git@icode.baidu.com"
|
|
131
|
+
echo ""
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
# ========== 主流程 ==========
|
|
135
|
+
main() {
|
|
136
|
+
log_phase "===== SSH 密钥配置 ====="
|
|
137
|
+
echo ""
|
|
138
|
+
|
|
139
|
+
# 1. 检测已有密钥
|
|
140
|
+
local pub_key_file
|
|
141
|
+
pub_key_file=$(detect_ssh_key)
|
|
142
|
+
|
|
143
|
+
# 2. 如果没有密钥,生成新的
|
|
144
|
+
if [ -z "$pub_key_file" ]; then
|
|
145
|
+
pub_key_file=$(generate_ssh_key)
|
|
146
|
+
fi
|
|
147
|
+
|
|
148
|
+
# 3. 复制公钥到剪贴板
|
|
149
|
+
local copied="false"
|
|
150
|
+
if copy_to_clipboard "$pub_key_file"; then
|
|
151
|
+
copied="true"
|
|
152
|
+
fi
|
|
153
|
+
|
|
154
|
+
# 4. 显示引导信息
|
|
155
|
+
show_guidance "$copied"
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
# 执行主流程
|
|
159
|
+
main "$@"
|