// SPDX-FileCopyrightText: 2021 Johannes Loher // // SPDX-License-Identifier: MIT import fs from "fs-extra"; import semver from "semver"; import yargs from "yargs"; import { hideBin } from "yargs/helpers"; const getDownloadURL = (version) => `https://git.f3l.de/dungeonslayers/ds4/-/releases/${version}/downloads/ds4.zip`; const getChangelogURL = (version) => `https://git.f3l.de/dungeonslayers/ds4/-/releases/${version}`; const manifestPath = "./system.json"; /** * Get the contents of the manifest file as object. * @returns {unknown} An object describing the manifest */ function getManifest() { if (fs.existsSync(manifestPath)) { return fs.readJSONSync(manifestPath); } } /** * Get the target version based on on the current version and the argument passed as release. * @param {string} currentVersion The current version * @param {semver.ReleaseType | string} release Either a semver release type or a valid semver version * @returns {string | null} The target version */ function getTargetVersion(currentVersion, release) { if (["major", "premajor", "minor", "preminor", "patch", "prepatch", "prerelease"].includes(release)) { return semver.inc(currentVersion, release); } else { return semver.valid(release); } } /** * Update version and download URL. * @param {semver.ReleaseType | string} release Either a semver release type or a valid semver version */ function bumpVersion(release) { if (!release) { throw new Error("Missing release type"); } const packageJson = fs.readJSONSync("package.json"); const manifest = getManifest(); if (!manifest) throw new Error("Manifest JSON not found"); const currentVersion = packageJson.version; const targetVersion = getTargetVersion(currentVersion, release); if (!targetVersion) { throw new Error("Incorrect version arguments"); } if (targetVersion === currentVersion) { throw new Error("Target version is identical to current version"); } console.log(`Bumping version number to '${targetVersion}'`); packageJson.version = targetVersion; fs.writeJSONSync("package.json", packageJson, { spaces: 4 }); manifest.version = targetVersion; manifest.download = getDownloadURL(targetVersion); manifest.changelog = getChangelogURL(targetVersion); fs.writeJSONSync(manifestPath, manifest, { spaces: 4 }); } const argv = yargs(hideBin(process.argv)).usage("Usage: $0").option("release", { alias: "r", type: "string", demandOption: true, description: "Either a semver release type or a valid semver version", }).argv; const release = argv.r; bumpVersion(release);