@datadog/datadog-ci 0.17.4 → 0.17.7

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.
Files changed (130) hide show
  1. package/LICENSE-3rdparty.csv +1 -0
  2. package/dist/commands/dependencies/__tests__/helpers/context.d.ts +12 -0
  3. package/dist/commands/dependencies/__tests__/helpers/stream.d.ts +2 -0
  4. package/dist/commands/dependencies/__tests__/helpers/upload.run.d.ts +13 -0
  5. package/dist/commands/dependencies/__tests__/upload.test.d.ts +1 -0
  6. package/dist/commands/dependencies/api.d.ts +2 -0
  7. package/dist/commands/dependencies/index.d.ts +1 -0
  8. package/dist/commands/dependencies/interfaces.d.ts +10 -0
  9. package/dist/commands/dependencies/renderer.d.ts +13 -0
  10. package/dist/commands/dependencies/upload.d.ts +16 -0
  11. package/dist/commands/dsyms/__tests__/upload.test.d.ts +1 -0
  12. package/dist/commands/dsyms/__tests__/utils.test.d.ts +1 -0
  13. package/dist/commands/dsyms/index.d.ts +1 -0
  14. package/dist/commands/dsyms/interfaces.d.ts +7 -0
  15. package/dist/commands/dsyms/renderer.d.ts +9 -0
  16. package/dist/commands/dsyms/upload.d.ts +11 -0
  17. package/dist/commands/dsyms/utils.d.ts +9 -0
  18. package/dist/commands/git-metadata/__tests__/git.test.d.ts +1 -0
  19. package/dist/commands/{commit → git-metadata}/__tests__/git.test.js +0 -0
  20. package/dist/commands/git-metadata/__tests__/upload.test.d.ts +1 -0
  21. package/dist/commands/{commit → git-metadata}/__tests__/upload.test.js +1 -1
  22. package/dist/commands/git-metadata/api.d.ts +3 -0
  23. package/dist/commands/{commit → git-metadata}/api.js +0 -0
  24. package/dist/commands/git-metadata/git.d.ts +8 -0
  25. package/dist/commands/{commit → git-metadata}/git.js +0 -0
  26. package/dist/commands/git-metadata/index.d.ts +1 -0
  27. package/dist/commands/{commit → git-metadata}/index.js +0 -0
  28. package/dist/commands/git-metadata/interfaces.d.ts +9 -0
  29. package/dist/commands/{commit → git-metadata}/interfaces.js +0 -0
  30. package/dist/commands/git-metadata/renderer.d.ts +8 -0
  31. package/dist/commands/{commit → git-metadata}/renderer.js +5 -8
  32. package/dist/commands/git-metadata/upload.d.ts +12 -0
  33. package/dist/commands/{commit → git-metadata}/upload.js +8 -3
  34. package/dist/commands/junit/__tests__/api.test.d.ts +1 -0
  35. package/dist/commands/junit/__tests__/upload.test.d.ts +1 -0
  36. package/dist/commands/junit/api.d.ts +8 -0
  37. package/dist/commands/junit/index.d.ts +1 -0
  38. package/dist/commands/junit/interfaces.d.ts +12 -0
  39. package/dist/commands/junit/renderer.d.ts +8 -0
  40. package/dist/commands/junit/upload.d.ts +15 -0
  41. package/dist/commands/junit/upload.js +8 -25
  42. package/dist/commands/junit/utils.d.ts +1 -0
  43. package/dist/commands/lambda/__tests__/function.test.d.ts +1 -0
  44. package/dist/commands/lambda/__tests__/instrument.test.d.ts +1 -0
  45. package/dist/commands/lambda/__tests__/loggroup.test.d.ts +1 -0
  46. package/dist/commands/lambda/__tests__/tags.test.d.ts +1 -0
  47. package/dist/commands/lambda/constants.d.ts +43 -0
  48. package/dist/commands/lambda/function.d.ts +43 -0
  49. package/dist/commands/lambda/index.d.ts +1 -0
  50. package/dist/commands/lambda/instrument.d.ts +28 -0
  51. package/dist/commands/lambda/interfaces.d.ts +16 -0
  52. package/dist/commands/lambda/loggroup.d.ts +17 -0
  53. package/dist/commands/lambda/tags.d.ts +7 -0
  54. package/dist/commands/sourcemaps/__tests__/git.test.d.ts +1 -0
  55. package/dist/commands/sourcemaps/__tests__/upload.test.d.ts +1 -0
  56. package/dist/commands/sourcemaps/__tests__/utils.test.d.ts +1 -0
  57. package/dist/commands/sourcemaps/git.d.ts +20 -0
  58. package/dist/commands/sourcemaps/index.d.ts +1 -0
  59. package/dist/commands/sourcemaps/interfaces.d.ts +15 -0
  60. package/dist/commands/sourcemaps/renderer.d.ts +12 -0
  61. package/dist/commands/sourcemaps/upload.d.ts +25 -0
  62. package/dist/commands/sourcemaps/utils.d.ts +3 -0
  63. package/dist/commands/sourcemaps/validation.d.ts +6 -0
  64. package/dist/commands/synthetics/__tests__/api.test.d.ts +1 -0
  65. package/dist/commands/synthetics/__tests__/cli.test.d.ts +1 -0
  66. package/dist/commands/synthetics/__tests__/cli.test.js +232 -0
  67. package/dist/commands/synthetics/__tests__/crypto.test.d.ts +1 -0
  68. package/dist/commands/synthetics/__tests__/fixtures.d.ts +71 -0
  69. package/dist/commands/synthetics/__tests__/fixtures.js +17 -1
  70. package/dist/commands/synthetics/__tests__/reporters/default.test.d.ts +1 -0
  71. package/dist/commands/synthetics/__tests__/reporters/default.test.js +2 -2
  72. package/dist/commands/synthetics/__tests__/reporters/junit.test.d.ts +1 -0
  73. package/dist/commands/synthetics/__tests__/reporters/junit.test.js +16 -14
  74. package/dist/commands/synthetics/__tests__/run-test.test.d.ts +1 -0
  75. package/dist/commands/synthetics/__tests__/run-test.test.js +42 -313
  76. package/dist/commands/synthetics/__tests__/tunnel.test.d.ts +1 -0
  77. package/dist/commands/synthetics/__tests__/utils.test.d.ts +1 -0
  78. package/dist/commands/synthetics/__tests__/utils.test.js +4 -0
  79. package/dist/commands/synthetics/__tests__/websocket.test.d.ts +1 -0
  80. package/dist/commands/synthetics/__tests__/websocket.test.js +6 -5
  81. package/dist/commands/synthetics/api.d.ts +24 -0
  82. package/dist/commands/synthetics/cli.d.ts +26 -0
  83. package/dist/commands/synthetics/cli.js +229 -0
  84. package/dist/commands/synthetics/crypto.d.ts +5 -0
  85. package/dist/commands/synthetics/errors.d.ts +9 -0
  86. package/dist/commands/synthetics/errors.js +25 -0
  87. package/dist/commands/synthetics/index.d.ts +1 -0
  88. package/dist/commands/synthetics/index.js +2 -2
  89. package/dist/commands/synthetics/interfaces.d.ts +342 -0
  90. package/dist/commands/synthetics/reporters/default.d.ts +18 -0
  91. package/dist/commands/synthetics/reporters/junit.d.ts +95 -0
  92. package/dist/commands/synthetics/reporters/junit.js +45 -19
  93. package/dist/commands/synthetics/run-test.d.ts +74 -0
  94. package/dist/commands/synthetics/run-test.js +135 -319
  95. package/dist/commands/synthetics/tunnel.d.ts +43 -0
  96. package/dist/commands/synthetics/utils.d.ts +26 -0
  97. package/dist/commands/synthetics/utils.js +11 -1
  98. package/dist/commands/synthetics/websocket.d.ts +38 -0
  99. package/dist/commands/trace/__tests__/trace.test.d.ts +1 -0
  100. package/dist/commands/trace/api.d.ts +6 -0
  101. package/dist/commands/trace/index.d.ts +1 -0
  102. package/dist/commands/trace/interfaces.d.ts +23 -0
  103. package/dist/commands/trace/trace.d.ts +17 -0
  104. package/dist/commands/trace/trace.js +32 -3
  105. package/dist/helpers/__tests__/ci.test.d.ts +1 -0
  106. package/dist/helpers/__tests__/ci.test.js +1 -1
  107. package/dist/helpers/__tests__/git.test.d.ts +1 -0
  108. package/dist/helpers/__tests__/retry.test.d.ts +1 -0
  109. package/dist/helpers/__tests__/retry.test.js +98 -0
  110. package/dist/helpers/__tests__/tags.test.d.ts +1 -0
  111. package/dist/helpers/__tests__/upload.test.d.ts +1 -0
  112. package/dist/helpers/__tests__/user-provided-git.test.d.ts +1 -0
  113. package/dist/helpers/__tests__/utils.test.d.ts +1 -0
  114. package/dist/helpers/apikey.d.ts +14 -0
  115. package/dist/helpers/ci.d.ts +15 -0
  116. package/dist/helpers/ci.js +3 -3
  117. package/dist/helpers/errors.d.ts +2 -0
  118. package/dist/helpers/formatting.d.ts +5 -0
  119. package/dist/helpers/git.d.ts +2 -0
  120. package/dist/helpers/interfaces.d.ts +19 -0
  121. package/dist/helpers/metrics.d.ts +11 -0
  122. package/dist/helpers/retry.d.ts +2 -0
  123. package/dist/helpers/retry.js +38 -0
  124. package/dist/helpers/tags.d.ts +28 -0
  125. package/dist/helpers/upload.d.ts +44 -0
  126. package/dist/helpers/upload.js +4 -26
  127. package/dist/helpers/user-provided-git.d.ts +1 -0
  128. package/dist/helpers/utils.d.ts +31 -0
  129. package/dist/index.d.ts +1 -0
  130. package/package.json +4 -3
@@ -27,6 +27,7 @@ form-data,import,MIT,Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.co
27
27
  glob,import,ISC,Copyright (c) Isaac Z. Schlueter and Contributors
28
28
  jest,dev,MIT,Copyright (c) Facebook, Inc. and its affiliates.
29
29
  jest-environment-node,dev,MIT,Copyright (c) Facebook, Inc. and its affiliates.
30
+ jest-matcher-specific-error,dev,MIT,Copyright (c) 2020 Daniel Hreben
30
31
  prettier,dev,MIT,Copyright © James Long and contributors
31
32
  proxy,dev,MIT,Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net>
32
33
  proxy-agent,import,MIT,Copyright (c) 2013 Nathan Rajlich <nathan@tootallnate.net>
@@ -0,0 +1,12 @@
1
+ /// <reference types="node" />
2
+ import { BaseContext } from 'clipanion/lib/advanced';
3
+ import { Writable } from 'stream';
4
+ interface WritableToString extends Writable {
5
+ toString(): string;
6
+ }
7
+ export interface MockContext extends BaseContext {
8
+ stderr: WritableToString;
9
+ stdout: WritableToString;
10
+ }
11
+ export declare const createMockContext: () => MockContext;
12
+ export {};
@@ -0,0 +1,2 @@
1
+ import { Readable } from 'stream';
2
+ export declare const streamToString: (stream: Readable) => Promise<string>;
@@ -0,0 +1,13 @@
1
+ interface RunUploadInput {
2
+ apiKey?: string;
3
+ appKey?: string;
4
+ dryRun?: boolean;
5
+ releaseVersion?: string;
6
+ service?: string;
7
+ source?: string;
8
+ }
9
+ export declare const runUploadCommand: (filePath: string, input: RunUploadInput) => Promise<{
10
+ context: import("./context").MockContext;
11
+ code: number;
12
+ }>;
13
+ export {};
@@ -0,0 +1,2 @@
1
+ import { APIHelper } from './interfaces';
2
+ export declare const apiConstructor: (baseIntakeUrl: string, apiKey: string, appKey: string) => APIHelper;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import { AxiosPromise, AxiosResponse } from 'axios';
2
+ export interface Payload {
3
+ dependenciesFilePath: string;
4
+ service: string;
5
+ source: string;
6
+ version?: string;
7
+ }
8
+ export interface APIHelper {
9
+ uploadDependencies(payload: Payload): AxiosPromise<AxiosResponse>;
10
+ }
@@ -0,0 +1,13 @@
1
+ export declare const renderSupportedValues: (supportedValues: string[]) => string;
2
+ export declare const renderMissingParameter: (parameter: string, supportedValues?: string[] | undefined) => string;
3
+ export declare const renderMissingEnvironmentVariable: (variable: string) => string;
4
+ export declare const renderUnsupportedParameterValue: (parameter: string, value: string, supportedValues: string[]) => string;
5
+ export declare const renderMissingReleaseVersionParameter: () => string;
6
+ export declare const renderCannotFindFile: (file: string) => string;
7
+ export declare const renderCommandInfo: (dependenciesFilePath: string, source: string, service: string, version: string | undefined, dryRun: boolean) => string;
8
+ export declare const renderDryRunUpload: () => string;
9
+ export declare const renderUpload: () => string;
10
+ export declare const renderRetriedUpload: (errorMessage: string, attempt: number) => string;
11
+ export declare const renderFailedUploadBecauseOf403: (errorMessage: string) => string;
12
+ export declare const renderFailedUpload: (errorMessage: string) => string;
13
+ export declare const renderSuccessfulCommand: (duration: number) => string;
@@ -0,0 +1,16 @@
1
+ import { Command } from 'clipanion';
2
+ export declare class UploadCommand extends Command {
3
+ static SUPPORTED_SOURCES: string[];
4
+ static usage: import("clipanion/lib/advanced").Usage;
5
+ private static INVALID_INPUT_EXIT_CODE;
6
+ private static MISSING_FILE_EXIT_CODE;
7
+ private static UPLOAD_ERROR_EXIT_CODE;
8
+ private config;
9
+ private dependenciesFilePath;
10
+ private dryRun;
11
+ private releaseVersion?;
12
+ private service?;
13
+ private source?;
14
+ execute(): Promise<number | undefined>;
15
+ private uploadDependencies;
16
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,7 @@
1
+ import { MultipartPayload } from '../../helpers/upload';
2
+ export declare class Dsym {
3
+ path: string;
4
+ uuids: string[];
5
+ constructor(path: string, uuids: string[]);
6
+ asMultipartPayload(): Promise<MultipartPayload>;
7
+ }
@@ -0,0 +1,9 @@
1
+ import { Dsym } from './interfaces';
2
+ import { UploadStatus } from '../../helpers/upload';
3
+ export declare const renderConfigurationError: (error: Error) => string;
4
+ export declare const renderInvalidDsymWarning: (path: string) => string;
5
+ export declare const renderFailedUpload: (dSYM: Dsym, errorMessage: string) => string;
6
+ export declare const renderRetriedUpload: (dSYM: Dsym, errorMessage: string, attempt: number) => string;
7
+ export declare const renderSuccessfulCommand: (statuses: UploadStatus[], duration: number, dryRun: boolean) => string;
8
+ export declare const renderCommandInfo: (basePath: string, poolLimit: number, dryRun: boolean) => string;
9
+ export declare const renderUpload: (dSYM: Dsym) => string;
@@ -0,0 +1,11 @@
1
+ import { Command } from 'clipanion';
2
+ export declare class UploadCommand extends Command {
3
+ static usage: import("clipanion/lib/advanced").Usage;
4
+ private basePath;
5
+ private config;
6
+ private dryRun;
7
+ private maxConcurrency;
8
+ execute(): Promise<1 | 0>;
9
+ private getRequestBuilder;
10
+ private uploadDSYM;
11
+ }
@@ -0,0 +1,9 @@
1
+ import { BaseContext } from 'clipanion';
2
+ import { Dsym } from './interfaces';
3
+ export declare const isZipFile: (filepath: string) => Promise<boolean>;
4
+ export declare const getMatchingDSYMFiles: (absoluteFolderPath: string, context: BaseContext) => Promise<(Dsym | undefined)[]>;
5
+ export declare const dwarfdumpUUID: (filePath: string) => Promise<string[]>;
6
+ export declare const zipToTmpDir: (sourcePath: string, targetFilename: string) => Promise<string>;
7
+ export declare const unzipToTmpDir: (sourcePath: string) => Promise<string>;
8
+ export declare const getBaseIntakeUrl: () => string;
9
+ export declare const pluralize: (nb: number, singular: string, plural: string) => string;
@@ -0,0 +1 @@
1
+ export {};
@@ -31,7 +31,7 @@ describe('execute', () => {
31
31
  const cli = makeCli();
32
32
  const context = createMockContext();
33
33
  process.env = { DATADOG_API_KEY: 'PLACEHOLDER' };
34
- const code = yield cli.run(['commit', 'upload', '--dry-run'], context);
34
+ const code = yield cli.run(['git-metadata', 'upload', '--dry-run'], context);
35
35
  return { context, code };
36
36
  });
37
37
  test('runCLI', () => __awaiter(void 0, void 0, void 0, function* () {
@@ -0,0 +1,3 @@
1
+ export declare const datadogSite: string;
2
+ export declare const apiHost: string;
3
+ export declare const getBaseIntakeUrl: () => string;
File without changes
@@ -0,0 +1,8 @@
1
+ import * as simpleGit from 'simple-git';
2
+ import { Writable } from 'stream';
3
+ import { CommitInfo } from './interfaces';
4
+ export declare const newSimpleGit: () => Promise<simpleGit.SimpleGit>;
5
+ export declare const gitRemote: (git: simpleGit.SimpleGit) => Promise<string>;
6
+ export declare const stripCredentials: (remote: string) => string;
7
+ export declare const gitTrackedFiles: (git: simpleGit.SimpleGit) => Promise<string[]>;
8
+ export declare const getCommitInfo: (git: simpleGit.SimpleGit, stdout: Writable, repositoryURL?: string | undefined) => Promise<CommitInfo | undefined>;
File without changes
@@ -0,0 +1 @@
1
+ export {};
File without changes
@@ -0,0 +1,9 @@
1
+ import { MultipartPayload } from '../../helpers/upload';
2
+ export declare class CommitInfo {
3
+ hash: string;
4
+ remote: string;
5
+ trackedFiles: string[];
6
+ constructor(hash: string, remote: string, trackedFiles: string[]);
7
+ asMultipartPayload(cliVersion: string): MultipartPayload;
8
+ private repositoryPayload;
9
+ }
@@ -0,0 +1,8 @@
1
+ import { CommitInfo } from './interfaces';
2
+ export declare const renderGitError: (errorMessage: string) => string;
3
+ export declare const renderConfigurationError: (error: Error) => string;
4
+ export declare const renderFailedUpload: (errorMessage: string) => string;
5
+ export declare const renderRetriedUpload: (errorMessage: string, attempt: number) => string;
6
+ export declare const renderSuccessfulCommand: (duration: number, dryRun: boolean) => string;
7
+ export declare const renderDryRunWarning: () => string;
8
+ export declare const renderCommandInfo: (commit: CommitInfo) => string;
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.renderCommandInfo = exports.renderSuccessfulCommand = exports.renderUpload = exports.renderRetriedUpload = exports.renderFailedUpload = exports.renderConfigurationError = exports.renderGitError = void 0;
6
+ exports.renderCommandInfo = exports.renderDryRunWarning = exports.renderSuccessfulCommand = exports.renderRetriedUpload = exports.renderFailedUpload = exports.renderConfigurationError = exports.renderGitError = void 0;
7
7
  const chalk_1 = __importDefault(require("chalk"));
8
8
  const formatting_1 = require("../../helpers/formatting");
9
9
  const renderGitError = (errorMessage) => chalk_1.default.red(`${formatting_1.ICONS.FAILED} An error occured while invoking git: ${errorMessage}
@@ -15,7 +15,6 @@ const renderFailedUpload = (errorMessage) => chalk_1.default.red(`${formatting_1
15
15
  exports.renderFailedUpload = renderFailedUpload;
16
16
  const renderRetriedUpload = (errorMessage, attempt) => chalk_1.default.yellow(`[attempt ${attempt}] Retrying upload: ${errorMessage}\n`);
17
17
  exports.renderRetriedUpload = renderRetriedUpload;
18
- exports.renderUpload = 'Uploading\n';
19
18
  const renderSuccessfulCommand = (duration, dryRun) => {
20
19
  if (dryRun) {
21
20
  return chalk_1.default.green(`${formatting_1.ICONS.SUCCESS} [DRYRUN] Handled in ${duration} seconds.\n`);
@@ -25,10 +24,8 @@ const renderSuccessfulCommand = (duration, dryRun) => {
25
24
  }
26
25
  };
27
26
  exports.renderSuccessfulCommand = renderSuccessfulCommand;
28
- const renderCommandInfo = (dryRun) => {
29
- if (dryRun) {
30
- return chalk_1.default.yellow(`${formatting_1.ICONS.WARNING} DRY-RUN MODE ENABLED. WILL NOT UPLOAD\n`);
31
- }
32
- return chalk_1.default.green('Starting upload. \n');
33
- };
27
+ const renderDryRunWarning = () => chalk_1.default.yellow(`${formatting_1.ICONS.WARNING} DRY-RUN MODE ENABLED. WILL NOT UPLOAD\n`);
28
+ exports.renderDryRunWarning = renderDryRunWarning;
29
+ const renderCommandInfo = (commit) => `Reporting commit ${commit.hash} from repository ${commit.remote}.
30
+ ${commit.trackedFiles.length} tracked file paths will be reported.\n`;
34
31
  exports.renderCommandInfo = renderCommandInfo;
@@ -0,0 +1,12 @@
1
+ import { Command } from 'clipanion';
2
+ export declare class UploadCommand extends Command {
3
+ static usage: import("clipanion/lib/advanced").Usage;
4
+ repositoryURL?: string;
5
+ private cliVersion;
6
+ private config;
7
+ private dryRun;
8
+ constructor();
9
+ execute(): Promise<1 | 0>;
10
+ private getRequestBuilder;
11
+ private uploadRepository;
12
+ }
@@ -36,7 +36,9 @@ class UploadCommand extends clipanion_1.Command {
36
36
  execute() {
37
37
  return __awaiter(this, void 0, void 0, function* () {
38
38
  const initialTime = new Date().getTime();
39
- this.context.stdout.write(renderer_1.renderCommandInfo(this.dryRun));
39
+ if (this.dryRun) {
40
+ this.context.stdout.write(renderer_1.renderDryRunWarning());
41
+ }
40
42
  const metricsLogger = metrics_1.getMetricsLogger({
41
43
  datadogSite: process.env.DATADOG_SITE,
42
44
  defaultTags: [`cli_version:${this.cliVersion}`],
@@ -51,6 +53,7 @@ class UploadCommand extends clipanion_1.Command {
51
53
  if (payload === undefined) {
52
54
  return 0;
53
55
  }
56
+ this.context.stdout.write(renderer_1.renderCommandInfo(payload));
54
57
  try {
55
58
  const requestBuilder = this.getRequestBuilder();
56
59
  const status = yield this.uploadRepository(requestBuilder)(payload, {
@@ -63,7 +66,9 @@ class UploadCommand extends clipanion_1.Command {
63
66
  this.context.stdout.write(renderer_1.renderRetriedUpload(e.message, attempt));
64
67
  metricsLogger.logger.increment('retries', 1);
65
68
  },
66
- onUpload: () => this.context.stdout.write(renderer_1.renderUpload),
69
+ onUpload: () => {
70
+ return;
71
+ },
67
72
  retries: 5,
68
73
  });
69
74
  metricsLogger.logger.increment('success', 1);
@@ -122,6 +127,6 @@ UploadCommand.usage = clipanion_1.Command.Usage({
122
127
  `,
123
128
  examples: [['Upload the current commit details', 'datadog-ci report-commits upload']],
124
129
  });
125
- UploadCommand.addPath('commit', 'upload');
130
+ UploadCommand.addPath('git-metadata', 'upload');
126
131
  UploadCommand.addOption('dryRun', clipanion_1.Command.Boolean('--dry-run'));
127
132
  UploadCommand.addOption('repositoryURL', clipanion_1.Command.String('--repository-url'));
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,8 @@
1
+ import type { AxiosPromise, AxiosRequestConfig, AxiosResponse } from 'axios';
2
+ import { Writable } from 'stream';
3
+ import { Payload } from './interfaces';
4
+ export declare const getSafeFileName: (unsafeFileName: string) => string;
5
+ export declare const uploadJUnitXML: (request: (args: AxiosRequestConfig) => AxiosPromise<AxiosResponse>) => (jUnitXML: Payload, write: Writable['write']) => Promise<AxiosResponse<AxiosResponse<any>>>;
6
+ export declare const apiConstructor: (baseIntakeUrl: string, apiKey: string) => {
7
+ uploadJUnitXML: (jUnitXML: Payload, write: Writable['write']) => Promise<AxiosResponse<AxiosResponse<any>>>;
8
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ /// <reference types="node" />
2
+ import { AxiosPromise, AxiosResponse } from 'axios';
3
+ import { Writable } from 'stream';
4
+ import { SpanTags } from '../../helpers/interfaces';
5
+ export interface Payload {
6
+ service: string;
7
+ spanTags: SpanTags;
8
+ xmlPath: string;
9
+ }
10
+ export interface APIHelper {
11
+ uploadJUnitXML(jUnitXML: Payload, write: Writable['write']): AxiosPromise<AxiosResponse>;
12
+ }
@@ -0,0 +1,8 @@
1
+ import { Payload } from './interfaces';
2
+ export declare const renderInvalidFile: (xmlPath: string, errorMessage: string) => string;
3
+ export declare const renderFailedUpload: (payload: Payload, errorMessage: string) => string;
4
+ export declare const renderRetriedUpload: (payload: Payload, errorMessage: string, attempt: number) => string;
5
+ export declare const renderSuccessfulCommand: (fileCount: number, duration: number) => string;
6
+ export declare const renderDryRunUpload: (payload: Payload) => string;
7
+ export declare const renderUpload: (payload: Payload) => string;
8
+ export declare const renderCommandInfo: (basePaths: string[], service: string, concurrency: number, dryRun: boolean) => string;
@@ -0,0 +1,15 @@
1
+ import { Command } from 'clipanion';
2
+ export declare class UploadJUnitXMLCommand extends Command {
3
+ static usage: import("clipanion/lib/advanced").Usage;
4
+ private basePaths?;
5
+ private config;
6
+ private dryRun;
7
+ private env?;
8
+ private maxConcurrency;
9
+ private service?;
10
+ private tags?;
11
+ execute(): Promise<1 | undefined>;
12
+ private getApiHelper;
13
+ private getMatchingJUnitXMLFiles;
14
+ private uploadJUnitXML;
15
+ }
@@ -13,7 +13,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.UploadJUnitXMLCommand = void 0;
16
- const async_retry_1 = __importDefault(require("async-retry"));
17
16
  const chalk_1 = __importDefault(require("chalk"));
18
17
  const clipanion_1 = require("clipanion");
19
18
  const fast_xml_parser_1 = __importDefault(require("fast-xml-parser"));
@@ -26,10 +25,10 @@ const renderer_1 = require("./renderer");
26
25
  const utils_1 = require("./utils");
27
26
  const ci_1 = require("../../helpers/ci");
28
27
  const git_1 = require("../../helpers/git");
28
+ const retry_1 = require("../../helpers/retry");
29
29
  const tags_1 = require("../../helpers/tags");
30
30
  const user_provided_git_1 = require("../../helpers/user-provided-git");
31
31
  const utils_2 = require("../../helpers/utils");
32
- const errorCodesNoRetry = [400, 403, 413];
33
32
  const errorCodesStopUpload = [400, 403];
34
33
  const validateXml = (xmlFilePath) => {
35
34
  const xmlFileContentString = String(fs_1.default.readFileSync(xmlFilePath));
@@ -122,36 +121,20 @@ class UploadJUnitXMLCommand extends clipanion_1.Command {
122
121
  }
123
122
  uploadJUnitXML(api, jUnitXML) {
124
123
  return __awaiter(this, void 0, void 0, function* () {
124
+ if (this.dryRun) {
125
+ this.context.stdout.write(renderer_1.renderDryRunUpload(jUnitXML));
126
+ return;
127
+ }
125
128
  try {
126
- yield async_retry_1.default((bail) => __awaiter(this, void 0, void 0, function* () {
127
- try {
128
- if (this.dryRun) {
129
- this.context.stdout.write(renderer_1.renderDryRunUpload(jUnitXML));
130
- return;
131
- }
132
- yield api.uploadJUnitXML(jUnitXML, this.context.stdout.write.bind(this.context.stdout));
133
- }
134
- catch (error) {
135
- if (error.response) {
136
- // If it's an axios error
137
- if (!errorCodesNoRetry.includes(error.response.status)) {
138
- // And a status code that is not excluded from retries, throw the error so that upload is retried
139
- throw error;
140
- }
141
- }
142
- // If it's another error or an axios error we don't want to retry, bail
143
- bail(error);
144
- return;
145
- }
146
- }), {
129
+ yield retry_1.retryRequest(() => api.uploadJUnitXML(jUnitXML, this.context.stdout.write.bind(this.context.stdout)), {
147
130
  onRetry: (e, attempt) => {
148
- this.context.stdout.write(renderer_1.renderRetriedUpload(jUnitXML, e.message, attempt));
131
+ this.context.stderr.write(renderer_1.renderRetriedUpload(jUnitXML, e.message, attempt));
149
132
  },
150
133
  retries: 5,
151
134
  });
152
135
  }
153
136
  catch (error) {
154
- this.context.stdout.write(renderer_1.renderFailedUpload(jUnitXML, error));
137
+ this.context.stderr.write(renderer_1.renderFailedUpload(jUnitXML, error));
155
138
  if (error.response) {
156
139
  // If it's an axios error
157
140
  if (!errorCodesStopUpload.includes(error.response.status)) {
@@ -0,0 +1 @@
1
+ export declare const getBaseIntakeUrl: () => string;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,43 @@
1
+ export declare const RUNTIME_LAYER_LOOKUP: {
2
+ readonly 'nodejs10.x': "Datadog-Node10-x";
3
+ readonly 'nodejs12.x': "Datadog-Node12-x";
4
+ readonly 'nodejs14.x': "Datadog-Node14-x";
5
+ readonly 'python2.7': "Datadog-Python27";
6
+ readonly 'python3.6': "Datadog-Python36";
7
+ readonly 'python3.7': "Datadog-Python37";
8
+ readonly 'python3.8': "Datadog-Python38";
9
+ readonly 'python3.9': "Datadog-Python39";
10
+ };
11
+ export declare type Runtime = keyof typeof RUNTIME_LAYER_LOOKUP;
12
+ export declare const HANDLER_LOCATION: {
13
+ 'nodejs10.x': string;
14
+ 'nodejs12.x': string;
15
+ 'nodejs14.x': string;
16
+ 'python2.7': string;
17
+ 'python3.6': string;
18
+ 'python3.7': string;
19
+ 'python3.8': string;
20
+ 'python3.9': string;
21
+ };
22
+ export declare const DEFAULT_LAYER_AWS_ACCOUNT = "464622532012";
23
+ export declare const GOVCLOUD_LAYER_AWS_ACCOUNT = "002406178527";
24
+ export declare const SUBSCRIPTION_FILTER_NAME = "datadog-ci-filter";
25
+ export declare const TAG_VERSION_NAME = "dd_sls_ci";
26
+ export declare const DD_LAMBDA_EXTENSION_LAYER_NAME = "Datadog-Extension";
27
+ export declare const API_KEY_ENV_VAR = "DD_API_KEY";
28
+ export declare const KMS_API_KEY_ENV_VAR = "DD_KMS_API_KEY";
29
+ export declare const SITE_ENV_VAR = "DD_SITE";
30
+ export declare const TRACE_ENABLED_ENV_VAR = "DD_TRACE_ENABLED";
31
+ export declare const MERGE_XRAY_TRACES_ENV_VAR = "DD_MERGE_XRAY_TRACES";
32
+ export declare const FLUSH_TO_LOG_ENV_VAR = "DD_FLUSH_TO_LOG";
33
+ export declare const LOG_LEVEL_ENV_VAR = "DD_LOG_LEVEL";
34
+ export declare const LAMBDA_HANDLER_ENV_VAR = "DD_LAMBDA_HANDLER";
35
+ export declare const SERVICE_ENV_VAR = "DD_SERVICE";
36
+ export declare const VERSION_ENV_VAR = "DD_VERSION";
37
+ export declare const ENVIRONMENT_ENV_VAR = "DD_ENV";
38
+ export declare const EXTRA_TAGS_ENV_VAR = "DD_TAGS";
39
+ export declare const CI_SITE_ENV_VAR = "DATADOG_SITE";
40
+ export declare const CI_API_KEY_ENV_VAR = "DATADOG_API_KEY";
41
+ export declare const CI_KMS_API_KEY_ENV_VAR = "DATADOG_KMS_API_KEY";
42
+ export declare const LIST_FUNCTIONS_MAX_RETRY_COUNT = 2;
43
+ export declare const EXTRA_TAGS_REG_EXP: RegExp;
@@ -0,0 +1,43 @@
1
+ import { CloudWatchLogs, Lambda } from 'aws-sdk';
2
+ import { Runtime } from './constants';
3
+ import { LogGroupConfiguration } from './loggroup';
4
+ import { TagConfiguration } from './tags';
5
+ export interface FunctionConfiguration {
6
+ functionARN: string;
7
+ lambdaConfig: Lambda.FunctionConfiguration;
8
+ lambdaLibraryLayerArn: string;
9
+ logGroupConfiguration?: LogGroupConfiguration;
10
+ tagConfiguration?: TagConfiguration;
11
+ updateRequest?: Lambda.UpdateFunctionConfigurationRequest;
12
+ }
13
+ interface InstrumentationTags {
14
+ environment?: string;
15
+ extraTags?: string;
16
+ service?: string;
17
+ version?: string;
18
+ }
19
+ export interface InstrumentationSettings extends InstrumentationTags {
20
+ extensionVersion?: number;
21
+ flushMetricsToLogs: boolean;
22
+ forwarderARN?: string;
23
+ layerAWSAccount?: string;
24
+ layerVersion?: number;
25
+ logLevel?: string;
26
+ mergeXrayTraces: boolean;
27
+ tracingEnabled: boolean;
28
+ }
29
+ export declare const getLambdaConfigs: (lambda: Lambda, cloudWatch: CloudWatchLogs, region: string, functionARNs: string[], settings: InstrumentationSettings) => Promise<FunctionConfiguration[]>;
30
+ export declare const getLambdaConfigsFromRegEx: (lambda: Lambda, cloudWatch: CloudWatchLogs, region: string, pattern: string, settings: InstrumentationSettings) => Promise<FunctionConfiguration[]>;
31
+ export declare const updateLambdaConfigs: (lambda: Lambda, cloudWatch: CloudWatchLogs, configurations: FunctionConfiguration[]) => Promise<void>;
32
+ export declare const getFunctionConfiguration: (lambda: Lambda, cloudWatch: CloudWatchLogs, config: Lambda.FunctionConfiguration, region: string, settings: InstrumentationSettings) => Promise<{
33
+ functionARN: string;
34
+ lambdaConfig: Lambda.FunctionConfiguration;
35
+ lambdaLibraryLayerArn: string;
36
+ logGroupConfiguration: LogGroupConfiguration | undefined;
37
+ tagConfiguration: TagConfiguration | undefined;
38
+ updateRequest: Lambda.UpdateFunctionConfigurationRequest | undefined;
39
+ }>;
40
+ export declare const getLayerArn: (runtime: Runtime, settings: InstrumentationSettings, region: string) => string;
41
+ export declare const getExtensionArn: (settings: InstrumentationSettings, region: string) => string;
42
+ export declare const calculateUpdateRequest: (config: Lambda.FunctionConfiguration, settings: InstrumentationSettings, lambdaLibraryLayerArn: string, lambdaExtensionLayerArn: string, runtime: Runtime) => Lambda.UpdateFunctionConfigurationRequest | undefined;
43
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,28 @@
1
+ import { Command } from 'clipanion';
2
+ export declare class InstrumentCommand extends Command {
3
+ private config;
4
+ private configPath?;
5
+ private dryRun;
6
+ private environment?;
7
+ private extensionVersion?;
8
+ private extraTags?;
9
+ private flushMetricsToLogs?;
10
+ private forwarder?;
11
+ private functions;
12
+ private layerAWSAccount?;
13
+ private layerVersion?;
14
+ private logLevel?;
15
+ private mergeXrayTraces?;
16
+ private regExPattern?;
17
+ private region?;
18
+ private service?;
19
+ private tracing?;
20
+ private version?;
21
+ execute(): Promise<1 | 0>;
22
+ private collectFunctionsByRegion;
23
+ private convertStringBooleanToBoolean;
24
+ private getRegion;
25
+ private getSettings;
26
+ private printPlannedActions;
27
+ }
28
+ export declare const sentenceMatchesRegEx: (sentence: string, regex: RegExp) => RegExpMatchArray | null;
@@ -0,0 +1,16 @@
1
+ export interface LambdaConfigOptions {
2
+ environment?: string;
3
+ extensionVersion?: string;
4
+ extraTags?: string;
5
+ flushMetricsToLogs?: string;
6
+ forwarder?: string;
7
+ functions: string[];
8
+ layerAWSAccount?: string;
9
+ layerVersion?: string;
10
+ logLevel?: string;
11
+ mergeXrayTraces?: string;
12
+ region?: string;
13
+ service?: string;
14
+ tracing?: string;
15
+ version?: string;
16
+ }
@@ -0,0 +1,17 @@
1
+ import { CloudWatchLogs } from 'aws-sdk';
2
+ export interface LogGroupConfiguration {
3
+ createLogGroupRequest?: CloudWatchLogs.CreateLogGroupRequest;
4
+ deleteSubscriptionFilterRequest?: CloudWatchLogs.DeleteSubscriptionFilterRequest;
5
+ logGroupName: string;
6
+ subscriptionFilterRequest: CloudWatchLogs.PutSubscriptionFilterRequest;
7
+ }
8
+ export declare enum SubscriptionState {
9
+ Empty = 0,
10
+ CorrectDestination = 1,
11
+ WrongDestinationOwned = 2,
12
+ WrongDestinationUnowned = 3
13
+ }
14
+ export declare const applyLogGroupConfig: (logs: CloudWatchLogs, configuration: LogGroupConfiguration) => Promise<void>;
15
+ export declare const calculateLogGroupUpdateRequest: (logs: CloudWatchLogs, logGroupName: string, forwarderARN: string) => Promise<LogGroupConfiguration | undefined>;
16
+ export declare const hasLogGroup: (logs: CloudWatchLogs, logGroupName: string) => Promise<boolean>;
17
+ export declare const getSubscriptionFilterState: (logs: CloudWatchLogs, logGroupName: string, forwarderARN: string) => Promise<SubscriptionState>;
@@ -0,0 +1,7 @@
1
+ import { Lambda } from 'aws-sdk';
2
+ export interface TagConfiguration {
3
+ tagResourceRequest?: Lambda.TagResourceRequest;
4
+ }
5
+ export declare const applyTagConfig: (lambda: Lambda, configuration: TagConfiguration) => Promise<void>;
6
+ export declare const calculateTagUpdateRequest: (lambda: Lambda, functionARN: string) => Promise<TagConfiguration | undefined>;
7
+ export declare const hasVersionTag: (lambda: Lambda, functionARN: string) => Promise<boolean>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};