Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ jobs:
- arch: arm64
package_command: npm run package:linux:arm64
artifact_name: gsm3-management-panel-linux-arm64-build
- arch: riscv64
package_command: npm run package:linux:riscv64
artifact_name: gsm3-management-panel-linux-riscv64-build
steps:
- uses: actions/checkout@v4
- name: Setup Node.js for build
Expand Down Expand Up @@ -226,6 +229,11 @@ jobs:
with:
name: gsm3-management-panel-linux-arm64-build
path: linux-arm64-build/
- name: Download Linux riscv64 artifact
uses: actions/download-artifact@v4
with:
name: gsm3-management-panel-linux-riscv64-build
path: linux-riscv64-build/
- name: Download Windows artifact
uses: actions/download-artifact@v4
with:
Expand All @@ -238,6 +246,7 @@ jobs:
run: |
tar -czf gsm3-management-panel-linux.tar.gz -C linux-x64-build .
tar -czf gsm3-management-panel-linux-arm64.tar.gz -C linux-arm64-build .
tar -czf gsm3-management-panel-linux-riscv64.tar.gz -C linux-riscv64-build .
cd windows-build
zip -r ../gsm3-management-panel-windows.zip .
- name: Create Release
Expand All @@ -246,6 +255,7 @@ jobs:
files: |
gsm3-management-panel-linux.tar.gz
gsm3-management-panel-linux-arm64.tar.gz
gsm3-management-panel-linux-riscv64.tar.gz
gsm3-management-panel-windows.zip
generate_release_notes: true
draft: false
Expand Down
2 changes: 2 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,5 @@ const possiblePaths = [
18. `npm run lint` 只有在仓库存在可用 ESLint 配置时才作为交付检查;如果脚本存在但配置缺失,需要在交付说明中明确说明。
19. 临时诊断脚本、一次性测试文件和调试产物在验证完成后删除;正式测试代码可以保留,但应与现有测试组织方式一致。
20. 开源贡献前确认目标上游和分支基准。当前上游仓库为 `https://github.com/GSManagerXZ/GameServerManager` ,不要仅用个人 fork 的 `origin/main` 判断 PR 是否同步。
21. 新增架构支持时必须区分完整支持与降级支持。没有官方 Node.js、PTY、Zip-Tools、7z、SteamCMD 或游戏服务端原生资产时,不要伪装成开箱即用;应在打包脚本、安装脚本、CI 和文档中写明系统前置条件、可用功能和不可用功能。
22. riscv64 目前按系统 Node.js 运行,不内置 Node.js、固定 PTY、Zip-Tools 或 7z 资产。ZIP/7z 功能优先使用系统 `unzip`、`zip`、`7z`/`7zz` 降级;终端 PTY 功能在缺少上游 riscv64 资产时不可用。
11 changes: 11 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,17 @@ sudo apt-get install libc6-dev-arm64-cross
```

详细的 ARM64 部署说明请参考 [scripts/arm/README.md](scripts/arm/README.md)

### RISC-V64 架构部署

RISC-V64 目前提供 `linux-riscv64` 便携安装包,适合作为 Web 管理面板和架构适配测试节点。该包不内置 Node.js、PTY、Zip-Tools 或 7z 原生资产,目标系统需要预装 Node.js >= 18;ZIP/7z 功能会按需使用系统 `unzip`、`zip`、`7z`/`7zz`。

```bash
npm run package:linux:riscv64
```

完整支持边界见 [docs/多架构支持说明.md](docs/多架构支持说明.md)。

## 🏗️ 技术架构

### 前端技术栈
Expand Down
2 changes: 1 addition & 1 deletion client/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ function App() {
<OnboardingWizard />
</ProtectedRoute>

{/* ARM架构警告弹窗 - 只在已登录时显示 */}
{/* 特殊架构警告弹窗 - 只在已登录时显示 */}
<ProtectedRoute>
<ArmWarningModal />
</ProtectedRoute>
Expand Down
8 changes: 4 additions & 4 deletions client/src/components/ArmWarningModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,10 @@ const ArmWarningModal: React.FC = () => {
</div>
<div>
<h3 className="text-xl font-bold text-gray-900 dark:text-white">
ARM架构警告
特殊架构警告
</h3>
<p className="text-sm text-gray-600 dark:text-gray-400 mt-1">
检测到您当前使用的是ARM架构,此架构目前仍在测试阶段
检测到您当前使用的是非 x86_64 架构,此架构目前仍在测试阶段
</p>
</div>
</div>
Expand Down Expand Up @@ -82,7 +82,7 @@ const ArmWarningModal: React.FC = () => {
<span className="text-sm font-medium text-gray-900 dark:text-white">游戏服务端兼容性问题</span>
</div>
<p className="text-sm text-gray-600 dark:text-gray-400">
ARM架构由于特殊性,Steam等众多单机游戏服务端均无法部署和运行,面板已自动隐藏不受支持的部分
ARM、RISC-V 等架构由于特殊性,Steam等众多单机游戏服务端均无法部署和运行,面板已自动隐藏不受支持的部分
</p>
</div>
</div>
Expand Down Expand Up @@ -112,7 +112,7 @@ const ArmWarningModal: React.FC = () => {
<span className="text-sm font-medium text-gray-900 dark:text-white">测试阶段风险</span>
</div>
<p className="text-sm text-gray-600 dark:text-gray-400">
目前ARM架构面板仍在测试阶段,可能会存在无法预料的问题
目前非 x86_64 架构面板仍在测试阶段,可能会存在无法预料的问题
</p>
</div>
</div>
Expand Down
25 changes: 14 additions & 11 deletions client/src/components/onboarding/SteamCMDOnboardingStep.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import {
AlertCircle,
Info
} from 'lucide-react'
import { getArchitectureLabel, isLimitedGameServerArchitecture } from '@/utils/architectureSupport'

const SteamCMDOnboardingStep: React.FC = () => {
const { completeStep } = useOnboardingStore()
Expand Down Expand Up @@ -108,7 +109,8 @@ const SteamCMDOnboardingStep: React.FC = () => {
})

if (!response.ok) {
throw new Error('安装请求失败')
const errorResult = await response.json().catch(() => null)
throw new Error(errorResult?.message || '安装请求失败')
}

const reader = response.body?.getReader()
Expand Down Expand Up @@ -223,39 +225,40 @@ const SteamCMDOnboardingStep: React.FC = () => {
}

const isWindows = systemInfo?.platform?.toLowerCase().includes('windows')
const isArmArchitecture = systemInfo?.arch === 'arm64' || systemInfo?.arch === 'aarch64'
const hasLimitedGameServerSupport = isLimitedGameServerArchitecture(systemInfo)
const architectureLabel = getArchitectureLabel(systemInfo)

// ARM架构下自动完成步骤
// 非 x86_64 架构下自动完成步骤
useEffect(() => {
if (isArmArchitecture) {
if (hasLimitedGameServerSupport) {
// 延迟一下让用户看到提示信息
const timer = setTimeout(() => {
completeStep('steamcmd')
}, 2000)
return () => clearTimeout(timer)
}
}, [isArmArchitecture, completeStep])
}, [hasLimitedGameServerSupport, completeStep])

// 如果是ARM架构,显示不支持的提示
if (isArmArchitecture) {
// 如果是非 x86_64 架构,显示不支持的提示
if (hasLimitedGameServerSupport) {
return (
<div className="space-y-6">
{/* ARM架构不支持提示 */}
{/* 非 x86_64 架构不支持提示 */}
<div className="bg-orange-50 dark:bg-orange-900/20 border border-orange-200 dark:border-orange-800 rounded-lg p-6">
<div className="flex items-start space-x-4">
<div className="p-3 rounded-lg bg-orange-500/20 flex-shrink-0">
<Monitor className="w-8 h-8 text-orange-500" />
</div>
<div className="flex-1">
<h3 className="text-lg font-bold text-orange-900 dark:text-orange-100 mb-2">
ARM架构检测
特殊架构检测
</h3>
<p className="text-orange-800 dark:text-orange-200 mb-4">
检测到您当前使用的是ARM架构({systemInfo?.arch}),SteamCMD目前不支持ARM架构。
检测到您当前使用的是 {architectureLabel} 架构,SteamCMD目前不支持该架构。
</p>
<div className="space-y-2 text-sm text-orange-700 dark:text-orange-300">
<p>• SteamCMD仅支持x86_64架构</p>
<p>• ARM架构下将自动跳过SteamCMD配置</p>
<p>• 当前架构下将自动跳过SteamCMD配置</p>
<p>• 您仍可以使用其他游戏部署功能,如Minecraft服务器</p>
</div>
<div className="mt-4 text-sm text-orange-600 dark:text-orange-400">
Expand Down
Loading