fix(release): conflicting tags

This commit is contained in:
2025-07-12 16:28:47 -05:00
parent cd064539eb
commit f06b621b8d
2 changed files with 93 additions and 5 deletions

View File

@@ -58,6 +58,93 @@ if (!GITEA_URL || !GITEA_USERNAME || !GITEA_REPO || !GITEA_TOKEN) {
process.exit(1);
}
const createOrUpdateRelease = async () => {
const tagName = `v${version}`;
const apiBase = `https://${GITEA_URL}/api/v1/repos/${GITEA_USERNAME}/${GITEA_REPO}`;
// Check if release exists
const existing = await fetch(`${apiBase}/releases/tags/${tagName}`, {
headers: { Authorization: `token ${GITEA_TOKEN}` },
});
let release;
if (existing.ok) {
const existingRelease = await existing.json();
console.log(`Release ${tagName} already exists. Updating it.`);
// Update existing release
const updateResponse = await fetch(
`${apiBase}/releases/${existingRelease.id}`,
{
method: "PATCH",
headers: {
Authorization: `token ${GITEA_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
name: tagName,
body: releaseNotes,
draft: false,
prerelease: true,
}),
}
);
if (!updateResponse.ok) {
const errorText = await updateResponse.text();
throw new Error(
`Failed to update release: ${updateResponse.status} - ${errorText}`
);
}
release = await updateResponse.json();
console.log("Release updated:", release.html_url || release.url);
} else if (existing.status === 404) {
// Release doesn't exist — create it
const createResponse = await fetch(`${apiBase}/releases`, {
method: "POST",
headers: {
Authorization: `token ${GITEA_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
tag_name: tagName,
name: tagName,
body: releaseNotes,
draft: false,
prerelease: true,
}),
});
if (!createResponse.ok) {
const errorText = await createResponse.text();
throw new Error(
`Failed to create release: ${createResponse.status} - ${errorText}`
);
}
release = await createResponse.json();
console.log("Release created:", release.html_url || release.url);
} else {
const errorText = await existing.text();
throw new Error(
`Failed to check release: ${existing.status} - ${errorText}`
);
}
return release;
};
const release = await createOrUpdateRelease();
if (release) {
console.log(
`Release with tag ${tagName} already exists. Updating release...`
);
// Optionally update release body or assets here instead of creating a new release
return release;
}
// 1) Generate or update CHANGELOG.md using conventional-changelog CLI
console.log("Generating CHANGELOG.md...");
const result = spawnSync(