# LanMountainDesktop GitHub Actions CI/CD

参考 ClassIsland 项目最佳实践，为 LanMountainDesktop 配置的 GitHub Actions 工作流。

## 📋 工作流说明

### 1. Build (`build.yml`)
**何时运行:** 每次 push、PR、手动触发

**功能:**
- Windows: Release + Debug 配置
- Linux: Release 配置
- macOS: Release 配置
- 上传编译输出 artifacts

**运行时间:** ~5-10 分钟

### 2. Quality Check (`code-quality.yml`)
**何时运行:** PR 或 push

**功能:**
- 编译检查
- 代码格式检查 (`dotnet format`)

**运行时间:** ~3-5 分钟

### 3. Release (`release.yml`)
**何时运行:** Push 标签 (`v*`) 或手动触发

**功能:**
- 并行构建所有平台 (Windows x64/x86, Linux x64, macOS x64/arm64)
- 自动创建 GitHub Release
- 上传所有平台的可执行包

**运行时间:** ~20-30 分钟

**触发方式:**

```bash
# 推送标签 - 自动触发
git tag v1.0.0
git push origin v1.0.0

# 或手动触发
# GitHub Actions > Release > Run workflow
# 输入: tag (例如 v1.0.0)
```

### 4. Issue Management (`issue-management.yml`)
**何时运行:** 每天 1:30 AM UTC

**功能:**
- 标记 30 天无活动的 Issue
- 关闭 7 天无活动的 stale Issue
- 对 PR 同样处理

---

## 🚀 快速开始

### 创建版本发布

```bash
# 1. 提交最后的更改
git add .
git commit -m "Release v1.0.0"

# 2. 创建标签
git tag v1.0.0 -m "Release version 1.0.0"

# 3. 推送
git push origin main
git push origin v1.0.0

# 4. 等待... (GitHub Actions 自动构建)
# 约 20-30 分钟后，Release 将自动创建
```

### 查看工作流状态

访问: **GitHub 项目 > Actions 标签**

---

## 📁 支持的平台与格式

| 平台 | 架构 | 输出格式 |
|------|------|---------|
| Windows | x64, x86 | `.zip` |
| Linux | x64 | `.tar.gz` |
| macOS | x64, arm64 | `.tar.gz` |

---

## 🛠️ 本地构建参考

### Windows

```bash
# 使用现有脚本
.\LanMountainDesktop\scripts\package.ps1 -RuntimeIdentifier win-x64

# 或用 dotnet 直接构建
dotnet build -c Release
dotnet publish LanMountainDesktop/LanMountainDesktop.csproj `
    -c Release -r win-x64 -o ./publish/win-x64 `
    --self-contained -p:PublishSingleFile=true
```

### Linux / macOS

```bash
# 使用 build 脚本
chmod +x scripts/build.sh
./scripts/build.sh publish --config Release --rid linux-x64
./scripts/build.sh publish --config Release --rid osx-x64
./scripts/build.sh publish --config Release --rid osx-arm64

# 或用 dotnet 直接构建
dotnet build -c Release
dotnet publish LanMountainDesktop/LanMountainDesktop.csproj \
    -c Release -r linux-x64 -o ./publish/linux-x64 \
    --self-contained -p:PublishSingleFile=true
```

---

## 📊 Actions 使用统计

**免费额度:** 2000 runner-hours/月 (对大多数项目用不完)

**预计使用:**
- Build job: ~3-5 分钟 × 3 平台
- Code quality: ~3-5 分钟
- Release: ~25-30 分钟 × 1/周

**月总计:** ~30-50 分钟 × 20+ 次 = ~600-1000 分钟 (远低于免费额度)

---

## 🐛 常见问题

### Release 工作流不运行?

检查：
1. 标签格式是否为 `v*` (例如：`v1.0.0`)
2. `.csproj` 文件是否有效
3. GitHub Actions 是否已启用

### 特定平台构建失败?

查看 Actions 日志：
1. **Windows**: 检查 libvlc 依赖
2. **Linux**: 检查系统库依赖
3. **macOS**: 检查 Xcode 工具链

### 如何跳过某个工作流?

在 commit 消息中添加：
```
[skip ci]  # 跳过所有工作流
[skip build]  # 跳过构建
```

---

## 🔗 参考

- [ClassIsland CI/CD](https://github.com/ClassIsland/ClassIsland/.github/workflows/)
- [GitHub Actions 文档](https://docs.github.com/actions)
- [.NET 发布指南](https://learn.microsoft.com/dotnet/core/tools/dotnet-publish)
- [Avalonia 部署](https://docs.avaloniaui.net/docs/deployment)

---

**更新:** 2026-03-04  
**版本:** 2.0 (参考 ClassIsland)  
**状态:** ✅ 生产可用
