From 186d5014eb5bfdb241c530ab5abb758777554582 Mon Sep 17 00:00:00 2001 From: James Macmillan Date: Mon, 13 Jan 2020 15:37:40 +0000 Subject: [PATCH 1/8] Added switch to allow for .env file processing using the same stage prefixes --- index.js | 239 ++++++++++++++++++++++++++++++++-------------- package-lock.json | 49 +++++++++- package.json | 13 +-- 3 files changed, 222 insertions(+), 79 deletions(-) diff --git a/index.js b/index.js index 70a98b3..63c1fd4 100755 --- a/index.js +++ b/index.js @@ -13,85 +13,180 @@ // See the License for the specific language governing permissions and // limitations under the License. +const log = require('debug')('serverless-env-generator'); + const commander = require('commander'); const Fs = require('fs'); +const fse = require('fs-extra'); const YAML = require('yamljs'); +const path = require('path'); -// Commander config -commander - .version(require('./package.json').version) - .option('--stage [type]', 'Add deployment stage [stage]', 'dev') - .option( - '--serverless-env-file [filename]', - 'Set the serverless env file', - 'serverless.env.yml' - ) - .option('--env-variables [filename|string]', 'Set the serverless env file') - .option('--local, -l', 'Use .env file') - .parse(process.argv); - -// Use local ENV -if (commander.local) { - require('dotenv').load(); -} - -// Name of the ENV storage file -const serverlessEnvFile = commander.serverlessEnvFile; - -// Hard code the STAGE to dev for initial run through or if not set -const STAGE = commander.stage; - -// The ENV variables -if (!commander.envVariables) { - console.log( - 'Please provide --env-variables either file containing an array of ENV variable names or a comma (,) separated list of ENV variable names' - ); - process.exit(1); -} -const availableEnvs = Fs.existsSync(commander.envVariables) - ? require(commander.envVariables) - : commander.envVariables.split(','); - -// Prepopulate the ENV if a serverless.env.yml exists -const envVariables = Fs.existsSync(serverlessEnvFile) - ? YAML.load(serverlessEnvFile) - : {}; - -// If the STAGE doesn't exist, create it -if (!envVariables[STAGE]) { - envVariables[STAGE] = {}; -} - -// Populate with blank variables for anything not already defined -for (let i = 0; i < availableEnvs.length; i += 1) { - if (!envVariables[STAGE][availableEnvs[i]]) { - envVariables[STAGE][availableEnvs[i]] = ''; - } -} - -// Populate from ENV variables -Object.keys(envVariables[STAGE]).map(key => { - const stageKey = `${STAGE}_${key}`.toUpperCase(); - if (process.env[key] || process.env[stageKey]) { - envVariables[STAGE][key] = process.env[stageKey] - ? process.env[stageKey] - : process.env[key]; + +const loadDotEnv = async (filename) => { + const buffer = await fse.readFile(filename); + const asString = buffer.toString(); + log('current: %S', asString); + + const result = {}; + asString + .split('\n') + .forEach(record => { + const split = record.split('='); + if (split && split[0] && split[1]) result[split[0]] = split[1]; + }); + + return result; +}; + +const buildEnvFile = (envVariables) => { + let file = ''; + const result = Object.keys(envVariables) + .forEach(key => { + const value = envVariables[key]; + + file += `${key}=${value}\n`; + }); + + return file; +}; + +const loadFile = (filename) => { + if (!commander.D) return YAML.load(filename); + + return loadDotEnv(filename); +}; + +(async () => { + // Commander config + commander + .version(require('./package.json').version) + .option('--stage [type]', 'Add deployment stage [stage]', 'dev') + .option( + '--serverless-env-file [filename]', + 'Set the serverless env file', + 'serverless.env.yml' + ) + .option('--env-variables [filename|string]', 'Set the serverless env file') + .option('--local, -l', 'Use .env file') + .option('--dotenv, -d', 'Write .env file rather than yaml') + .parse(process.argv); + + // Use local ENV + if (commander.local) { + require('dotenv').load(); } - return true; -}); -// Convert the object into YAML -const ymlEnv = YAML.stringify(envVariables); + // log('commander: %O', commander); + + // Name of the ENV storage file + const serverlessEnvFile = commander.D ? '.env' : commander.serverlessEnvFile; + + const CWD = process.cwd(); -// Write the YAML to disk so it can be read by sls deploy --stage -Fs.writeFile(serverlessEnvFile, ymlEnv, err => { - if (err) { - // eslint-disable-next-line no-console - console.error(err); + log('PWD: %O', CWD); + + log('Env File: %O', serverlessEnvFile); + + // Hard code the STAGE to dev for initial run through or if not set + const STAGE = commander.stage; + log('Stage: %O', STAGE); + + // The ENV variables + if (!commander.envVariables) { + console.log( + 'Please provide --env-variables either file containing an array of ENV variable names or a comma (,) separated list of ENV variable names' + ); process.exit(1); + } + + const envVariablesPath = path.join(CWD, commander.envVariables); + + log('Env Variables: %O', envVariablesPath); + + const availableEnvs = Fs.existsSync(envVariablesPath) + ? require(envVariablesPath) + : commander.envVariables.split(','); + + log('available envs: %O', availableEnvs); + + // Prepopulate the ENV if a serverless.env.yml exists + const envVariables = Fs.existsSync(serverlessEnvFile) + ? await loadFile(serverlessEnvFile) + : {}; + + log('current env: %O', envVariables); + + // If the STAGE doesn't exist, create it + if (!commander.D && !envVariables[STAGE]) { + envVariables[STAGE] = {}; + } + + // Populate with blank variables for anything not already defined + if(!commander.D) { + for (let i = 0; i < availableEnvs.length; i += 1) { + if (!envVariables[STAGE][availableEnvs[i]]) { + envVariables[STAGE][availableEnvs[i]] = ''; + } + } } else { - // eslint-disable-next-line no-console - console.log(`${serverlessEnvFile} has been created`); - process.exit(0); + for (let i = 0; i < availableEnvs.length; i += 1) { + if (!envVariables[availableEnvs[i]]) { + envVariables[availableEnvs[i]] = ''; + } + } } -}); + + // Populate from ENV variables + if(!commander.D) { + Object.keys(envVariables[STAGE]).map(key => { + const stageKey = `${STAGE}_${key}`.toUpperCase(); + if (process.env[key] || process.env[stageKey]) { + envVariables[STAGE][key] = process.env[stageKey] + ? process.env[stageKey] + : process.env[key]; + } + return true; + }); + } else { + Object.keys(envVariables).map(key => { + const stageKey = `${STAGE}_${key}`.toUpperCase(); + if (process.env[key] || process.env[stageKey]) { + envVariables[key] = process.env[stageKey] + ? process.env[stageKey] + : process.env[key]; + } + return true; + }); + } + + // Convert the object into YAML + if (!commander.D) { + const ymlEnv = YAML.stringify(envVariables); + + // Write the YAML to disk so it can be read by sls deploy --stage + Fs.writeFile(serverlessEnvFile, ymlEnv, err => { + if (err) { + // eslint-disable-next-line no-console + console.error(err); + process.exit(1); + } else { + // eslint-disable-next-line no-console + console.log(`${serverlessEnvFile} has been created`); + process.exit(0); + } + }); + } else { + const envFile = buildEnvFile(envVariables); + fse.writeFile(serverlessEnvFile, envFile) + .then(() => { + console.log(`${serverlessEnvFile} has been created`); + process.exit(0); + }) + .catch((error) => { + log('error: %O', error); + console.error(error); + process.exit(1); + }) + } + +})(); diff --git a/package-lock.json b/package-lock.json index 04565ba..2e8f5cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@packt/serverless-env-generator", - "version": "0.0.1", + "version": "0.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -36,11 +36,31 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, "dotenv": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz", "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==" }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -59,6 +79,12 @@ "path-is-absolute": "^1.0.0" } }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -73,6 +99,15 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -81,6 +116,12 @@ "brace-expansion": "^1.1.7" } }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -99,6 +140,12 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 01aff24..bb99e0d 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,14 @@ { "name": "@packt/serverless-env-generator", "version": "0.0.2", - "description": - "Generate serverless.env.yml for dynamic ENV assignments within serverless.yml", + "description": "Generate serverless.env.yml for dynamic ENV assignments within serverless.yml", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", - "url": - "git+ssh://git@bitbucket.org/packt-internal/serverless-env-generator.git" + "url": "git+ssh://git@bitbucket.org/packt-internal/serverless-env-generator.git" }, "author": { "name": "Packt Publishing Ltd", @@ -23,8 +21,7 @@ } ], "license": "Apache-2.0", - "homepage": - "https://bitbucket.org/packt-internal/serverless-env-generator#readme", + "homepage": "https://bitbucket.org/packt-internal/serverless-env-generator#readme", "dependencies": { "commander": "^2.15.1", "dotenv": "^5.0.1", @@ -32,5 +29,9 @@ }, "bin": { "serverless-env-generator": "index.js" + }, + "devDependencies": { + "debug": "4.1.1", + "fs-extra": "8.1.0" } } From 99a7f8fe98626c83406fa41bb952e8ed1c919d8c Mon Sep 17 00:00:00 2001 From: James Macmillan Date: Mon, 13 Jan 2020 15:38:10 +0000 Subject: [PATCH 2/8] 0.0.3 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2e8f5cc..f5c45c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@packt/serverless-env-generator", - "version": "0.0.2", + "version": "0.0.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index bb99e0d..2336810 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@packt/serverless-env-generator", - "version": "0.0.2", + "version": "0.0.3", "description": "Generate serverless.env.yml for dynamic ENV assignments within serverless.yml", "main": "index.js", "scripts": { From 08efec60e0068feac49e589dc6fd751c725c894e Mon Sep 17 00:00:00 2001 From: James Macmillan Date: Mon, 13 Jan 2020 16:38:39 +0000 Subject: [PATCH 3/8] Moved to deps from devdeps because bin --- package-lock.json | 12 +++--------- package.json | 8 +++----- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index f5c45c3..e08a034 100644 --- a/package-lock.json +++ b/package-lock.json @@ -40,7 +40,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, "requires": { "ms": "^2.1.1" } @@ -54,7 +53,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -82,8 +80,7 @@ "graceful-fs": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" }, "inflight": { "version": "1.0.6", @@ -103,7 +100,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, "requires": { "graceful-fs": "^4.1.6" } @@ -119,8 +115,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "once": { "version": "1.4.0", @@ -143,8 +138,7 @@ "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, "wrappy": { "version": "1.0.2", diff --git a/package.json b/package.json index 2336810..1334f55 100644 --- a/package.json +++ b/package.json @@ -25,13 +25,11 @@ "dependencies": { "commander": "^2.15.1", "dotenv": "^5.0.1", - "yamljs": "^0.3.0" + "yamljs": "^0.3.0", + "debug": "4.1.1", + "fs-extra": "8.1.0" }, "bin": { "serverless-env-generator": "index.js" - }, - "devDependencies": { - "debug": "4.1.1", - "fs-extra": "8.1.0" } } From 589c5b7255fea541880e2cb1e92411d5daa1e2ba Mon Sep 17 00:00:00 2001 From: James Macmillan Date: Mon, 13 Jan 2020 16:38:44 +0000 Subject: [PATCH 4/8] 0.0.4 --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index e08a034..db923eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@packt/serverless-env-generator", - "version": "0.0.3", + "version": "0.0.4", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 1334f55..e7330db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@packt/serverless-env-generator", - "version": "0.0.3", + "version": "0.0.4", "description": "Generate serverless.env.yml for dynamic ENV assignments within serverless.yml", "main": "index.js", "scripts": { From ff1c3afafa2a5cf2d17038af4475d6430b46ef8d Mon Sep 17 00:00:00 2001 From: supachris28 Date: Tue, 31 Mar 2020 09:32:41 +0100 Subject: [PATCH 5/8] Lint fixes --- index.js | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/index.js b/index.js index a1ed8fd..21c56a6 100755 --- a/index.js +++ b/index.js @@ -1,3 +1,4 @@ +/* eslint-disable global-require */ #!/usr/bin/env node // Copyright 2019 Packt Publishing Limited // @@ -30,8 +31,9 @@ const loadDotEnv = async (filename) => { const result = {}; asString .split('\n') - .forEach(record => { + .forEach((record) => { const split = record.split('='); + // eslint-disable-next-line prefer-destructuring if (split && split[0] && split[1]) result[split[0]] = split[1]; }); @@ -40,8 +42,8 @@ const loadDotEnv = async (filename) => { const buildEnvFile = (envVariables) => { let file = ''; - const result = Object.keys(envVariables) - .forEach(key => { + Object.keys(envVariables) + .forEach((key) => { const value = envVariables[key]; file += `${key}=${value}\n`; @@ -64,7 +66,7 @@ const loadFile = (filename) => { .option( '--serverless-env-file [filename]', 'Set the serverless env file', - 'serverless.env.yml' + 'serverless.env.yml', ) .option('--env-variables [filename|string]', 'Set the serverless env file') .option('--local, -l', 'Use .env file') @@ -94,7 +96,7 @@ const loadFile = (filename) => { // The ENV variables if (!commander.envVariables) { console.log( - 'Please provide --env-variables either file containing an array of ENV variable names or a comma (,) separated list of ENV variable names' + 'Please provide --env-variables either file containing an array of ENV variable names or a comma (,) separated list of ENV variable names', ); process.exit(1); } @@ -122,7 +124,7 @@ const loadFile = (filename) => { } // Populate with blank variables for anything not already defined - if(!commander.D) { + if (!commander.D) { for (let i = 0; i < availableEnvs.length; i += 1) { if (!envVariables[STAGE][availableEnvs[i]]) { envVariables[STAGE][availableEnvs[i]] = ''; @@ -137,24 +139,26 @@ const loadFile = (filename) => { } // Populate from ENV variables - if(!commander.D) { - Object.keys(envVariables[STAGE]).map(key => { + if (!commander.D) { + Object.keys(envVariables[STAGE]).map((key) => { const stageKey = `${STAGE}_${key}`.toUpperCase(); if (process.env[key] || process.env[stageKey]) { envVariables[STAGE][key] = process.env[stageKey] ? process.env[stageKey] : process.env[key]; } + return true; }); } else { - Object.keys(envVariables).map(key => { + Object.keys(envVariables).map((key) => { const stageKey = `${STAGE}_${key}`.toUpperCase(); if (process.env[key] || process.env[stageKey]) { envVariables[key] = process.env[stageKey] ? process.env[stageKey] : process.env[key]; } + return true; }); } @@ -164,7 +168,7 @@ const loadFile = (filename) => { const ymlEnv = YAML.stringify(envVariables); // Write the YAML to disk so it can be read by sls deploy --stage - Fs.writeFile(serverlessEnvFile, ymlEnv, err => { + Fs.writeFile(serverlessEnvFile, ymlEnv, (err) => { if (err) { // eslint-disable-next-line no-console console.error(err); @@ -186,7 +190,6 @@ const loadFile = (filename) => { log('error: %O', error); console.error(error); process.exit(1); - }) + }); } - })(); From 6745422ba5ddd5dde9763822125152f561d718d2 Mon Sep 17 00:00:00 2001 From: supachris28 Date: Tue, 31 Mar 2020 09:34:06 +0100 Subject: [PATCH 6/8] Undo some lint fixes --- index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/index.js b/index.js index 21c56a6..b180aa8 100755 --- a/index.js +++ b/index.js @@ -1,4 +1,3 @@ -/* eslint-disable global-require */ #!/usr/bin/env node // Copyright 2019 Packt Publishing Limited // From 01ccbda04091f0705453f9fdd42ce6a7966d0069 Mon Sep 17 00:00:00 2001 From: supachris28 Date: Tue, 31 Mar 2020 09:59:13 +0100 Subject: [PATCH 7/8] Added tests to make sure it works as expected --- .env | 4 ++++ .gitignore | 6 +++--- index.js | 9 ++++++--- serverless-envs.json | 29 +++++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 .env create mode 100644 serverless-envs.json diff --git a/.env b/.env new file mode 100644 index 0000000..1f6be49 --- /dev/null +++ b/.env @@ -0,0 +1,4 @@ +DEV_LEMON_PAYMENT_GATEWAY_CARD_GBP=GBP gateway +STAGING_LEMON_PAYMENT_GATEWAY_CARD_GBP=GBP test gateway +DYNAMO_DB_ACCOUNTS_TABLE_ARN=ARNold Schwarzenegger +DYNAMO_DB_ENDPOINT=pointy end diff --git a/.gitignore b/.gitignore index ad46b30..1ba0e26 100644 --- a/.gitignore +++ b/.gitignore @@ -54,8 +54,8 @@ typings/ # Yarn Integrity file .yarn-integrity -# dotenv environment variables file -.env - # next.js build output .next + +# test output file +serverless.env.yml diff --git a/index.js b/index.js index b180aa8..3b7a5cd 100755 --- a/index.js +++ b/index.js @@ -73,8 +73,9 @@ const loadFile = (filename) => { .parse(process.argv); // Use local ENV - if (commander.local) { - require('dotenv').load(); + if (commander.local || commander.L) { + log('Getting from .env'); + require('dotenv').config(); } // log('commander: %O', commander); @@ -115,7 +116,7 @@ const loadFile = (filename) => { ? await loadFile(serverlessEnvFile) : {}; - log('current env: %O', envVariables); + log('previous env: %O', envVariables); // If the STAGE doesn't exist, create it if (!commander.D && !envVariables[STAGE]) { @@ -162,6 +163,8 @@ const loadFile = (filename) => { }); } + log('new env: %O', envVariables); + // Convert the object into YAML if (!commander.D) { const ymlEnv = YAML.stringify(envVariables); diff --git a/serverless-envs.json b/serverless-envs.json new file mode 100644 index 0000000..791ddc9 --- /dev/null +++ b/serverless-envs.json @@ -0,0 +1,29 @@ +[ + "SECURITY_GROUP", + "VPC_SUBNET_1", + "VPC_SUBNET_2", + "DEBUG", + "LEMON_SDK_BASE_URL", + "LEMON_PAYMENT_GATEWAY_CARD_GBP", + "LEMON_PAYMENT_GATEWAY_CARD_USD", + "LEMON_PAYMENT_GATEWAY_CARD_EUR", + "LEMON_PAYMENT_GATEWAY_CARD_AUD", + "LEMON_PAYMENT_GATEWAY_CARD_INR", + "LEMON_PAYPAL_PAYMENT_GATEWAY", + "LEMON_PAYPAL_AUTH_GATEWAY_ID", + "DEFAULT_ADMIN_RATE_PLAN_ID", + "DEFAULT_ADMIN_RATE_PLAN_CHARGE_ID", + "DYNAMO_DB_ENDPOINT", + "DYNAMO_DB_ACCOUNTS_TABLE_NAME", + "DYNAMO_DB_ACCOUNTS_TABLE_ARN", + "DYNAMO_DB_ACCOUNTS_TABLE_READ_UNIT", + "DYNAMO_DB_ACCOUNTS_TABLE_WRITE_UNIT", + "SNS_ENDPOINT", + "SNS_SUBSCRIPTION_ACCOUNT_CREATED_TOPIC_ARN", + "SNS_SUBSCRIPTION_ACCOUNT_UPDATED_TOPIC_ARN", + "MICROSERVICES_SDK_DOMAIN", + "MICROSERVICES_API_KEY", + "SQS_SUBSCRIPTION_ACCOUNT_UPDATED_QUEUE_ARN", + "COUNTRY_CONFIG_FILE_S3_BUCKET_NAME", + "COUNTRY_CONFIG_FILE_S3_FILE_NAME" +] From 2e6f79d6b0999d11909546d964d70396abb43188 Mon Sep 17 00:00:00 2001 From: supachris28 Date: Tue, 31 Mar 2020 10:03:13 +0100 Subject: [PATCH 8/8] Added test script --- package.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 40934c6..463052b 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Generate serverless.env.yml for dynamic ENV assignments within serverless.yml", "main": "index.js", "scripts": { - "test": "npm run lint", + "test": "node index.js --env-variables=serverless-envs.json -l", "lint": "eslint ./" }, "repository": { @@ -19,6 +19,10 @@ { "name": "Mike Elsmore", "email": "mike@builtbyme.tech" + }, + { + "name": "Chris Key", + "email": "keych.ck+github@gmail.com" } ], "license": "Apache-2.0",