fix(release): corrections

This commit is contained in:
2025-07-12 16:31:13 -05:00
parent 5df8c092be
commit 2386a14d7a

View File

@@ -3,6 +3,7 @@ if (!version) {
console.error("Version not passed to create-gitea-release.js");
process.exit(1);
}
import fs from "fs-extra";
import path from "path";
import { spawnSync } from "child_process";
@@ -11,15 +12,6 @@ import fetch from "node-fetch";
import dotenv from "dotenv";
dotenv.config({ path: "./.env" });
// Load package.json version
// const pkg = await fs.readJson('package.json');
// const version = pkg.version;
if (!version) {
console.error("Version not found in package.json");
process.exit(1);
}
// Resolve the directory of the current script
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
@@ -32,47 +24,64 @@ let buildNumber = "0";
try {
const rawBuild = fs.readFileSync(buildNumberPath, "utf8");
console.log("Raw build", rawBuild);
if (rawBuild) {
// const [numPart, namePart] = rawBuild.split("-");
// const num = parseInt(numPart, 10);
// if (!isNaN(num) && namePart) {
// buildNumber = `${num - 1}-${namePart}`;
// }
buildNumber = rawBuild.trim();
}
buildNumber = rawBuild.trim();
} catch (e) {
console.log(e);
console.warn("BUILD_NUMBER file not found, defaulting to 0");
}
// Compose full version string with build number
const fullVersion = `${version}.${buildNumber}`;
const { GITEA_URL, GITEA_USERNAME, GITEA_REPO, GITEA_TOKEN } = process.env;
if (!GITEA_URL || !GITEA_USERNAME || !GITEA_REPO || !GITEA_TOKEN) {
console.error(
"Missing required environment variables (GITEA_URL, GITEA_USERNAME, GITEA_REPO, GITEA_TOKEN)"
);
console.error("Missing required environment variables");
process.exit(1);
}
// Step 1: Generate or update CHANGELOG.md
console.log("Generating CHANGELOG.md...");
const result = spawnSync(
"npx",
[
"conventional-changelog",
"-p",
"conventionalcommits",
"-i",
"CHANGELOG.md",
"-s",
"-r",
"0",
],
{ stdio: "inherit", shell: true }
);
if (result.status !== 0) {
console.error("Failed to generate changelog");
process.exit(1);
}
// Step 2: Read changelog content for current version
const changelog = await fs.readFile("CHANGELOG.md", "utf8");
const regex = new RegExp(`## \\[${version}\\][\\s\\S]*?(?=## \\[|$)`, "m");
const releaseNotes = changelog.match(regex)?.[0] || changelog;
console.log(`Release notes for v${version} saved.`);
// Step 3: Create or update Gitea release
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}`,
{
@@ -100,7 +109,6 @@ const createOrUpdateRelease = async () => {
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: {
@@ -135,78 +143,7 @@ const createOrUpdateRelease = async () => {
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(
"npx",
[
"conventional-changelog",
"-p",
"conventionalcommits",
"-i",
"CHANGELOG.md",
"-s",
"-r",
"0",
],
{ stdio: "inherit", shell: true }
);
if (result.status !== 0) {
console.error("Failed to generate changelog");
process.exit(1);
}
// 2) Read changelog content for the current version
const changelog = await fs.readFile("CHANGELOG.md", "utf8");
const regex = new RegExp(`## \\[${version}\\][\\s\\S]*?(?=## \\[|$)`, "m");
const releaseNotes = changelog.match(regex)?.[0] || changelog;
console.log(`Release notes for v${version} saved`);
// 3) Create Gitea release
const createRelease = async () => {
const apiUrl = `https://${GITEA_URL}/api/v1/repos/${GITEA_USERNAME}/${GITEA_REPO}/releases`;
const releaseData = {
tag_name: `v${version}`,
name: `v${version}`,
body: releaseNotes,
draft: false,
prerelease: true,
};
const response = await fetch(apiUrl, {
method: "POST",
headers: {
Authorization: `token ${GITEA_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify(releaseData),
});
if (!response.ok) {
const errorText = await response.text();
throw new Error(
`Failed to create release: ${response.status} - ${errorText}`
);
}
const release = await response.json();
console.log("Release created:", release.html_url || release.url);
return release;
};
// 4) Upload release zip asset
// Step 4: Upload asset
const uploadAsset = async (release) => {
const apiUrl = `https://${GITEA_URL}/api/v1/repos/${GITEA_USERNAME}/${GITEA_REPO}/releases/assets?tag=${release.tag_name}`;
const filePath = `releases/release-${fullVersion}.zip`;
@@ -241,9 +178,10 @@ const uploadAsset = async (release) => {
console.log("Asset uploaded:", asset.browser_download_url || asset.url);
};
// Run everything
(async () => {
try {
const release = await createRelease();
const release = await createOrUpdateRelease();
await uploadAsset(release);
} catch (err) {
console.error(err);