Add runner ci (test)
This commit is contained in:
136
tools/resolve-release-version.js
Normal file
136
tools/resolve-release-version.js
Normal file
@@ -0,0 +1,136 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const rootDir = path.resolve(__dirname, '..');
|
||||
const packageJsonPath = path.join(rootDir, 'package.json');
|
||||
|
||||
function parseArgs(argv) {
|
||||
const args = {};
|
||||
|
||||
for (let index = 0; index < argv.length; index += 1) {
|
||||
const token = argv[index];
|
||||
|
||||
if (!token.startsWith('--')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
const key = token.slice(2);
|
||||
const nextToken = argv[index + 1];
|
||||
|
||||
if (!nextToken || nextToken.startsWith('--')) {
|
||||
args[key] = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
args[key] = nextToken;
|
||||
index += 1;
|
||||
}
|
||||
|
||||
return args;
|
||||
}
|
||||
|
||||
function normalizeVersion(rawValue) {
|
||||
if (typeof rawValue !== 'string') {
|
||||
return null;
|
||||
}
|
||||
|
||||
const trimmedValue = rawValue.trim();
|
||||
|
||||
if (!trimmedValue) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return trimmedValue.replace(/^v/i, '').split('+')[0] || null;
|
||||
}
|
||||
|
||||
function parseVersion(rawValue) {
|
||||
const normalized = normalizeVersion(rawValue);
|
||||
|
||||
if (!normalized) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const match = normalized.match(/^(\d+)\.(\d+)\.(\d+)(?:-[0-9A-Za-z.-]+)?$/);
|
||||
|
||||
if (!match) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return {
|
||||
major: Number.parseInt(match[1], 10),
|
||||
minor: Number.parseInt(match[2], 10),
|
||||
patch: Number.parseInt(match[3], 10)
|
||||
};
|
||||
}
|
||||
|
||||
function resolveBaseVersion() {
|
||||
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
||||
const parsedVersion = parseVersion(packageJson.version);
|
||||
|
||||
if (!parsedVersion) {
|
||||
throw new Error(`package.json version must be a full semver string. Received: ${packageJson.version}`);
|
||||
}
|
||||
|
||||
return parsedVersion;
|
||||
}
|
||||
|
||||
function resolveReleaseVersion(args) {
|
||||
const explicitVersion = normalizeVersion(args.version || process.env.RELEASE_VERSION);
|
||||
|
||||
if (explicitVersion) {
|
||||
return explicitVersion;
|
||||
}
|
||||
|
||||
const baseVersion = resolveBaseVersion();
|
||||
const rawRunNumber = args['run-number'] || process.env.GITHUB_RUN_NUMBER || process.env.GITEA_RUN_NUMBER;
|
||||
const parsedRunNumber = Number.parseInt(String(rawRunNumber || '').trim(), 10);
|
||||
|
||||
if (Number.isFinite(parsedRunNumber) && parsedRunNumber > 0) {
|
||||
return `${baseVersion.major}.${baseVersion.minor}.${baseVersion.patch + parsedRunNumber}`;
|
||||
}
|
||||
|
||||
return `${baseVersion.major}.${baseVersion.minor}.${baseVersion.patch}`;
|
||||
}
|
||||
|
||||
function appendOutputLine(outputPath, key, value) {
|
||||
fs.appendFileSync(outputPath, `${key}=${value}\n`, 'utf8');
|
||||
}
|
||||
|
||||
function main() {
|
||||
const args = parseArgs(process.argv.slice(2));
|
||||
const version = resolveReleaseVersion(args);
|
||||
const tag = typeof args.tag === 'string' && args.tag.trim().length > 0
|
||||
? args.tag.trim()
|
||||
: `v${version}`;
|
||||
const result = {
|
||||
release_name: `MetoYou ${version}`,
|
||||
release_tag: tag,
|
||||
release_version: version
|
||||
};
|
||||
|
||||
if (args['write-output']) {
|
||||
if (!process.env.GITHUB_OUTPUT) {
|
||||
throw new Error('GITHUB_OUTPUT is not set.');
|
||||
}
|
||||
|
||||
appendOutputLine(process.env.GITHUB_OUTPUT, 'release_version', result.release_version);
|
||||
appendOutputLine(process.env.GITHUB_OUTPUT, 'release_tag', result.release_tag);
|
||||
appendOutputLine(process.env.GITHUB_OUTPUT, 'release_name', result.release_name);
|
||||
}
|
||||
|
||||
if (args.json) {
|
||||
console.log(JSON.stringify(result, null, 2));
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(result.release_version);
|
||||
}
|
||||
|
||||
try {
|
||||
main();
|
||||
} catch (error) {
|
||||
const message = error instanceof Error ? error.message : String(error);
|
||||
|
||||
console.error(`[release-version] ${message}`);
|
||||
process.exitCode = 1;
|
||||
}
|
||||
Reference in New Issue
Block a user