ci: pangolin runner launchd 持久化(start script + plist)
ci-pangolin / Lint — shellcheck (pull_request) Successful in 8s
ci-pangolin / OpenAPI Sync Check (pull_request) Successful in 20s
ci-pangolin / Redline Scan — 脱敏 (UI 文案) (pull_request) Successful in 6s
ci-pangolin / Flutter — analyze + test (pull_request) Successful in 43s
ci-pangolin / Portable SQL — 可移植性 (mysql/sqlite) (pull_request) Successful in 6s
ci-pangolin / Codegen Drift — token 生成物未漂移 (pull_request) Successful in 4s
ci-pangolin / Go — build + test (pull_request) Successful in 2m5s
ci-pangolin / E2E Smoke — L4 进程级端到端 (pull_request) Successful in 2m11s
ci-pangolin / Golden — 视觉回归 (components + auth) (pull_request) Successful in 34s

mac-pangolin-2 从临时后台进程改成开机自启的 launchd 服务,仿 jiu 的 com.jiu.act-runner:
- deploy/runner/act_runner_pangolin_start.sh:等 jiu relay(13000)就绪 → 起 daemon →
  退出自重启;PATH 含 docker/node/go(host 模式 job 要用)
- deploy/runner/com.pangolin.act-runner.plist:RunAtLoad + KeepAlive
- docs/ci-runner.md:持久化章节改为实际部署步骤(cp + launchctl load)
复用 jiu 的 relay 13000(端口已占,不另起)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
wangjia
2026-06-25 20:06:21 +08:00
parent 034a585e3b
commit 97b2ac02f1
3 changed files with 68 additions and 13 deletions
+17 -13
View File
@@ -37,12 +37,25 @@ host:
workdir_parent: /Users/wangjia/.cache/act-pangolin2
```
## 当前运行方式(临时,非持久)
## 持久化(launchd 开机自启)
仿 jiu 的 `com.jiu.act-runner`。文件在仓库 `deploy/runner/`:
- `act_runner_pangolin_start.sh` —— 启动脚本(等 jiu 的 relay 13000 就绪 → 起 daemon → 退出自重启)。
- `com.pangolin.act-runner.plist` —— launchd(RunAtLoad + KeepAlive)。
**部署步骤**(一次性):
```bash
export PATH="/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Users/wangjia/bin/act_runner daemon --config /Users/wangjia/.act_runner_pangolin2_config.yaml
# 1. 文件就位
cp deploy/runner/act_runner_pangolin_start.sh ~/bin/ && chmod +x ~/bin/act_runner_pangolin_start.sh
cp deploy/runner/com.pangolin.act-runner.plist ~/Library/LaunchAgents/
# 2. 停掉临时 daemon(否则和 launchd 起的抢同一注册)
pkill -f act_runner_pangolin2_config.yaml
# 3. 加载常驻服务(开机自启 + 崩溃自重启)
launchctl load ~/Library/LaunchAgents/com.pangolin.act-runner.plist
```
> ⚠️ 当前是后台进程,**mac 重启就没了**。要持久化见下「持久化 TODO」
之后 mac 重启 / 退出登录都会自动拉起。日志 `/tmp/act_runner_pangolin2.log`
卸载:`launchctl unload ~/Library/LaunchAgents/com.pangolin.act-runner.plist`
> 依赖 jiu 的 relay(13000)常驻:jiu 的 `com.jiu.act-runner` 在 → relay 在 → 本 runner 能连 NAS gitea。
## 已删除:mac-pangolin(第一次注册的,id 5)
第一次注册的 runner(label `nas`,config `~/.act_runner_pangolin_config.yaml`)。job 调试时已从 **gitea 删除注册**(API DELETE,204)。本机残留待清:
@@ -54,15 +67,6 @@ rm -f ~/.act_runner_pangolin ~/.act_runner_pangolin_config.yaml
rm -rf ~/.cache/act-pangolin
```
## 持久化 TODO(让 runner 开机自启、不随 session/重启消失)
仿 jiu 的 `com.jiu.act-runner`(launchd + relay-aware start script):
1. 写 start 脚本(确保 relay 13000 在 → 起 daemon),仿 `~/bin/act_runner_start.sh`
2.`~/Library/LaunchAgents/com.pangolin.act-runner.plist`(RunAtLoad + KeepAlive)。
3. `launchctl load ~/Library/LaunchAgents/com.pangolin.act-runner.plist`
4. 加载前先停掉当前临时 daemon:`pkill -f act_runner_pangolin2_config.yaml`
> 或者换路线:在 **NAS** 上给现有 runner 加 `nas:host` label + 重启,把 pangolin CI 迁到 NAS(Linux,更稳),mac 这个就可退役。
## 验证
- gitea → 仓库 Settings → Actions → Runners 应只见 **mac-pangolin-2**(online)。
-`main` 开 PR 触发 9 个 job;首次全绿见 run #298(commit `65bd7c3`)。