UNPKG

releasy-mono

Version:

CLI tool to release node applications with tag and auto semver bump

80 lines (63 loc) 2.62 kB
require('shelljs/global'); var semver = require('semver'); module.exports = function(filePath) { if (!test('-e', filePath)) { throw new Error("Version file not found: " + filePath); } this.filePath = filePath; function getRegexFor(attributeName) { return new RegExp('\\[assembly:\\s*' + attributeName + '\\s*\\(\\s*"(.+)"\\s*\\)\\s*\\]', 'g'); } function getPredominantLineEnding(text) { var crlfs = text.match(/\r\n/g); crlfs = crlfs ? crlfs.length : 0; var lfs = text.match(/n/g); var lfs = lfs ? lfs.length : 0; lfs = lfs - crlfs; if (crlfs == lfs) return require('os').EOL; if (lfs > crlfs) return '\n'; else return '\r\n'; } function replaceOrAppend(text, attributeName, replacement) { var pattern = getRegexFor(attributeName); return pattern.test(text) ? text.replace(pattern, replacement) : appendAttribute(text, replacement); } function appendAttribute(text, attribute) { var lineEnding = getPredominantLineEnding(text); if(text[text.length-1] == '\n') return text + attribute + lineEnding; else return text + lineEnding + attribute + lineEnding; } this.readVersion = function() { var assemblyInfo = cat(this.filePath); var versionMatch = getRegexFor('AssemblyInformationalVersion').exec(assemblyInfo); if (versionMatch === null) versionMatch = getRegexFor('AssemblyFileVersion').exec(assemblyInfo); if (versionMatch === null) versionMatch = getRegexFor('AssemblyVersion').exec(assemblyInfo); if (versionMatch === null) throw new Error("Could not find version information in file " + this.filePath); return semver(versionMatch[1]); }; this.writeVersion = function(newVersion) { newVersion = newVersion.format ? newVersion.format() : newVersion; var indexOfPrerelease = newVersion.indexOf('-'); var versionWithoutPrerelease = indexOfPrerelease > 0 ? newVersion.substr(0, indexOfPrerelease) : newVersion; var assemblyInfo = cat(this.filePath); assemblyInfo = replaceOrAppend(assemblyInfo, 'AssemblyVersion', '[assembly: AssemblyVersion("' + versionWithoutPrerelease + '")]'); assemblyInfo = replaceOrAppend(assemblyInfo, 'AssemblyFileVersion', '[assembly: AssemblyFileVersion("' + versionWithoutPrerelease + '")]'); assemblyInfo = replaceOrAppend(assemblyInfo, 'AssemblyInformationalVersion', '[assembly: AssemblyInformationalVersion("' + newVersion + '")]'); assemblyInfo.to(this.filePath); }; }; module.exports.supports = function(filePath) { return /\.cs$/.test(filePath); }