@@ -28,179 +28,129 @@ on:
2828jobs :
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