Skip to content

Commit 5c90df8

Browse files
authored
Update main.yml
1 parent 076830f commit 5c90df8

1 file changed

Lines changed: 86 additions & 18 deletions

File tree

.github/workflows/main.yml

Lines changed: 86 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,30 @@ jobs:
3434

3535
- name: 准备环境
3636
run: |
37+
# 创建必要的目录
3738
mkdir -p source_repo patches
3839
echo "准备完成"
40+
echo "当前工作目录: $(pwd)"
41+
echo "目录结构:"
42+
ls -la
3943
4044
- name: 克隆源仓库
4145
run: |
46+
echo "正在克隆源仓库..."
47+
echo "仓库URL: ${{ github.event.inputs.repo_url }}"
48+
echo "分支: ${{ github.event.inputs.branch || '默认分支' }}"
49+
4250
cd source_repo
43-
# 使用轻量克隆
51+
52+
CLONE_CMD="git clone --depth 100 --single-branch"
4453
if [ -n "${{ github.event.inputs.branch }}" ]; then
45-
echo "正在克隆 ${{ github.event.inputs.repo_url }} 的分支: ${{ github.event.inputs.branch }}"
46-
git clone --depth 100 --single-branch --branch "${{ github.event.inputs.branch }}" "${{ github.event.inputs.repo_url }}" .
54+
$CLONE_CMD --branch "${{ github.event.inputs.branch }}" "${{ github.event.inputs.repo_url }}" .
4755
else
48-
echo "正在克隆 ${{ github.event.inputs.repo_url }} 的默认分支"
49-
git clone --depth 100 --single-branch "${{ github.event.inputs.repo_url }}" .
56+
$CLONE_CMD "${{ github.event.inputs.repo_url }}" .
5057
fi
58+
59+
echo "克隆完成,当前分支: $(git branch --show-current)"
60+
echo "最近提交: $(git log -1 --oneline)"
5161
5262
- name: 生成补丁文件
5363
id: generate
@@ -59,6 +69,9 @@ jobs:
5969
START_HASH=$(git rev-parse "${{ github.event.inputs.start_commit }}")
6070
END_HASH=$(git rev-parse "${{ github.event.inputs.end_commit }}")
6171
72+
echo "起始提交哈希: $START_HASH"
73+
echo "结束提交哈希: $END_HASH"
74+
6275
# 验证提交是否存在
6376
if ! git rev-parse --verify "$START_HASH" >/dev/null 2>&1; then
6477
echo "::error::起始提交 '${{ github.event.inputs.start_commit }}' 不存在"
@@ -70,6 +83,14 @@ jobs:
7083
exit 1
7184
fi
7285
86+
# 检查提交顺序
87+
if git merge-base --is-ancestor "$END_HASH" "$START_HASH"; then
88+
echo "::warning::提交顺序可能颠倒,交换起始和结束提交"
89+
TEMP_HASH=$START_HASH
90+
START_HASH=$END_HASH
91+
END_HASH=$TEMP_HASH
92+
fi
93+
7394
# 创建输出目录
7495
OUTPUT_DIR="../../patches"
7596
mkdir -p "$OUTPUT_DIR"
@@ -78,38 +99,85 @@ jobs:
7899
# 根据选择的类型生成补丁
79100
if [ "${{ github.event.inputs.patch_type }}" = "单个" ]; then
80101
echo "正在生成单个补丁文件..."
81-
git diff "$START_HASH" "$END_HASH" > "$OUTPUT_DIR/combined.patch"
82-
PATCH_COUNT=1
83-
echo "已生成单个补丁文件: combined.patch"
102+
git diff "$START_HASH" "$END_HASH" > "$OUTPUT_DIR/combined.patch" || echo "生成单个补丁失败"
103+
104+
if [ -s "$OUTPUT_DIR/combined.patch" ]; then
105+
PATCH_COUNT=1
106+
echo "已生成单个补丁文件: combined.patch"
107+
else
108+
echo "::warning::生成的单个补丁文件为空"
109+
fi
84110
else
85111
echo "正在生成多个补丁文件..."
86-
# 检查是否需要获取更多历史
87-
if ! git merge-base --is-ancestor "$START_HASH" "$END_HASH" 2>/dev/null; then
88-
echo "提交范围不在当前克隆深度内,获取更多历史..."
89-
git fetch --depth=1000
112+
113+
# 检查提交范围是否有效
114+
COMMIT_RANGE="$START_HASH..$END_HASH"
115+
echo "提交范围: $COMMIT_RANGE"
116+
117+
# 获取提交数量
118+
COMMIT_COUNT=$(git rev-list --count $COMMIT_RANGE || echo 0)
119+
echo "范围内提交数量: $COMMIT_COUNT"
120+
121+
if [ "$COMMIT_COUNT" -eq 0 ]; then
122+
echo "::warning::提交范围内没有提交,尝试交换顺序..."
123+
COMMIT_RANGE="$END_HASH..$START_HASH"
124+
COMMIT_COUNT=$(git rev-list --count $COMMIT_RANGE || echo 0)
125+
echo "交换后范围内提交数量: $COMMIT_COUNT"
126+
fi
127+
128+
if [ "$COMMIT_COUNT" -gt 0 ]; then
129+
# 确保有足够的历史
130+
CURRENT_DEPTH=$(git rev-list --count HEAD)
131+
if [ "$COMMIT_COUNT" -gt $CURRENT_DEPTH ]; then
132+
echo "需要更多历史记录,当前深度: $CURRENT_DEPTH, 需要: $COMMIT_COUNT"
133+
git fetch --depth=$((COMMIT_COUNT + 10))
134+
fi
135+
136+
# 生成补丁
137+
git format-patch $COMMIT_RANGE -o "$OUTPUT_DIR" --quiet
138+
PATCH_COUNT=$(ls -1 "$OUTPUT_DIR"/*.patch 2>/dev/null | wc -l)
139+
echo "已生成 $PATCH_COUNT 个补丁文件"
140+
else
141+
echo "::error::提交范围内没有有效的提交"
142+
echo "起始提交: $(git show -s --format='%h %s' $START_HASH)"
143+
echo "结束提交: $(git show -s --format='%h %s' $END_HASH)"
144+
exit 1
90145
fi
91-
git format-patch "$START_HASH..$END_HASH" -o "$OUTPUT_DIR" --quiet
92-
PATCH_COUNT=$(ls -1 "$OUTPUT_DIR"/*.patch 2>/dev/null | wc -l)
93-
echo "已生成 $PATCH_COUNT 个补丁文件"
94146
fi
95147
96148
# 设置输出变量
97149
echo "patch_dir=../patches" >> $GITHUB_OUTPUT
98150
echo "patch_count=$PATCH_COUNT" >> $GITHUB_OUTPUT
99151
echo "patch_type=${{ github.event.inputs.patch_type }}" >> $GITHUB_OUTPUT
100152
153+
- name: 检查补丁文件
154+
run: |
155+
echo "检查补丁目录内容..."
156+
echo "补丁目录路径: $(pwd)/patches"
157+
ls -la patches || echo "补丁目录不存在"
158+
159+
if [ -d "patches" ]; then
160+
echo "补丁文件列表:"
161+
ls -l patches/*.patch 2>/dev/null || echo "没有找到补丁文件"
162+
fi
163+
101164
- name: 创建时间戳命名的 ZIP 文件
102165
id: create_zip
103166
run: |
104167
# 检查补丁目录是否存在
105168
if [ ! -d "patches" ]; then
106-
echo "::error::补丁目录不存在,请检查生成步骤"
169+
echo "::error::补丁目录不存在"
107170
exit 1
108171
fi
109172
110173
# 检查是否有补丁文件
111-
if [ -z "$(ls -A patches)" ]; then
112-
echo "::error::补丁目录为空,没有生成补丁文件"
174+
PATCH_FILES=$(ls patches/*.patch 2>/dev/null | wc -l)
175+
if [ "$PATCH_FILES" -eq 0 ]; then
176+
echo "::error::没有生成任何补丁文件"
177+
echo "可能原因:"
178+
echo "1. 起始提交和结束提交相同"
179+
echo "2. 提交顺序错误"
180+
echo "3. 提交范围内没有变更"
113181
exit 1
114182
fi
115183

0 commit comments

Comments
 (0)