-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy.command
More file actions
executable file
·113 lines (94 loc) · 2.43 KB
/
Copy pathdeploy.command
File metadata and controls
executable file
·113 lines (94 loc) · 2.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/bin/zsh
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "$0")" && pwd)"
SKILL_DIR="$ROOT_DIR/Qin.Skill"
pause_if_interactive() {
if [[ -t 0 ]]; then
echo "按任意键退出。"
read -k 1
fi
}
if [[ ! -d "$SKILL_DIR" ]]; then
echo "未找到 Qin.Skill 目录:$SKILL_DIR"
pause_if_interactive
exit 1
fi
if ! command -v zip >/dev/null 2>&1; then
echo "未找到 zip 命令。"
pause_if_interactive
exit 1
fi
if ! command -v zipinfo >/dev/null 2>&1; then
echo "未找到 zipinfo 命令。"
pause_if_interactive
exit 1
fi
if ! command -v shasum >/dev/null 2>&1; then
echo "未找到 shasum 命令。"
pause_if_interactive
exit 1
fi
DATE_DIR="$(date +%Y-%m-%d)"
TS="$(date +%Y%m%d-%H%M%S)"
RELEASE_DIR="$ROOT_DIR/versions/$DATE_DIR"
RELEASE_ZIP="$RELEASE_DIR/Qin-$TS.Skill.zip"
LATEST_TXT="$ROOT_DIR/versions/latest.txt"
LATEST_HASH="$ROOT_DIR/versions/latest.hash"
mkdir -p "$RELEASE_DIR"
find "$SKILL_DIR" -name ".DS_Store" -delete
CURRENT_HASH="$(
cd "$ROOT_DIR"
find Qin.Skill -type f \
! -name ".DS_Store" \
! -name "*.csv" \
! -path "Qin.Skill/scripts/*" \
! -path "Qin.Skill/assets/*" \
-print0 |
sort -z |
while IFS= read -r -d '' file; do
file_hash="$(shasum -a 256 "$file" | awk '{print $1}')"
printf '%s %s\n' "$file_hash" "$file"
done |
shasum -a 256 |
awk '{print $1}'
)"
if [[ -f "$LATEST_HASH" ]] && [[ "$(cat "$LATEST_HASH")" == "$CURRENT_HASH" ]]; then
echo "Qin.Skill 内容未变化,跳过重复发布。"
if [[ -f "$LATEST_TXT" ]]; then
echo "最近 release:$(cat "$LATEST_TXT")"
fi
pause_if_interactive
exit 0
fi
echo "开始生成 release:$RELEASE_ZIP"
(
cd "$ROOT_DIR"
zip -r -X "$RELEASE_ZIP" Qin.Skill \
-x "*.DS_Store" \
-x "__MACOSX/*" \
-x "*.csv" \
-x "Qin.Skill/scripts/*" \
-x "Qin.Skill/assets/*" \
>/tmp/qin_skill_deploy_zip.log
)
FORBIDDEN="$(zipinfo -1 "$RELEASE_ZIP" | grep -E '(^|/)(__MACOSX|\.DS_Store|.*\.csv$|scripts/|assets/)' || true)"
if [[ -n "$FORBIDDEN" ]]; then
echo "生成失败:压缩包包含不允许的文件:"
echo "$FORBIDDEN"
rm -f "$RELEASE_ZIP"
pause_if_interactive
exit 1
fi
cat > "$LATEST_TXT" <<EOF
$RELEASE_ZIP
EOF
cat > "$LATEST_HASH" <<EOF
$CURRENT_HASH
EOF
echo "完成:"
echo "$RELEASE_ZIP"
echo
echo "已写入 latest:versions/latest.txt"
echo "已写入 hash:versions/latest.hash"
open "$RELEASE_DIR" >/dev/null 2>&1 || true
pause_if_interactive