fix(runtime): 运行稳定性 - 修复技能种子、任务续租与回归检查

保留社区技能作者与时间戳修复、Agent 参数约束、资源删除 worker 生命周期、PostgreSQL/Redis 测试门禁及相关回归。

Original-Commit: 0d05ff88bbe6c875d01964041788023a662ff7e8
This commit is contained in:
ddCat
2026-09-21 09:48:43 +08:00
parent 15946e5a86
commit 8b8ea29148
21 changed files with 644 additions and 354 deletions

View File

@@ -0,0 +1,34 @@
"""Require named dependency-backed Go tests to run and pass (not merely avoid SKIP)."""
import json
import sys
REQUIRED = {
("database", "TestPostgresAssetIDMigration"),
("canvas", "TestRepairAssetBytesPostgres"),
("repository", "TestCanvasRevision/postgres"),
("platform", "TestRuntimeCoordinatorRedisLeasePreservesLongestTTL"),
("app", "TestClearAdminRuntimeCacheUsesRedisWhitelist"),
}
def missing_tests(events):
ran, passed, failed = set(), set(), set()
for event in events:
key = (event.get("Package", "").rsplit("/", 1)[-1], event.get("Test"))
action = event.get("Action")
if action == "run":
ran.add(key)
elif action == "pass":
passed.add(key)
elif action in {"skip", "fail"}:
failed.add(key)
return REQUIRED - ((ran & passed) - failed)
if __name__ == "__main__":
with open(sys.argv[1], encoding="utf-8") as stream:
missing = missing_tests(json.loads(line) for line in stream if line.strip())
if missing:
sys.exit("Dependency tests missing, skipped or failed: " + repr(sorted(missing)))
print("All five dependency-backed tests ran and passed.")

View File

@@ -0,0 +1,29 @@
import importlib.util
from pathlib import Path
import unittest
spec = importlib.util.spec_from_file_location(
"check", Path(__file__).with_name("check-dependency-tests.py")
)
check = importlib.util.module_from_spec(spec)
spec.loader.exec_module(check)
class DependencyChecks(unittest.TestCase):
def test_requires_run_and_pass_for_every_exact_name(self):
events = [
{"Package": "example/internal/" + package, "Test": name, "Action": action}
for package, name in check.REQUIRED
for action in ("run", "pass")
]
self.assertFalse(check.missing_tests(events))
self.assertTrue(check.missing_tests([]))
self.assertTrue(check.missing_tests(events[1:]))
self.assertTrue(check.missing_tests(events[:-1]))
for action in ("skip", "fail"):
self.assertTrue(check.missing_tests(events + [dict(events[-1], Action=action)]))
self.assertTrue(check.missing_tests([dict(e, Test=e["Test"] + "Renamed") for e in events]))
if __name__ == "__main__":
unittest.main()

View File

@@ -55,14 +55,8 @@ jobs:
- name: Ensure dependency-backed tests were not skipped
shell: bash
run: |
set -o pipefail
go test ./internal/database/ ./internal/canvas/ ./internal/repository/ ./internal/platform/ ./internal/app/ \
-run 'TestPostgresAssetIDMigration|TestRepairAssetBytesPostgres|TestCanvasRevision|TestRuntimeCoordinatorRedisLeasePreservesLongestTTL|TestClearAdminRuntimeCacheUsesRedisWhitelist' \
-count=1 -v | tee "$RUNNER_TEMP/dependency-tests.log"
if grep -q -- "--- SKIP" "$RUNNER_TEMP/dependency-tests.log"; then
echo "::error::依赖外部服务的用例被跳过:请检查 CANVAS_TEST_POSTGRES_DSN 与 redis-server"
exit 1
fi
python3 ../.github/scripts/test_check_dependency_tests.py
python3 ../.github/scripts/check-dependency-tests.py "$RUNNER_TEMP/go-tests.jsonl"
- name: Upload Go test timings
if: always()
uses: actions/upload-artifact@v4