Skip to content

Commit d3c0e1b

Browse files
committed
ci: 添加自动构建和发布流程
- 添加 GitHub Actions工作流配置文件,实现自动构建和创建发布 - 脚本功能包括: -检查未提交的更改 - 更新版本号 - 构建项目 - 创建和推送 Git 标签
1 parent dc6058d commit d3c0e1b

File tree

3 files changed

+251
-0
lines changed

3 files changed

+251
-0
lines changed

.github/workflows/publish.yml

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
name: Build and Release
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
workflow_dispatch:
8+
inputs:
9+
version:
10+
description: 'Version to release (e.g., v0.6.9)'
11+
required: true
12+
type: string
13+
14+
permissions:
15+
contents: write
16+
17+
jobs:
18+
build-and-release:
19+
runs-on: ubuntu-latest
20+
21+
steps:
22+
- name: Checkout code
23+
uses: actions/checkout@v4
24+
25+
- name: Set up JDK 21
26+
uses: actions/setup-java@v4
27+
with:
28+
java-version: '21'
29+
distribution: 'temurin'
30+
31+
- name: Grant execute permission for gradlew
32+
run: chmod +x gradlew
33+
34+
- name: Setup Gradle
35+
uses: gradle/gradle-build-action@v3
36+
37+
- name: Build with Gradle
38+
run: ./gradlew build
39+
40+
- name: Get version from gradle.properties
41+
id: get_version
42+
run: |
43+
VERSION=$(grep 'mod_version=' gradle.properties | cut -d'=' -f2)
44+
echo "version=$VERSION" >> $GITHUB_OUTPUT
45+
echo "tag_version=v$VERSION" >> $GITHUB_OUTPUT
46+
47+
- name: Find JAR file
48+
id: find_jar
49+
run: |
50+
JAR_FILE=$(find build/libs -name "*.jar" -not -name "*-sources.jar" -not -name "*-javadoc.jar" | head -1)
51+
echo "jar_file=$JAR_FILE" >> $GITHUB_OUTPUT
52+
echo "jar_name=$(basename $JAR_FILE)" >> $GITHUB_OUTPUT
53+
54+
- name: Create Release
55+
id: create_release
56+
uses: actions/create-release@v1
57+
env:
58+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
59+
with:
60+
tag_name: ${{ github.event.inputs.version || steps.get_version.outputs.tag_version }}
61+
release_name: Release ${{ github.event.inputs.version || steps.get_version.outputs.tag_version }}
62+
body: |
63+
## Changes
64+
- 自动构建发布
65+
66+
## 安装说明
67+
1. 下载 JAR 文件
68+
2. 将其放入 Minecraft mods 文件夹
69+
3. 启动游戏
70+
71+
**支持的版本:** Minecraft 1.21.1 + NeoForge 21.1.169+
72+
draft: false
73+
prerelease: false
74+
75+
- name: Upload Release Asset
76+
uses: actions/upload-release-asset@v1
77+
env:
78+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
79+
with:
80+
upload_url: ${{ steps.create_release.outputs.upload_url }}
81+
asset_path: ${{ steps.find_jar.outputs.jar_file }}
82+
asset_name: ${{ steps.find_jar.outputs.jar_name }}
83+
asset_content_type: application/java-archive

publish.bat

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
@echo off
2+
setlocal enabledelayedexpansion
3+
4+
REM PortalTransform 发布脚本 (Windows版)
5+
REM 用途:构建项目,推送到GitHub并自动创建release
6+
7+
echo 🚀 开始发布流程...
8+
9+
REM 检查是否有未提交的更改
10+
git status --porcelain > temp_status.txt
11+
set /p status_output=<temp_status.txt
12+
del temp_status.txt
13+
14+
if not "!status_output!"=="" (
15+
echo ⚠️ 检测到未提交的更改,请先提交所有更改
16+
git status
17+
exit /b 1
18+
)
19+
20+
REM 获取当前版本
21+
for /f "tokens=2 delims==" %%i in ('findstr "mod_version=" gradle.properties') do set CURRENT_VERSION=%%i
22+
echo 📦 当前版本: !CURRENT_VERSION!
23+
24+
REM 询问是否更新版本
25+
set /p update_version="是否需要更新版本? (y/n): "
26+
if /i "!update_version!"=="y" (
27+
set /p new_version="请输入新版本号 (当前: !CURRENT_VERSION!): "
28+
29+
REM 更新版本号
30+
powershell -Command "(Get-Content gradle.properties) -replace 'mod_version=.*', 'mod_version=!new_version!' | Set-Content gradle.properties"
31+
32+
echo ✅ 版本已更新为: !new_version!
33+
set CURRENT_VERSION=!new_version!
34+
35+
REM 提交版本更新
36+
git add gradle.properties
37+
git commit -m "chore: bump version to !new_version!"
38+
)
39+
40+
REM 构建项目
41+
echo 🔨 开始构建项目...
42+
call gradlew clean build
43+
44+
if !errorlevel! neq 0 (
45+
echo ❌ 构建失败,请检查错误信息
46+
exit /b 1
47+
)
48+
49+
echo ✅ 构建成功
50+
51+
REM 创建并推送标签
52+
set TAG_NAME=v!CURRENT_VERSION!
53+
echo 🏷️ 创建标签: !TAG_NAME!
54+
55+
git tag -l | findstr /b "!TAG_NAME!$" > nul
56+
if !errorlevel! equ 0 (
57+
set /p recreate_tag="⚠️ 标签 !TAG_NAME! 已存在,是否删除并重新创建? (y/n): "
58+
if /i "!recreate_tag!"=="y" (
59+
git tag -d "!TAG_NAME!"
60+
git push origin --delete "!TAG_NAME!" 2>nul
61+
) else (
62+
echo ❌ 发布取消
63+
exit /b 1
64+
)
65+
)
66+
67+
git tag "!TAG_NAME!"
68+
69+
REM 推送代码和标签
70+
echo 📤 推送到GitHub...
71+
git push origin
72+
git push origin "!TAG_NAME!"
73+
74+
echo 🎉 发布完成!
75+
echo 📋 摘要:
76+
echo - 版本: !CURRENT_VERSION!
77+
echo - 标签: !TAG_NAME!
78+
echo - GitHub Actions将自动创建release
79+
echo.
80+
echo 📝 请访问GitHub查看构建状态和release
81+
82+
pause

publish.sh

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
#!/bin/bash
2+
3+
# PortalTransform 发布脚本
4+
# 用途:构建项目,推送到GitHub并自动创建release
5+
6+
set -e
7+
8+
echo "🚀 开始发布流程..."
9+
10+
# 检查是否有未提交的更改
11+
if [ -n "$(git status --porcelain)" ]; then
12+
echo "⚠️ 检测到未提交的更改,请先提交所有更改"
13+
git status
14+
exit 1
15+
fi
16+
17+
# 获取当前版本
18+
CURRENT_VERSION=$(grep 'mod_version=' gradle.properties | cut -d'=' -f2)
19+
echo "📦 当前版本: $CURRENT_VERSION"
20+
21+
# 询问是否更新版本
22+
echo "是否需要更新版本? (y/n)"
23+
read -r update_version
24+
if [ "$update_version" = "y" ] || [ "$update_version" = "Y" ]; then
25+
echo "请输入新版本号 (当前: $CURRENT_VERSION):"
26+
read -r new_version
27+
28+
# 更新版本号
29+
if [[ "$OSTYPE" == "darwin"* ]]; then
30+
# macOS
31+
sed -i '' "s/mod_version=.*/mod_version=$new_version/" gradle.properties
32+
else
33+
# Linux
34+
sed -i "s/mod_version=.*/mod_version=$new_version/" gradle.properties
35+
fi
36+
37+
echo "✅ 版本已更新为: $new_version"
38+
CURRENT_VERSION=$new_version
39+
40+
# 提交版本更新
41+
git add gradle.properties
42+
git commit -m "chore: bump version to $new_version"
43+
fi
44+
45+
# 构建项目
46+
echo "🔨 开始构建项目..."
47+
./gradlew clean build
48+
49+
if [ $? -ne 0 ]; then
50+
echo "❌ 构建失败,请检查错误信息"
51+
exit 1
52+
fi
53+
54+
echo "✅ 构建成功"
55+
56+
# 创建并推送标签
57+
TAG_NAME="v$CURRENT_VERSION"
58+
echo "🏷️ 创建标签: $TAG_NAME"
59+
60+
if git tag -l | grep -q "^$TAG_NAME$"; then
61+
echo "⚠️ 标签 $TAG_NAME 已存在,是否删除并重新创建? (y/n)"
62+
read -r recreate_tag
63+
if [ "$recreate_tag" = "y" ] || [ "$recreate_tag" = "Y" ]; then
64+
git tag -d "$TAG_NAME"
65+
git push origin --delete "$TAG_NAME" 2>/dev/null || true
66+
else
67+
echo "❌ 发布取消"
68+
exit 1
69+
fi
70+
fi
71+
72+
git tag "$TAG_NAME"
73+
74+
# 推送代码和标签
75+
echo "📤 推送到GitHub..."
76+
git push origin
77+
git push origin "$TAG_NAME"
78+
79+
echo "🎉 发布完成!"
80+
echo "📋 摘要:"
81+
echo " - 版本: $CURRENT_VERSION"
82+
echo " - 标签: $TAG_NAME"
83+
echo " - GitHub Actions将自动创建release"
84+
echo ""
85+
echo "📝 请访问GitHub查看构建状态和release:"
86+
echo " https://github.com/$(git config --get remote.origin.url | sed 's/.*github.com[:/]\([^/]*\/[^/]*\)\.git/\1/')/actions"

0 commit comments

Comments
 (0)