import { create } from 'xmlbuilder2'; import releases from './releases.json'; import fs from 'fs'; import commandLineArgs from 'command-line-args'; const templateMetadata = ` MIT MPL-2.0 app.zen_browser.zen Zen Stay focused, browse faster Zen Team io.github.zen_browser.zen

Zen is the best way to browse the web. Beautifully designed, privacy-focused, and packed with features. We care about your experience, not your data.

https://zen-browser.app https://github.com/zen-browser/desktop/issues https://docs.zen-browser.app https://docs.zen-browser.app/faq https://www.patreon.com/zen_browser https://crowdin.com/project/zen-browser https://discord.gg/zen-browser https://github.com/zen-browser https://docs.zen-browser.app/contribute/CONTRIBUTING #d9d9d9 #f5f5f5 https://raw.githubusercontent.com/zen-browser/www/refs/heads/main/src/assets/browser.png https://raw.githubusercontent.com/zen-browser/www/refs/heads/main/src/assets/browser-splitview.png https://raw.githubusercontent.com/zen-browser/www/refs/heads/main/src/assets/browser-compactmode.png app.zen_browser.zen.desktop 450 always pointing keyboard
`; const metadata = create(templateMetadata); interface Releases { [version: string]: { date: string; } } function createReleasesTag(releases: Releases) { let releasesTag = metadata.root().ele('releases'); for (const [version, release] of Object.entries(releases).map((val) => val).reverse()) { releasesTag = releasesTag.ele('release', { version , date: release.date }) .ele('url', { type: 'details' }) .txt(`https://zen-browser.app/release-notes/${version}`) .up() .up(); } } function createAndPushNewRelease(version: string): Releases { const date = new Date(); const dateStr = date.toISOString(); const releasesCopy: Releases = { ...releases }; releasesCopy[version] = { date: dateStr }; fs.writeFileSync(__dirname + '/releases.json', JSON.stringify(releasesCopy, null, 4)); console.log(`New release ${version} added! (${__dirname}/releases.json)`); return releasesCopy; } const optionDefinitions = [ { name: 'version', alias: 'v', type: String }, ] function main() { const options = commandLineArgs(optionDefinitions); if (!options.version) { console.error('version is required!'); return; } const releases = createAndPushNewRelease(options.version); createReleasesTag(releases); const xml = metadata.end({ prettyPrint: true }); // write to releases.xml fs.writeFileSync('releases.xml', xml); } main();