fix(release): conflicting tags
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user