# Gitea Actions Runner · Windows 内测安装包构建

> 状态: RUNNER_REQUIRED
>
> 适用仓库: `bingshuo/hololake-platform`
>
> 工作流: `.github/workflows/build-windows-manual.yml`
>
> 当前用途: 生成 `Guanghu-Windows-x64-internal` 内测安装包 artifact

## 1 · 当前问题

`Build Windows Internal Installer` 工作流已经进入仓库，但 Gitea Actions 页面显示：

```text
No matching online runner with label: ubuntu-latest
```

这表示问题不在应用源码，也不在 Windows 安装包工作流本身，而是服务器当前没有在线 Gitea Actions runner 接收 `ubuntu-latest` 标签的任务。

## 2 · 为什么先用 ubuntu-latest

本工作流当前使用 Linux runner 交叉构建 Windows x64 NSIS 内测安装包：

```yaml
runs-on: ubuntu-latest
```

原因：

```text
1. 服务器只需要一台 Linux runner 就能先产出 Windows NSIS 内测包。
2. 不要求 Windows 代码签名证书。
3. 不要求 Windows 桌面机器长期在线。
4. 比正式 Windows runner 更容易先补齐。
```

注意：这是内测 unsigned installer 路线，不是正式发布链。

## 3 · 最小 runner 要求

```yaml
runner:
  label: ubuntu-latest
  os: linux
  arch: x64
  disk: "80GB+ recommended"
  memory: "4GB minimum, 8GB recommended"
  network: "must reach guanghubingshuo.com and public package registries"
```

工作流会自动安装：

```text
nsis
lld
llvm
clang
cargo-xwin
Node.js 22
pnpm 10
Rust x86_64-pc-windows-msvc target
```

## 4 · 服务器补齐步骤

在运行 Gitea 的服务器或独立构建机上安装并启动 `act_runner`。

示例流程：

```bash
# 1. 安装 runner 二进制
# 按服务器系统选择 Gitea act_runner 官方 release。

# 2. 注册 runner
act_runner register \
  --instance https://guanghubingshuo.com/code \
  --token <GITEA_ACTIONS_RUNNER_REGISTRATION_TOKEN> \
  --name hololake-linux-runner-01 \
  --labels ubuntu-latest:host

# 3. 启动 runner
act_runner daemon
```

生产建议用 systemd 托管：

```ini
[Unit]
Description=Gitea Actions Runner
After=network.target

[Service]
ExecStart=/usr/local/bin/act_runner daemon --config /etc/act_runner/config.yaml
WorkingDirectory=/var/lib/act_runner
Restart=always
User=act-runner

[Install]
WantedBy=multi-user.target
```

## 5 · 注册 token 放哪里

不要把 runner 注册 token 写入仓库。

token 应从 Gitea 管理界面获取：

```text
Repository / Organization / Site Admin
→ Actions
→ Runners
→ Create or registration token
```

token 只在服务器注册 runner 时使用。

## 6 · 验证方式

runner 启动后，进入：

```text
https://guanghubingshuo.com/code/bingshuo/hololake-platform/actions
```

确认 `build-windows-manual.yml` 左侧不再显示：

```text
No matching online runner with label: ubuntu-latest
```

然后重新运行：

```text
Build Windows Internal Installer
```

成功后 artifact 名称应为：

```text
Guanghu-Windows-x64-internal
```

其中包含：

```text
*-setup.exe
```

## 7 · 后续正式发布链

内测 runner 跑通后，再补正式链：

```text
1. Windows Authenticode 代码签名证书
2. Tauri updater signing key
3. 正式 release workflow
4. 安装包 smoke test
5. 自有更新源 latest.json
```

正式发布前不要把该内测包描述为“已签名正式版”。
