fix(release): corrections
This commit is contained in:
@@ -3,6 +3,7 @@ if (!version) {
|
|||||||
console.error("Version not passed to create-gitea-release.js");
|
console.error("Version not passed to create-gitea-release.js");
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
import fs from "fs-extra";
|
import fs from "fs-extra";
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import { spawnSync } from "child_process";
|
import { spawnSync } from "child_process";
|
||||||
@@ -11,15 +12,6 @@ import fetch from "node-fetch";
|
|||||||
import dotenv from "dotenv";
|
import dotenv from "dotenv";
|
||||||
dotenv.config({ path: "./.env" });
|
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
|
// Resolve the directory of the current script
|
||||||
const __filename = fileURLToPath(import.meta.url);
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
const __dirname = path.dirname(__filename);
|
const __dirname = path.dirname(__filename);
|
||||||
@@ -32,47 +24,64 @@ let buildNumber = "0";
|
|||||||
try {
|
try {
|
||||||
const rawBuild = fs.readFileSync(buildNumberPath, "utf8");
|
const rawBuild = fs.readFileSync(buildNumberPath, "utf8");
|
||||||
console.log("Raw build", rawBuild);
|
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) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
console.warn("BUILD_NUMBER file not found, defaulting to 0");
|
console.warn("BUILD_NUMBER file not found, defaulting to 0");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Compose full version string with build number
|
|
||||||
const fullVersion = `${version}.${buildNumber}`;
|
const fullVersion = `${version}.${buildNumber}`;
|
||||||
|
|
||||||
const { GITEA_URL, GITEA_USERNAME, GITEA_REPO, GITEA_TOKEN } = process.env;
|
const { GITEA_URL, GITEA_USERNAME, GITEA_REPO, GITEA_TOKEN } = process.env;
|
||||||
|
|
||||||
if (!GITEA_URL || !GITEA_USERNAME || !GITEA_REPO || !GITEA_TOKEN) {
|
if (!GITEA_URL || !GITEA_USERNAME || !GITEA_REPO || !GITEA_TOKEN) {
|
||||||
console.error(
|
console.error("Missing required environment variables");
|
||||||
"Missing required environment variables (GITEA_URL, GITEA_USERNAME, GITEA_REPO, GITEA_TOKEN)"
|
|
||||||
);
|
|
||||||
process.exit(1);
|
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 createOrUpdateRelease = async () => {
|
||||||
const tagName = `v${version}`;
|
const tagName = `v${version}`;
|
||||||
const apiBase = `https://${GITEA_URL}/api/v1/repos/${GITEA_USERNAME}/${GITEA_REPO}`;
|
const apiBase = `https://${GITEA_URL}/api/v1/repos/${GITEA_USERNAME}/${GITEA_REPO}`;
|
||||||
|
|
||||||
// Check if release exists
|
|
||||||
const existing = await fetch(`${apiBase}/releases/tags/${tagName}`, {
|
const existing = await fetch(`${apiBase}/releases/tags/${tagName}`, {
|
||||||
headers: { Authorization: `token ${GITEA_TOKEN}` },
|
headers: { Authorization: `token ${GITEA_TOKEN}` },
|
||||||
});
|
});
|
||||||
|
|
||||||
let release;
|
let release;
|
||||||
|
|
||||||
if (existing.ok) {
|
if (existing.ok) {
|
||||||
const existingRelease = await existing.json();
|
const existingRelease = await existing.json();
|
||||||
console.log(`Release ${tagName} already exists. Updating it.`);
|
console.log(`Release ${tagName} already exists. Updating it.`);
|
||||||
|
|
||||||
// Update existing release
|
|
||||||
const updateResponse = await fetch(
|
const updateResponse = await fetch(
|
||||||
`${apiBase}/releases/${existingRelease.id}`,
|
`${apiBase}/releases/${existingRelease.id}`,
|
||||||
{
|
{
|
||||||
@@ -100,7 +109,6 @@ const createOrUpdateRelease = async () => {
|
|||||||
release = await updateResponse.json();
|
release = await updateResponse.json();
|
||||||
console.log("Release updated:", release.html_url || release.url);
|
console.log("Release updated:", release.html_url || release.url);
|
||||||
} else if (existing.status === 404) {
|
} else if (existing.status === 404) {
|
||||||
// Release doesn't exist — create it
|
|
||||||
const createResponse = await fetch(`${apiBase}/releases`, {
|
const createResponse = await fetch(`${apiBase}/releases`, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
headers: {
|
headers: {
|
||||||
@@ -135,78 +143,7 @@ const createOrUpdateRelease = async () => {
|
|||||||
return release;
|
return release;
|
||||||
};
|
};
|
||||||
|
|
||||||
const release = await createOrUpdateRelease();
|
// Step 4: Upload asset
|
||||||
|
|
||||||
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
|
|
||||||
const uploadAsset = async (release) => {
|
const uploadAsset = async (release) => {
|
||||||
const apiUrl = `https://${GITEA_URL}/api/v1/repos/${GITEA_USERNAME}/${GITEA_REPO}/releases/assets?tag=${release.tag_name}`;
|
const apiUrl = `https://${GITEA_URL}/api/v1/repos/${GITEA_USERNAME}/${GITEA_REPO}/releases/assets?tag=${release.tag_name}`;
|
||||||
const filePath = `releases/release-${fullVersion}.zip`;
|
const filePath = `releases/release-${fullVersion}.zip`;
|
||||||
@@ -241,9 +178,10 @@ const uploadAsset = async (release) => {
|
|||||||
console.log("Asset uploaded:", asset.browser_download_url || asset.url);
|
console.log("Asset uploaded:", asset.browser_download_url || asset.url);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Run everything
|
||||||
(async () => {
|
(async () => {
|
||||||
try {
|
try {
|
||||||
const release = await createRelease();
|
const release = await createOrUpdateRelease();
|
||||||
await uploadAsset(release);
|
await uploadAsset(release);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error(err);
|
||||||
|
|||||||
Reference in New Issue
Block a user