更新: 3 个文件 - 2026-03-17 21:32:04

这个提交包含在:
hao
2026-03-17 21:32:04 -07:00
父节点 054b24072d
当前提交 316d36a20e
修改 3 个文件,包含 122 行新增1 行删除

查看文件

@@ -18,6 +18,8 @@ REPO_DESC="${REPO_DESC:-授权攻防实验与研究知识库}"
GITEA_TOKEN="${GITEA_TOKEN:-}"
GIT_USER="${GIT_USER:-hao}"
GIT_EMAIL="${GIT_EMAIL:-hao@users.noreply.git.hk.hao.work}"
AUTO_PUSH_MAIN="${AUTO_PUSH_MAIN:-1}"
LOCK_DIR="${REPO_DIR}/.git/.sync-gitea.lock"
cd "$REPO_DIR"
@@ -52,8 +54,17 @@ repo_git_url() {
echo "${GITEA_URL}/${GIT_USER}/${REPO_NAME}.git"
}
remote_repo_reachable() {
git ls-remote --exit-code origin HEAD >/dev/null 2>&1
}
ensure_remote_repo() {
if curl -fsS ${GITEA_TOKEN:+-H} ${GITEA_TOKEN:+"Authorization: token ${GITEA_TOKEN}"} "$(repo_api_url)" >/dev/null 2>&1; then
if remote_repo_reachable; then
log_info "远程仓库可访问: ${GIT_USER}/${REPO_NAME}"
return 0
fi
if curl --connect-timeout 5 --max-time 15 -fsS ${GITEA_TOKEN:+-H} ${GITEA_TOKEN:+"Authorization: token ${GITEA_TOKEN}"} "$(repo_api_url)" >/dev/null 2>&1; then
log_info "远程仓库已存在: ${GIT_USER}/${REPO_NAME}"
return 0
fi
@@ -77,6 +88,23 @@ EOF
log_success "远程仓库创建完成"
}
run_validations() {
log_info "运行校验: lab validate"
python3 "$REPO_DIR/scripts/lab/main.py" validate
log_info "运行校验: intel validate"
python3 "$REPO_DIR/scripts/intel/main.py" validate
log_success "校验通过"
}
acquire_lock() {
if mkdir "$LOCK_DIR" 2>/dev/null; then
trap 'rm -rf "$LOCK_DIR"' EXIT
return 0
fi
log_warning "检测到另一个同步任务正在运行,跳过本次执行"
return 1
}
# 初始化仓库
init_repo() {
log_info "初始化 Git 仓库..."
@@ -117,6 +145,17 @@ init_repo() {
# 提交更改
commit_changes() {
log_info "检查更改..."
if git status --porcelain | grep -q .; then
if [ "${SKIP_VALIDATE:-0}" != "1" ]; then
run_validations
else
log_warning "已跳过 validate"
fi
else
log_info "没有需要提交的更改"
return 0
fi
# 添加所有文件
git add -A
@@ -168,6 +207,31 @@ push_changes() {
log_error "推送失败"
return 1
fi
if [ "$AUTO_PUSH_MAIN" = "1" ]; then
if git ls-remote --exit-code --heads origin main >/dev/null 2>&1; then
git fetch origin main >/dev/null 2>&1 || true
if git merge-base --is-ancestor FETCH_HEAD HEAD; then
if [ -n "$GITEA_TOKEN" ]; then
git -c http.extraHeader="Authorization: token ${GITEA_TOKEN}" push origin HEAD:main
else
git push origin HEAD:main
fi
git branch -f main HEAD >/dev/null 2>&1 || true
log_success "main 已快进到当前提交"
else
log_warning "origin/main 不是当前 HEAD 的祖先,跳过 main 快进推送"
fi
else
if [ -n "$GITEA_TOKEN" ]; then
git -c http.extraHeader="Authorization: token ${GITEA_TOKEN}" push origin HEAD:main
else
git push origin HEAD:main
fi
git branch -f main HEAD >/dev/null 2>&1 || true
log_success "main 已创建并指向当前提交"
fi
fi
}
# 完整同步
@@ -177,6 +241,11 @@ full_sync() {
push_changes
}
auto_sync() {
acquire_lock || return 0
full_sync
}
# 显示帮助
show_help() {
echo "用法: $0 [选项]"
@@ -185,6 +254,7 @@ show_help() {
echo " --init 初始化 Git 仓库"
echo " --commit 仅提交更改"
echo " --push 仅推送到远程"
echo " --autosync 定时任务模式: 无并发锁 + 校验 + 提交 + 推送"
echo " --ensure 检查远程仓库;不存在则创建"
echo " --status 显示仓库状态"
echo " --help 显示此帮助"
@@ -223,6 +293,9 @@ case "${1:-}" in
--push)
push_changes
;;
--autosync)
auto_sync
;;
--ensure)
init_repo
;;