Skip to content

Commit c7f521f

Browse files
committed
ci: 添加自动构建和手动发布 GitHub Actions 工作流
新增两个工作流: 1. build.yml - 自动构建 - 推送到 main/master 分支时自动触发 - PR 到 main/master 分支时自动触发 - 构建完成后上传 artifact 保留 7 天 2. manual-release.yml - 手动发布 - 手动触发,可输入版本号 - 可选择是否为预发布版本或草稿 - 自动创建 Git tag 并发布 Release - 自动生成 changelog
1 parent d91cf92 commit c7f521f

2 files changed

Lines changed: 142 additions & 0 deletions

File tree

.github/workflows/build.yml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: Auto Build
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
- master
8+
pull_request:
9+
branches:
10+
- main
11+
- master
12+
13+
jobs:
14+
build:
15+
runs-on: ubuntu-latest
16+
steps:
17+
- name: Checkout code
18+
uses: actions/checkout@v4
19+
20+
- name: Setup JDK 8
21+
uses: actions/setup-java@v4
22+
with:
23+
java-version: '8'
24+
distribution: 'zulu'
25+
26+
- name: Setup Gradle
27+
uses: gradle/actions/setup-gradle@v3
28+
29+
- name: Build with Gradle
30+
run: ./gradlew shadowJar --no-daemon
31+
32+
- name: Upload build artifact
33+
uses: actions/upload-artifact@v4
34+
with:
35+
name: Mcpatch-build-${{ github.sha }}
36+
path: build/libs/*.jar
37+
retention-days: 7
Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
name: Manual Release
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
version:
7+
description: 'Release version (e.g., 1.0.0)'
8+
required: true
9+
type: string
10+
prerelease:
11+
description: 'Is this a pre-release?'
12+
required: false
13+
default: false
14+
type: boolean
15+
draft:
16+
description: 'Create as draft?'
17+
required: false
18+
default: false
19+
type: boolean
20+
21+
jobs:
22+
build-and-release:
23+
runs-on: ubuntu-latest
24+
permissions:
25+
contents: write
26+
27+
steps:
28+
- name: Checkout code
29+
uses: actions/checkout@v4
30+
with:
31+
fetch-depth: 0
32+
33+
- name: Setup JDK 8
34+
uses: actions/setup-java@v4
35+
with:
36+
java-version: '8'
37+
distribution: 'zulu'
38+
39+
- name: Setup Gradle
40+
uses: gradle/actions/setup-gradle@v3
41+
42+
- name: Build with Gradle
43+
run: ./gradlew shadowJar --no-daemon
44+
45+
- name: Get commit SHA
46+
id: commit
47+
run: echo "sha=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
48+
49+
- name: Create Git tag
50+
run: |
51+
git config user.name "github-actions[bot]"
52+
git config user.email "github-actions[bot]@users.noreply.github.com"
53+
git tag -a "v${{ inputs.version }}" -m "Release v${{ inputs.version }}"
54+
git push origin "v${{ inputs.version }}"
55+
56+
- name: Generate changelog
57+
id: changelog
58+
run: |
59+
# 获取上一个 tag
60+
PREV_TAG=$(git describe --tags --abbrev=0 HEAD~1 2>/dev/null || echo "")
61+
62+
if [ -z "$PREV_TAG" ]; then
63+
# 如果没有上一个 tag,获取所有提交
64+
CHANGELOG=$(git log --pretty=format:"- %s (%h)" --no-merges -20)
65+
else
66+
# 获取两个 tag 之间的提交
67+
CHANGELOG=$(git log --pretty=format:"- %s (%h)" --no-merges $PREV_TAG..HEAD)
68+
fi
69+
70+
# 保存到文件(多行内容)
71+
echo "changelog<<EOF" >> $GITHUB_OUTPUT
72+
echo "$CHANGELOG" >> $GITHUB_OUTPUT
73+
echo "EOF" >> $GITHUB_OUTPUT
74+
75+
- name: Create Release
76+
uses: softprops/action-gh-release@v2
77+
with:
78+
tag_name: v${{ inputs.version }}
79+
name: Mcpatch v${{ inputs.version }}
80+
body: |
81+
## Mcpatch v${{ inputs.version }}
82+
83+
**构建信息:**
84+
- 版本: ${{ inputs.version }}
85+
- 提交: ${{ steps.commit.outputs.sha }}
86+
- 构建时间: ${{ github.event.head_commit.timestamp }}
87+
88+
**更新内容:**
89+
${{ steps.changelog.outputs.changelog }}
90+
91+
---
92+
93+
**使用方法:**
94+
下载 `Mcpatch-${{ inputs.version }}.jar` 文件,按照项目说明进行部署。
95+
files: build/libs/*.jar
96+
draft: ${{ inputs.draft }}
97+
prerelease: ${{ inputs.prerelease }}
98+
generate_release_notes: false
99+
100+
- name: Upload release artifact
101+
uses: actions/upload-artifact@v4
102+
with:
103+
name: Mcpatch-v${{ inputs.version }}
104+
path: build/libs/*.jar
105+
retention-days: 30

0 commit comments

Comments
 (0)