diff --git a/gulpfile.js b/gulpfile.js index b514d982..5cde0f94 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -42,22 +42,6 @@ gulp.task('setupNpm', function () { setIosNpmOrDev('npm') }) -// TODO: does not work. need to revise and update package.json -> semantic-release -gulp.task('update-plugin-xml-version', function () { - // first match only! - var PLUGIN_XML_VERSION_REGEX = /^\s*version=\"[\d\.]*\"\>$/m // eslint-disable-line - var versionNumber = require('./package.json').version - - // this will break if plugin.xml is not formatted exactly as we expect - // so you might end up needing to fix the regex - for (var target of [ '.xml', '.template.xml' ]) { - var pluginXML = fs.readFileSync('plugin' + target, 'utf8') - var newVersionXML = ` version="${versionNumber}">` - pluginXML = pluginXML.replace(PLUGIN_XML_VERSION_REGEX, newVersionXML) - fs.writeFileSync('plugin' + target, pluginXML) - } -}) - function getDevPluginXML () { // generate plugin.xml for local development // here we reference the frameworks instead of all the files directly diff --git a/package.json b/package.json index d3816b82..7dad8756 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "scripts": { "commitmsg": "validate-commit-msg", "prerelease": "gulp prod", - "semantic-release": "semantic-release pre && gulp update-plugin-xml-version && npm publish && semantic-release post" + "semantic-release": "semantic-release pre --verifyRelease='./src/scripts/npm/nodeVersion' && npm publish && semantic-release post" }, "dependencies": { "mkpath": "^1.0.0", diff --git a/plugin.template.xml b/plugin.template.xml index 25c5010e..68d4da5e 100644 --- a/plugin.template.xml +++ b/plugin.template.xml @@ -47,8 +47,8 @@ SOFTWARE. - - + + diff --git a/plugin.xml b/plugin.xml index 01f82363..5ecadd04 100644 --- a/plugin.xml +++ b/plugin.xml @@ -47,8 +47,8 @@ SOFTWARE. - - + + diff --git a/src/scripts/lib/android/androidManifest.js b/src/scripts/android/androidManifest.js similarity index 99% rename from src/scripts/lib/android/androidManifest.js rename to src/scripts/android/androidManifest.js index 221a89a1..079ded0d 100644 --- a/src/scripts/lib/android/androidManifest.js +++ b/src/scripts/android/androidManifest.js @@ -2,7 +2,7 @@ // properties 'use strict' var path = require('path') - var xmlHelper = require('../sdk/xmlHelper.js') + var xmlHelper = require('../lib/xmlHelper.js') // entry module.exports = { @@ -25,7 +25,7 @@ manifest = updateBranchAppLinks(manifest, mainActivityIndex, preferences) // save new version of the AndroidManifest - xmlHelper.writeJsonAsXml(manifest, pathToManifest) + xmlHelper.writeJsonAsXml(pathToManifest, manifest) } // adds to for Branch init and testmode: diff --git a/src/scripts/afterPrepare.js b/src/scripts/hooks/afterPrepare.js similarity index 66% rename from src/scripts/afterPrepare.js rename to src/scripts/hooks/afterPrepare.js index ea20110a..613f089e 100644 --- a/src/scripts/afterPrepare.js +++ b/src/scripts/hooks/afterPrepare.js @@ -1,12 +1,12 @@ (function () { // properties 'use strict' - var configPrefrences = require('./lib/sdk/configXml.js') - var iosPlist = require('./lib/ios/plist.js') - var iosCapabilities = require('./lib/ios/capabilities.js') - var iosAssociatedDomains = require('./lib/ios/associatedDomains.js') - var iosDevelopmentTeam = require('./lib/ios/developmentTeam.js') - var androidManifest = require('./lib/android/androidManifest.js') + var configPrefrences = require('../sdk/configXml.js') + var iosPlist = require('../ios/plist.js') + var iosCapabilities = require('../ios/capabilities.js') + var iosAssociatedDomains = require('../ios/associatedDomains.js') + var iosDevelopmentTeam = require('../ios/developmentTeam.js') + var androidManifest = require('../android/androidManifest.js') var IOS = 'ios' var ANDROID = 'android' diff --git a/src/scripts/beforePluginInstall.js b/src/scripts/hooks/beforePluginInstall.js similarity index 74% rename from src/scripts/beforePluginInstall.js rename to src/scripts/hooks/beforePluginInstall.js index aa393afe..280c89a7 100644 --- a/src/scripts/beforePluginInstall.js +++ b/src/scripts/hooks/beforePluginInstall.js @@ -1,7 +1,7 @@ (function () { // properties 'use strict' - var nodeDependencies = require('./lib/npm/nodeDependencies.js') + var nodeDependencies = require('../npm/nodeDependencies.js') // entry module.exports = run diff --git a/src/scripts/lib/ios/associatedDomains.js b/src/scripts/ios/associatedDomains.js similarity index 100% rename from src/scripts/lib/ios/associatedDomains.js rename to src/scripts/ios/associatedDomains.js diff --git a/src/scripts/lib/ios/capabilities.js b/src/scripts/ios/capabilities.js similarity index 100% rename from src/scripts/lib/ios/capabilities.js rename to src/scripts/ios/capabilities.js diff --git a/src/scripts/lib/ios/developmentTeam.js b/src/scripts/ios/developmentTeam.js similarity index 100% rename from src/scripts/lib/ios/developmentTeam.js rename to src/scripts/ios/developmentTeam.js diff --git a/src/scripts/lib/ios/plist.js b/src/scripts/ios/plist.js similarity index 100% rename from src/scripts/lib/ios/plist.js rename to src/scripts/ios/plist.js diff --git a/src/scripts/lib/fileHelper.js b/src/scripts/lib/fileHelper.js new file mode 100644 index 00000000..1b38967f --- /dev/null +++ b/src/scripts/lib/fileHelper.js @@ -0,0 +1,29 @@ +(function () { + // properties + 'use strict' + var fs = require('fs') + + // entry + module.exports = { + readFile: readFile, + writeFile: writeFile + } + + // read file + function readFile (file) { + try { + return fs.readFileSync(file, 'utf8') + } catch (err) { + throw new Error('BRANCH SDK: Cannot read file ' + file) + } + } + + // write file + function writeFile (file, content) { + try { + fs.writeFileSync(file, content, 'utf8') + } catch (err) { + throw new Error('BRANCH SDK: Cannot write file ' + file + ' with content ' + content) + } + } +})() diff --git a/src/scripts/lib/sdk/xmlHelper.js b/src/scripts/lib/xmlHelper.js old mode 100755 new mode 100644 similarity index 64% rename from src/scripts/lib/sdk/xmlHelper.js rename to src/scripts/lib/xmlHelper.js index fb51bc15..5d58f5d9 --- a/src/scripts/lib/sdk/xmlHelper.js +++ b/src/scripts/lib/xmlHelper.js @@ -11,35 +11,37 @@ } // read from xml file - function readXmlAsJson (filePath) { + function readXmlAsJson (file) { var xmlData var xmlParser var parsedData try { - xmlData = fs.readFileSync(filePath) + xmlData = fs.readFileSync(file) xmlParser = new xml2js.Parser() xmlParser.parseString(xmlData, function (err, data) { if (!err && data) { parsedData = data } }) - } catch (err) {} + } catch (err) { + throw new Error('BRANCH SDK: Cannot write file ' + file) + } return parsedData } // write to xml file - function writeJsonAsXml (jsData, filePath, options) { + function writeJsonAsXml (file, content, options) { var xmlBuilder = new xml2js.Builder(options) - var changedXmlData = xmlBuilder.buildObject(jsData) + var changedXmlData = xmlBuilder.buildObject(content) var isSaved = true try { - fs.writeFileSync(filePath, changedXmlData) + fs.writeFileSync(file, changedXmlData) } catch (err) { - console.error(err) isSaved = false + throw new Error('BRANCH SDK: Cannot write file ' + file) } return isSaved diff --git a/src/scripts/lib/npm/nodeDependencies.js b/src/scripts/npm/nodeDependencies.js similarity index 100% rename from src/scripts/lib/npm/nodeDependencies.js rename to src/scripts/npm/nodeDependencies.js diff --git a/src/scripts/npm/nodeVersion.js b/src/scripts/npm/nodeVersion.js new file mode 100644 index 00000000..19fd9d05 --- /dev/null +++ b/src/scripts/npm/nodeVersion.js @@ -0,0 +1,59 @@ +(function () { + var path = require('path') + var fileHelper = require('../lib/fileHelper.js') + var FILES = ['package.json', 'plugin.xml', 'plugin.template.xml'] + + module.exports = updateNpmVersion + + // updates the npm version in semantic-release pre + function updateNpmVersion (pluginConfig, config, callback) { + var files = readFilePaths(FILES) + var version = config.nextRelease.version + + for (var i = 0; i < files.length; i++) { + var file = files[i] + var content = readContent(file) + + content = updateVersion(file, content, version) + saveContent(file, content) + } + } + + function readContent (file) { + return isFileXml(file) ? fileHelper.readFile(file) : JSON.parse(fileHelper.readFile(file)) + } + + function updateVersion (file, content, version) { + var prev = /id="branch-cordova-sdk"[\s]*version="\d+\.\d+\.\d+"/mgi + var next = 'id="branch-cordova-sdk"\n version="' + version + '"' + + try { + if (isFileXml(file)) { + content = content.replace(prev, next) + } else { + content.version = version + } + } catch (e) { + throw new Error('BRANCH SDK: update to update npm version with file ' + file) + } + return content + } + + function saveContent (file, content) { + return isFileXml(file) ? fileHelper.writeFile(file, content) : fileHelper.writeFile(file, JSON.stringify(content, null, 2)) + } + + function isFileXml (file) { + return file.indexOf('xml') > 0 + } + + function readFilePaths (files) { + var locations = [] + for (var i = 0; i < files.length; i++) { + var file = files[i] + var location = path.join(__dirname, '../../../', file) + locations.push(location) + } + return locations + } +})() diff --git a/src/scripts/lib/sdk/configXml.js b/src/scripts/sdk/configXml.js similarity index 99% rename from src/scripts/lib/sdk/configXml.js rename to src/scripts/sdk/configXml.js index 74e84995..0563ed39 100644 --- a/src/scripts/lib/sdk/configXml.js +++ b/src/scripts/sdk/configXml.js @@ -2,7 +2,7 @@ // properties 'use strict' var path = require('path') - var xmlHelper = require('./xmlHelper.js') + var xmlHelper = require('../lib/xmlHelper.js') // entry module.exports = {