🐛 fix(release): 修复镜像容量检查参数冲突

- 使用 POSIX df 输出读取 Gatewaysentry 可用空间
- 校验远端容量结果后再换算为字节
- 增加发布 action 容量命令回归测试
This commit is contained in:
Syngnat
2026-07-23 13:47:38 +08:00
parent 83952abad4
commit e1e65f9698
2 changed files with 15 additions and 1 deletions

View File

@@ -115,7 +115,12 @@ runs:
)
remote="${MIRROR_SSH_USER}@${MIRROR_SSH_HOST}"
payload_bytes="$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["payloadBytes"])' "${stage_dir}/deployment.json")"
available_bytes="$(ssh "${ssh_options[@]}" "${remote}" "df -PB1 --output=avail '${mirror_root}' | tail -n 1 | tr -d ' '")"
available_kib="$(ssh "${ssh_options[@]}" "${remote}" "LC_ALL=C df -Pk '${mirror_root}' | awk 'NR == 2 { print \$4 }'")"
[[ "${available_kib}" =~ ^[0-9]+$ ]] || {
echo "Mirror origin returned an invalid free space value: ${available_kib:-<empty>}" >&2
exit 1
}
available_bytes="$((available_kib * 1024))"
required_bytes="$((payload_bytes + 2000000000))"
if (( available_bytes < required_bytes )); then
echo "Mirror origin has insufficient free space: available=${available_bytes} required=${required_bytes}" >&2

View File

@@ -12,6 +12,7 @@ from pathlib import Path
SCRIPT = Path(__file__).with_name("prepare-vps-release-payload.py")
PUBLISH_ACTION = SCRIPT.parents[1] / ".github/actions/publish-vps-mirror/action.yml"
def sha256(value: bytes) -> str:
@@ -153,6 +154,14 @@ class PrepareVPSReleasePayloadTest(unittest.TestCase):
self.assertNotEqual(result.returncode, 0)
self.assertIn("invalid app asset name", result.stderr)
def test_publish_action_reads_remote_capacity_with_posix_df(self) -> None:
source = PUBLISH_ACTION.read_text(encoding="utf-8")
self.assertIn("df -Pk '${mirror_root}'", source)
self.assertNotIn("--output=avail", source)
self.assertIn("available_kib", source)
self.assertIn("available_kib * 1024", source)
if __name__ == "__main__":
unittest.main()