This is an automated email from the ASF dual-hosted git repository. alexkli pushed a commit to branch wsk-package-var in repository https://gitbox.apache.org/repos/asf/openwhisk-wskdebug.git
commit 1d79129c881167f17caacebc6431a493b87600ad Author: Alexander Klimetschek <aklim...@adobe.com> AuthorDate: Thu Apr 9 21:50:12 2020 -0700 Support reading package name from WSK_PACKAGE env var #10 --- README.md | 37 +++++++++++++++++++++++++++++++- examples/nodejs/.env | 2 ++ examples/nodejs/.vscode/launch.json | 14 ++++++++++++- index.js | 4 ++++ test/wskdebug.test.js | 42 ++++++++++++++++++++++++++++++++++++- 5 files changed, 96 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d3b8943..7b79ffa 100644 --- a/README.md +++ b/README.md @@ -124,7 +124,7 @@ The action to debug (e.g. `myaction`) must already be deployed. Add the configuration below to your [launch.json](https://code.visualstudio.com/docs/editor/debugging#_launch-configurations). Replace `MYACTION` with the name of your action and `ACTION.js` with the source file containing the action. When you run this, it will start wskdebug and should automatically connect the debugger. -``` +```json "configurations": [ { "type": "node", @@ -145,6 +145,41 @@ This snippets enables browser LiveReloading using `-l`. For other reloading opti For troubleshooting, you can run the debugger in verbose mode by adding `"-v"` to the `args` array. +#### Control wskprops credentials + +To use custom credentials from a custom `.wskprops` and/or use a developer-specific openwhisk package name, but avoid committing that into your source control system, you can use an `.env` file. + +1. Put this `.env` file in your VS Code project root: + + ``` + WSK_CONFIG_FILE=/Users/user/.wskprops-custom + WSK_PACKAGE=my-package + ``` + + Set either of the variables as needed. + +2. Make sure to not commit this file into source control, by e.g. adding `.env` to a `.gitignore` file. + +2. Add an `envFile` setting to the `.vscode/launch.json`, which you can share with co-workers and commit to source control: + + ```json + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "wskdebug", + "runtimeExecutable": "wskdebug", + "args": [ "MYACTION", "ACTION.js", "-l" ], + "localRoot": "${workspaceFolder}", + "remoteRoot": "/code", + "outputCapture": "std", + "envFile": "${workspaceFolder}/.env" + } + ] + ``` + + + <a name="nodejs-multiple-actions"></a> ### Node.js: Multiple actions diff --git a/examples/nodejs/.env b/examples/nodejs/.env new file mode 100644 index 0000000..d2c1e30 --- /dev/null +++ b/examples/nodejs/.env @@ -0,0 +1,2 @@ +WSK_PACKAGE=wskdebug-examples +#WSK_CONFIG_FILE=<absolute-path-to-custom-wskprops> diff --git a/examples/nodejs/.vscode/launch.json b/examples/nodejs/.vscode/launch.json index aeb9f4e..47501f7 100644 --- a/examples/nodejs/.vscode/launch.json +++ b/examples/nodejs/.vscode/launch.json @@ -49,7 +49,19 @@ "localRoot": "${workspaceFolder}", "remoteRoot": "/code", "outputCapture": "std" + }, + { + "type": "node", + "request": "launch", + "name": "wskdebug with WSK_PACKAGE", + "runtimeExecutable": "wskdebug", + "args": [ + "webaction" + ], + "localRoot": "${workspaceFolder}", + "remoteRoot": "/code", + "outputCapture": "std", + "envFile": "${workspaceFolder}/.env" } - ] } \ No newline at end of file diff --git a/index.js b/index.js index 96a83cb..0406efe 100644 --- a/index.js +++ b/index.js @@ -258,6 +258,10 @@ function normalizeArgs(argv) { argv.invokeParams = argv.P; argv.invokeAction = argv.a; argv.onChange = argv.r; + + if (process.env.WSK_PACKAGE && argv.action && !argv.action.includes("/")) { + argv.action = `${process.env.WSK_PACKAGE}/${argv.action}`; + } } function printErrorAndExit(err, argv) { diff --git a/test/wskdebug.test.js b/test/wskdebug.test.js index ca8e941..959168e 100644 --- a/test/wskdebug.test.js +++ b/test/wskdebug.test.js @@ -22,13 +22,32 @@ // tests basic cli -const wskdebug = require('../index'); +let wskdebug = require('../index'); const test = require('./test'); const assert = require('assert'); const stripAnsi = require('strip-ansi'); const {execSync} = require('child_process'); +const mockRequire = require('mock-require'); + +function mockDebugger() { + const receivedArgv = {}; + + class MockDebugger { + constructor(argv) { + Object.assign(receivedArgv, argv); + } + + start() {} + run() {} + } + + mockRequire("../src/debugger", MockDebugger); + wskdebug = mockRequire.reRequire("../index"); + return receivedArgv; +} + describe('wskdebug cli', function() { it("should print version (via wskdebug.js)", async function() { @@ -66,4 +85,25 @@ describe('wskdebug cli', function() { assert.equal(stripAnsi(stdio.stdout.trim()), require(`${process.cwd()}/package.json`).version); }); + it("should take action argument", async function() { + const argv = mockDebugger(); + + await wskdebug(`action`); + assert.strictEqual(argv.action, "action"); + + await wskdebug(`package/action`); + assert.strictEqual(argv.action, "package/action"); + }); + + it("should use WSK_PACKAGE env var as package name", async function() { + const argv = mockDebugger(); + + process.env.WSK_PACKAGE = "envPackage"; + await wskdebug(`action`); + assert.strictEqual(argv.action, "envPackage/action"); + + // cli package takes precedence + await wskdebug(`package/action`); + assert.strictEqual(argv.action, "package/action"); + }); });