// 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 repository = 'dungeonslayers/tickwerk'; const gitlabURL = 'https://git.f3l.de'; const getLicenseURL = (version) => `${gitlabURL}/${repository}/-/raw/${version}/LICENSE.md`; const getReadmeURL = (version) => `${gitlabURL}/${repository}/-/raw/${version}/README.md`; const getChangelogURL = (version) => `${gitlabURL}/${repository}/-/releases/${version}`; const getDownloadURL = (version) => `${gitlabURL}/${repository}/-/releases/${version}/downloads/module.zip`; const manifestPath = './module.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: 2 }); manifest.license = getLicenseURL(targetVersion); manifest.readme = getReadmeURL(targetVersion); manifest.changelog = getChangelogURL(targetVersion); manifest.version = targetVersion; manifest.download = getDownloadURL(targetVersion); fs.writeJSONSync(manifestPath, manifest, { spaces: 2 }); } 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);