CI / Client installer (macos-latest) (push) Canceled after 0s
CI / Client installer (ubuntu-latest) (push) Canceled after 0s
CI / Client installer (windows-latest) (push) Canceled after 0s
CI / test (22) (push) Canceled after 0s
CI / test (24) (push) Canceled after 0s
CI / release-smoke (push) Canceled after 0s
37 lines
917 B
JavaScript
37 lines
917 B
JavaScript
#!/usr/bin/env node
|
|
|
|
const tag = process.argv[2];
|
|
if (!tag) {
|
|
console.error("用法:release-tag-exists.mjs <tag>");
|
|
process.exit(2);
|
|
}
|
|
|
|
let body = "";
|
|
for await (const chunk of process.stdin) body += chunk;
|
|
|
|
let value;
|
|
try {
|
|
value = JSON.parse(body);
|
|
} catch {
|
|
console.error("无法解析 Gitea Release 列表 JSON");
|
|
process.exit(2);
|
|
}
|
|
|
|
const rows = Array.isArray(value)
|
|
? value
|
|
: Array.isArray(value?.data)
|
|
? value.data
|
|
: Array.isArray(value?.releases)
|
|
? value.releases
|
|
: undefined;
|
|
if (!rows) {
|
|
console.error("Gitea Release 列表 JSON 结构不受支持");
|
|
process.exit(2);
|
|
}
|
|
|
|
const found = rows.some((row) => row && typeof row === "object" && Object.entries(row).some(([key, entry]) => {
|
|
const normalizedKey = key.toLowerCase().replace(/[^a-z]/g, "");
|
|
return (normalizedKey === "tag" || normalizedKey === "tagname") && entry === tag;
|
|
}));
|
|
process.exit(found ? 0 : 1);
|