From 80058373029ff6d5187f274f20ddced393c7b13d Mon Sep 17 00:00:00 2001 From: "Mike P. Sinn" Date: Sun, 1 Nov 2020 11:32:28 -0600 Subject: [PATCH 1/3] Use qmHelpers in gulpfile --- gulpfile.js | 385 ++++++---------------------------------------------- 1 file changed, 42 insertions(+), 343 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index ff41d3d2d0..3bf8f9ab98 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -157,110 +157,10 @@ var runSequence = require('run-sequence'); var AWS_ACCESS_KEY_ID = process.env.QM_AWS_ACCESS_KEY_ID || process.env.AWS_ACCESS_KEY_ID; // Netlify has their own var AWS_SECRET_ACCESS_KEY = process.env.QM_AWS_SECRET_ACCESS_KEY || process.env.AWS_SECRET_ACCESS_KEY; // Netlify has their own var s3Options = {accessKeyId: AWS_ACCESS_KEY_ID, secretAccessKey: AWS_SECRET_ACCESS_KEY}; -var qmLog = { - error: function (message, metaData, maxCharacters) { - metaData = qmLog.addMetaData(metaData); - console.error(qmLog.obfuscateStringify(message, metaData, maxCharacters)); - metaData.build_info = qmGulp.buildInfoHelper.getCurrentBuildInfo(); - bugsnag.notify(new Error(qmLog.obfuscateStringify(message), qmLog.obfuscateSecrets(metaData))); - }, - info: function (message, object, maxCharacters) { - if(typeof message !== "string"){ - object = message; - message = null; - } - console.log(qmLog.obfuscateStringify(message, object, maxCharacters)); - }, - debug: function (message, object, maxCharacters) { - if(isTruthy(process.env.BUILD_DEBUG || process.env.DEBUG_BUILD)){ - qmLog.info("DEBUG: " + message, object, maxCharacters); - } - }, - logErrorAndThrowException: function (message, object) { - qmLog.error(message, object); - throw message; - }, - addMetaData: function(metaData){ - metaData = metaData || {}; - metaData.environment = qmLog.obfuscateSecrets(process.env); - metaData.subsystem = { name: qmLog.getCurrentServerContext() }; - metaData.client_id = QUANTIMODO_CLIENT_ID; - metaData.build_link = qmGulp.buildInfoHelper.getBuildLink(); - return metaData; - }, - obfuscateStringify: function(message, object, maxCharacters) { - if(maxCharacters !== false){maxCharacters = maxCharacters || 140;} - var objectString = ''; - if(object){ - object = qmLog.obfuscateSecrets(object); - objectString = ': ' + qmLog.prettyJSONStringify(object); - } - if (maxCharacters !== false && objectString.length > maxCharacters) {objectString = objectString.substring(0, maxCharacters) + '...';} - message += objectString; - if(process.env.QUANTIMODO_CLIENT_SECRET){message = message.replace(process.env.QUANTIMODO_CLIENT_SECRET, 'HIDDEN');} - if(AWS_SECRET_ACCESS_KEY){message = message.replace(AWS_SECRET_ACCESS_KEY, 'HIDDEN');} - if(process.env.ENCRYPTION_SECRET){message = message.replace(process.env.ENCRYPTION_SECRET, 'HIDDEN');} - if(process.env.QUANTIMODO_ACCESS_TOKEN){message = message.replace(process.env.QUANTIMODO_ACCESS_TOKEN, 'HIDDEN');} - message = qmLog.obfuscateString(message); - return message; - }, - isSecretWord: function(propertyName){ - var lowerCaseProperty = propertyName.toLowerCase(); - return lowerCaseProperty.indexOf('secret') !== -1 || - lowerCaseProperty.indexOf('password') !== -1 || - lowerCaseProperty.indexOf('key') !== -1 || - lowerCaseProperty.indexOf('database') !== -1 || - lowerCaseProperty.indexOf('token') !== -1; - }, - obfuscateString: function(string){ - var env = process.env; - for (var propertyName in env) { - if (env.hasOwnProperty(propertyName)) { - if(qmLog.isSecretWord(propertyName)){ - string = string.replace(env[propertyName], '[SECURE]'); - } - } - } - return string; - }, - obfuscateSecrets: function(object){ - if(typeof object !== 'object'){return object;} - object = JSON.parse(JSON.stringify(object)); // Decouple so we don't screw up original object - for (var propertyName in object) { - if (object.hasOwnProperty(propertyName)) { - if(qmLog.isSecretWord(propertyName)){ - object[propertyName] = "[SECURE]"; - } else { - object[propertyName] = qmLog.obfuscateSecrets(object[propertyName]); - } - } - } - return object; - }, - getCurrentServerContext: function() { - if(process.env.CIRCLE_BRANCH){return "circleci";} - if(process.env.BUDDYBUILD_BRANCH){return "buddybuild";} - return process.env.HOSTNAME; - }, - prettyJSONStringify: function(object) {return JSON.stringify(object, null, '\t');}, - slugify: function(str){ - str = str.replace(/^\s+|\s+$/g, ''); // trim - str = str.toLowerCase(); - // remove accents, swap ñ for n, etc - var from = "àáäâèéëêìíïîòóöôùúüûñç·/_,:;"; - var to = "aaaaeeeeiiiioooouuuunc------"; - for (var i=0, l=from.length ; i Date: Sun, 1 Nov 2020 11:42:06 -0600 Subject: [PATCH 2/3] Use qmHelpers in gulpfile --- gulpfile.js | 41 ++----------------------------- src/js/qmHelpers.js | 60 ++++++++++++++++++++++++++++++++++++++------- 2 files changed, 53 insertions(+), 48 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 3bf8f9ab98..33c376bd8a 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -117,36 +117,7 @@ var appIds = { 'quantimodo': true, 'medimodo': true }; -var paths = { - apk: {//android\app\build\outputs\apk\release\app-release.apk - combinedRelease: "platforms/android/app/build/outputs/apk/release/app-release.apk", - combinedDebug: "platforms/android/app/build/outputs/apk/release/app-debug.apk", - arm7Release: "platforms/android/app/build/outputs/apk/release/app-arm7-release.apk", - x86Release: "platforms/android/app/build/outputs/apk/release/app-x86-release.apk", - outputFolder: "platforms/android/app/build/outputs/apk", - builtApk: null - }, - sass: ['./src/scss/**/*.scss'], - src:{ - devCredentials: "src/dev-credentials.json", - defaultPrivateConfig: "src/default.private_config.json", - icons: "src/img/icons", - firebase: "src/lib/firebase/**/*", - js: "src/js/*.js", - serviceWorker: "src/firebase-messaging-sw.js", - staticData: 'src/data/qmStaticData.js' - }, - www: { - devCredentials: "www/dev-credentials.json", - defaultPrivateConfig: "www/default.private_config.json", - icons: "www/img/icons", - firebase: "www/lib/firebase/", - js: "www/js/", - scripts: "www/scripts", - staticData: 'src/data/qmStaticData.js' - }, - chcpLogin: '.chcplogin' -}; +var paths = qm.buildInfoHelper.paths var argv = require('yargs').argv; var defaultRequestOptions = {strictSSL: false}; var fs = require('fs'); @@ -172,7 +143,6 @@ bugsnag.onBeforeNotify(function (notification) { metaData = qmLog.addMetaData(metaData); }); qm.gitHelper.setBranchName(); -var majorMinorVersionNumbers = '2.10.'; if(argv.clientSecret){process.env.QUANTIMODO_CLIENT_SECRET = argv.clientSecret;} process.env.npm_package_licenseText = null; // Pollutes logs qmLog.debug("Environmental Variables", process.env, 50000); @@ -502,14 +472,7 @@ function readDevCredentials(){ devCredentials = {}; } } -function readFile(path){ - try { - return JSON.parse(fs.readFileSync(path)); - } catch (e) { - qmLog.error("Could not read "+path); - return false; - } -} + function outputFileContents(path){ qmLog.info(path+": "+fs.readFileSync(path)); } diff --git a/src/js/qmHelpers.js b/src/js/qmHelpers.js index c0509fcbc6..1d7930dd2d 100644 --- a/src/js/qmHelpers.js +++ b/src/js/qmHelpers.js @@ -2266,7 +2266,8 @@ var qm = { buildInfoHelper: { alreadyMinified: function(){ try { - var files = fs.readdirSync(paths.www.scripts); + var fs = qm.fileHelper.fs(); + var files = fs.readdirSync(qm.buildInfoHelper.paths.www.scripts); if (!files.length) { qmLog.info("Scripts folder is empty so we need to minify"); return false; @@ -2313,7 +2314,7 @@ var qm = { getCurrentBuildInfo: function () { qm.buildInfoHelper.currentBuildInfo = { iosCFBundleVersion: qm.buildInfoHelper.buildInfo.versionNumbers.iosCFBundleVersion, - builtAt: timeHelper.getUnixTimestampInSeconds(), + builtAt: qm.timeHelper.getUnixTimestampInSeconds(), builtAtString: new Date().toISOString(), buildServer: qmLog.getCurrentServerContext(), buildLink: qm.buildInfoHelper.getBuildLink(), @@ -2325,9 +2326,9 @@ var qm = { return qm.buildInfoHelper.currentBuildInfo; }, getPreviousBuildInfo: function () { - var previousBuildInfo = readFile(paths.src.buildInfo); + var previousBuildInfo = qm.fileHelper.readFile(qm.buildInfoHelper.paths.src.buildInfo); if(!previousBuildInfo){ - qmLog.info("No previous BuildInfo file at "+paths.src.buildInfo); + qmLog.info("No previous BuildInfo file at "+qm.buildInfoHelper.paths.src.buildInfo); qm.buildInfoHelper.previousBuildInfo = false; } else { qm.buildInfoHelper.previousBuildInfo = previousBuildInfo; @@ -2336,14 +2337,46 @@ var qm = { }, previousBuildInfo: null, writeCommitSha: function () { - writeToFile('www/data/commits/'+qm.gitHelper.getCurrentGitCommitSha(), qm.gitHelper.getCurrentGitCommitSha()); - writeToFile('src/data/commits/'+qm.gitHelper.getCurrentGitCommitSha(), qm.gitHelper.getCurrentGitCommitSha()); + qm.fileHelper.writeFileSync('www/data/commits/'+qm.gitHelper.getCurrentGitCommitSha(), qm.gitHelper.getCurrentGitCommitSha()); + // noinspection JSUnresolvedFunction + qm.fileHelper.writeFileSync('src/data/commits/'+qm.gitHelper.getCurrentGitCommitSha(), qm.gitHelper.getCurrentGitCommitSha()); + }, + paths: { + apk: {//android\app\build\outputs\apk\release\app-release.apk + combinedRelease: "platforms/android/app/build/outputs/apk/release/app-release.apk", + combinedDebug: "platforms/android/app/build/outputs/apk/release/app-debug.apk", + arm7Release: "platforms/android/app/build/outputs/apk/release/app-arm7-release.apk", + x86Release: "platforms/android/app/build/outputs/apk/release/app-x86-release.apk", + outputFolder: "platforms/android/app/build/outputs/apk", + builtApk: null + }, + sass: ['./src/scss/**/*.scss'], + src:{ + devCredentials: "src/dev-credentials.json", + defaultPrivateConfig: "src/default.private_config.json", + icons: "src/img/icons", + firebase: "src/lib/firebase/**/*", + js: "src/js/*.js", + serviceWorker: "src/firebase-messaging-sw.js", + staticData: 'src/data/qmStaticData.js' + }, + www: { + devCredentials: "www/dev-credentials.json", + defaultPrivateConfig: "www/default.private_config.json", + icons: "www/img/icons", + firebase: "www/lib/firebase/", + js: "www/js/", + scripts: "www/scripts", + staticData: 'src/data/qmStaticData.js' + }, + chcpLogin: '.chcplogin' }, getBuildLink: function() { if(process.env.BUDDYBUILD_APP_ID){return "https://dashboard.buddybuild.com/apps/" + process.env.BUDDYBUILD_APP_ID + "/build/" + process.env.BUDDYBUILD_APP_ID;} if(process.env.CIRCLE_BUILD_NUM){return "https://circleci.com/gh/QuantiModo/quantimodo-android-chrome-ios-web-app/" + process.env.CIRCLE_BUILD_NUM;} if(process.env.TRAVIS_BUILD_ID){return "https://travis-ci.org/" + process.env.TRAVIS_REPO_SLUG + "/builds/" + process.env.TRAVIS_BUILD_ID;} }, + majorMinorVersionNumbers: '2.10.', setVersionNumbers: function(){ var date = new Date(); function getPatchVersionNumber() { @@ -2366,10 +2399,10 @@ var qm = { function appendLeadingZero(integer) {return ('0' + integer).slice(-2);} function getLongDateFormat(){return date.getFullYear().toString() + appendLeadingZero(date.getMonth() + 1) + appendLeadingZero(date.getDate());} qm.buildInfoHelper.buildInfo.versionNumbers = { - iosCFBundleVersion: majorMinorVersionNumbers + getPatchVersionNumber() + '.' + getIosMinorVersionNumber(), + iosCFBundleVersion: qm.buildInfoHelper.majorMinorVersionNumbers + getPatchVersionNumber() + '.' + getIosMinorVersionNumber(), //androidVersionCodes: {armV7: getLongDateFormat() + appendLeadingZero(date.getHours()), x86: getLongDateFormat() + appendLeadingZero(date.getHours() + 1)}, androidVersionCode: getLongDateFormat() + getAndroidMinorVersionNumber(), - ionicApp: majorMinorVersionNumbers + getPatchVersionNumber() + ionicApp: qm.buildInfoHelper.majorMinorVersionNumbers + getPatchVersionNumber() }; qm.buildInfoHelper.buildInfo.versionNumbers.buildVersionNumber = qm.buildInfoHelper.buildInfo.versionNumbers.androidVersionCode; qmLog.info(JSON.stringify(qm.buildInfoHelper.buildInfo.versionNumbers)); @@ -2385,7 +2418,7 @@ var qm = { qm.chartHelper.setTooltipFormatterFunction(series) }catch (e) { qmLog.error(e) - }; + } }) }, setChartExportingOptionsOnce: function(highchartConfig){ @@ -4182,6 +4215,15 @@ var qm = { } return qm.gulp.src(srcArray) .pipe(qm.gulp.dest(destinationPath)); + }, + readFile: function(path){ + try { + var fs = qm.fileHelper.fs(); + return JSON.parse(fs.readFileSync(path)); + } catch (e) { + qmLog.error("Could not read "+path); + return false; + } } }, functionHelper: { From bef855a1f97fae3efc40c53cd795a50d8dff62aa Mon Sep 17 00:00:00 2001 From: "Mike P. Sinn" Date: Sun, 1 Nov 2020 13:03:06 -0600 Subject: [PATCH 3/3] var paths = qm.buildInfoHelper.paths --- gulpfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gulpfile.js b/gulpfile.js index 33c376bd8a..4e9b39d034 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -117,7 +117,6 @@ var appIds = { 'quantimodo': true, 'medimodo': true }; -var paths = qm.buildInfoHelper.paths var argv = require('yargs').argv; var defaultRequestOptions = {strictSSL: false}; var fs = require('fs'); @@ -131,6 +130,7 @@ var s3Options = {accessKeyId: AWS_ACCESS_KEY_ID, secretAccessKey: AWS_SECRET_ACC var bugsnag = require("bugsnag"); var qmLog = global.qmLog = require('./src/js/qmLogger.js') var qm = global.qm = require('./src/js/qmHelpers.js') +var paths = qm.buildInfoHelper.paths qm.staticData = require('./src/data/qmStaticData.js') bugsnag.register("ae7bc49d1285848342342bb5c321a2cf"); bugsnag.releaseStage = qmLog.getCurrentServerContext();