

























@@ -1137,6 +1137,51 @@ describe("resolve-openclaw-package-candidate", () => {
11371137});
11381138});
113911391140+it("normalizes artifact package source SHAs before workflow output", async () => {
1141+const dir = await mkdtemp(path.join(tmpdir(), "openclaw-package-candidate-sha-"));
1142+tempDirs.push(dir);
1143+await writeFile(
1144+path.join(dir, "package-candidate.json"),
1145+JSON.stringify({
1146+packageSourceSha: "66CE632B9B7C5C7FDD3E66C739687D51638AD6E2",
1147+}),
1148+);
1149+1150+await expect(readArtifactPackageCandidateMetadata(dir)).resolves.toEqual({
1151+packageSourceSha: "66ce632b9b7c5c7fdd3e66c739687d51638ad6e2",
1152+});
1153+});
1154+1155+it("normalizes whitespace-only artifact package source SHAs to absent", async () => {
1156+const dir = await mkdtemp(path.join(tmpdir(), "openclaw-package-candidate-empty-sha-"));
1157+tempDirs.push(dir);
1158+await writeFile(
1159+path.join(dir, "package-candidate.json"),
1160+JSON.stringify({
1161+packageSourceSha: " \r\n ",
1162+}),
1163+);
1164+1165+await expect(readArtifactPackageCandidateMetadata(dir)).resolves.toEqual({
1166+packageSourceSha: "",
1167+});
1168+});
1169+1170+it("rejects malformed artifact package source SHAs", async () => {
1171+const dir = await mkdtemp(path.join(tmpdir(), "openclaw-package-candidate-bad-sha-"));
1172+tempDirs.push(dir);
1173+await writeFile(
1174+path.join(dir, "package-candidate.json"),
1175+JSON.stringify({
1176+packageSourceSha: "66ce632b9b7c5c7fdd3e66c739687d51638ad6e2\r\nsource=main",
1177+}),
1178+);
1179+1180+await expect(readArtifactPackageCandidateMetadata(dir)).rejects.toThrow(
1181+"artifact package-candidate.json packageSourceSha must be a 40-character commit SHA",
1182+);
1183+});
1184+11401185it("accepts uppercase package artifact SHA-256 metadata", async () => {
11411186const dir = await mkdtemp(path.join(tmpdir(), "openclaw-package-sha-"));
11421187tempDirs.push(dir);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。