LighthouseApp/complete_notarization.sh
speakeloudest 75d4c48e41
Some checks failed
Build Windows / build (push) Has been cancelled
feat: 源码提交
2025-10-19 23:30:54 -07:00

238 lines
5.2 KiB
Bash
Executable File

#!/bin/bash
# 完成公证流程脚本
# 作者: AI Assistant
set -e
# 配置变量
APPLE_ID="kieran@newlifeephrata.us"
PASSWORD="gtvp-izmw-cubf-yxfe"
TEAM_ID="3UR892FAP3"
DMG_FILE="build/macos/Build/Products/Release/BearVPN-1.0.0-macOS-Signed.dmg"
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查提交状态
check_status() {
local submission_id="$1"
log_info "检查提交状态: $submission_id"
local status=$(xcrun notarytool info "$submission_id" \
--apple-id "$APPLE_ID" \
--password "$PASSWORD" \
--team-id "$TEAM_ID" \
--output-format json | jq -r '.status')
echo "$status"
}
# 等待完成
wait_for_completion() {
local submission_id="$1"
log_info "等待公证完成..."
while true; do
local status=$(check_status "$submission_id")
case "$status" in
"Accepted")
log_success "公证成功!"
return 0
;;
"Invalid")
log_error "公证失败!"
show_log "$submission_id"
return 1
;;
"In Progress")
log_info "状态: 进行中... ($(date))"
sleep 30
;;
*)
log_warning "未知状态: $status"
sleep 30
;;
esac
done
}
# 显示日志
show_log() {
local submission_id="$1"
log_info "获取公证日志..."
xcrun notarytool log "$submission_id" \
--apple-id "$APPLE_ID" \
--password "$PASSWORD" \
--team-id "$TEAM_ID"
}
# 装订公证
staple_notarization() {
log_info "装订公证到 DMG..."
if [ ! -f "$DMG_FILE" ]; then
log_error "DMG 文件不存在: $DMG_FILE"
return 1
fi
xcrun stapler staple "$DMG_FILE"
if [ $? -eq 0 ]; then
log_success "装订成功!"
return 0
else
log_error "装订失败!"
return 1
fi
}
# 验证最终结果
verify_result() {
log_info "验证最终结果..."
# 检查装订状态
xcrun stapler validate "$DMG_FILE"
if [ $? -eq 0 ]; then
log_success "DMG 已成功装订公证!"
log_info "现在可以在其他 Mac 上正常打开了"
else
log_error "DMG 装订验证失败!"
fi
}
# 自动完成流程
auto_complete() {
local submission_id="$1"
log_info "开始自动完成流程..."
# 等待完成
if wait_for_completion "$submission_id"; then
# 装订公证
if staple_notarization; then
# 验证结果
verify_result
log_success "整个流程完成!"
else
log_error "装订失败"
return 1
fi
else
log_error "公证失败"
return 1
fi
}
# 手动完成流程
manual_complete() {
local submission_id="$1"
log_info "手动完成流程..."
# 检查当前状态
local status=$(check_status "$submission_id")
log_info "当前状态: $status"
case "$status" in
"Accepted")
log_success "公证已完成,开始装订..."
staple_notarization
verify_result
;;
"In Progress")
log_warning "公证仍在进行中,请稍后再试"
;;
"Invalid")
log_error "公证失败,请查看日志"
show_log "$submission_id"
;;
*)
log_warning "未知状态: $status"
;;
esac
}
# 显示帮助
show_help() {
echo "用法: $0 [选项] <submission_id>"
echo ""
echo "选项:"
echo " auto - 自动等待并完成"
echo " manual - 手动检查并完成"
echo " status - 仅检查状态"
echo " log - 查看日志"
echo " staple - 仅装订公证"
echo " verify - 验证结果"
echo ""
echo "示例:"
echo " $0 auto b7414dba-adb5-4e0a-9535-ae51815736c4"
echo " $0 manual b7414dba-adb5-4e0a-9535-ae51815736c4"
echo " $0 status b7414dba-adb5-4e0a-9535-ae51815736c4"
}
# 主函数
main() {
local action="${1:-help}"
local submission_id="$2"
if [ -z "$submission_id" ] && [ "$action" != "help" ]; then
log_error "请提供提交 ID"
show_help
exit 1
fi
case "$action" in
"auto")
auto_complete "$submission_id"
;;
"manual")
manual_complete "$submission_id"
;;
"status")
check_status "$submission_id"
;;
"log")
show_log "$submission_id"
;;
"staple")
staple_notarization
;;
"verify")
verify_result
;;
"help"|*)
show_help
;;
esac
}
# 运行主函数
main "$@"