mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-06 20:10:12 +02:00
57 lines
2.0 KiB
JavaScript
57 lines
2.0 KiB
JavaScript
import { XMLBuilder, XMLParser } from 'fast-xml-parser';
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
|
|
const args = process.argv.slice(2);
|
|
|
|
// Parse flags and positional arguments
|
|
const flags = args.filter((arg) => arg.startsWith('--'));
|
|
const positionalArgs = args.filter((arg) => !arg.startsWith('--'));
|
|
const replaceIfVersionMissing = flags.includes('--replace-if-version-missing');
|
|
|
|
if (positionalArgs.length > 3) {
|
|
console.error(
|
|
'Usage: node update-app-stream.js [package-file] [date] [metainfo-file] [--replace-if-version-missing]',
|
|
);
|
|
process.exit(1);
|
|
}
|
|
|
|
const packageFile = positionalArgs[0] || path.resolve(process.cwd(), 'package.json');
|
|
|
|
const packageContent = fs.readFileSync(packageFile, 'utf8');
|
|
const packageJson = JSON.parse(packageContent);
|
|
const version = packageJson.version;
|
|
|
|
const time = Math.floor((Date.parse(positionalArgs[1]) || Date.now()) / 1000);
|
|
const metainfoFile =
|
|
positionalArgs[2] || path.resolve(process.cwd(), 'org.jeffvli.feishin.metainfo.xml');
|
|
|
|
const parser = new XMLParser({ ignoreAttributes: false });
|
|
const metainfoContent = fs.readFileSync(metainfoFile, 'utf8');
|
|
const metainfo = parser.parse(metainfoContent);
|
|
|
|
const newRelease = {
|
|
'@_date': new Date(time * 1000).toISOString().split('T')[0],
|
|
'@_type': version.includes('-') ? 'development' : 'stable',
|
|
'@_version': version,
|
|
};
|
|
|
|
if (replaceIfVersionMissing) {
|
|
// Replace all releases with only the current version
|
|
metainfo.component.releases.release = [newRelease];
|
|
} else {
|
|
// Default behavior: add new release if it doesn't exist
|
|
const releaseExists =
|
|
metainfo.component.releases.release.findIndex(
|
|
(release) => release['@_version'] === version,
|
|
) !== -1;
|
|
if (!releaseExists) {
|
|
metainfo.component.releases.release.unshift(newRelease);
|
|
}
|
|
}
|
|
|
|
const builder = new XMLBuilder({ format: true, ignoreAttributes: false, indentBy: ' ' });
|
|
fs.writeFileSync(metainfoFile, builder.build(metainfo), 'utf8');
|
|
|
|
console.log(`Updated ${metainfoFile} with version ${version}`);
|