Files
mcmtrdy/.gitea/workflows/updateR2.yaml
T
DMB-codegang-Mac 56e4ea7b9f 修复返回位置
2026-07-09 01:37:12 +08:00

147 lines
5.0 KiB
YAML

name: Release Modpack
on:
workflow_dispatch:
inputs:
branch:
description: '要运行的分支'
required: true
default: 'main'
release_type:
description: '发布类型'
required: true
type: choice
options:
- client
- server
- both
default: 'both'
jobs:
release:
runs-on: ubuntu-latest
steps:
# 创建版本号
- name: Generate version
run: echo "VERSION=$(date +'%Y.%m.%d-%H%M%S')" >> $GITHUB_ENV
# 检出代码
- name: Checkout
uses: actions/checkout@v4
# 创建 modpack 档案
- name: Create modpack archive
run: |
mkdir -p dist/client
cd client && zip -r ../dist/client/mcmtrdy-modpack.zip server-manifest.json overrides/
cd ..
mkdir -p dist/client/modpack
cp -r client/overrides dist/client/modpack/overrides
cp -r client/server-manifest.json dist/client/modpack/server-manifest.json
# 创建发布
- name: Create Release
if: github.event.inputs.release_type == 'client' || github.event.inputs.release_type == 'both'
uses: https://gitea.com/actions/gitea-release-action@v1
with:
tag_name: ${{ env.VERSION }}
name: Modpack ${{ env.VERSION }}
files: dist/client/mcmtrdy-modpack.zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# 初始化并配置 Rclone
- name: Setup Rclone
if: github.event.inputs.release_type == 'client' || github.event.inputs.release_type == 'both'
run: |
sudo dpkg -i action-file/rclone-current-linux-amd64.deb
mkdir -p ~/.config/rclone
echo "${{ secrets.RCLONE_CONFIG }}" | base64 -d > ~/.config/rclone/rclone.conf
# # 上传 modpack 档案
- name: Upload Modpack
if: github.event.inputs.release_type == 'client' || github.event.inputs.release_type == 'both'
run: |
rclone copyto dist/client/mcmtrdy-modpack.zip mcmtrdy:mcmtrdy/mcmtrdy.zip
rclone sync ./dist/client/modpack mcmtrdy:mcmtrdy/modpack
# 清除配置
- name: Clear config
if: github.event.inputs.release_type == 'client' || github.event.inputs.release_type == 'both'
run: |
rm -rf ~/.config/rclone/rclone.conf
# 创建服务器mod
- name: Create Server Mod
if: github.event.inputs.release_type == 'server' || github.event.inputs.release_type == 'both'
run: |
mkdir -p dist/server
# 读取黑名单
blacklist=$(jq -r '.[]' server/blacklist.json)
# 遍历客户端 mods,跳过黑名单中的 mod
for mod in client/overrides/mods/*.jar; do
filename=$(basename "$mod")
skip=false
for pattern in $blacklist; do
if echo "$filename" | grep -qi "$pattern"; then
echo "跳过: $filename (匹配黑名单: $pattern)"
skip=true
break
fi
done
if [ "$skip" = false ]; then
echo "复制: $filename"
cp "$mod" dist/server/
fi
done
# 复制 server/addmod 中的额外 mod
echo "复制 server/addmod 中的 mod..."
cp server/addmod/*.jar dist/server/ 2>/dev/null || echo "server/addmod 中无 jar 文件"
echo "dist/server 内容:"
ls -la dist/server/
# 同步 mods 到远程服务器
- name: Sync Server Mods
if: github.event.inputs.release_type == 'server' || github.event.inputs.release_type == 'both'
run: |
sudo apt update -y
sudo apt install -y sshpass rsync
sshpass -p "${{ secrets.SSH_PASSWORD }}" ssh -o StrictHostKeyChecking=no \
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}
sshpass -p "${{ secrets.SSH_PASSWORD }}" rsync -avz --delete \
-e "ssh -o StrictHostKeyChecking=no" \
dist/server/ \
${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:${{ secrets.SSH_TARGET_DIR }}/
echo "服务器 mods 同步完成"
# 安装 mcrcon 并发送 RCON 指令
- name: RCON Broadcast
if: github.event.inputs.release_type == 'server' || github.event.inputs.release_type == 'both'
run: |
# 安装 mcrcon
sudo apt update -y
sudo apt install -y git build-essential
git clone https://github.com/Tiiffi/mcrcon.git /tmp/mcrcon
cd /tmp/mcrcon
make
sudo cp mcrcon /usr/local/bin/
# 发送重启广播
mcrcon -H ${{ secrets.RCON_HOST }} \
-P ${{ secrets.RCON_PORT }} \
-p "${{ secrets.RCON_PASSWORD }}" \
"say §6服务器将在10秒后重启以更新模组,请注意!"
# 等待一段时间
sleep 10
mcrcon -H ${{ secrets.RCON_HOST }} \
-P ${{ secrets.RCON_PORT }} \
-p "${{ secrets.RCON_PASSWORD }}" \
"stop"