@datadog/datadog-ci-base 5.7.0 → 5.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts +13 -1
- package/dist/cli.js +76 -33
- package/dist/cli.js.map +1 -1
- package/dist/commands/aas/common.d.ts +13 -2
- package/dist/commands/aas/common.js +46 -24
- package/dist/commands/aas/common.js.map +1 -1
- package/dist/commands/aas/instrument.js +1 -1
- package/dist/commands/aas/instrument.js.map +1 -1
- package/dist/commands/aas/uninstrument.js +1 -1
- package/dist/commands/aas/uninstrument.js.map +1 -1
- package/dist/commands/ci-env/cli.d.ts +2 -0
- package/dist/commands/ci-env/cli.js +10 -0
- package/dist/commands/ci-env/cli.js.map +1 -0
- package/dist/commands/ci-env/read.d.ts +7 -0
- package/dist/commands/ci-env/read.js +176 -0
- package/dist/commands/ci-env/read.js.map +1 -0
- package/dist/commands/cloud-run/constants.js +1 -2
- package/dist/commands/cloud-run/constants.js.map +1 -1
- package/dist/commands/container-app/common.js +10 -11
- package/dist/commands/container-app/common.js.map +1 -1
- package/dist/commands/coverage/upload.d.ts +2 -0
- package/dist/commands/coverage/upload.js +6 -0
- package/dist/commands/coverage/upload.js.map +1 -1
- package/dist/commands/elf-symbols/cli.d.ts +2 -0
- package/dist/commands/elf-symbols/cli.js +10 -0
- package/dist/commands/elf-symbols/cli.js.map +1 -0
- package/dist/commands/elf-symbols/elf-constants.d.ts +256 -0
- package/dist/commands/elf-symbols/elf-constants.js +465 -0
- package/dist/commands/elf-symbols/elf-constants.js.map +1 -0
- package/dist/commands/elf-symbols/elf.d.ts +105 -0
- package/dist/commands/elf-symbols/elf.js +431 -0
- package/dist/commands/elf-symbols/elf.js.map +1 -0
- package/dist/commands/elf-symbols/helpers.d.ts +4 -0
- package/dist/commands/elf-symbols/helpers.js +29 -0
- package/dist/commands/elf-symbols/helpers.js.map +1 -0
- package/dist/commands/elf-symbols/interfaces.d.ts +18 -0
- package/dist/commands/elf-symbols/interfaces.js +7 -0
- package/dist/commands/elf-symbols/interfaces.js.map +1 -0
- package/dist/commands/elf-symbols/renderer.d.ts +19 -0
- package/dist/commands/elf-symbols/renderer.js +87 -0
- package/dist/commands/elf-symbols/renderer.js.map +1 -0
- package/dist/commands/elf-symbols/upload.d.ts +31 -0
- package/dist/commands/elf-symbols/upload.js +412 -0
- package/dist/commands/elf-symbols/upload.js.map +1 -0
- package/dist/commands/flutter-symbols/cli.d.ts +2 -0
- package/dist/commands/flutter-symbols/cli.js +10 -0
- package/dist/commands/flutter-symbols/cli.js.map +1 -0
- package/dist/commands/flutter-symbols/helpers.d.ts +8 -0
- package/dist/commands/flutter-symbols/helpers.js +51 -0
- package/dist/commands/flutter-symbols/helpers.js.map +1 -0
- package/dist/commands/flutter-symbols/interfaces.d.ts +17 -0
- package/dist/commands/flutter-symbols/interfaces.js +10 -0
- package/dist/commands/flutter-symbols/interfaces.js.map +1 -0
- package/dist/commands/flutter-symbols/renderer.d.ts +23 -0
- package/dist/commands/flutter-symbols/renderer.js +106 -0
- package/dist/commands/flutter-symbols/renderer.js.map +1 -0
- package/dist/commands/flutter-symbols/upload.d.ts +44 -0
- package/dist/commands/flutter-symbols/upload.js +510 -0
- package/dist/commands/flutter-symbols/upload.js.map +1 -0
- package/dist/commands/lambda/cli.d.ts +2 -1
- package/dist/commands/lambda/cli.js +2 -0
- package/dist/commands/lambda/cli.js.map +1 -1
- package/dist/commands/lambda/cloudwatch.d.ts +15 -0
- package/dist/commands/lambda/cloudwatch.js +77 -0
- package/dist/commands/lambda/cloudwatch.js.map +1 -0
- package/dist/commands/measure/cli.d.ts +2 -0
- package/dist/commands/measure/cli.js +10 -0
- package/dist/commands/measure/cli.js.map +1 -0
- package/dist/commands/measure/measure.d.ts +18 -0
- package/dist/commands/measure/measure.js +171 -0
- package/dist/commands/measure/measure.js.map +1 -0
- package/dist/commands/pe-symbols/breakpad.d.ts +2 -0
- package/dist/commands/pe-symbols/breakpad.js +159 -0
- package/dist/commands/pe-symbols/breakpad.js.map +1 -0
- package/dist/commands/pe-symbols/cli.d.ts +2 -0
- package/dist/commands/pe-symbols/cli.js +10 -0
- package/dist/commands/pe-symbols/cli.js.map +1 -0
- package/dist/commands/pe-symbols/helpers.d.ts +4 -0
- package/dist/commands/pe-symbols/helpers.js +30 -0
- package/dist/commands/pe-symbols/helpers.js.map +1 -0
- package/dist/commands/pe-symbols/interfaces.d.ts +17 -0
- package/dist/commands/pe-symbols/interfaces.js +7 -0
- package/dist/commands/pe-symbols/interfaces.js.map +1 -0
- package/dist/commands/pe-symbols/pe-constants.d.ts +51 -0
- package/dist/commands/pe-symbols/pe-constants.js +160 -0
- package/dist/commands/pe-symbols/pe-constants.js.map +1 -0
- package/dist/commands/pe-symbols/pe.d.ts +40 -0
- package/dist/commands/pe-symbols/pe.js +249 -0
- package/dist/commands/pe-symbols/pe.js.map +1 -0
- package/dist/commands/pe-symbols/renderer.d.ts +19 -0
- package/dist/commands/pe-symbols/renderer.js +87 -0
- package/dist/commands/pe-symbols/renderer.js.map +1 -0
- package/dist/commands/pe-symbols/upload.d.ts +34 -0
- package/dist/commands/pe-symbols/upload.js +457 -0
- package/dist/commands/pe-symbols/upload.js.map +1 -0
- package/dist/commands/react-native/cli.d.ts +5 -0
- package/dist/commands/react-native/cli.js +16 -0
- package/dist/commands/react-native/cli.js.map +1 -0
- package/dist/commands/react-native/codepush.d.ts +29 -0
- package/dist/commands/react-native/codepush.js +176 -0
- package/dist/commands/react-native/codepush.js.map +1 -0
- package/dist/commands/react-native/errors.d.ts +9 -0
- package/dist/commands/react-native/errors.js +34 -0
- package/dist/commands/react-native/errors.js.map +1 -0
- package/dist/commands/react-native/injectDebugId.d.ts +42 -0
- package/dist/commands/react-native/injectDebugId.js +252 -0
- package/dist/commands/react-native/injectDebugId.js.map +1 -0
- package/dist/commands/react-native/interfaces.d.ts +20 -0
- package/dist/commands/react-native/interfaces.js +93 -0
- package/dist/commands/react-native/interfaces.js.map +1 -0
- package/dist/commands/react-native/renderer.d.ts +20 -0
- package/dist/commands/react-native/renderer.js +111 -0
- package/dist/commands/react-native/renderer.js.map +1 -0
- package/dist/commands/react-native/upload.d.ts +30 -0
- package/dist/commands/react-native/upload.js +317 -0
- package/dist/commands/react-native/upload.js.map +1 -0
- package/dist/commands/react-native/utils.d.ts +4 -0
- package/dist/commands/react-native/utils.js +35 -0
- package/dist/commands/react-native/utils.js.map +1 -0
- package/dist/commands/react-native/validation.d.ts +6 -0
- package/dist/commands/react-native/validation.js +24 -0
- package/dist/commands/react-native/validation.js.map +1 -0
- package/dist/commands/react-native/xcode.d.ts +58 -0
- package/dist/commands/react-native/xcode.js +561 -0
- package/dist/commands/react-native/xcode.js.map +1 -0
- package/dist/commands/sourcemaps/cli.d.ts +2 -0
- package/dist/commands/sourcemaps/cli.js +10 -0
- package/dist/commands/sourcemaps/cli.js.map +1 -0
- package/dist/commands/sourcemaps/interfaces.d.ts +18 -0
- package/dist/commands/sourcemaps/interfaces.js +59 -0
- package/dist/commands/sourcemaps/interfaces.js.map +1 -0
- package/dist/commands/sourcemaps/renderer.d.ts +13 -0
- package/dist/commands/sourcemaps/renderer.js +93 -0
- package/dist/commands/sourcemaps/renderer.js.map +1 -0
- package/dist/commands/sourcemaps/upload.d.ts +29 -0
- package/dist/commands/sourcemaps/upload.js +342 -0
- package/dist/commands/sourcemaps/upload.js.map +1 -0
- package/dist/commands/sourcemaps/utils.d.ts +3 -0
- package/dist/commands/sourcemaps/utils.js +73 -0
- package/dist/commands/sourcemaps/utils.js.map +1 -0
- package/dist/commands/sourcemaps/validation.d.ts +7 -0
- package/dist/commands/sourcemaps/validation.js +41 -0
- package/dist/commands/sourcemaps/validation.js.map +1 -0
- package/dist/commands/span/cli.d.ts +2 -0
- package/dist/commands/span/cli.js +10 -0
- package/dist/commands/span/cli.js.map +1 -0
- package/dist/commands/span/span.d.ts +10 -0
- package/dist/commands/span/span.js +112 -0
- package/dist/commands/span/span.js.map +1 -0
- package/dist/commands/terraform/cli.d.ts +2 -0
- package/dist/commands/terraform/cli.js +10 -0
- package/dist/commands/terraform/cli.js.map +1 -0
- package/dist/commands/terraform/upload.d.ts +14 -0
- package/dist/commands/terraform/upload.js +93 -0
- package/dist/commands/terraform/upload.js.map +1 -0
- package/dist/commands/trace/api.d.ts +6 -0
- package/dist/commands/trace/api.js +38 -0
- package/dist/commands/trace/api.js.map +1 -0
- package/dist/commands/trace/cli.d.ts +2 -0
- package/dist/commands/trace/cli.js +10 -0
- package/dist/commands/trace/cli.js.map +1 -0
- package/dist/commands/trace/helper.d.ts +16 -0
- package/dist/commands/trace/helper.js +125 -0
- package/dist/commands/trace/helper.js.map +1 -0
- package/dist/commands/trace/interfaces.d.ts +18 -0
- package/dist/commands/trace/interfaces.js +14 -0
- package/dist/commands/trace/interfaces.js.map +1 -0
- package/dist/commands/trace/test-utils.d.ts +4 -0
- package/dist/commands/trace/test-utils.js +156 -0
- package/dist/commands/trace/test-utils.js.map +1 -0
- package/dist/commands/trace/trace.d.ts +10 -0
- package/dist/commands/trace/trace.js +110 -0
- package/dist/commands/trace/trace.js.map +1 -0
- package/dist/commands/unity-symbols/cli.d.ts +2 -0
- package/dist/commands/unity-symbols/cli.js +10 -0
- package/dist/commands/unity-symbols/cli.js.map +1 -0
- package/dist/commands/unity-symbols/helpers.d.ts +4 -0
- package/dist/commands/unity-symbols/helpers.js +29 -0
- package/dist/commands/unity-symbols/helpers.js.map +1 -0
- package/dist/commands/unity-symbols/interfaces.d.ts +14 -0
- package/dist/commands/unity-symbols/interfaces.js +9 -0
- package/dist/commands/unity-symbols/interfaces.js.map +1 -0
- package/dist/commands/unity-symbols/renderer.d.ts +19 -0
- package/dist/commands/unity-symbols/renderer.js +88 -0
- package/dist/commands/unity-symbols/renderer.js.map +1 -0
- package/dist/commands/unity-symbols/upload.d.ts +32 -0
- package/dist/commands/unity-symbols/upload.js +392 -0
- package/dist/commands/unity-symbols/upload.js.map +1 -0
- package/dist/commands/version/cli.d.ts +2 -0
- package/dist/commands/version/cli.js +10 -0
- package/dist/commands/version/cli.js.map +1 -0
- package/dist/commands/version/version.d.ts +6 -0
- package/dist/commands/version/version.js +31 -0
- package/dist/commands/version/version.js.map +1 -0
- package/dist/helpers/ci.js +50 -5
- package/dist/helpers/ci.js.map +1 -1
- package/dist/helpers/plugin.js +1 -1
- package/dist/helpers/plugin.js.map +1 -1
- package/dist/helpers/serverless/azure.d.ts +2 -0
- package/dist/helpers/serverless/azure.js +3 -3
- package/dist/helpers/serverless/azure.js.map +1 -1
- package/dist/helpers/serverless/lambda-layer-versions.d.ts +3 -3
- package/dist/helpers/serverless/lambda-layer-versions.js +3 -3
- package/package.json +23 -17
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/commands/react-native/interfaces.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAmB;AAKnB,MAAa,WAAW;IAKtB,YAAY,UAAkB,EAAE,aAAqB;QAiD9C,sCAAiC,GAAG,GAAG,EAAE;YAC9C,MAAM,oBAAoB,GAAG,GAAG,IAAI,CAAC,aAAa,qBAAqB,CAAA;YACvE,MAAM,IAAI,GAAG,YAAE,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;YACxD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAClC,OAAO,SAAS,CAAC,cAAc,CAAA;YAE/B,YAAE,CAAC,aAAa,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,CAAA;YACzE,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAA;QAC3C,CAAC,CAAA;QAEO,mBAAc,GAAG,CAAC,OAAuB,EAAsB,EAAE;YACvE,IAAI;gBACF,MAAM,IAAI,GAAG,YAAE,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;gBACxD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAsB,CAAA;gBACvD,MAAM,OAAO,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;gBACpC,IAAI,OAAO,EAAE;oBACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,OAAO,IAAI,CAAC,CAAA;oBAEvE,OAAO,OAAO,CAAA;iBACf;qBAAM;oBACL,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;iBAC1D;aACF;YAAC,OAAO,GAAG,EAAE;gBACZ,MAAM,QAAQ,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,QAAQ,IAAI,CAAC,CAAA;aAC9E;YAED,OAAO,SAAS,CAAA;QAClB,CAAC,CAAA;QA5EC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;IACpC,CAAC;IAEM,iBAAiB,CAAC,OAAgB;QACvC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAEM,kBAAkB,CACvB,UAAkB,EAClB,OAAe,EACf,OAAe,EACf,WAAmB,EACnB,QAAoB,EACpB,KAAa,EACb,OAAuB;QAEvB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAyB;YAC9C;gBACE,OAAO;gBACP,IAAI,CAAC,kBAAkB,CACrB,UAAU,EACV,OAAO,EACP,OAAO,EACP,WAAW,EACX,QAAQ,EACR,KAAK,EACL,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAC7B;aACF;YACD,CAAC,YAAY,EAAE,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,EAAC,QAAQ,EAAE,YAAY,EAAC,EAAC,CAAC;SAC5F,CAAC,CAAA;QACF,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,oBAAoB,KAAK,SAAS,EAAE;YACjF,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE;gBACxB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE;oBACP,WAAW,EAAE,kBAAkB;oBAC/B,QAAQ,EAAE,YAAY;iBACvB;gBACD,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB;aACzC,CAAC,CAAA;SACH;QAED,OAAO;YACL,OAAO;SACR,CAAA;IACH,CAAC;IAgCO,kBAAkB,CACxB,UAAkB,EAClB,OAAe,EACf,OAAe,EACf,WAAmB,EACnB,QAAoB,EACpB,KAAa,EACb,OAA2B;QAE3B,MAAM,QAAQ,GAAuB;YACnC,YAAY,EAAE,KAAK;YACnB,WAAW,EAAE,IAAI,CAAC,UAAU;YAC5B,WAAW,EAAE,UAAU;YACvB,QAAQ;YACR,YAAY,EAAE,WAAW;YACzB,OAAO;YACP,IAAI,EAAE,wBAAwB;YAC9B,OAAO;YACP,QAAQ,EAAE,OAAO;SAClB,CAAA;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;YAC9B,QAAQ,CAAC,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAA;YAC3D,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAA;SACpD;QAED,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE;gBACP,WAAW,EAAE,kBAAkB;gBAC/B,QAAQ,EAAE,OAAO;aAClB;YACD,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;SAChC,CAAA;IACH,CAAC;CACF;AAtHD,kCAsHC;AAQY,QAAA,sBAAsB,GAAG,CAAC,KAAK,EAAE,SAAS,CAAU,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { UploadStatus } from '@datadog/datadog-ci-base/helpers/upload';
|
|
2
|
+
import { RNSourcemap } from './interfaces';
|
|
3
|
+
export declare const renderGitWarning: (errorMessage: string) => string;
|
|
4
|
+
export declare const renderGitDataNotAttachedWarning: (sourcemap: string, errorMessage: string) => string;
|
|
5
|
+
export declare const renderSourcesNotFoundWarning: (sourcemap: string) => string;
|
|
6
|
+
export declare const renderConfigurationError: (error: Error) => string;
|
|
7
|
+
export declare const renderFailedUpload: (sourcemap: RNSourcemap, errorMessage: string) => string;
|
|
8
|
+
export declare const renderRetriedUpload: (payload: RNSourcemap, errorMessage: string, attempt: number) => string;
|
|
9
|
+
export declare const renderRemoveSourcesContentWarning: () => string;
|
|
10
|
+
export declare const renderFailedSourcesContentRemovalError: (payload: RNSourcemap, errorMessage: string) => string;
|
|
11
|
+
/**
|
|
12
|
+
* As of now, this command takes an array of one single UploadStatus element since we only support upload
|
|
13
|
+
* of a single sourcemap.
|
|
14
|
+
* We considered it was preferable to leave it this way so it's ready for multiple sourcemaps uploads,
|
|
15
|
+
* rather than investing into adapting it for this purpose.
|
|
16
|
+
* This comment should be removed once the multiple file upload is available.
|
|
17
|
+
*/
|
|
18
|
+
export declare const renderSuccessfulCommand: (statuses: UploadStatus[], duration: number, dryRun: boolean) => string;
|
|
19
|
+
export declare const renderCommandInfo: (bundlePath: string | undefined, sourcemapPath: string, platform: string, releaseVersion: string, service: string, poolLimit: number, dryRun: boolean, projectPath: string, buildVersion: string, bundleName: string) => string;
|
|
20
|
+
export declare const renderUpload: (sourcemap: RNSourcemap) => string;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.renderUpload = exports.renderCommandInfo = exports.renderSuccessfulCommand = exports.renderFailedSourcesContentRemovalError = exports.renderRemoveSourcesContentWarning = exports.renderRetriedUpload = exports.renderFailedUpload = exports.renderConfigurationError = exports.renderSourcesNotFoundWarning = exports.renderGitDataNotAttachedWarning = exports.renderGitWarning = void 0;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const formatting_1 = require("@datadog/datadog-ci-base/helpers/formatting");
|
|
9
|
+
const upload_1 = require("@datadog/datadog-ci-base/helpers/upload");
|
|
10
|
+
const utils_1 = require("@datadog/datadog-ci-base/helpers/utils");
|
|
11
|
+
const renderGitWarning = (errorMessage) => chalk_1.default.yellow(`${formatting_1.ICONS.WARNING} An error occurred while invoking git: ${errorMessage}
|
|
12
|
+
Make sure the command is running within your git repository to fully leverage Datadog's git integration.
|
|
13
|
+
To ignore this warning use the --disable-git flag.\n`);
|
|
14
|
+
exports.renderGitWarning = renderGitWarning;
|
|
15
|
+
const renderGitDataNotAttachedWarning = (sourcemap, errorMessage) => chalk_1.default.yellow(`${formatting_1.ICONS.WARNING} Could not attach git data for sourcemap ${sourcemap}: ${errorMessage}\n`);
|
|
16
|
+
exports.renderGitDataNotAttachedWarning = renderGitDataNotAttachedWarning;
|
|
17
|
+
const renderSourcesNotFoundWarning = (sourcemap) => chalk_1.default.yellow(`${formatting_1.ICONS.WARNING} No tracked files found for sources contained in ${sourcemap}\n`);
|
|
18
|
+
exports.renderSourcesNotFoundWarning = renderSourcesNotFoundWarning;
|
|
19
|
+
const renderConfigurationError = (error) => chalk_1.default.red(`${formatting_1.ICONS.FAILED} Configuration error: ${error}.\n`);
|
|
20
|
+
exports.renderConfigurationError = renderConfigurationError;
|
|
21
|
+
const renderFailedUpload = (sourcemap, errorMessage) => {
|
|
22
|
+
const sourcemapPathBold = `[${chalk_1.default.bold.dim(sourcemap.sourcemapPath)}]`;
|
|
23
|
+
let message = chalk_1.default.red(`${formatting_1.ICONS.FAILED} Failed upload sourcemap for ${sourcemapPathBold}: ${errorMessage}\n`);
|
|
24
|
+
if (errorMessage.includes('413 (Request Entity Too Large)')) {
|
|
25
|
+
message = `${message}\n It looks like your sourcemap is too large. To make it lighter you can:
|
|
26
|
+
- Pass an empty file as --bundle argument to the upload command (no impact on the error explorer as of now)
|
|
27
|
+
- Pass the --remove-sources-content argument to the upload command (you will lose the code snippet next to the unminified error)
|
|
28
|
+
- Try to split your bundle, by using a tool such as repack (https://github.com/callstack/repack)\n`;
|
|
29
|
+
}
|
|
30
|
+
return message;
|
|
31
|
+
};
|
|
32
|
+
exports.renderFailedUpload = renderFailedUpload;
|
|
33
|
+
const renderRetriedUpload = (payload, errorMessage, attempt) => {
|
|
34
|
+
const sourcemapPathBold = `[${chalk_1.default.bold.dim(payload.sourcemapPath)}]`;
|
|
35
|
+
return chalk_1.default.yellow(`[attempt ${attempt}] Retrying sourcemap upload ${sourcemapPathBold}: ${errorMessage}\n`);
|
|
36
|
+
};
|
|
37
|
+
exports.renderRetriedUpload = renderRetriedUpload;
|
|
38
|
+
const renderRemoveSourcesContentWarning = () => `Removing the "sourcesContent" part of the sourcemap file. ${chalk_1.default.yellow('Use the --remove-sources-content only if your sourcemap file is too heavy to upload to Datadog.\n')}`;
|
|
39
|
+
exports.renderRemoveSourcesContentWarning = renderRemoveSourcesContentWarning;
|
|
40
|
+
const renderFailedSourcesContentRemovalError = (payload, errorMessage) => `${chalk_1.default.red(`An error occurred while removing the "sourcesContent" part of the sourcemap file ${payload.sourcemapPath}": ${errorMessage}`)}.
|
|
41
|
+
Trying to upload the full sourcemap with the "sourcesContent".`;
|
|
42
|
+
exports.renderFailedSourcesContentRemovalError = renderFailedSourcesContentRemovalError;
|
|
43
|
+
/**
|
|
44
|
+
* As of now, this command takes an array of one single UploadStatus element since we only support upload
|
|
45
|
+
* of a single sourcemap.
|
|
46
|
+
* We considered it was preferable to leave it this way so it's ready for multiple sourcemaps uploads,
|
|
47
|
+
* rather than investing into adapting it for this purpose.
|
|
48
|
+
* This comment should be removed once the multiple file upload is available.
|
|
49
|
+
*/
|
|
50
|
+
const renderSuccessfulCommand = (statuses, duration, dryRun) => {
|
|
51
|
+
const results = new Map();
|
|
52
|
+
statuses.forEach((status) => {
|
|
53
|
+
if (!results.has(status)) {
|
|
54
|
+
results.set(status, 0);
|
|
55
|
+
}
|
|
56
|
+
results.set(status, results.get(status) + 1);
|
|
57
|
+
});
|
|
58
|
+
const output = ['', chalk_1.default.bold('Command summary:')];
|
|
59
|
+
if (results.get(upload_1.UploadStatus.Failure)) {
|
|
60
|
+
output.push(chalk_1.default.red(`${formatting_1.ICONS.FAILED} Some sourcemaps have not been uploaded correctly.`));
|
|
61
|
+
}
|
|
62
|
+
else if (results.get(upload_1.UploadStatus.Skipped)) {
|
|
63
|
+
output.push(chalk_1.default.yellow(`${formatting_1.ICONS.WARNING} Some sourcemaps have been skipped.`));
|
|
64
|
+
}
|
|
65
|
+
else if (results.get(upload_1.UploadStatus.Success)) {
|
|
66
|
+
if (dryRun) {
|
|
67
|
+
output.push(chalk_1.default.green(`${formatting_1.ICONS.SUCCESS} [DRYRUN] Handled ${(0, utils_1.pluralize)(results.get(upload_1.UploadStatus.Success), 'sourcemap', 'sourcemaps')} with success in ${duration} seconds.`));
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
output.push(chalk_1.default.green(`${formatting_1.ICONS.SUCCESS} Uploaded ${(0, utils_1.pluralize)(results.get(upload_1.UploadStatus.Success), 'sourcemap', 'sourcemaps')} in ${duration} seconds.`));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
output.push(chalk_1.default.yellow(`${formatting_1.ICONS.WARNING} No sourcemaps detected. Did you specify the correct path?`));
|
|
75
|
+
}
|
|
76
|
+
if (results.get(upload_1.UploadStatus.Failure) || results.get(upload_1.UploadStatus.Skipped)) {
|
|
77
|
+
output.push(`Details about the ${(0, utils_1.pluralize)(statuses.length, 'found sourcemap', 'found sourcemaps')}:`);
|
|
78
|
+
if (results.get(upload_1.UploadStatus.Success)) {
|
|
79
|
+
output.push(` * ${(0, utils_1.pluralize)(results.get(upload_1.UploadStatus.Success), 'sourcemap', 'sourcemaps')} successfully uploaded`);
|
|
80
|
+
}
|
|
81
|
+
if (results.get(upload_1.UploadStatus.Skipped)) {
|
|
82
|
+
output.push(chalk_1.default.yellow(` * ${(0, utils_1.pluralize)(results.get(upload_1.UploadStatus.Skipped), 'sourcemap was', 'sourcemaps were')} skipped`));
|
|
83
|
+
}
|
|
84
|
+
if (results.get(upload_1.UploadStatus.Failure)) {
|
|
85
|
+
output.push(chalk_1.default.red(` * ${(0, utils_1.pluralize)(results.get(upload_1.UploadStatus.Failure), 'sourcemap', 'sourcemaps')} failed to upload`));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return output.join('\n') + '\n';
|
|
89
|
+
};
|
|
90
|
+
exports.renderSuccessfulCommand = renderSuccessfulCommand;
|
|
91
|
+
const renderCommandInfo = (bundlePath, sourcemapPath, platform, releaseVersion, service, poolLimit, dryRun, projectPath, buildVersion, bundleName) => {
|
|
92
|
+
let fullStr = '';
|
|
93
|
+
if (dryRun) {
|
|
94
|
+
fullStr += chalk_1.default.yellow(`${formatting_1.ICONS.WARNING} DRY-RUN MODE ENABLED. WILL NOT UPLOAD SOURCEMAPS\n`);
|
|
95
|
+
}
|
|
96
|
+
const startStr = chalk_1.default.green('Starting upload. \n');
|
|
97
|
+
fullStr += startStr;
|
|
98
|
+
if (!bundlePath) {
|
|
99
|
+
fullStr += chalk_1.default.red(`${formatting_1.ICONS.WARNING} --bundle option was not provided. A default bundle name will be used. Please update @datadog/mobile-react-native or pass a --bundle option.\n`);
|
|
100
|
+
}
|
|
101
|
+
fullStr += chalk_1.default.green(`Upload of ${sourcemapPath} for bundle ${bundleName} on platform ${platform} with project path ${projectPath}\n`);
|
|
102
|
+
const serviceVersionProjectPathStr = chalk_1.default.green(`version: ${releaseVersion} build: ${buildVersion} service: ${service}\n`);
|
|
103
|
+
fullStr += serviceVersionProjectPathStr;
|
|
104
|
+
fullStr += chalk_1.default.green(`Please ensure you use the same values during SDK initialization to guarantee the success of the unminify process.\n`);
|
|
105
|
+
fullStr += chalk_1.default.green(`After upload is successful sourcemap files will be processed and ready to use within the next 5 minutes. \n`);
|
|
106
|
+
return fullStr;
|
|
107
|
+
};
|
|
108
|
+
exports.renderCommandInfo = renderCommandInfo;
|
|
109
|
+
const renderUpload = (sourcemap) => `Uploading sourcemap ${sourcemap.sourcemapPath} for JS file ${sourcemap.bundleName}\n`;
|
|
110
|
+
exports.renderUpload = renderUpload;
|
|
111
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../../src/commands/react-native/renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { BaseCommand } from '@datadog/datadog-ci-base';
|
|
2
|
+
export declare class ReactNativeUploadCommand extends BaseCommand {
|
|
3
|
+
static paths: string[][];
|
|
4
|
+
static usage: import("clipanion").Usage;
|
|
5
|
+
private buildVersion;
|
|
6
|
+
private bundle;
|
|
7
|
+
private configPath;
|
|
8
|
+
private disableGit;
|
|
9
|
+
private dryRun;
|
|
10
|
+
private maxConcurrency;
|
|
11
|
+
private platform?;
|
|
12
|
+
private projectPath;
|
|
13
|
+
private releaseVersion;
|
|
14
|
+
private removeSourcesContent;
|
|
15
|
+
private repositoryURL;
|
|
16
|
+
private service;
|
|
17
|
+
private sourcemap;
|
|
18
|
+
private cliVersion;
|
|
19
|
+
private config;
|
|
20
|
+
private fips;
|
|
21
|
+
private fipsIgnoreError;
|
|
22
|
+
private fipsConfig;
|
|
23
|
+
execute(): Promise<1 | 0>;
|
|
24
|
+
private addRepositoryDataToPayloads;
|
|
25
|
+
private getMatchingRNSourcemapFiles;
|
|
26
|
+
private getPayloadsToUpload;
|
|
27
|
+
private getRepositoryPayload;
|
|
28
|
+
private getRequestBuilder;
|
|
29
|
+
private upload;
|
|
30
|
+
}
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.ReactNativeUploadCommand = void 0;
|
|
39
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
40
|
+
const clipanion_1 = require("clipanion");
|
|
41
|
+
const datadog_ci_base_1 = require("@datadog/datadog-ci-base");
|
|
42
|
+
const constants_1 = require("@datadog/datadog-ci-base/constants");
|
|
43
|
+
const apikey_1 = require("@datadog/datadog-ci-base/helpers/apikey");
|
|
44
|
+
const base_intake_url_1 = require("@datadog/datadog-ci-base/helpers/base-intake-url");
|
|
45
|
+
const concurrency_1 = require("@datadog/datadog-ci-base/helpers/concurrency");
|
|
46
|
+
const env_1 = require("@datadog/datadog-ci-base/helpers/env");
|
|
47
|
+
const errors_1 = require("@datadog/datadog-ci-base/helpers/errors");
|
|
48
|
+
const fips_1 = require("@datadog/datadog-ci-base/helpers/fips");
|
|
49
|
+
const format_git_sourcemaps_data_1 = require("@datadog/datadog-ci-base/helpers/git/format-git-sourcemaps-data");
|
|
50
|
+
const metrics_1 = require("@datadog/datadog-ci-base/helpers/metrics");
|
|
51
|
+
const upload_1 = require("@datadog/datadog-ci-base/helpers/upload");
|
|
52
|
+
const utils_1 = require("@datadog/datadog-ci-base/helpers/utils");
|
|
53
|
+
const validation = __importStar(require("@datadog/datadog-ci-base/helpers/validation"));
|
|
54
|
+
const validation_1 = require("@datadog/datadog-ci-base/helpers/validation");
|
|
55
|
+
const version_1 = require("@datadog/datadog-ci-base/version");
|
|
56
|
+
const interfaces_1 = require("./interfaces");
|
|
57
|
+
const renderer_1 = require("./renderer");
|
|
58
|
+
const utils_2 = require("./utils");
|
|
59
|
+
const validation_2 = require("./validation");
|
|
60
|
+
class ReactNativeUploadCommand extends datadog_ci_base_1.BaseCommand {
|
|
61
|
+
constructor() {
|
|
62
|
+
var _a, _b;
|
|
63
|
+
super(...arguments);
|
|
64
|
+
this.buildVersion = clipanion_1.Option.String('--build-version');
|
|
65
|
+
this.bundle = clipanion_1.Option.String('--bundle');
|
|
66
|
+
this.configPath = clipanion_1.Option.String('--config');
|
|
67
|
+
this.disableGit = clipanion_1.Option.Boolean('--disable-git');
|
|
68
|
+
this.dryRun = clipanion_1.Option.Boolean('--dry-run', false);
|
|
69
|
+
this.maxConcurrency = clipanion_1.Option.String('--max-concurrency', '20', { validator: validation.isInteger() });
|
|
70
|
+
this.platform = clipanion_1.Option.String('--platform');
|
|
71
|
+
this.projectPath = clipanion_1.Option.String('--project-path', process.cwd() || '');
|
|
72
|
+
this.releaseVersion = clipanion_1.Option.String('--release-version');
|
|
73
|
+
this.removeSourcesContent = clipanion_1.Option.Boolean('--remove-sources-content', false);
|
|
74
|
+
this.repositoryURL = clipanion_1.Option.String('--repository-url');
|
|
75
|
+
this.service = clipanion_1.Option.String('--service');
|
|
76
|
+
this.sourcemap = clipanion_1.Option.String('--sourcemap');
|
|
77
|
+
this.cliVersion = version_1.cliVersion;
|
|
78
|
+
this.config = {
|
|
79
|
+
datadogSite: 'datadoghq.com',
|
|
80
|
+
};
|
|
81
|
+
this.fips = clipanion_1.Option.Boolean('--fips', false);
|
|
82
|
+
this.fipsIgnoreError = clipanion_1.Option.Boolean('--fips-ignore-error', false);
|
|
83
|
+
this.fipsConfig = {
|
|
84
|
+
fips: (_a = (0, env_1.toBoolean)(process.env[constants_1.FIPS_ENV_VAR])) !== null && _a !== void 0 ? _a : false,
|
|
85
|
+
fipsIgnoreError: (_b = (0, env_1.toBoolean)(process.env[constants_1.FIPS_IGNORE_ERROR_ENV_VAR])) !== null && _b !== void 0 ? _b : false,
|
|
86
|
+
};
|
|
87
|
+
// Fills the 'repository' field of each payload with data gathered using git.
|
|
88
|
+
this.addRepositoryDataToPayloads = (payloads) => __awaiter(this, void 0, void 0, function* () {
|
|
89
|
+
try {
|
|
90
|
+
const repositoryData = yield (0, format_git_sourcemaps_data_1.getRepositoryData)(yield (0, format_git_sourcemaps_data_1.newSimpleGit)(), this.repositoryURL);
|
|
91
|
+
payloads.forEach((payload) => {
|
|
92
|
+
const repositoryPayload = this.getRepositoryPayload(repositoryData, payload.sourcemapPath);
|
|
93
|
+
payload.addRepositoryData({
|
|
94
|
+
gitCommitSha: repositoryData.hash,
|
|
95
|
+
gitRepositoryPayload: repositoryPayload,
|
|
96
|
+
gitRepositoryURL: repositoryData.remote,
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
this.context.stdout.write((0, renderer_1.renderGitWarning)(e));
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
// Looks for the sourcemaps on disk and returns the associated payloads.
|
|
105
|
+
this.getMatchingRNSourcemapFiles = (bundleName) => [
|
|
106
|
+
new interfaces_1.RNSourcemap(bundleName, this.sourcemap),
|
|
107
|
+
];
|
|
108
|
+
this.getPayloadsToUpload = (useGit, bundleName) => __awaiter(this, void 0, void 0, function* () {
|
|
109
|
+
const payloads = this.getMatchingRNSourcemapFiles(bundleName);
|
|
110
|
+
if (!useGit) {
|
|
111
|
+
return payloads;
|
|
112
|
+
}
|
|
113
|
+
yield this.addRepositoryDataToPayloads(payloads);
|
|
114
|
+
return payloads;
|
|
115
|
+
});
|
|
116
|
+
// GetRepositoryPayload generates the repository payload for a specific sourcemap.
|
|
117
|
+
// It specifically looks for the list of tracked files that are associated to the source paths
|
|
118
|
+
// declared inside the sourcemap.
|
|
119
|
+
this.getRepositoryPayload = (repositoryData, sourcemapPath) => {
|
|
120
|
+
const onSourcesNotFound = () => {
|
|
121
|
+
this.context.stdout.write((0, renderer_1.renderSourcesNotFoundWarning)(sourcemapPath));
|
|
122
|
+
};
|
|
123
|
+
let repositoryPayload;
|
|
124
|
+
try {
|
|
125
|
+
const files = repositoryData.trackedFilesMatcher.matchSourcemap(sourcemapPath, onSourcesNotFound);
|
|
126
|
+
if (files) {
|
|
127
|
+
repositoryPayload = JSON.stringify({
|
|
128
|
+
data: [
|
|
129
|
+
{
|
|
130
|
+
files,
|
|
131
|
+
hash: repositoryData.hash,
|
|
132
|
+
repository_url: repositoryData.remote,
|
|
133
|
+
},
|
|
134
|
+
],
|
|
135
|
+
// Make sure to update the version if the format of the JSON payloads changes in any way.
|
|
136
|
+
version: 1,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
return repositoryPayload;
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
this.context.stdout.write((0, renderer_1.renderGitDataNotAttachedWarning)(sourcemapPath, error.message));
|
|
143
|
+
return undefined;
|
|
144
|
+
}
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
execute() {
|
|
148
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
149
|
+
(0, fips_1.enableFips)(this.fips || this.fipsConfig.fips, this.fipsIgnoreError || this.fipsConfig.fipsIgnoreError);
|
|
150
|
+
if (!this.releaseVersion) {
|
|
151
|
+
this.context.stderr.write('Missing release version\n');
|
|
152
|
+
return 1;
|
|
153
|
+
}
|
|
154
|
+
if (!this.buildVersion) {
|
|
155
|
+
this.context.stderr.write('Missing build version\n');
|
|
156
|
+
return 1;
|
|
157
|
+
}
|
|
158
|
+
if (!this.service) {
|
|
159
|
+
this.context.stderr.write('Missing service\n');
|
|
160
|
+
return 1;
|
|
161
|
+
}
|
|
162
|
+
if (!this.platform) {
|
|
163
|
+
this.context.stderr.write('Missing platform\n');
|
|
164
|
+
return 1;
|
|
165
|
+
}
|
|
166
|
+
if (!interfaces_1.RN_SUPPORTED_PLATFORMS.includes(this.platform)) {
|
|
167
|
+
this.context.stderr.write(`Platform ${this.platform} is not supported.\nSupported platforms are ios and android.\n`);
|
|
168
|
+
return 1;
|
|
169
|
+
}
|
|
170
|
+
if (!this.sourcemap) {
|
|
171
|
+
this.context.stderr.write('Missing sourcemap file path\n');
|
|
172
|
+
return 1;
|
|
173
|
+
}
|
|
174
|
+
const bundleName = (0, utils_2.getBundleName)(this.bundle, this.platform);
|
|
175
|
+
this.context.stdout.write((0, renderer_1.renderCommandInfo)(this.bundle, this.sourcemap, this.platform, this.releaseVersion, this.service, this.maxConcurrency, this.dryRun, this.projectPath, this.buildVersion, bundleName));
|
|
176
|
+
this.config = yield (0, utils_1.resolveConfigFromFileAndEnvironment)(this.config, {
|
|
177
|
+
apiKey: process.env.DATADOG_API_KEY || process.env.DD_API_KEY,
|
|
178
|
+
datadogSite: process.env.DATADOG_SITE || process.env.DD_SITE,
|
|
179
|
+
}, {
|
|
180
|
+
configPath: this.configPath,
|
|
181
|
+
defaultConfigPaths: ['datadog-ci.json', '../datadog-ci.json'],
|
|
182
|
+
configFromFileCallback: (configFromFile) => {
|
|
183
|
+
(0, validation_1.checkAPIKeyOverride)(process.env.DATADOG_API_KEY || process.env.DD_API_KEY, configFromFile.apiKey, this.context.stdout);
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
const metricsLogger = (0, metrics_1.getMetricsLogger)({
|
|
187
|
+
apiKey: this.config.apiKey,
|
|
188
|
+
datadogSite: this.config.datadogSite,
|
|
189
|
+
defaultTags: [
|
|
190
|
+
`version:${this.releaseVersion}`,
|
|
191
|
+
`build:${this.buildVersion}`,
|
|
192
|
+
`service:${this.service}`,
|
|
193
|
+
`cli_version:${this.cliVersion}`,
|
|
194
|
+
'react-native:true',
|
|
195
|
+
`platform:${this.platform}`,
|
|
196
|
+
],
|
|
197
|
+
prefix: 'datadog.ci.sourcemaps.upload.',
|
|
198
|
+
});
|
|
199
|
+
const apiKeyValidator = (0, apikey_1.newApiKeyValidator)({
|
|
200
|
+
apiKey: this.config.apiKey,
|
|
201
|
+
datadogSite: this.config.datadogSite,
|
|
202
|
+
metricsLogger: metricsLogger.logger,
|
|
203
|
+
});
|
|
204
|
+
const useGit = this.disableGit === undefined || !this.disableGit;
|
|
205
|
+
const initialTime = Date.now();
|
|
206
|
+
const payloads = yield this.getPayloadsToUpload(useGit, bundleName);
|
|
207
|
+
const requestBuilder = this.getRequestBuilder();
|
|
208
|
+
const uploadMultipart = this.upload(requestBuilder, metricsLogger, apiKeyValidator);
|
|
209
|
+
try {
|
|
210
|
+
const results = yield (0, concurrency_1.doWithMaxConcurrency)(this.maxConcurrency, payloads, uploadMultipart);
|
|
211
|
+
const totalTime = (Date.now() - initialTime) / 1000;
|
|
212
|
+
this.context.stdout.write((0, renderer_1.renderSuccessfulCommand)(results, totalTime, this.dryRun));
|
|
213
|
+
metricsLogger.logger.gauge('duration', totalTime);
|
|
214
|
+
return results.some((result) => result !== upload_1.UploadStatus.Success) ? 1 : 0;
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
if (error instanceof errors_1.InvalidConfigurationError) {
|
|
218
|
+
this.context.stdout.write((0, renderer_1.renderConfigurationError)(error));
|
|
219
|
+
return 1;
|
|
220
|
+
}
|
|
221
|
+
// Otherwise unknown error, let's propagate the exception
|
|
222
|
+
throw error;
|
|
223
|
+
}
|
|
224
|
+
finally {
|
|
225
|
+
try {
|
|
226
|
+
yield metricsLogger.flush();
|
|
227
|
+
}
|
|
228
|
+
catch (err) {
|
|
229
|
+
this.context.stdout.write(`WARN: ${err}\n`);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
getRequestBuilder() {
|
|
235
|
+
if (!this.config.apiKey) {
|
|
236
|
+
throw new errors_1.InvalidConfigurationError(`Missing ${chalk_1.default.bold('DATADOG_API_KEY')} or ${chalk_1.default.bold('DD_API_KEY')} in your environment.`);
|
|
237
|
+
}
|
|
238
|
+
return (0, utils_1.getRequestBuilder)({
|
|
239
|
+
apiKey: this.config.apiKey,
|
|
240
|
+
baseUrl: (0, base_intake_url_1.getBaseSourcemapIntakeUrl)(this.config.datadogSite),
|
|
241
|
+
headers: new Map([
|
|
242
|
+
['DD-EVP-ORIGIN', 'datadog-ci_react-native'],
|
|
243
|
+
['DD-EVP-ORIGIN-VERSION', this.cliVersion],
|
|
244
|
+
]),
|
|
245
|
+
overrideUrl: 'api/v2/srcmap',
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
upload(requestBuilder, metricsLogger, apiKeyValidator) {
|
|
249
|
+
return (sourcemap) => __awaiter(this, void 0, void 0, function* () {
|
|
250
|
+
try {
|
|
251
|
+
(0, validation_2.validatePayload)(sourcemap);
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
if (error instanceof validation_2.InvalidPayload) {
|
|
255
|
+
this.context.stdout.write((0, renderer_1.renderFailedUpload)(sourcemap, error.message));
|
|
256
|
+
metricsLogger.logger.increment('skipped_sourcemap', 1, [`reason:${error.reason}`]);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
this.context.stdout.write((0, renderer_1.renderFailedUpload)(sourcemap, `Skipping sourcemap ${sourcemap.sourcemapPath} because of error: ${error.message}`));
|
|
260
|
+
metricsLogger.logger.increment('skipped_sourcemap', 1, ['reason:unknown']);
|
|
261
|
+
}
|
|
262
|
+
return upload_1.UploadStatus.Skipped;
|
|
263
|
+
}
|
|
264
|
+
if (this.removeSourcesContent) {
|
|
265
|
+
try {
|
|
266
|
+
this.context.stdout.write((0, renderer_1.renderRemoveSourcesContentWarning)());
|
|
267
|
+
sourcemap.removeSourcesContentFromSourceMap();
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
this.context.stdout.write((0, renderer_1.renderFailedSourcesContentRemovalError)(sourcemap, error.message));
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
const payload = sourcemap.asMultipartPayload(this.cliVersion, this.service, this.releaseVersion, this.projectPath, this.platform, this.buildVersion, this.context);
|
|
274
|
+
if (this.dryRun) {
|
|
275
|
+
this.context.stdout.write(`[DRYRUN] ${(0, renderer_1.renderUpload)(sourcemap)}`);
|
|
276
|
+
return upload_1.UploadStatus.Success;
|
|
277
|
+
}
|
|
278
|
+
return (0, upload_1.upload)(requestBuilder)(payload, {
|
|
279
|
+
apiKeyValidator,
|
|
280
|
+
onError: (e) => {
|
|
281
|
+
this.context.stdout.write((0, renderer_1.renderFailedUpload)(sourcemap, e.message));
|
|
282
|
+
metricsLogger.logger.increment('failed', 1);
|
|
283
|
+
},
|
|
284
|
+
onRetry: (e, attempts) => {
|
|
285
|
+
this.context.stdout.write((0, renderer_1.renderRetriedUpload)(sourcemap, e.message, attempts));
|
|
286
|
+
metricsLogger.logger.increment('retries', 1);
|
|
287
|
+
},
|
|
288
|
+
onUpload: () => {
|
|
289
|
+
this.context.stdout.write((0, renderer_1.renderUpload)(sourcemap));
|
|
290
|
+
},
|
|
291
|
+
retries: 5,
|
|
292
|
+
useGzip: true,
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
exports.ReactNativeUploadCommand = ReactNativeUploadCommand;
|
|
298
|
+
ReactNativeUploadCommand.paths = [['react-native', 'upload']];
|
|
299
|
+
ReactNativeUploadCommand.usage = clipanion_1.Command.Usage({
|
|
300
|
+
category: 'RUM',
|
|
301
|
+
description: 'Upload React Native sourcemaps to Datadog.',
|
|
302
|
+
details: `
|
|
303
|
+
This command will upload React Native sourcemaps and their corresponding JavaScript bundle to Datadog in order to un-minify front-end stack traces received by Datadog.\n
|
|
304
|
+
See README for details.
|
|
305
|
+
`,
|
|
306
|
+
examples: [
|
|
307
|
+
[
|
|
308
|
+
'Upload ios sourcemaps',
|
|
309
|
+
'datadog-ci react-native upload --platform ios --service com.company.app --bundle ./main.jsbundle --sourcemap ./main.jsbundle.map --release-version 1.23.4 --build-version 1234',
|
|
310
|
+
],
|
|
311
|
+
[
|
|
312
|
+
'Upload android sourcemaps',
|
|
313
|
+
'datadog-ci react-native upload --platform android --service com.company.app --bundle ./index.android.bundle --sourcemap ./index.android.bundle.map --release-version 1.23.4 --build-version 1234',
|
|
314
|
+
],
|
|
315
|
+
],
|
|
316
|
+
});
|
|
317
|
+
//# sourceMappingURL=upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/commands/react-native/upload.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { RNPlatform } from './interfaces';
|
|
2
|
+
export declare const getReactNativeVersion: (packageJsonPath: string) => undefined | string;
|
|
3
|
+
export declare const getBundleName: (bundlePath: string | undefined, platform: RNPlatform) => string;
|
|
4
|
+
export declare const sanitizeReleaseVersion: (version: string) => string;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sanitizeReleaseVersion = exports.getBundleName = exports.getReactNativeVersion = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const getReactNativeVersion = (packageJsonPath) => {
|
|
6
|
+
if (!(0, fs_1.existsSync)(packageJsonPath)) {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
try {
|
|
10
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-var-requires
|
|
11
|
+
return require(packageJsonPath).version;
|
|
12
|
+
}
|
|
13
|
+
catch (e) {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
exports.getReactNativeVersion = getReactNativeVersion;
|
|
18
|
+
const DEFAULT_ANDROID_BUNDLE_NAME = 'index.android.bundle';
|
|
19
|
+
const DEFAULT_IOS_BUNDLE_NAME = 'main.jsbundle';
|
|
20
|
+
const getBundleName = (bundlePath, platform) => {
|
|
21
|
+
if (bundlePath) {
|
|
22
|
+
const splitPath = bundlePath.split('/');
|
|
23
|
+
return splitPath[splitPath.length - 1];
|
|
24
|
+
}
|
|
25
|
+
if (platform === 'ios') {
|
|
26
|
+
return DEFAULT_IOS_BUNDLE_NAME;
|
|
27
|
+
}
|
|
28
|
+
return DEFAULT_ANDROID_BUNDLE_NAME;
|
|
29
|
+
};
|
|
30
|
+
exports.getBundleName = getBundleName;
|
|
31
|
+
const sanitizeReleaseVersion = (version) => {
|
|
32
|
+
return version.replace(/^(>=|<=|==|=|<|>|\^|~)/, '').trim();
|
|
33
|
+
};
|
|
34
|
+
exports.sanitizeReleaseVersion = sanitizeReleaseVersion;
|
|
35
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/commands/react-native/utils.ts"],"names":[],"mappings":";;;AAAA,2BAA6B;AAItB,MAAM,qBAAqB,GAAG,CAAC,eAAuB,EAAsB,EAAE;IACnF,IAAI,CAAC,IAAA,eAAU,EAAC,eAAe,CAAC,EAAE;QAChC,OAAO,SAAS,CAAA;KACjB;IAED,IAAI;QACF,0GAA0G;QAC1G,OAAO,OAAO,CAAC,eAAe,CAAC,CAAC,OAAiB,CAAA;KAClD;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,SAAS,CAAA;KACjB;AACH,CAAC,CAAA;AAXY,QAAA,qBAAqB,yBAWjC;AAED,MAAM,2BAA2B,GAAG,sBAAsB,CAAA;AAC1D,MAAM,uBAAuB,GAAG,eAAe,CAAA;AAExC,MAAM,aAAa,GAAG,CAAC,UAA8B,EAAE,QAAoB,EAAU,EAAE;IAC5F,IAAI,UAAU,EAAE;QACd,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAEvC,OAAO,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;KACvC;IACD,IAAI,QAAQ,KAAK,KAAK,EAAE;QACtB,OAAO,uBAAuB,CAAA;KAC/B;IAED,OAAO,2BAA2B,CAAA;AACpC,CAAC,CAAA;AAXY,QAAA,aAAa,iBAWzB;AAEM,MAAM,sBAAsB,GAAG,CAAC,OAAe,EAAE,EAAE;IACxD,OAAO,OAAO,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;AAC7D,CAAC,CAAA;AAFY,QAAA,sBAAsB,0BAElC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validatePayload = exports.InvalidPayload = void 0;
|
|
4
|
+
const validation_1 = require("@datadog/datadog-ci-base/helpers/validation");
|
|
5
|
+
class InvalidPayload extends Error {
|
|
6
|
+
constructor(reason, message) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.reason = reason;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.InvalidPayload = InvalidPayload;
|
|
12
|
+
const validatePayload = (sourcemap) => {
|
|
13
|
+
// Check existence of sourcemap file
|
|
14
|
+
const sourcemapCheck = (0, validation_1.checkFile)(sourcemap.sourcemapPath);
|
|
15
|
+
if (!sourcemapCheck.exists) {
|
|
16
|
+
// This case should not happen as all collected sourcemaps should point to correct files
|
|
17
|
+
throw new InvalidPayload('missing_sourcemap', `Skipping missing sourcemap (${sourcemap.sourcemapPath})`);
|
|
18
|
+
}
|
|
19
|
+
if (sourcemapCheck.empty) {
|
|
20
|
+
throw new InvalidPayload('empty_sourcemap', `Skipping empty sourcemap (${sourcemap.sourcemapPath})`);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
exports.validatePayload = validatePayload;
|
|
24
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../../src/commands/react-native/validation.ts"],"names":[],"mappings":";;;AAAA,4EAAqE;AAIrE,MAAa,cAAe,SAAQ,KAAK;IAGvC,YAAY,MAAc,EAAE,OAAgB;QAC1C,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF;AAPD,wCAOC;AAEM,MAAM,eAAe,GAAG,CAAC,SAAsB,EAAE,EAAE;IACxD,oCAAoC;IACpC,MAAM,cAAc,GAAG,IAAA,sBAAS,EAAC,SAAS,CAAC,aAAa,CAAC,CAAA;IACzD,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;QAC1B,wFAAwF;QACxF,MAAM,IAAI,cAAc,CAAC,mBAAmB,EAAE,+BAA+B,SAAS,CAAC,aAAa,GAAG,CAAC,CAAA;KACzG;IACD,IAAI,cAAc,CAAC,KAAK,EAAE;QACxB,MAAM,IAAI,cAAc,CAAC,iBAAiB,EAAE,6BAA6B,SAAS,CAAC,aAAa,GAAG,CAAC,CAAA;KACrG;AACH,CAAC,CAAA;AAVY,QAAA,eAAe,mBAU3B"}
|