Skip to content

Commit 47b4739

Browse files
authored
Update main.yml
1 parent 5c90df8 commit 47b4739

1 file changed

Lines changed: 63 additions & 117 deletions

File tree

.github/workflows/main.yml

Lines changed: 63 additions & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -28,179 +28,129 @@ on:
2828
jobs:
2929
Make:
3030
runs-on: ubuntu-latest
31+
env:
32+
WORKSPACE: ${{ github.workspace }}
3133
steps:
3234
- name: 检出当前仓库
3335
uses: actions/checkout@v4
3436

3537
- name: 准备环境
3638
run: |
37-
# 创建必要的目录
38-
mkdir -p source_repo patches
39+
# 创建工作区目录
40+
mkdir -p source_repo
41+
mkdir -p "$WORKSPACE/patches"
42+
echo "工作区路径: $WORKSPACE"
3943
echo "准备完成"
40-
echo "当前工作目录: $(pwd)"
41-
echo "目录结构:"
42-
ls -la
4344
4445
- name: 克隆源仓库
4546
run: |
46-
echo "正在克隆源仓库..."
47-
echo "仓库URL: ${{ github.event.inputs.repo_url }}"
48-
echo "分支: ${{ github.event.inputs.branch || '默认分支' }}"
47+
echo "正在克隆源仓库到: $WORKSPACE/source_repo"
48+
cd "$WORKSPACE/source_repo"
4949
50-
cd source_repo
51-
52-
CLONE_CMD="git clone --depth 100 --single-branch"
5350
if [ -n "${{ github.event.inputs.branch }}" ]; then
54-
$CLONE_CMD --branch "${{ github.event.inputs.branch }}" "${{ github.event.inputs.repo_url }}" .
51+
echo "克隆分支: ${{ github.event.inputs.branch }}"
52+
git clone --depth 100 --single-branch --branch "${{ github.event.inputs.branch }}" "${{ github.event.inputs.repo_url }}" .
5553
else
56-
$CLONE_CMD "${{ github.event.inputs.repo_url }}" .
54+
echo "克隆默认分支"
55+
git clone --depth 100 --single-branch "${{ github.event.inputs.repo_url }}" .
5756
fi
5857
59-
echo "克隆完成,当前分支: $(git branch --show-current)"
58+
echo "当前分支: $(git branch --show-current)"
6059
echo "最近提交: $(git log -1 --oneline)"
6160
6261
- name: 生成补丁文件
6362
id: generate
6463
run: |
65-
cd source_repo
64+
cd "$WORKSPACE/source_repo"
6665
67-
# 获取实际提交哈希
68-
echo "正在解析提交哈希..."
66+
# 获取提交哈希
6967
START_HASH=$(git rev-parse "${{ github.event.inputs.start_commit }}")
7068
END_HASH=$(git rev-parse "${{ github.event.inputs.end_commit }}")
7169
72-
echo "起始提交哈希: $START_HASH"
73-
echo "结束提交哈希: $END_HASH"
70+
echo "起始提交: $START_HASH ($(git show -s --format='%s' $START_HASH))"
71+
echo "结束提交: $END_HASH ($(git show -s --format='%s' $END_HASH))"
7472
75-
# 验证提交是否存在
73+
# 验证提交
7674
if ! git rev-parse --verify "$START_HASH" >/dev/null 2>&1; then
77-
echo "::error::起始提交 '${{ github.event.inputs.start_commit }}' 不存在"
75+
echo "::error::起始提交不存在"
7876
exit 1
7977
fi
8078
8179
if ! git rev-parse --verify "$END_HASH" >/dev/null 2>&1; then
82-
echo "::error::结束提交 '${{ github.event.inputs.end_commit }}' 不存在"
80+
echo "::error::结束提交不存在"
8381
exit 1
8482
fi
8583
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-
9484
# 创建输出目录
95-
OUTPUT_DIR="../../patches"
85+
OUTPUT_DIR="$WORKSPACE/patches"
9686
mkdir -p "$OUTPUT_DIR"
97-
PATCH_COUNT=0
87+
echo "补丁输出目录: $OUTPUT_DIR"
9888
99-
# 根据选择的类型生成补丁
89+
# 生成补丁
10090
if [ "${{ github.event.inputs.patch_type }}" = "单个" ]; then
101-
echo "正在生成单个补丁文件..."
102-
git diff "$START_HASH" "$END_HASH" > "$OUTPUT_DIR/combined.patch" || echo "生成单个补丁失败"
91+
echo "生成单个补丁文件..."
92+
git diff "$START_HASH" "$END_HASH" > "$OUTPUT_DIR/combined.patch"
10393
94+
# 验证文件
10495
if [ -s "$OUTPUT_DIR/combined.patch" ]; then
105-
PATCH_COUNT=1
106-
echo "已生成单个补丁文件: combined.patch"
96+
echo "补丁文件大小: $(wc -c < "$OUTPUT_DIR/combined.patch") 字节"
97+
echo "文件路径: $OUTPUT_DIR/combined.patch"
10798
else
108-
echo "::warning::生成的单个补丁文件为空"
99+
echo "::warning::生成的补丁文件为空"
109100
fi
110101
else
111-
echo "正在生成多个补丁文件..."
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
145-
fi
102+
echo "生成多个补丁文件..."
103+
git format-patch "$START_HASH..$END_HASH" -o "$OUTPUT_DIR"
104+
echo "生成的文件:"
105+
ls -l "$OUTPUT_DIR"
146106
fi
147107
148108
# 设置输出变量
149-
echo "patch_dir=../patches" >> $GITHUB_OUTPUT
150-
echo "patch_count=$PATCH_COUNT" >> $GITHUB_OUTPUT
109+
echo "patch_dir=$OUTPUT_DIR" >> $GITHUB_OUTPUT
151110
echo "patch_type=${{ github.event.inputs.patch_type }}" >> $GITHUB_OUTPUT
152111
153-
- name: 检查补丁文件
112+
- name: 验证补丁文件
154113
run: |
155-
echo "检查补丁目录内容..."
156-
echo "补丁目录路径: $(pwd)/patches"
157-
ls -la patches || echo "补丁目录不存在"
114+
echo "检查补丁目录: $WORKSPACE/patches"
115+
ls -la "$WORKSPACE/patches"
158116
159-
if [ -d "patches" ]; then
160-
echo "补丁文件列表:"
161-
ls -l patches/*.patch 2>/dev/null || echo "没有找到补丁文件"
117+
if [ "${{ github.event.inputs.patch_type }}" = "单个" ]; then
118+
if [ -f "$WORKSPACE/patches/combined.patch" ]; then
119+
echo "找到单个补丁文件"
120+
echo "文件大小: $(wc -c < "$WORKSPACE/patches/combined.patch") 字节"
121+
else
122+
echo "::error::未找到补丁文件"
123+
exit 1
124+
fi
125+
else
126+
PATCH_COUNT=$(ls -1 "$WORKSPACE/patches"/*.patch 2>/dev/null | wc -l)
127+
if [ "$PATCH_COUNT" -gt 0 ]; then
128+
echo "找到 $PATCH_COUNT 个补丁文件"
129+
else
130+
echo "::error::未找到任何补丁文件"
131+
exit 1
132+
fi
162133
fi
163134
164135
- name: 创建时间戳命名的 ZIP 文件
165136
id: create_zip
166137
run: |
167-
# 检查补丁目录是否存在
168-
if [ ! -d "patches" ]; then
169-
echo "::error::补丁目录不存在"
170-
exit 1
171-
fi
172-
173-
# 检查是否有补丁文件
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. 提交范围内没有变更"
181-
exit 1
182-
fi
183-
184-
# 生成时间戳(年月日_时分秒)
185138
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
186139
ZIP_NAME="patch_$TIMESTAMP.zip"
187140
188-
# 创建 ZIP 文件
189-
cd patches
190-
zip -r "../$ZIP_NAME" .
191-
cd ..
141+
cd "$WORKSPACE/patches"
142+
zip -r "$WORKSPACE/$ZIP_NAME" .
192143
193-
# 设置输出变量
144+
echo "ZIP文件路径: $WORKSPACE/$ZIP_NAME"
194145
echo "zip_name=$ZIP_NAME" >> $GITHUB_OUTPUT
195-
echo "zip_path=$(pwd)/$ZIP_NAME" >> $GITHUB_OUTPUT
196-
echo "已创建 ZIP 文件: $ZIP_NAME"
146+
echo "zip_path=$WORKSPACE/$ZIP_NAME" >> $GITHUB_OUTPUT
197147
198-
- name: 清理源仓库
148+
- name: 清理环境
199149
run: |
200-
rm -rf source_repo
150+
rm -rf "$WORKSPACE/source_repo"
201151
echo "已清理源仓库"
202152
203-
- name: 上传 ZIP 文件到工作流产物
153+
- name: 上传 ZIP 文件
204154
uses: actions/upload-artifact@v4
205155
with:
206156
name: git-patches
@@ -209,10 +159,6 @@ jobs:
209159

210160
- name: 显示结果
211161
run: |
212-
if [ "${{ github.event.inputs.patch_type }}" = "单个" ]; then
213-
echo "成功生成单个补丁文件: combined.patch"
214-
else
215-
echo "成功生成 ${{ steps.generate.outputs.patch_count }} 个补丁文件"
216-
fi
217-
echo "已创建 ZIP 文件: ${{ steps.create_zip.outputs.zip_name }}"
218-
echo "补丁文件可在工作流产物中下载"
162+
echo "补丁生成完成"
163+
echo "ZIP文件: ${{ steps.create_zip.outputs.zip_name }}"
164+
echo "可在工作流产物中下载"

0 commit comments

Comments
 (0)