import { create } from 'xmlbuilder2'; import releases from './releases.json'; import fs from 'fs'; import commandLineArgs from 'command-line-args'; const templateMetadata = ` io.github.zen_browser.zen https://get-zen.vercel.app Zen Team Zen Browser A fast, beautifull browser MIT MPL-2.0

Zen Browser is a firefox based browser that will change the way you surf the web!

  • Split views
  • Web Sidebar
  • Tab Groups
  • Customizable UI
  • Vertical Tabs
  • And more...
io.github.zen_browser.zen.desktop https://raw.githubusercontent.com/zen-browser/www/main/public/browser-1.png https://raw.githubusercontent.com/zen-browser/www/main/public/browser-2.png https://raw.githubusercontent.com/zen-browser/www/main/public/browser-3.png https://raw.githubusercontent.com/zen-browser/www/main/public/browser-4.png #d9d9d9 #f5f5f5
`; const metadata = create(templateMetadata); interface Releases { [version: string]: { date: string; } } function createReleasesTag(releases: Releases) { const releasesTag = metadata.root().ele('releases'); for (const [version, release] of Object.entries(releases)) { releasesTag.ele('release', { version , date: release.date }) .ele('url', { type: 'details' }) .txt(`https://zen-browser.app/release-notes/${version}`); } } function createAndPushNewRelease(version: string) { const date = new Date(); const dateStr = date.toLocaleDateString('en-US', { year: 'numeric', month: '2-digit', day: '2-digit' }); const releasesCopy: Releases = { ...releases }; releasesCopy[version] = { date: dateStr }; createReleasesTag(releases); fs.writeFileSync(__dirname + '/releases.json', JSON.stringify(releasesCopy, null, 4)); console.log(`New release ${version} added! (${__dirname}/releases.json)`); return date; } const optionDefinitions = [ { name: 'version', alias: 'v', type: String }, ] function main() { const options = commandLineArgs(optionDefinitions); if (!options.version) { console.error('version is required!'); return; } createAndPushNewRelease(options.version); createReleasesTag(releases); const xml = metadata.end({ prettyPrint: true }); // write to releases.xml fs.writeFileSync('releases.xml', xml); } main();