From 846079f9314cd66851bed1b37d0a6b497c56ac0c Mon Sep 17 00:00:00 2001 From: Andre Rabold Date: Wed, 22 Jun 2022 16:25:25 +0200 Subject: [PATCH 1/2] [WIP] Upload Source Maps in batches for better performance - Dropped Serverless v2 support --- package-lock.json | 19 ++++++++++- package.json | 3 +- src/index.ts | 83 +++++++++++++++++++++++++++-------------------- 3 files changed, 67 insertions(+), 38 deletions(-) diff --git a/package-lock.json b/package-lock.json index 55f5f17..379836c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "2.5.1", "license": "MIT", "dependencies": { + "@supercharge/promise-pool": "^2.3.0", "adm-zip": "^0.5.9", "semver": "^7.3.2", "superagent": "^7.1.6", @@ -39,8 +40,11 @@ "serverless": "^3.19.0", "typescript": "^4.2.4" }, + "engines": { + "node": ">=12.0.0" + }, "peerDependencies": { - "serverless": ">=2", + "serverless": ">=3", "serverless-sentry-lib": "2.x.x" } }, @@ -912,6 +916,14 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, + "node_modules/@supercharge/promise-pool": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-2.3.0.tgz", + "integrity": "sha512-KLf3JBWW4JymplvT/c5JCZhc4KrNE9EBf15FPjvklQiGcoUczSLInpV23iV5dITnvktJlwQ5xq08wfNwBk71Rg==", + "engines": { + "node": ">=8" + } + }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", @@ -7829,6 +7841,11 @@ "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true }, + "@supercharge/promise-pool": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@supercharge/promise-pool/-/promise-pool-2.3.0.tgz", + "integrity": "sha512-KLf3JBWW4JymplvT/c5JCZhc4KrNE9EBf15FPjvklQiGcoUczSLInpV23iV5dITnvktJlwQ5xq08wfNwBk71Rg==" + }, "@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", diff --git a/package.json b/package.json index 33a9d75..fcfc056 100644 --- a/package.json +++ b/package.json @@ -47,10 +47,11 @@ "getsentry.com" ], "peerDependencies": { - "serverless": ">=2", + "serverless": ">=3", "serverless-sentry-lib": "2.x.x" }, "dependencies": { + "@supercharge/promise-pool": "^2.3.0", "adm-zip": "^0.5.9", "semver": "^7.3.2", "superagent": "^7.1.6", diff --git a/src/index.ts b/src/index.ts index 7ef00b0..45eff4f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,6 @@ import * as path from "path"; +import { PromisePool } from "@supercharge/promise-pool"; import * as AdmZip from "adm-zip"; import * as SemVer from "semver"; import Serverless from "serverless"; @@ -84,12 +85,14 @@ export class SentryPlugin implements Plugin { provider: Aws; validated: boolean; isInstrumented: boolean; + logging: Plugin.Logging; - constructor(serverless: Serverless, options: Serverless.Options) { + constructor(serverless: Serverless, options: Serverless.Options, logging: Plugin.Logging) { this.serverless = serverless; this.options = options; this.custom = this.serverless.service.custom; this.provider = this.serverless.getProvider("aws"); + this.logging = logging; // Create schema for our properties. For reference use https://github.com/ajv-validator/ajv serverless.configSchemaHandler.defineCustomProperties({ @@ -211,11 +214,11 @@ export class SentryPlugin implements Plugin { // Validate Sentry options if (!this.sentry.dsn) { - this.serverless.cli.log("DSN not set. Serverless Sentry plugin is disabled.", "sentry"); + this.logging.log.notice("DSN not set. Serverless Sentry plugin is disabled."); } if (this.sentry.enabled === false) { - this.serverless.cli.log("Serverless Sentry is disabled from provided options.", "sentry"); + this.logging.log.notice("Serverless Sentry is disabled from provided options."); } // Set default option values @@ -224,10 +227,9 @@ export class SentryPlugin implements Plugin { } if (this.sentry.authToken && (!this.sentry.organization || !this.sentry.project)) { - this.serverless.cli.log( + this.logging.log.warning( "Sentry: In order to use the Sentry API " + "make sure to set `organization` and `project` in your `serverless.yml`.", - "sentry", ); this.sentry.authToken = undefined; } @@ -307,10 +309,10 @@ export class SentryPlugin implements Plugin { const functions = functionNames.reduce((functions, functionName) => { const functionObject: FunctionDefinitionWithSentry = this.serverless.service.getFunction(functionName); if ((functionObject.sentry ?? true) !== false) { - process.env.SLS_DEBUG && this.serverless.cli.log(`Instrumenting ${String(functionObject.name)}`, "sentry"); + this.logging.log.verbose(`Instrumenting ${String(functionObject.name)}`); functions[functionName] = this.instrumentFunction(functionObject, setEnv); } else { - process.env.SLS_DEBUG && this.serverless.cli.log(`Skipping ${String(functionObject.name)}`, "sentry"); + this.logging.log.verbose(`Skipping ${String(functionObject.name)}`); } return functions; }, {} as { [key: string]: FunctionDefinitionWithSentry }); @@ -318,7 +320,7 @@ export class SentryPlugin implements Plugin { this.isInstrumented = true; } - async _resolveGitRefs(gitRev: GitRev, release: SentryRelease): Promise { + private async _resolveGitRefs(gitRev: GitRev, release: SentryRelease): Promise { const origin = await gitRev.origin(); const commit = await gitRev.long(); let repository = /[:/]([^/]+\/[^/]+?)(?:\.git)?$/i.exec(origin)?.[1]; @@ -388,17 +390,16 @@ export class SentryPlugin implements Plugin { throw new Error(`Sentry: No Git available - ${(err as Error).toString()}`); } // Fall back to use a random number instead. - process.env.SLS_DEBUG && - this.serverless.cli.log("No Git available. Creating a random release version...", "sentry"); - release.version = this.getRandomVersion(); + this.logging.log.verbose("No Git available. Creating a random release version..."); + release.version = this._generateRandomVersion(); release.refs = undefined; } } else if (version === "random") { - process.env.SLS_DEBUG && this.serverless.cli.log("Creating a random release version...", "sentry"); - release.version = this.getRandomVersion(); + this.logging.log.verbose("Creating a random release version..."); + release.version = this._generateRandomVersion(); } else { const str = String(version).trim(); - process.env.SLS_DEBUG && this.serverless.cli.log(`Setting release version to "${str}"...`, "sentry"); + this.logging.log.verbose(`Setting release version to "${str}"...`); release.version = str; } @@ -406,7 +407,7 @@ export class SentryPlugin implements Plugin { } async createSentryRelease(): Promise { - const apiParameters = this._apiParameters(); + const apiParameters = this._getApiParameters(); if (!apiParameters) { // Nothing to do return; @@ -419,7 +420,7 @@ export class SentryPlugin implements Plugin { version, }; - this.serverless.cli.log(`Creating new release "${version}"...: ${JSON.stringify(payload)}`, "sentry"); + this.logging.log.notice(`Creating new release "${version}"...: ${JSON.stringify(payload)}`); try { await request .post(`https://sentry.io/api/0/organizations/${_e(organization)}/releases/`) @@ -427,23 +428,26 @@ export class SentryPlugin implements Plugin { .send(payload); } catch (err) { if ((err as request.ResponseError)?.response?.text) { - this.serverless.cli.log( + this.logging.log.error( `Received error response from Sentry:\n${String((err as request.ResponseError)?.response?.text)}`, - "sentry", ); } throw new Error(`Sentry: Error uploading release - ${(err as Error).toString()}`); } + + this.logging.log.success(`Release ${version} created`); } async uploadSentrySourcemaps(): Promise { - const apiParameters = this._apiParameters(); + const apiParameters = this._getApiParameters(); if (!apiParameters || !this.sentry.sourceMaps) { // Nothing to do return; } - this.serverless.cli.log("Uploading sourcemaps to sentry", "sentry"); + const progress = this.logging.progress.create({ + message: "Uploading source maps", + }); const artifacts = new Set( this.serverless.service @@ -464,14 +468,21 @@ export class SentryPlugin implements Plugin { }); }); - // Upload artifacts one after the other - await results.reduce( - (previousPromise, nextArtifact) => previousPromise.then(() => nextArtifact()), - Promise.resolve(), - ); + // Start uploading artifacts + let uploaded = 0; + await PromisePool.withConcurrency(5) + .for(results) + .process(async (nextArtifact) => { + progress.update(`${Math.floor(uploaded / results.length)}%`); + await nextArtifact(); + uploaded += 1; + }); + + progress.remove(); + this.logging.log.success("Source maps uploaded"); } - async _uploadSourceMap(entry: AdmZip.IZipEntry, params: ApiParameters): Promise { + private async _uploadSourceMap(entry: AdmZip.IZipEntry, params: ApiParameters): Promise { const prefix = typeof this.sentry.sourceMaps === "object" && this.sentry.sourceMaps.urlPrefix; const filePath = prefix ? path.join(prefix, entry.entryName) : entry.entryName; const data = entry.getData(); @@ -486,12 +497,11 @@ export class SentryPlugin implements Plugin { const responseError = err as request.ResponseError; if (responseError?.response?.status === 409) { - process.env.SLS_DEBUG && this.serverless.cli.log(`Skipping already uploaded file: ${entry.name}`, "sentry"); + this.logging.log.verbose(`Skipping already uploaded file: ${entry.name}`); return; } else if (responseError?.response?.text) { - this.serverless.cli.log( + this.logging.log.error( `Received error response from Sentry:\n${String((err as request.ResponseError)?.response?.text)}`, - "sentry", ); } @@ -500,13 +510,13 @@ export class SentryPlugin implements Plugin { } async deploySentryRelease(): Promise { - const apiParameters = this._apiParameters(); + const apiParameters = this._getApiParameters(); if (!apiParameters || !this.sentry.sourceMaps) { // Nothing to do return; } - this.serverless.cli.log(`Deploying release "${String(apiParameters.version)}"...`, "sentry"); + this.logging.log.notice(`Deploying release "${String(apiParameters.version)}"...`); try { await request .post( @@ -521,18 +531,19 @@ export class SentryPlugin implements Plugin { }); } catch (err) { if ((err as request.ResponseError)?.response?.text) { - this.serverless.cli.log( + this.logging.log.error( `Received error response from Sentry:\n${String((err as request.ResponseError)?.response?.text)}`, - "sentry", ); } throw new Error(`Sentry: Error deploying release - ${(err as Error).toString()}`); } + + this.logging.log.success(`Release "${String(apiParameters.version)}" deployed`); } - _apiParameters(): ApiParameters | undefined { + private _getApiParameters(): ApiParameters | undefined { if (!this.sentry.dsn || !this.sentry.authToken || !this.sentry.release) { - // Not configured for API access + // Not configured for Sentry API access return; } @@ -554,7 +565,7 @@ export class SentryPlugin implements Plugin { }; } - getRandomVersion(): string { + private _generateRandomVersion(): string { return uuid().replace(/-/g, ""); } } From bf8c10e4a2b7995b5c812c67c7646c348bfb426f Mon Sep 17 00:00:00 2001 From: Andre Rabold Date: Wed, 22 Jun 2022 16:26:18 +0200 Subject: [PATCH 2/2] Updated dist --- dist/git-rev.js | 2 +- dist/index.d.ts | 21 ++++-------- dist/index.js | 86 +++++++++++++++++++++++++++++++------------------ 3 files changed, 61 insertions(+), 48 deletions(-) diff --git a/dist/git-rev.js b/dist/git-rev.js index 404ecdb..e75966c 100644 --- a/dist/git-rev.js +++ b/dist/git-rev.js @@ -98,7 +98,7 @@ var GitRev = /** @class */ (function () { GitRev.prototype.exactTag = function () { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { - // Suppress errors + // Suppress errors as this will fail if no tag exists yet return [2 /*return*/, this._command("git describe --exact-match --tags HEAD").catch(function () { return undefined; })]; }); }); diff --git a/dist/index.d.ts b/dist/index.d.ts index 67a020f..9564f85 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -1,9 +1,7 @@ -import * as AdmZip from "adm-zip"; import Serverless from "serverless"; import Plugin from "serverless/classes/Plugin"; import Service from "serverless/classes/Service"; import Aws from "serverless/plugins/aws/provider/awsProvider"; -import GitRev from "./git-rev"; export declare type SentryRelease = { version: string | boolean; refs?: { @@ -45,14 +43,6 @@ export declare type SentryOptions = { declare type FunctionDefinitionWithSentry = Serverless.FunctionDefinition & { sentry?: boolean | SentryOptions; }; -/** Required parameters for creating/updating releases in the API */ -declare type ApiParameters = { - authToken: string; - organization: string; - project?: string; - refs?: SentryRelease["refs"]; - version: string; -}; /** * Serverless Plugin forward Lambda exceptions to Sentry (https://sentry.io) */ @@ -67,7 +57,8 @@ export declare class SentryPlugin implements Plugin { provider: Aws; validated: boolean; isInstrumented: boolean; - constructor(serverless: Serverless, options: Serverless.Options); + logging: Plugin.Logging; + constructor(serverless: Serverless, options: Serverless.Options, logging: Plugin.Logging); configPlugin(): void; validate(): Promise; instrumentFunction(originalDefinition: Serverless.FunctionDefinition, setEnv: boolean): FunctionDefinitionWithSentry; @@ -76,13 +67,13 @@ export declare class SentryPlugin implements Plugin { * @param setEnv set to `true` to set `process.env`. Useful when invoking the Lambda locally */ instrumentFunctions(setEnv?: boolean): Promise; - _resolveGitRefs(gitRev: GitRev, release: SentryRelease): Promise; + private _resolveGitRefs; setRelease(): Promise; createSentryRelease(): Promise; uploadSentrySourcemaps(): Promise; - _uploadSourceMap(entry: AdmZip.IZipEntry, params: ApiParameters): Promise; + private _uploadSourceMap; deploySentryRelease(): Promise; - _apiParameters(): ApiParameters | undefined; - getRandomVersion(): string; + private _getApiParameters; + private _generateRandomVersion; } export {}; diff --git a/dist/index.js b/dist/index.js index 623126d..2668d0d 100644 --- a/dist/index.js +++ b/dist/index.js @@ -49,6 +49,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) { Object.defineProperty(exports, "__esModule", { value: true }); exports.SentryPlugin = void 0; var path = require("path"); +var promise_pool_1 = require("@supercharge/promise-pool"); var AdmZip = require("adm-zip"); var SemVer = require("semver"); var request = require("superagent"); @@ -60,12 +61,13 @@ var _e = encodeURIComponent; * Serverless Plugin forward Lambda exceptions to Sentry (https://sentry.io) */ var SentryPlugin = /** @class */ (function () { - function SentryPlugin(serverless, options) { + function SentryPlugin(serverless, options, logging) { var _this = this; this.serverless = serverless; this.options = options; this.custom = this.serverless.service.custom; this.provider = this.serverless.getProvider("aws"); + this.logging = logging; // Create schema for our properties. For reference use https://github.com/ajv-validator/ajv serverless.configSchemaHandler.defineCustomProperties({ type: "object", @@ -262,18 +264,18 @@ var SentryPlugin = /** @class */ (function () { this.sentry = __assign({}, (this.serverless.service.custom.sentry || {})); // Validate Sentry options if (!this.sentry.dsn) { - this.serverless.cli.log("DSN not set. Serverless Sentry plugin is disabled.", "sentry"); + this.logging.log.notice("DSN not set. Serverless Sentry plugin is disabled."); } if (this.sentry.enabled === false) { - this.serverless.cli.log("Serverless Sentry is disabled from provided options.", "sentry"); + this.logging.log.notice("Serverless Sentry is disabled from provided options."); } // Set default option values if (!this.sentry.environment) { this.sentry.environment = (_a = this.options.stage) !== null && _a !== void 0 ? _a : undefined; } if (this.sentry.authToken && (!this.sentry.organization || !this.sentry.project)) { - this.serverless.cli.log("Sentry: In order to use the Sentry API " + - "make sure to set `organization` and `project` in your `serverless.yml`.", "sentry"); + this.logging.log.warning("Sentry: In order to use the Sentry API " + + "make sure to set `organization` and `project` in your `serverless.yml`."); this.sentry.authToken = undefined; } return [2 /*return*/]; @@ -357,11 +359,11 @@ var SentryPlugin = /** @class */ (function () { var _a; var functionObject = _this.serverless.service.getFunction(functionName); if (((_a = functionObject.sentry) !== null && _a !== void 0 ? _a : true) !== false) { - process.env.SLS_DEBUG && _this.serverless.cli.log("Instrumenting ".concat(String(functionObject.name)), "sentry"); + _this.logging.log.verbose("Instrumenting ".concat(String(functionObject.name))); functions[functionName] = _this.instrumentFunction(functionObject, setEnv); } else { - process.env.SLS_DEBUG && _this.serverless.cli.log("Skipping ".concat(String(functionObject.name)), "sentry"); + _this.logging.log.verbose("Skipping ".concat(String(functionObject.name))); } return functions; }, {}); @@ -471,20 +473,19 @@ var SentryPlugin = /** @class */ (function () { throw new Error("Sentry: No Git available - ".concat(err_1.toString())); } // Fall back to use a random number instead. - process.env.SLS_DEBUG && - this.serverless.cli.log("No Git available. Creating a random release version...", "sentry"); - release.version = this.getRandomVersion(); + this.logging.log.verbose("No Git available. Creating a random release version..."); + release.version = this._generateRandomVersion(); release.refs = undefined; return [3 /*break*/, 8]; case 8: return [3 /*break*/, 10]; case 9: if (version === "random") { - process.env.SLS_DEBUG && this.serverless.cli.log("Creating a random release version...", "sentry"); - release.version = this.getRandomVersion(); + this.logging.log.verbose("Creating a random release version..."); + release.version = this._generateRandomVersion(); } else { str = String(version).trim(); - process.env.SLS_DEBUG && this.serverless.cli.log("Setting release version to \"".concat(str, "\"..."), "sentry"); + this.logging.log.verbose("Setting release version to \"".concat(str, "\"...")); release.version = str; } _c.label = 10; @@ -502,7 +503,7 @@ var SentryPlugin = /** @class */ (function () { return __generator(this, function (_c) { switch (_c.label) { case 0: - apiParameters = this._apiParameters(); + apiParameters = this._getApiParameters(); if (!apiParameters) { // Nothing to do return [2 /*return*/]; @@ -513,7 +514,7 @@ var SentryPlugin = /** @class */ (function () { refs: refs, version: version, }; - this.serverless.cli.log("Creating new release \"".concat(version, "\"...: ").concat(JSON.stringify(payload)), "sentry"); + this.logging.log.notice("Creating new release \"".concat(version, "\"...: ").concat(JSON.stringify(payload))); _c.label = 1; case 1: _c.trys.push([1, 3, , 4]); @@ -527,27 +528,31 @@ var SentryPlugin = /** @class */ (function () { case 3: err_2 = _c.sent(); if ((_a = err_2 === null || err_2 === void 0 ? void 0 : err_2.response) === null || _a === void 0 ? void 0 : _a.text) { - this.serverless.cli.log("Received error response from Sentry:\n".concat(String((_b = err_2 === null || err_2 === void 0 ? void 0 : err_2.response) === null || _b === void 0 ? void 0 : _b.text)), "sentry"); + this.logging.log.error("Received error response from Sentry:\n".concat(String((_b = err_2 === null || err_2 === void 0 ? void 0 : err_2.response) === null || _b === void 0 ? void 0 : _b.text))); } throw new Error("Sentry: Error uploading release - ".concat(err_2.toString())); - case 4: return [2 /*return*/]; + case 4: + this.logging.log.success("Release ".concat(version, " created")); + return [2 /*return*/]; } }); }); }; SentryPlugin.prototype.uploadSentrySourcemaps = function () { return __awaiter(this, void 0, void 0, function () { - var apiParameters, artifacts, results; + var apiParameters, progress, artifacts, results, uploaded; var _this = this; return __generator(this, function (_a) { switch (_a.label) { case 0: - apiParameters = this._apiParameters(); + apiParameters = this._getApiParameters(); if (!apiParameters || !this.sentry.sourceMaps) { // Nothing to do return [2 /*return*/]; } - this.serverless.cli.log("Uploading sourcemaps to sentry", "sentry"); + progress = this.logging.progress.create({ + message: "Uploading source maps", + }); artifacts = new Set(this.serverless.service .getAllFunctions() .map(function (name) { var _a; return (_a = _this.serverless.service.getFunction(name).package) === null || _a === void 0 ? void 0 : _a.artifact; }) @@ -561,11 +566,26 @@ var SentryPlugin = /** @class */ (function () { } }); }); - // Upload artifacts one after the other - return [4 /*yield*/, results.reduce(function (previousPromise, nextArtifact) { return previousPromise.then(function () { return nextArtifact(); }); }, Promise.resolve())]; + uploaded = 0; + return [4 /*yield*/, promise_pool_1.PromisePool.withConcurrency(5) + .for(results) + .process(function (nextArtifact) { return __awaiter(_this, void 0, void 0, function () { + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + progress.update("".concat(Math.floor(uploaded / results.length), "%")); + return [4 /*yield*/, nextArtifact()]; + case 1: + _a.sent(); + uploaded += 1; + return [2 /*return*/]; + } + }); + }); })]; case 1: - // Upload artifacts one after the other _a.sent(); + progress.remove(); + this.logging.log.success("Source maps uploaded"); return [2 /*return*/]; } }); @@ -596,11 +616,11 @@ var SentryPlugin = /** @class */ (function () { err_3 = _d.sent(); responseError = err_3; if (((_a = responseError === null || responseError === void 0 ? void 0 : responseError.response) === null || _a === void 0 ? void 0 : _a.status) === 409) { - process.env.SLS_DEBUG && this.serverless.cli.log("Skipping already uploaded file: ".concat(entry.name), "sentry"); + this.logging.log.verbose("Skipping already uploaded file: ".concat(entry.name)); return [2 /*return*/]; } else if ((_b = responseError === null || responseError === void 0 ? void 0 : responseError.response) === null || _b === void 0 ? void 0 : _b.text) { - this.serverless.cli.log("Received error response from Sentry:\n".concat(String((_c = err_3 === null || err_3 === void 0 ? void 0 : err_3.response) === null || _c === void 0 ? void 0 : _c.text)), "sentry"); + this.logging.log.error("Received error response from Sentry:\n".concat(String((_c = err_3 === null || err_3 === void 0 ? void 0 : err_3.response) === null || _c === void 0 ? void 0 : _c.text))); } throw new Error("Sentry: Error uploading sourcemap file - ".concat(err_3.toString())); case 4: return [2 /*return*/]; @@ -615,12 +635,12 @@ var SentryPlugin = /** @class */ (function () { return __generator(this, function (_c) { switch (_c.label) { case 0: - apiParameters = this._apiParameters(); + apiParameters = this._getApiParameters(); if (!apiParameters || !this.sentry.sourceMaps) { // Nothing to do return [2 /*return*/]; } - this.serverless.cli.log("Deploying release \"".concat(String(apiParameters.version), "\"..."), "sentry"); + this.logging.log.notice("Deploying release \"".concat(String(apiParameters.version), "\"...")); _c.label = 1; case 1: _c.trys.push([1, 3, , 4]); @@ -637,17 +657,19 @@ var SentryPlugin = /** @class */ (function () { case 3: err_4 = _c.sent(); if ((_a = err_4 === null || err_4 === void 0 ? void 0 : err_4.response) === null || _a === void 0 ? void 0 : _a.text) { - this.serverless.cli.log("Received error response from Sentry:\n".concat(String((_b = err_4 === null || err_4 === void 0 ? void 0 : err_4.response) === null || _b === void 0 ? void 0 : _b.text)), "sentry"); + this.logging.log.error("Received error response from Sentry:\n".concat(String((_b = err_4 === null || err_4 === void 0 ? void 0 : err_4.response) === null || _b === void 0 ? void 0 : _b.text))); } throw new Error("Sentry: Error deploying release - ".concat(err_4.toString())); - case 4: return [2 /*return*/]; + case 4: + this.logging.log.success("Release \"".concat(String(apiParameters.version), "\" deployed")); + return [2 /*return*/]; } }); }); }; - SentryPlugin.prototype._apiParameters = function () { + SentryPlugin.prototype._getApiParameters = function () { if (!this.sentry.dsn || !this.sentry.authToken || !this.sentry.release) { - // Not configured for API access + // Not configured for Sentry API access return; } var organization = this.sentry.organization; @@ -666,7 +688,7 @@ var SentryPlugin = /** @class */ (function () { version: release.version, }; }; - SentryPlugin.prototype.getRandomVersion = function () { + SentryPlugin.prototype._generateRandomVersion = function () { return (0, uuid_1.v4)().replace(/-/g, ""); }; return SentryPlugin;