ci(diag): 在 Windows job 里加一段临时诊断(查完删)
构建客户端 / 检查(类型 + 单元测试) (push) Successful in 1m8s
构建客户端 / macOS 通用(.app + .dmg) (push) Skipped
构建客户端 / Windows x64(NSIS 安装包) (push) Failing after 13s
构建客户端 / Linux x64(deb + AppImage) (push) Successful in 6m7s

run 5 里 bash 那两个坑都过去了,卡在第三处:rustup 建临时文件被拒

    error: could not create temp file C:\Users\admin\.rustup\tmp\ajq4dt9h0_e7oonj_file
    拒绝访问。 (os error 5)

同一个账户在这个交互式会话里能往那个目录写、ACL 也是正常的(SYSTEM/Administrators/
TIMI\admin 全 F,没有 Deny)。runner 进程属主是 TIMI\admin,计划任务 GiteaRunner-Windows
是 admin / Limited(非提权)。所以差异只在 job 内部的令牌/完整性级别上 —— 让 job 自己
报:whoami、Mandatory Label、TEMP/TMP、RUSTUP_HOME/CARGO_HOME,并对 6 个候选目录逐个
做"建目录 + 写文件 + 删文件"探测。这是临时步骤,拿到结论就删。
This commit is contained in:
2026-10-15 22:31:56 +08:00
parent 6f83ebbe3c
commit 2ed16ff88d
+33
View File
@@ -336,6 +336,39 @@ jobs:
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
# 临时诊断:rustup 写 C:\Users\admin\.rustup\tmp 被拒(os error 5),但同一个
# 账户在交互式会话里写得进去 —— 先让 job 自己说清楚"我是谁、哪种完整性级别、
# 哪些目录写得进去"。查完这一段就删。
- name: 诊断(临时,查完删)
shell: pwsh
run: |
"whoami = $(whoami)"
"integrity = $((whoami /groups | Select-String -Pattern 'Mandatory Label') -join ' ')"
"USERPROFILE = $env:USERPROFILE"
"HOME = $env:HOME"
"TEMP / TMP = [$env:TEMP] / [$env:TMP]"
"TMPDIR = [$env:TMPDIR]"
"RUSTUP_HOME = [$env:RUSTUP_HOME] CARGO_HOME = [$env:CARGO_HOME]"
"user-level TEMP = $([Environment]::GetEnvironmentVariable('TEMP','User'))"
$targets = @(
"$env:USERPROFILE\.rustup\tmp",
"$env:USERPROFILE\.cargo",
"$env:USERPROFILE\.cargo\registry",
'C:\Users\admin\runner\windows',
'C:\Users\admin\runner\windows\cache',
(Join-Path (Split-Path -Parent $env:GITHUB_WORKSPACE) 'ci-probe')
)
foreach ($p in $targets) {
$verdict = 'OK'
try {
New-Item -ItemType Directory -Force -Path $p -ErrorAction Stop | Out-Null
$f = Join-Path $p 'probe.txt'
Set-Content -Path $f -Value 'x' -ErrorAction Stop
Remove-Item $f -Force -ErrorAction SilentlyContinue
} catch { $verdict = "FAIL: $($_.Exception.Message)" }
"{0,-46} {1}" -f $verdict, $p
}
# 宿主模式的 Windows runner 上,PATH 里的 `bash` 是 C:\Windows\System32\bash.exe # 宿主模式的 Windows runner 上,PATH 里的 `bash` 是 C:\Windows\System32\bash.exe
# —— WSL 的启动器,而 WSL 在 runner 账户下起不来,报 E_ACCESSDENIED(日志里是 # —— WSL 的启动器,而 WSL 在 runner 账户下起不来,报 E_ACCESSDENIED(日志里是
# 一串 GBK 被当 UTF-8 解出来的乱码 + https://github.com/microsoft/WSL/issues)。 # 一串 GBK 被当 UTF-8 解出来的乱码 + https://github.com/microsoft/WSL/issues)。