ci(default): added in default configs so they work across everything

This commit is contained in:
2025-07-12 15:59:33 -05:00
parent 2c265d79cb
commit 8cb416ecc8
2 changed files with 132 additions and 97 deletions

28
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,28 @@
{
"editor.defaultFormatter": "esbenp.prettier-vscode",
"workbench.colorTheme": "Default Dark+",
"prettier.tabWidth": 4,
"terminal.integrated.env.windows": {},
"editor.formatOnSave": true,
"[javascript]": {
"editor.formatOnSave": true
},
"[javascriptreact]": {
"editor.formatOnSave": true
},
"[typescript]": {
"editor.formatOnSave": true
},
"[typescriptreact]": {
"editor.formatOnSave": true
},
"[json]": {
"editor.formatOnSave": true
},
"[graphql]": {
"editor.formatOnSave": true
},
"[handlebars]": {
"editor.formatOnSave": true
}
}

View File

@@ -3,18 +3,20 @@ if (!version) {
console.error("Version not passed to create-gitea-release.js");
process.exit(1);
}
import fs from 'fs-extra';
import { spawnSync } from 'child_process';
import fetch from 'node-fetch';
import dotenv from 'dotenv';
dotenv.config({ path: './.env' });
import fs from "fs-extra";
import path from "path";
import { spawnSync } from "child_process";
import { fileURLToPath } from "url";
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');
console.error("Version not found in package.json");
process.exit(1);
}
@@ -23,15 +25,15 @@ const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
// Absolute path to BUILD_NUMBER
const buildNumberPath = path.resolve(__dirname, '../BUILD_NUMBER');
const buildNumberPath = path.resolve(__dirname, "../BUILD_NUMBER");
// Load build number from BUILD_NUMBER file
let buildNumber = '0';
let buildNumber = "0";
try {
rawBuild = (await fs.readFile(buildNumberPath, 'utf8')).trim();
console.log("Raw build" ,rawBuild)
rawBuild = (await fs.readFile(buildNumberPath, "utf8")).trim();
console.log("Raw build", rawBuild);
if (rawBuild) {
const [numPart, namePart] = rawBuild.split('-');
const [numPart, namePart] = rawBuild.split("-");
const num = parseInt(numPart, 10);
if (!isNaN(num) && namePart) {
@@ -39,45 +41,46 @@ try {
}
}
} catch {
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 {
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) {
console.error('Missing required environment variables (GITEA_URL, GITEA_USERNAME, GITEA_REPO, GITEA_TOKEN)');
console.error(
"Missing required environment variables (GITEA_URL, GITEA_USERNAME, GITEA_REPO, GITEA_TOKEN)"
);
process.exit(1);
}
// 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 });
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');
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 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`);
@@ -94,21 +97,23 @@ const createRelease = async () => {
};
const response = await fetch(apiUrl, {
method: 'POST',
method: "POST",
headers: {
Authorization: `token ${GITEA_TOKEN}`,
'Content-Type': 'application/json',
"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}`);
throw new Error(
`Failed to create release: ${response.status} - ${errorText}`
);
}
const release = await response.json();
console.log('Release created:', release.html_url || release.url);
console.log("Release created:", release.html_url || release.url);
return release;
};
@@ -117,18 +122,18 @@ 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`;
if (!await fs.pathExists(filePath)) {
if (!(await fs.pathExists(filePath))) {
console.warn(`Zip file not found: ${filePath}. Skipping asset upload.`);
return;
}
const FormData = (await import('form-data')).default;
const FormData = (await import("form-data")).default;
const form = new FormData();
form.append('name', `release-${fullVersion}.zip`);
form.append('attachment', fs.createReadStream(filePath));
form.append("name", `release-${fullVersion}.zip`);
form.append("attachment", fs.createReadStream(filePath));
const response = await fetch(apiUrl, {
method: 'POST',
method: "POST",
headers: {
Authorization: `token ${GITEA_TOKEN}`,
...form.getHeaders(),
@@ -138,11 +143,13 @@ const uploadAsset = async (release) => {
if (!response.ok) {
const errorText = await response.text();
throw new Error(`Failed to upload asset: ${response.status} - ${errorText}`);
throw new Error(
`Failed to upload asset: ${response.status} - ${errorText}`
);
}
const asset = await response.json();
console.log('Asset uploaded:', asset.browser_download_url || asset.url);
console.log("Asset uploaded:", asset.browser_download_url || asset.url);
};
(async () => {