|
|
66d325d460
|
ci(部署): rsync 加 --no-owner --no-group,别把 runner 的 uid 搬到服务器
Deploy / deploy (push) Has been cancelled
服务器上 `git pull` 报「检测到可疑的仓库所有权」:
drwxr-xr-x 9 1001 1001 /root/OJDeploy/OJ2
drwxr-xr-x 8 0 0 /root/OJDeploy/OJ2/.git
原因是 `rsync -a` 展开含 `-o -g`(保留属主/属组),接收端又是 root,
所以源端的 uid 会被真写上去 —— GitHub 托管 runner 的 runner 用户是 uid 1001。
而 `.git` 在 --exclude 里,一直是当初手动 clone 时的 root。两者对不上,
git 2.35.2 起的 safe.directory 检查就把服务器上所有 git 操作挡下了。
加 --no-owner --no-group 之后文件落地归 ssh 登录用户(root)所有,不再错位。
注意这只防复发,**不修复已经错位的目录**:rsync 不带 -o/-g 时不会去改已存在
文件的属主。服务器上还要手动跑一次
chown root:root /root/OJDeploy/OJ2
只改这一个目录,**不要 -R** —— git 的属主检查不递归,而 OJ2/data 下可能是
「自带数据」形态的整个 postgres 数据目录和判题沙箱以别的 uid 建的运行目录,
递归 chown 会让它们起不来。
这个问题一直都在,只是以前没在服务器上跑过 git 命令所以没撞上。
验证:只做了 YAML 语法校验 —— 这条工作流要真的 push 到 github 才跑得起来,
本机验不了。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-26 08:08:06 -06:00 |
|
|
|
d3365ecb32
|
ci(部署): actions/checkout v5→v7、actions/cache v4→v6
Deploy / deploy (push) Has been cancelled
`oven-sh/setup-bun` 已经在最新大版本(v2.2.0 属于 v2 线),不动。
**actions/cache v4 → v6** 是这次的实际收益:v4 跑在 **node20** 上,GitHub 正在
退役这个 runtime;v6 是 node24,和另外两个 action 一致。v6.0.0 的改动是「迁到
ESM + 更新依赖」,没有输入输出上的破坏性变更。
⚠️ cache v5 起要求 Actions Runner >= 2.327.1。这里 `runs-on: ubuntu-latest`
是 GitHub 托管的、始终满足;哪天换自建 runner 要留意这条(已写进 yml 注释)。
**actions/checkout v5 → v7**:v5 本来就跑在 node24,运行时没变。两条标了
BREAKING 的改动都打不到这个工作流:
- `allow-unsafe-pr-checkout`(更安全的 pull_request_target 默认值)已经反向
移植到 v2 到 v6 所有线,v5 上本来就有;
- v7.0.0 的「block checking out fork pr」只影响 `pull_request_target` 和
`workflow_run`。
本工作流的触发器只有 `push: main` 和 `workflow_dispatch`,两者都不涉及。
版本按仓库原有习惯钉大版本号,没钉到 patch。
验证:只做了 YAML 语法校验 —— **这条工作流要真的 push 到 github 才跑得起来,
本机验不了**。下次 `git push github main` 时留意一下 Actions 那边。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-26 00:01:28 -06:00 |
|
|
|
6356643cc9
|
ci(部署): 部署走 GitHub Actions,产物挪到 runner 上编
Deploy / deploy (push) Has been cancelled
服务器性能差,镜像 builder 阶段(1238 个包的 bun install + bun compile +
vite build)首次约 5 分钟,光前端就 160s。改成在 runner 上编好 dist/oj2-api
和 apps/web/dist,rsync 过去,服务器那边只剩几条 COPY。
服务器自己编的能力没有砍掉。Dockerfile 顶部加了全局 ARG ARTIFACTS:
build(默认) builder 阶段自己编,只要有 docker 就能手动部署
prebuilt 用构建上下文里现成的产物,builder 不进构建图
实现是两个 scratch 阶段归一成 /artifacts/ 布局,再用变量阶段名
FROM artifacts-${ARTIFACTS} 选一个,运行时阶段不关心产物是谁编的。
deploy.sh 加 --prebuilt:产物缺失在自检就 die;顺带检测 buildx —— 没装的话
compose 会退回 classic builder,那个不看依赖图、所有阶段挨个跑,产物白编
(结果正确但不省时间),黄字提醒不阻断。
.dockerignore 末尾放行两个产物路径,必须在 dist/ 那些规则之后,
dockerignore 是最后一条匹配说了算。
顺手删掉 apps/web/.github/ —— 从 ojnext 抄来的残留,路径不对(GitHub 只认
仓库根的 .github/workflows/)从来没跑过,内容也是 ojnext 的。
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2026-08-25 18:30:22 -06:00 |
|