diff --git a/assets/create-glee-app/templates/default/package-lock.json b/assets/create-glee-app/templates/default/package-lock.json index e2a28f79346..efb74fd2fdc 100644 --- a/assets/create-glee-app/templates/default/package-lock.json +++ b/assets/create-glee-app/templates/default/package-lock.json @@ -9,7 +9,7 @@ "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@asyncapi/glee": "^0.30.0" + "@asyncapi/glee": "^0.30.1" }, "devDependencies": { "@types/node": "^20.5.9" @@ -484,9 +484,9 @@ } }, "node_modules/@asyncapi/glee": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/@asyncapi/glee/-/glee-0.30.0.tgz", - "integrity": "sha512-rN0RNGvUz/ryJ3NGhOVu6lixSWNGE1xJez+JFy8fg75CrG44aU828yLBFX8ZhEsnCiZx2bIfAtITdIwcR/dXCw==", + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@asyncapi/glee/-/glee-0.30.1.tgz", + "integrity": "sha512-oNGz6I6qMhJ9EAu8+zXDswwLIMGAuFOMJ55AXWCILxWvJHxRd1lQitrSXNIoZFULMpX1NoTEtX+VWE174Pa0ww==", "dependencies": { "@asyncapi/generator": "^1.15.0", "@asyncapi/html-template": "^1.0.0", @@ -13173,9 +13173,9 @@ } }, "@asyncapi/glee": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/@asyncapi/glee/-/glee-0.30.0.tgz", - "integrity": "sha512-rN0RNGvUz/ryJ3NGhOVu6lixSWNGE1xJez+JFy8fg75CrG44aU828yLBFX8ZhEsnCiZx2bIfAtITdIwcR/dXCw==", + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/@asyncapi/glee/-/glee-0.30.1.tgz", + "integrity": "sha512-oNGz6I6qMhJ9EAu8+zXDswwLIMGAuFOMJ55AXWCILxWvJHxRd1lQitrSXNIoZFULMpX1NoTEtX+VWE174Pa0ww==", "requires": { "@asyncapi/generator": "^1.15.0", "@asyncapi/html-template": "^1.0.0", diff --git a/assets/create-glee-app/templates/default/package.json b/assets/create-glee-app/templates/default/package.json index 396c4ed3cd8..36c9594a590 100644 --- a/assets/create-glee-app/templates/default/package.json +++ b/assets/create-glee-app/templates/default/package.json @@ -24,7 +24,7 @@ }, "homepage": "https://github.com/asyncapi/glee-hello-world#readme", "dependencies": { - "@asyncapi/glee": "^0.30.0" + "@asyncapi/glee": "^0.30.1" }, "devDependencies": { "@types/node": "^20.5.9" diff --git a/bin/run b/bin/run index 330b6c39987..bee830d000d 100755 --- a/bin/run +++ b/bin/run @@ -1,5 +1,7 @@ #!/usr/bin/env node +process.env.NODE_ENV = 'development'; + const oclif = require('@oclif/core'); oclif.run() diff --git a/bin/run_bin b/bin/run_bin new file mode 100755 index 00000000000..5d6291fd2e1 --- /dev/null +++ b/bin/run_bin @@ -0,0 +1,14 @@ +#!/usr/bin/env node + +// Only the binary installed through NPM is considered production environment. See "bin" in package.json. +process.env.NODE_ENV = 'production'; + +const oclif = require('@oclif/core'); + +oclif.run() + .then(require('@oclif/core/flush')) + .catch((err) => { + const oclifHandler = require('@oclif/core/handle'); + return oclifHandler(err.message); + }); + diff --git a/bin/run_bin.cmd b/bin/run_bin.cmd new file mode 100644 index 00000000000..266f8ea61a2 --- /dev/null +++ b/bin/run_bin.cmd @@ -0,0 +1,3 @@ +@echo off + +node "%~dp0\run_bin" %* diff --git a/docs/usage.md b/docs/usage.md index 7a4490097bc..3bf8fdc7d46 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -29,7 +29,7 @@ $ npm install -g @asyncapi/cli $ asyncapi COMMAND running command... $ asyncapi (--version) -@asyncapi/cli/1.0.1 linux-x64 node-v18.18.2 +@asyncapi/cli/1.1.0 linux-x64 node-v18.18.2 $ asyncapi --help [COMMAND] USAGE $ asyncapi COMMAND @@ -93,7 +93,7 @@ EXAMPLES $ asyncapi bundle ./asyncapi.yaml ./features.yaml --base ./asyncapi.yaml --reference-into-components ``` -_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/bundle.ts)_ +_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/bundle.ts)_ ## `asyncapi config` @@ -107,7 +107,7 @@ DESCRIPTION CLI config settings ``` -_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/config/index.ts)_ +_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/config/index.ts)_ ## `asyncapi config context` @@ -121,7 +121,7 @@ DESCRIPTION Manage short aliases for full paths to AsyncAPI documents ``` -_See code: [src/commands/config/context/index.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/config/context/index.ts)_ +_See code: [src/commands/config/context/index.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/config/context/index.ts)_ ## `asyncapi config context add CONTEXT-NAME SPEC-FILE-PATH` @@ -143,7 +143,7 @@ DESCRIPTION Add a context to the store ``` -_See code: [src/commands/config/context/add.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/config/context/add.ts)_ +_See code: [src/commands/config/context/add.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/config/context/add.ts)_ ## `asyncapi config context current` @@ -160,7 +160,7 @@ DESCRIPTION Shows the current context that is being used ``` -_See code: [src/commands/config/context/current.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/config/context/current.ts)_ +_See code: [src/commands/config/context/current.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/config/context/current.ts)_ ## `asyncapi config context edit CONTEXT-NAME NEW-SPEC-FILE-PATH` @@ -181,7 +181,7 @@ DESCRIPTION Edit a context in the store ``` -_See code: [src/commands/config/context/edit.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/config/context/edit.ts)_ +_See code: [src/commands/config/context/edit.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/config/context/edit.ts)_ ## `asyncapi config context init [CONTEXT-FILE-PATH]` @@ -204,7 +204,7 @@ DESCRIPTION Initialize context ``` -_See code: [src/commands/config/context/init.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/config/context/init.ts)_ +_See code: [src/commands/config/context/init.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/config/context/init.ts)_ ## `asyncapi config context list` @@ -221,7 +221,7 @@ DESCRIPTION List all the stored contexts in the store ``` -_See code: [src/commands/config/context/list.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/config/context/list.ts)_ +_See code: [src/commands/config/context/list.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/config/context/list.ts)_ ## `asyncapi config context remove CONTEXT-NAME` @@ -241,7 +241,7 @@ DESCRIPTION Delete a context from the store ``` -_See code: [src/commands/config/context/remove.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/config/context/remove.ts)_ +_See code: [src/commands/config/context/remove.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/config/context/remove.ts)_ ## `asyncapi config context use CONTEXT-NAME` @@ -261,7 +261,7 @@ DESCRIPTION Set a context as current ``` -_See code: [src/commands/config/context/use.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/config/context/use.ts)_ +_See code: [src/commands/config/context/use.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/config/context/use.ts)_ ## `asyncapi config versions` @@ -278,7 +278,7 @@ DESCRIPTION Show versions of AsyncAPI tools used ``` -_See code: [src/commands/config/versions.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/config/versions.ts)_ +_See code: [src/commands/config/versions.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/config/versions.ts)_ ## `asyncapi convert [SPEC-FILE]` @@ -300,7 +300,7 @@ DESCRIPTION Convert asyncapi documents older to newer versions ``` -_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/convert.ts)_ +_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/convert.ts)_ ## `asyncapi diff OLD NEW` @@ -355,7 +355,7 @@ DESCRIPTION Find diff between two asyncapi files ``` -_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/diff.ts)_ +_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/diff.ts)_ ## `asyncapi generate` @@ -369,7 +369,7 @@ DESCRIPTION Generate typed models or other things like clients, applications or docs using AsyncAPI Generator templates. ``` -_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/generate/index.ts)_ +_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/generate/index.ts)_ ## `asyncapi generate fromTemplate ASYNCAPI TEMPLATE` @@ -406,7 +406,7 @@ EXAMPLES $ asyncapi generate fromTemplate asyncapi.yaml @asyncapi/html-template --param version=1.0.0 singleFile=true --output ./docs --force-write ``` -_See code: [src/commands/generate/fromTemplate.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/generate/fromTemplate.ts)_ +_See code: [src/commands/generate/fromTemplate.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/generate/fromTemplate.ts)_ ## `asyncapi generate models LANGUAGE FILE` @@ -480,7 +480,7 @@ DESCRIPTION Generates typed models ``` -_See code: [src/commands/generate/models.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/generate/models.ts)_ +_See code: [src/commands/generate/models.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/generate/models.ts)_ ## `asyncapi new` @@ -535,7 +535,7 @@ EXAMPLES $ asyncapi new --file-name=my-asyncapi.yml --example=default-example.yml --no-tty - create a new file with a specific name, using one of the examples and without interactive mode ``` -_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/new/index.ts)_ +_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/new/index.ts)_ ## `asyncapi new file` @@ -590,7 +590,7 @@ EXAMPLES $ asyncapi new --file-name=my-asyncapi.yml --example=default-example.yml --no-tty - create a new file with a specific name, using one of the examples and without interactive mode ``` -_See code: [src/commands/new/file.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/new/file.ts)_ +_See code: [src/commands/new/file.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/new/file.ts)_ ## `asyncapi new glee` @@ -609,7 +609,7 @@ DESCRIPTION Creates a new Glee project ``` -_See code: [src/commands/new/glee.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/new/glee.ts)_ +_See code: [src/commands/new/glee.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/new/glee.ts)_ ## `asyncapi new project` @@ -628,7 +628,7 @@ DESCRIPTION Creates a new Glee project ``` -_See code: [src/commands/new/project.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/new/project.ts)_ +_See code: [src/commands/new/project.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/new/project.ts)_ ## `asyncapi optimize [SPEC-FILE]` @@ -664,7 +664,7 @@ EXAMPLES $ asyncapi optimize ./asyncapi.yaml --optimization=remove-components,reuse-components,move-to-components --output=terminal --no-tty ``` -_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/optimize.ts)_ +_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/optimize.ts)_ ## `asyncapi start` @@ -678,7 +678,7 @@ DESCRIPTION Start asyncapi studio ``` -_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/start/index.ts)_ +_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/start/index.ts)_ ## `asyncapi start studio` @@ -697,7 +697,7 @@ DESCRIPTION starts a new local instance of Studio ``` -_See code: [src/commands/start/studio.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/start/studio.ts)_ +_See code: [src/commands/start/studio.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/start/studio.ts)_ ## `asyncapi validate [SPEC-FILE]` @@ -724,5 +724,5 @@ DESCRIPTION validate asyncapi file ``` -_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v1.0.1/src/commands/validate.ts)_ +_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v1.1.0/src/commands/validate.ts)_ diff --git a/package-lock.json b/package-lock.json index 5bcd5c09fed..04273d3434f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@asyncapi/cli", - "version": "1.1.0", + "version": "1.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@asyncapi/cli", - "version": "1.1.0", + "version": "1.1.1", "license": "Apache-2.0", "dependencies": { "@asyncapi/avro-schema-parser": "^3.0.5", @@ -24,7 +24,7 @@ "@oclif/core": "^1.26.2", "@oclif/errors": "^1.3.6", "@oclif/plugin-not-found": "^2.3.22", - "@smoya/asyncapi-adoption-metrics": "^1.1.1", + "@smoya/asyncapi-adoption-metrics": "^2.0.0", "@smoya/multi-parser": "^4.0.0", "@stoplight/spectral-cli": "6.9.0", "ajv": "^8.12.0", @@ -48,7 +48,7 @@ "ws": "^8.2.3" }, "bin": { - "asyncapi": "bin/run" + "asyncapi": "bin/run_bin" }, "devDependencies": { "@asyncapi/minimaltemplate": "./test/fixtures/minimaltemplate", @@ -5563,9 +5563,9 @@ } }, "node_modules/@smoya/asyncapi-adoption-metrics": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@smoya/asyncapi-adoption-metrics/-/asyncapi-adoption-metrics-1.1.1.tgz", - "integrity": "sha512-1UTfJsw3+iUSaROu03s6OXA32HkM+h9kT1P1gZCOCddRybL5PJzvP/X3FIJEM9IICu1B7btVXdy3VNIZ/9LCaw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@smoya/asyncapi-adoption-metrics/-/asyncapi-adoption-metrics-2.0.0.tgz", + "integrity": "sha512-rux64DUwdBak8PIRUHFhsoRmDU+55WYZcoHmYCOpSBrlP5JPgcMDo2xRp3dLUBo/XN6F5Qkib0nAIkzdQGsSHg==", "dependencies": { "@smoya/multi-parser": "^4.1.0" } diff --git a/package.json b/package.json index 75680de9b28..72be4a074e7 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { "name": "@asyncapi/cli", "description": "All in one CLI for all AsyncAPI tools", - "version": "1.1.0", + "version": "1.1.1", "author": "@asyncapi", "bin": { - "asyncapi": "./bin/run" + "asyncapi": "./bin/run_bin" }, "bugs": "https://github.com/asyncapi/cli/issues", "dependencies": { diff --git a/src/base.ts b/src/base.ts index 3ac8a66e16e..c53ebd0270f 100644 --- a/src/base.ts +++ b/src/base.ts @@ -1,8 +1,14 @@ import { Command } from '@oclif/core'; -import { Recorder, StdOutSink } from '@smoya/asyncapi-adoption-metrics'; +import { NewRelicSink, Recorder, Sink, StdOutSink } from '@smoya/asyncapi-adoption-metrics'; + +class DiscardSink implements Sink { + async send() { + // noop + } +} export default abstract class extends Command { - recorder = new Recorder('asyncapi-adoption', new StdOutSink()); + recorder = recorderFromEnv('asyncapi_adoption'); async catch(err: Error & { exitCode?: number; }): Promise { try { @@ -15,3 +21,24 @@ export default abstract class extends Command { } } } + +function recorderFromEnv(prefix: string): Recorder { + let sink: Sink = new DiscardSink(); + if (process.env.ASYNCAPI_METRICS !== 'false') { + switch (process.env.NODE_ENV) { + case 'development': + // NODE_ENV set to `development` in bin/run + if (!process.env.TEST) { + // Do not pollute stdout when running tests + sink = new StdOutSink(); + } + break; + case 'production': + // NODE_ENV set to `production` in bin/run_bin, which is specified in 'bin' package.json section + sink = new NewRelicSink('eu01xx73a8521047150dd9414f6aedd2FFFFNRAL'); + break; + } + } + + return new Recorder(prefix, sink); +} diff --git a/src/commands/convert.ts b/src/commands/convert.ts index b3c6d214edf..6281553752e 100644 --- a/src/commands/convert.ts +++ b/src/commands/convert.ts @@ -85,7 +85,6 @@ export default class Convert extends Command { metadata['success'] = true; metadata['from_version'] = document.version(); metadata['to_version'] = flags['target-version']; - console.log(metadata); await this.recorder.recordActionExecuted('convert', metadata); await this.recorder.flush(); } diff --git a/src/commands/optimize.ts b/src/commands/optimize.ts index 4f7dcb38f3a..a49b2199e43 100644 --- a/src/commands/optimize.ts +++ b/src/commands/optimize.ts @@ -107,7 +107,7 @@ export default class Optimize extends Command { const specPath = specFile.getFilePath(); let newPath = ''; - + if (specPath) { const pos = specPath.lastIndexOf('.'); newPath = `${specPath.substring(0,pos) }_optimized.${ specPath.substring(pos+1)}`;