Skip to content

Commit 5b21381

Browse files
authored
Create main.yml
1 parent 28cd6d6 commit 5b21381

1 file changed

Lines changed: 127 additions & 0 deletions

File tree

.github/workflows/main.yml

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
name: Make commit on patch
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
repo_url:
7+
description: 'Git 仓库 URL'
8+
required: true
9+
start_commit:
10+
description: '起始提交'
11+
required: true
12+
end_commit:
13+
description: '结束提交'
14+
required: true
15+
patch_type:
16+
description: '补丁文件类型'
17+
required: true
18+
default: '多个'
19+
type: choice
20+
options:
21+
- '单个'
22+
- '多个'
23+
24+
jobs:
25+
Make:
26+
runs-on: ubuntu-latest
27+
steps:
28+
- name: 检出当前仓库
29+
uses: actions/checkout@v4
30+
31+
- name: 生成补丁文件
32+
id: generate
33+
run: |
34+
#!/bin/bash
35+
set -euo pipefail
36+
37+
# 修正输入参数访问方式
38+
REPO_URL="${{ github.event.inputs.repo_url }}"
39+
START_COMMIT="${{ github.event.inputs.start_commit }}"
40+
END_COMMIT="${{ github.event.inputs.end_commit }}"
41+
PATCH_TYPE="${{ github.event.inputs.patch_type }}"
42+
OUTPUT_DIR="./patches"
43+
44+
# 创建临时目录
45+
TEMP_DIR=$(mktemp -d)
46+
echo "临时工作目录: $TEMP_DIR"
47+
48+
# 克隆仓库(单分支完整历史)
49+
echo "正在克隆仓库(单分支完整历史)..."
50+
git clone --single-branch "$REPO_URL" "$TEMP_DIR"
51+
cd "$TEMP_DIR"
52+
53+
# 获取实际提交哈希
54+
echo "正在解析提交哈希..."
55+
START_HASH=$(git rev-parse "$START_COMMIT")
56+
END_HASH=$(git rev-parse "$END_COMMIT")
57+
58+
# 验证提交是否存在
59+
if ! git rev-parse --verify "$START_HASH" >/dev/null 2>&1; then
60+
echo "::error::起始提交 '$START_COMMIT' 不存在"
61+
exit 1
62+
fi
63+
64+
if ! git rev-parse --verify "$END_HASH" >/dev/null 2>&1; then
65+
echo "::error::结束提交 '$END_COMMIT' 不存在"
66+
exit 1
67+
fi
68+
69+
# 创建输出目录
70+
mkdir -p "$OUTPUT_DIR"
71+
PATCH_COUNT=0
72+
73+
# 根据选择的类型生成补丁
74+
if [ "$PATCH_TYPE" = "单个" ]; then
75+
echo "正在生成单个补丁文件..."
76+
git diff "$START_HASH" "$END_HASH" > "$OUTPUT_DIR/combined.patch"
77+
PATCH_COUNT=1
78+
echo "已生成单个补丁文件: combined.patch"
79+
else
80+
echo "正在生成多个补丁文件..."
81+
git format-patch "$START_HASH..$END_HASH" -o "$OUTPUT_DIR" --quiet
82+
PATCH_COUNT=$(ls -1 "$OUTPUT_DIR"/*.patch 2>/dev/null | wc -l)
83+
echo "已生成 $PATCH_COUNT 个补丁文件"
84+
fi
85+
86+
# 设置输出变量
87+
echo "patch_dir=$OUTPUT_DIR" >> $GITHUB_OUTPUT
88+
echo "patch_count=$PATCH_COUNT" >> $GITHUB_OUTPUT
89+
echo "patch_type=$PATCH_TYPE" >> $GITHUB_OUTPUT
90+
91+
- name: 创建时间戳命名的 ZIP 文件
92+
id: create_zip
93+
run: |
94+
# 生成时间戳(年月日_时分秒)
95+
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
96+
ZIP_NAME="patch_$TIMESTAMP.zip"
97+
98+
# 进入补丁目录
99+
cd ${{ steps.generate.outputs.patch_dir }}
100+
101+
# 创建 ZIP 文件
102+
zip -r "../$ZIP_NAME" .
103+
104+
# 返回上级目录
105+
cd ..
106+
107+
# 设置输出变量
108+
echo "zip_name=$ZIP_NAME" >> $GITHUB_OUTPUT
109+
echo "zip_path=$(pwd)/$ZIP_NAME" >> $GITHUB_OUTPUT
110+
echo "已创建 ZIP 文件: $ZIP_NAME"
111+
112+
- name: 上传 ZIP 文件到工作流产物
113+
uses: actions/upload-artifact@v4
114+
with:
115+
name: git-patches
116+
path: ${{ steps.create_zip.outputs.zip_path }}
117+
if-no-files-found: error
118+
119+
- name: 显示结果
120+
run: |
121+
if [ "${{ steps.generate.outputs.patch_type }}" = "单个" ]; then
122+
echo "成功生成单个补丁文件: combined.patch"
123+
else
124+
echo "成功生成 ${{ steps.generate.outputs.patch_count }} 个补丁文件"
125+
fi
126+
echo "已创建 ZIP 文件: ${{ steps.create_zip.outputs.zip_name }}"
127+
echo "补丁文件可在工作流产物中下载"

0 commit comments

Comments
 (0)