@datadog/datadog-ci 0.17.7 → 0.17.11
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/LICENSE-3rdparty.csv +2 -0
- package/README.md +3 -1
- package/dist/{commands/dependencies/index.d.ts → cli.d.ts} +0 -0
- package/dist/cli.js +34 -0
- package/dist/commands/{dsyms/index.d.ts → dependencies/cli.d.ts} +0 -0
- package/dist/commands/dependencies/{index.js → cli.js} +0 -0
- package/dist/commands/dependencies/upload.d.ts +1 -1
- package/dist/commands/{git-metadata/index.d.ts → dsyms/cli.d.ts} +0 -0
- package/dist/commands/dsyms/{index.js → cli.js} +0 -0
- package/dist/commands/dsyms/upload.d.ts +1 -1
- package/dist/commands/{junit/index.d.ts → git-metadata/cli.d.ts} +0 -0
- package/dist/commands/git-metadata/{index.js → cli.js} +0 -0
- package/dist/commands/git-metadata/upload.d.ts +1 -1
- package/dist/commands/git-metadata/upload.js +6 -1
- package/dist/commands/{lambda/__tests__/function.test.d.ts → junit/cli.d.ts} +0 -0
- package/dist/commands/junit/{index.js → cli.js} +0 -0
- package/dist/commands/junit/upload.d.ts +1 -1
- package/dist/commands/lambda/__tests__/fixtures.d.ts +42 -0
- package/dist/commands/lambda/__tests__/fixtures.js +73 -0
- package/dist/commands/lambda/{index.d.ts → __tests__/functions/commons.test.d.ts} +0 -0
- package/dist/commands/lambda/__tests__/functions/commons.test.js +350 -0
- package/dist/commands/{sourcemaps/index.d.ts → lambda/__tests__/functions/instrument.test.d.ts} +0 -0
- package/dist/commands/lambda/__tests__/{function.test.js → functions/instrument.test.js} +504 -476
- package/dist/commands/{trace/index.d.ts → lambda/__tests__/functions/uninstrument.test.d.ts} +0 -0
- package/dist/commands/lambda/__tests__/functions/uninstrument.test.js +371 -0
- package/dist/commands/lambda/__tests__/instrument.test.js +351 -234
- package/dist/commands/lambda/__tests__/loggroup.test.js +98 -34
- package/dist/commands/lambda/__tests__/tags.test.js +107 -31
- package/dist/commands/lambda/__tests__/uninstrument.test.d.ts +1 -0
- package/dist/commands/lambda/__tests__/uninstrument.test.js +281 -0
- package/dist/commands/lambda/cli.d.ts +1 -0
- package/dist/commands/lambda/cli.js +5 -0
- package/dist/commands/lambda/constants.d.ts +18 -6
- package/dist/commands/lambda/constants.js +30 -6
- package/dist/commands/lambda/functions/commons.d.ts +101 -0
- package/dist/commands/lambda/functions/commons.js +258 -0
- package/dist/commands/lambda/functions/instrument.d.ts +7 -0
- package/dist/commands/lambda/functions/instrument.js +186 -0
- package/dist/commands/lambda/functions/uninstrument.d.ts +7 -0
- package/dist/commands/lambda/functions/uninstrument.js +121 -0
- package/dist/commands/lambda/instrument.d.ts +4 -4
- package/dist/commands/lambda/instrument.js +103 -57
- package/dist/commands/lambda/interfaces.d.ts +53 -0
- package/dist/commands/lambda/loggroup.d.ts +4 -7
- package/dist/commands/lambda/loggroup.js +30 -5
- package/dist/commands/lambda/tags.d.ts +3 -4
- package/dist/commands/lambda/tags.js +19 -3
- package/dist/commands/lambda/uninstrument.d.ts +12 -0
- package/dist/commands/lambda/uninstrument.js +166 -0
- package/dist/commands/sourcemaps/cli.d.ts +1 -0
- package/dist/commands/sourcemaps/{index.js → cli.js} +0 -0
- package/dist/commands/sourcemaps/upload.d.ts +1 -1
- package/dist/commands/synthetics/__tests__/cli.test.js +13 -13
- package/dist/commands/synthetics/__tests__/fixtures.js +0 -1
- package/dist/commands/synthetics/__tests__/reporters/default.test.js +3 -2
- package/dist/commands/synthetics/__tests__/run-test.test.js +6 -6
- package/dist/commands/synthetics/__tests__/utils.test.js +9 -5
- package/dist/commands/synthetics/__tests__/websocket.test.js +3 -3
- package/dist/commands/synthetics/cli.d.ts +1 -26
- package/dist/commands/synthetics/cli.js +2 -227
- package/dist/commands/synthetics/command.d.ts +26 -0
- package/dist/commands/synthetics/command.js +229 -0
- package/dist/commands/synthetics/index.d.ts +5 -1
- package/dist/commands/synthetics/index.js +31 -2
- package/dist/commands/synthetics/interfaces.d.ts +1 -1
- package/dist/commands/synthetics/reporters/default.d.ts +3 -3
- package/dist/commands/synthetics/reporters/default.js +4 -3
- package/dist/commands/synthetics/utils.d.ts +1 -3
- package/dist/commands/synthetics/utils.js +14 -15
- package/dist/commands/trace/cli.d.ts +1 -0
- package/dist/commands/trace/{index.js → cli.js} +0 -0
- package/dist/commands/trace/trace.d.ts +1 -1
- package/dist/helpers/__tests__/ci.test.js +51 -114
- package/dist/helpers/__tests__/user-provided-git.test.js +14 -2
- package/dist/helpers/__tests__/utils.test.js +4 -0
- package/dist/helpers/ci.js +62 -96
- package/dist/helpers/interfaces.d.ts +28 -2
- package/dist/helpers/user-provided-git.js +11 -2
- package/dist/helpers/utils.d.ts +4 -0
- package/dist/helpers/utils.js +18 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +23 -31
- package/package.json +8 -6
- package/dist/commands/lambda/function.d.ts +0 -43
- package/dist/commands/lambda/function.js +0 -273
- package/dist/commands/lambda/index.js +0 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Command } from 'clipanion';
|
|
2
2
|
import { Provider } from './interfaces';
|
|
3
3
|
export declare class TraceCommand extends Command {
|
|
4
|
-
static usage: import("clipanion
|
|
4
|
+
static usage: import("clipanion").Usage;
|
|
5
5
|
private command?;
|
|
6
6
|
private config;
|
|
7
7
|
private name?;
|
|
@@ -3,126 +3,42 @@ 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
|
-
const ci_1 = require("../ci");
|
|
7
|
-
const user_provided_git_1 = require("../user-provided-git");
|
|
8
6
|
const fs_1 = __importDefault(require("fs"));
|
|
9
7
|
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const ci_1 = require("../ci");
|
|
9
|
+
const user_provided_git_1 = require("../user-provided-git");
|
|
10
|
+
const CI_PROVIDERS = fs_1.default.readdirSync(path_1.default.join(__dirname, 'ci-env'));
|
|
10
11
|
describe('getCIMetadata', () => {
|
|
11
|
-
const branch = 'fakeBranch';
|
|
12
|
-
const commit = 'fakeCommitSha';
|
|
13
|
-
const pipelineURL = 'fakePipelineUrl';
|
|
14
12
|
test('non-recognized CI returns undefined', () => {
|
|
15
13
|
process.env = {};
|
|
16
14
|
expect(ci_1.getCIMetadata()).toBeUndefined();
|
|
17
15
|
});
|
|
18
|
-
test('
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
process.env = {
|
|
38
|
-
TRAVIS: 'true',
|
|
39
|
-
TRAVIS_BRANCH: branch,
|
|
40
|
-
TRAVIS_COMMIT: commit,
|
|
41
|
-
TRAVIS_JOB_WEB_URL: pipelineURL,
|
|
42
|
-
};
|
|
43
|
-
expect(ci_1.getCIMetadata()).toEqual({
|
|
44
|
-
ci: {
|
|
45
|
-
pipeline: { url: pipelineURL },
|
|
46
|
-
provider: { name: ci_1.CI_ENGINES.TRAVIS },
|
|
47
|
-
},
|
|
48
|
-
git: {
|
|
49
|
-
branch,
|
|
50
|
-
commitSha: commit,
|
|
51
|
-
},
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
test('gitlab CI is recognized', () => {
|
|
55
|
-
process.env = {
|
|
56
|
-
CI_COMMIT_REF_NAME: branch,
|
|
57
|
-
CI_COMMIT_SHA: commit,
|
|
58
|
-
CI_JOB_URL: pipelineURL,
|
|
59
|
-
GITLAB_CI: 'true',
|
|
60
|
-
};
|
|
61
|
-
expect(ci_1.getCIMetadata()).toEqual({
|
|
62
|
-
ci: {
|
|
63
|
-
pipeline: { url: pipelineURL },
|
|
64
|
-
provider: { name: ci_1.CI_ENGINES.GITLAB },
|
|
65
|
-
},
|
|
66
|
-
git: {
|
|
67
|
-
branch,
|
|
68
|
-
commitSha: commit,
|
|
69
|
-
},
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
test('github actions is recognized', () => {
|
|
73
|
-
process.env = {
|
|
74
|
-
GITHUB_ACTIONS: 'true',
|
|
75
|
-
GITHUB_REF: branch,
|
|
76
|
-
GITHUB_REPOSITORY: 'DataDog/datadog-ci',
|
|
77
|
-
GITHUB_RUN_ID: '42',
|
|
78
|
-
GITHUB_SHA: commit,
|
|
79
|
-
};
|
|
80
|
-
const expectedPipelineURL = 'https://github.com/DataDog/datadog-ci/actions/runs/42';
|
|
81
|
-
expect(ci_1.getCIMetadata()).toEqual({
|
|
82
|
-
ci: {
|
|
83
|
-
pipeline: { url: expectedPipelineURL },
|
|
84
|
-
provider: { name: ci_1.CI_ENGINES.GITHUB },
|
|
85
|
-
},
|
|
86
|
-
git: {
|
|
87
|
-
branch,
|
|
88
|
-
commitSha: commit,
|
|
89
|
-
},
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
test('jenkins is recognized', () => {
|
|
93
|
-
process.env = {
|
|
94
|
-
BUILD_URL: pipelineURL,
|
|
95
|
-
GIT_BRANCH: branch,
|
|
96
|
-
GIT_COMMIT: commit,
|
|
97
|
-
JENKINS_URL: 'https://fakebuildserver.url/',
|
|
98
|
-
};
|
|
99
|
-
expect(ci_1.getCIMetadata()).toEqual({
|
|
100
|
-
ci: {
|
|
101
|
-
pipeline: { url: pipelineURL },
|
|
102
|
-
provider: { name: ci_1.CI_ENGINES.JENKINS },
|
|
103
|
-
},
|
|
104
|
-
git: {
|
|
105
|
-
branch,
|
|
106
|
-
commitSha: commit,
|
|
107
|
-
},
|
|
108
|
-
});
|
|
16
|
+
test('pipeline number is parsed to int or ignored', () => {
|
|
17
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
18
|
+
process.env = { GITLAB_CI: 'gitlab' };
|
|
19
|
+
process.env.CI_PIPELINE_IID = '0';
|
|
20
|
+
expect((_a = ci_1.getCIMetadata()) === null || _a === void 0 ? void 0 : _a.ci.pipeline.number).toBe(0);
|
|
21
|
+
process.env.CI_PIPELINE_IID = ' \n\r 12345 \n\n ';
|
|
22
|
+
expect((_b = ci_1.getCIMetadata()) === null || _b === void 0 ? void 0 : _b.ci.pipeline.number).toBe(12345);
|
|
23
|
+
process.env.CI_PIPELINE_IID = '123.45';
|
|
24
|
+
expect((_c = ci_1.getCIMetadata()) === null || _c === void 0 ? void 0 : _c.ci.pipeline.number).toBe(123);
|
|
25
|
+
process.env.CI_PIPELINE_IID = '999b';
|
|
26
|
+
expect((_d = ci_1.getCIMetadata()) === null || _d === void 0 ? void 0 : _d.ci.pipeline.number).toBe(999);
|
|
27
|
+
process.env.CI_PIPELINE_IID = '-1';
|
|
28
|
+
expect((_e = ci_1.getCIMetadata()) === null || _e === void 0 ? void 0 : _e.ci.pipeline.number).toBe(-1);
|
|
29
|
+
process.env.CI_PIPELINE_IID = '';
|
|
30
|
+
expect((_f = ci_1.getCIMetadata()) === null || _f === void 0 ? void 0 : _f.ci.pipeline.number).toBeUndefined();
|
|
31
|
+
process.env.CI_PIPELINE_IID = 'not a number';
|
|
32
|
+
expect((_g = ci_1.getCIMetadata()) === null || _g === void 0 ? void 0 : _g.ci.pipeline.number).toBeUndefined();
|
|
33
|
+
process.env.CI_PIPELINE_IID = '$1';
|
|
34
|
+
expect((_h = ci_1.getCIMetadata()) === null || _h === void 0 ? void 0 : _h.ci.pipeline.number).toBeUndefined();
|
|
109
35
|
});
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
};
|
|
117
|
-
expect(ci_1.getCIMetadata()).toEqual({
|
|
118
|
-
ci: {
|
|
119
|
-
pipeline: { url: pipelineURL },
|
|
120
|
-
provider: { name: ci_1.CI_ENGINES.JENKINS },
|
|
121
|
-
},
|
|
122
|
-
git: {
|
|
123
|
-
branch,
|
|
124
|
-
commitSha: commit,
|
|
125
|
-
},
|
|
36
|
+
describe.each(CI_PROVIDERS)('%s', (ciProvider) => {
|
|
37
|
+
const assertions = require(path_1.default.join(__dirname, 'ci-env', ciProvider));
|
|
38
|
+
test.each(assertions)('spec %#', (env, tags) => {
|
|
39
|
+
process.env = env;
|
|
40
|
+
const expectedMetadata = ciAppTagsToMetadata(tags);
|
|
41
|
+
expect(ci_1.getCIMetadata()).toEqual(expectedMetadata);
|
|
126
42
|
});
|
|
127
43
|
});
|
|
128
44
|
});
|
|
@@ -132,8 +48,7 @@ describe('ci spec', () => {
|
|
|
132
48
|
const tags = Object.assign(Object.assign({}, ci_1.getCISpanTags()), user_provided_git_1.getUserGitMetadata());
|
|
133
49
|
expect(tags).toEqual({});
|
|
134
50
|
});
|
|
135
|
-
|
|
136
|
-
ciProviders.forEach((ciProvider) => {
|
|
51
|
+
CI_PROVIDERS.forEach((ciProvider) => {
|
|
137
52
|
const assertions = require(path_1.default.join(__dirname, 'ci-env', ciProvider));
|
|
138
53
|
assertions.forEach(([env, expectedSpanTags], index) => {
|
|
139
54
|
test(`reads env info for spec ${index} from ${ciProvider}`, () => {
|
|
@@ -144,3 +59,25 @@ describe('ci spec', () => {
|
|
|
144
59
|
});
|
|
145
60
|
});
|
|
146
61
|
});
|
|
62
|
+
const ciAppTagsToMetadata = (tags) => {
|
|
63
|
+
const metadata = {
|
|
64
|
+
ci: { job: {}, pipeline: {}, provider: {}, stage: {} },
|
|
65
|
+
git: { commit: { author: {}, committer: {} } },
|
|
66
|
+
};
|
|
67
|
+
Object.entries(tags).forEach(([tag, value]) => {
|
|
68
|
+
// Ignore JSON fixtures pipeline number that can't be parsed to numbers
|
|
69
|
+
if (!value || tag === 'ci.pipeline.number') {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
// Get Metadata nested property from tag name ('git.commit.author.name')
|
|
73
|
+
let currentAttr = metadata;
|
|
74
|
+
// Current attribute up to second to last
|
|
75
|
+
const properties = tag.split('.');
|
|
76
|
+
for (let i = 0; i < properties.length - 1; i++) {
|
|
77
|
+
currentAttr = currentAttr[properties[i]];
|
|
78
|
+
}
|
|
79
|
+
const attributeName = properties[properties.length - 1];
|
|
80
|
+
currentAttr[attributeName] = value;
|
|
81
|
+
});
|
|
82
|
+
return metadata;
|
|
83
|
+
};
|
|
@@ -7,7 +7,6 @@ describe('getUserGitMetadata', () => {
|
|
|
7
7
|
process.env.DD_GIT_COMMIT_SHA = 'DD_GIT_COMMIT_SHA';
|
|
8
8
|
process.env.DD_GIT_REPOSITORY_URL = 'DD_GIT_REPOSITORY_URL';
|
|
9
9
|
process.env.DD_GIT_BRANCH = 'DD_GIT_BRANCH';
|
|
10
|
-
process.env.DD_GIT_TAG = 'DD_GIT_TAG';
|
|
11
10
|
process.env.DD_GIT_COMMIT_MESSAGE = 'DD_GIT_COMMIT_MESSAGE';
|
|
12
11
|
process.env.DD_GIT_COMMIT_AUTHOR_NAME = 'DD_GIT_COMMIT_AUTHOR_NAME';
|
|
13
12
|
process.env.DD_GIT_COMMIT_AUTHOR_EMAIL = 'DD_GIT_COMMIT_AUTHOR_EMAIL';
|
|
@@ -20,7 +19,6 @@ describe('getUserGitMetadata', () => {
|
|
|
20
19
|
[tags_1.GIT_REPOSITORY_URL]: 'DD_GIT_REPOSITORY_URL',
|
|
21
20
|
[tags_1.GIT_BRANCH]: 'DD_GIT_BRANCH',
|
|
22
21
|
[tags_1.GIT_SHA]: 'DD_GIT_COMMIT_SHA',
|
|
23
|
-
[tags_1.GIT_TAG]: 'DD_GIT_TAG',
|
|
24
22
|
[tags_1.GIT_COMMIT_MESSAGE]: 'DD_GIT_COMMIT_MESSAGE',
|
|
25
23
|
[tags_1.GIT_COMMIT_COMMITTER_DATE]: 'DD_GIT_COMMIT_COMMITTER_DATE',
|
|
26
24
|
[tags_1.GIT_COMMIT_COMMITTER_EMAIL]: 'DD_GIT_COMMIT_COMMITTER_EMAIL',
|
|
@@ -36,7 +34,21 @@ describe('getUserGitMetadata', () => {
|
|
|
36
34
|
expect(result).toEqual({
|
|
37
35
|
[tags_1.GIT_REPOSITORY_URL]: 'DD_GIT_REPOSITORY_URL',
|
|
38
36
|
[tags_1.GIT_BRANCH]: 'DD_GIT_BRANCH',
|
|
37
|
+
[tags_1.GIT_COMMIT_MESSAGE]: 'DD_GIT_COMMIT_MESSAGE',
|
|
38
|
+
[tags_1.GIT_COMMIT_COMMITTER_DATE]: 'DD_GIT_COMMIT_COMMITTER_DATE',
|
|
39
|
+
[tags_1.GIT_COMMIT_COMMITTER_EMAIL]: 'DD_GIT_COMMIT_COMMITTER_EMAIL',
|
|
40
|
+
[tags_1.GIT_COMMIT_COMMITTER_NAME]: 'DD_GIT_COMMIT_COMMITTER_NAME',
|
|
41
|
+
[tags_1.GIT_COMMIT_AUTHOR_DATE]: 'DD_GIT_COMMIT_AUTHOR_DATE',
|
|
42
|
+
[tags_1.GIT_COMMIT_AUTHOR_EMAIL]: 'DD_GIT_COMMIT_AUTHOR_EMAIL',
|
|
43
|
+
[tags_1.GIT_COMMIT_AUTHOR_NAME]: 'DD_GIT_COMMIT_AUTHOR_NAME',
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
it('overwrites branch when tag is available', () => {
|
|
47
|
+
process.env.DD_GIT_TAG = 'DD_GIT_TAG';
|
|
48
|
+
const result = user_provided_git_1.getUserGitMetadata();
|
|
49
|
+
expect(result).toEqual({
|
|
39
50
|
[tags_1.GIT_TAG]: 'DD_GIT_TAG',
|
|
51
|
+
[tags_1.GIT_REPOSITORY_URL]: 'DD_GIT_REPOSITORY_URL',
|
|
40
52
|
[tags_1.GIT_COMMIT_MESSAGE]: 'DD_GIT_COMMIT_MESSAGE',
|
|
41
53
|
[tags_1.GIT_COMMIT_COMMITTER_DATE]: 'DD_GIT_COMMIT_COMMITTER_DATE',
|
|
42
54
|
[tags_1.GIT_COMMIT_COMMITTER_EMAIL]: 'DD_GIT_COMMIT_COMMITTER_EMAIL',
|
|
@@ -363,3 +363,7 @@ describe('utils', () => {
|
|
|
363
363
|
}));
|
|
364
364
|
});
|
|
365
365
|
});
|
|
366
|
+
test('removeUndefinedValues', () => {
|
|
367
|
+
// tslint:disable-next-line: no-null-keyword
|
|
368
|
+
expect(ciUtils.removeUndefinedValues({ a: 'b', c: 'd', e: undefined, g: null })).toEqual({ a: 'b', c: 'd', g: null });
|
|
369
|
+
});
|
package/dist/helpers/ci.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getCIMetadata = exports.getCISpanTags = exports.CI_ENGINES = void 0;
|
|
4
4
|
const url_1 = require("url");
|
|
5
5
|
const tags_1 = require("./tags");
|
|
6
|
+
const user_provided_git_1 = require("./user-provided-git");
|
|
6
7
|
const utils_1 = require("./utils");
|
|
7
8
|
exports.CI_ENGINES = {
|
|
8
9
|
APPVEYOR: 'appveyor',
|
|
@@ -57,12 +58,6 @@ const filterSensitiveInfoFromRepository = (repositoryUrl) => {
|
|
|
57
58
|
return repositoryUrl;
|
|
58
59
|
}
|
|
59
60
|
};
|
|
60
|
-
const normalizeRef = (ref) => {
|
|
61
|
-
if (!ref) {
|
|
62
|
-
return ref;
|
|
63
|
-
}
|
|
64
|
-
return ref.replace(/origin\/|refs\/heads\/|tags\//gm, '');
|
|
65
|
-
};
|
|
66
61
|
const getCISpanTags = () => {
|
|
67
62
|
const env = process.env;
|
|
68
63
|
let tags = {};
|
|
@@ -125,13 +120,17 @@ const getCISpanTags = () => {
|
|
|
125
120
|
};
|
|
126
121
|
}
|
|
127
122
|
if (env.GITHUB_ACTIONS || env.GITHUB_ACTION) {
|
|
128
|
-
const { GITHUB_RUN_ID, GITHUB_WORKFLOW, GITHUB_RUN_NUMBER, GITHUB_WORKSPACE, GITHUB_HEAD_REF, GITHUB_REF, GITHUB_SHA, GITHUB_REPOSITORY, } = env;
|
|
129
|
-
const repositoryUrl =
|
|
130
|
-
|
|
123
|
+
const { GITHUB_RUN_ID, GITHUB_WORKFLOW, GITHUB_RUN_NUMBER, GITHUB_WORKSPACE, GITHUB_HEAD_REF, GITHUB_REF, GITHUB_SHA, GITHUB_REPOSITORY, GITHUB_SERVER_URL, } = env;
|
|
124
|
+
const repositoryUrl = `${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}.git`;
|
|
125
|
+
let pipelineURL = `${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}`;
|
|
126
|
+
// Some older versions of enterprise might not have this yet.
|
|
127
|
+
if (env.GITHUB_RUN_ATTEMPT) {
|
|
128
|
+
pipelineURL += `/attempts/${env.GITHUB_RUN_ATTEMPT}`;
|
|
129
|
+
}
|
|
131
130
|
const ref = GITHUB_HEAD_REF || GITHUB_REF || '';
|
|
132
131
|
const refKey = ref.includes('tags') ? tags_1.GIT_TAG : tags_1.GIT_BRANCH;
|
|
133
132
|
tags = {
|
|
134
|
-
[tags_1.CI_JOB_URL]:
|
|
133
|
+
[tags_1.CI_JOB_URL]: `${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/commit/${GITHUB_SHA}/checks`,
|
|
135
134
|
[tags_1.CI_PIPELINE_ID]: GITHUB_RUN_ID,
|
|
136
135
|
[tags_1.CI_PIPELINE_NAME]: GITHUB_WORKFLOW,
|
|
137
136
|
[tags_1.CI_PIPELINE_NUMBER]: GITHUB_RUN_NUMBER,
|
|
@@ -156,7 +155,7 @@ const getCISpanTags = () => {
|
|
|
156
155
|
};
|
|
157
156
|
const isTag = JENKINS_GIT_BRANCH && JENKINS_GIT_BRANCH.includes('tags');
|
|
158
157
|
const refKey = isTag ? tags_1.GIT_TAG : tags_1.GIT_BRANCH;
|
|
159
|
-
const ref = normalizeRef(JENKINS_GIT_BRANCH);
|
|
158
|
+
const ref = utils_1.normalizeRef(JENKINS_GIT_BRANCH);
|
|
160
159
|
tags[refKey] = ref;
|
|
161
160
|
let finalPipelineName = '';
|
|
162
161
|
if (JOB_NAME) {
|
|
@@ -280,98 +279,65 @@ const getCISpanTags = () => {
|
|
|
280
279
|
tags[tags_1.GIT_REPOSITORY_URL] = filterSensitiveInfoFromRepository(tags[tags_1.GIT_REPOSITORY_URL]);
|
|
281
280
|
}
|
|
282
281
|
if (tags[tags_1.GIT_BRANCH]) {
|
|
283
|
-
tags[tags_1.GIT_BRANCH] = normalizeRef(tags[tags_1.GIT_BRANCH]);
|
|
282
|
+
tags[tags_1.GIT_BRANCH] = utils_1.normalizeRef(tags[tags_1.GIT_BRANCH]);
|
|
284
283
|
}
|
|
285
284
|
if (tags[tags_1.GIT_TAG]) {
|
|
286
|
-
tags[tags_1.GIT_TAG] = normalizeRef(tags[tags_1.GIT_TAG]);
|
|
285
|
+
tags[tags_1.GIT_TAG] = utils_1.normalizeRef(tags[tags_1.GIT_TAG]);
|
|
287
286
|
}
|
|
288
287
|
return utils_1.removeEmptyValues(tags);
|
|
289
288
|
};
|
|
290
289
|
exports.getCISpanTags = getCISpanTags;
|
|
291
290
|
const getCIMetadata = () => {
|
|
292
|
-
const
|
|
293
|
-
if (
|
|
294
|
-
return
|
|
295
|
-
ci: {
|
|
296
|
-
pipeline: {
|
|
297
|
-
url: env.CIRCLE_BUILD_URL,
|
|
298
|
-
},
|
|
299
|
-
provider: {
|
|
300
|
-
name: exports.CI_ENGINES.CIRCLECI,
|
|
301
|
-
},
|
|
302
|
-
},
|
|
303
|
-
git: {
|
|
304
|
-
branch: env.CIRCLE_BRANCH,
|
|
305
|
-
commitSha: env.CIRCLE_SHA1,
|
|
306
|
-
},
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
|
-
if (env.TRAVIS) {
|
|
310
|
-
return {
|
|
311
|
-
ci: {
|
|
312
|
-
pipeline: {
|
|
313
|
-
url: env.TRAVIS_JOB_WEB_URL,
|
|
314
|
-
},
|
|
315
|
-
provider: {
|
|
316
|
-
name: exports.CI_ENGINES.TRAVIS,
|
|
317
|
-
},
|
|
318
|
-
},
|
|
319
|
-
git: {
|
|
320
|
-
branch: env.TRAVIS_BRANCH,
|
|
321
|
-
commitSha: env.TRAVIS_COMMIT,
|
|
322
|
-
},
|
|
323
|
-
};
|
|
324
|
-
}
|
|
325
|
-
if (env.GITLAB_CI) {
|
|
326
|
-
return {
|
|
327
|
-
ci: {
|
|
328
|
-
pipeline: {
|
|
329
|
-
url: env.CI_JOB_URL,
|
|
330
|
-
},
|
|
331
|
-
provider: {
|
|
332
|
-
name: exports.CI_ENGINES.GITLAB,
|
|
333
|
-
},
|
|
334
|
-
},
|
|
335
|
-
git: {
|
|
336
|
-
branch: env.CI_COMMIT_REF_NAME,
|
|
337
|
-
commitSha: env.CI_COMMIT_SHA,
|
|
338
|
-
},
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
|
-
if (env.GITHUB_ACTIONS) {
|
|
342
|
-
const { GITHUB_REF, GITHUB_SHA, GITHUB_REPOSITORY, GITHUB_RUN_ID } = env;
|
|
343
|
-
const pipelineURL = `https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}`;
|
|
344
|
-
return {
|
|
345
|
-
ci: {
|
|
346
|
-
pipeline: {
|
|
347
|
-
url: pipelineURL,
|
|
348
|
-
},
|
|
349
|
-
provider: {
|
|
350
|
-
name: exports.CI_ENGINES.GITHUB,
|
|
351
|
-
},
|
|
352
|
-
},
|
|
353
|
-
git: {
|
|
354
|
-
branch: GITHUB_REF,
|
|
355
|
-
commitSha: GITHUB_SHA,
|
|
356
|
-
},
|
|
357
|
-
};
|
|
358
|
-
}
|
|
359
|
-
if (env.JENKINS_URL) {
|
|
360
|
-
const { BUILD_URL, GIT_COMMIT, GIT_BRANCH: JENKINS_GIT_BRANCH } = env;
|
|
361
|
-
return {
|
|
362
|
-
ci: {
|
|
363
|
-
pipeline: {
|
|
364
|
-
url: BUILD_URL,
|
|
365
|
-
},
|
|
366
|
-
provider: {
|
|
367
|
-
name: exports.CI_ENGINES.JENKINS,
|
|
368
|
-
},
|
|
369
|
-
},
|
|
370
|
-
git: {
|
|
371
|
-
branch: JENKINS_GIT_BRANCH,
|
|
372
|
-
commitSha: GIT_COMMIT,
|
|
373
|
-
},
|
|
374
|
-
};
|
|
291
|
+
const tags = Object.assign(Object.assign({}, exports.getCISpanTags()), user_provided_git_1.getUserGitMetadata());
|
|
292
|
+
if (!tags || !Object.keys(tags).length) {
|
|
293
|
+
return;
|
|
375
294
|
}
|
|
295
|
+
const metadata = {
|
|
296
|
+
ci: utils_1.removeUndefinedValues({
|
|
297
|
+
job: utils_1.removeUndefinedValues({
|
|
298
|
+
name: tags[tags_1.CI_JOB_NAME],
|
|
299
|
+
url: tags[tags_1.CI_JOB_URL],
|
|
300
|
+
}),
|
|
301
|
+
pipeline: utils_1.removeUndefinedValues({
|
|
302
|
+
id: tags[tags_1.CI_PIPELINE_ID],
|
|
303
|
+
name: tags[tags_1.CI_PIPELINE_NAME],
|
|
304
|
+
number: parsePipelineNumber(tags[tags_1.CI_PIPELINE_NUMBER]),
|
|
305
|
+
url: tags[tags_1.CI_PIPELINE_URL],
|
|
306
|
+
}),
|
|
307
|
+
provider: utils_1.removeUndefinedValues({
|
|
308
|
+
name: tags[tags_1.CI_PROVIDER_NAME],
|
|
309
|
+
}),
|
|
310
|
+
stage: utils_1.removeUndefinedValues({
|
|
311
|
+
name: tags[tags_1.CI_STAGE_NAME],
|
|
312
|
+
}),
|
|
313
|
+
workspace_path: tags[tags_1.CI_WORKSPACE_PATH],
|
|
314
|
+
}),
|
|
315
|
+
git: utils_1.removeUndefinedValues({
|
|
316
|
+
branch: tags[tags_1.GIT_BRANCH],
|
|
317
|
+
commit: utils_1.removeUndefinedValues({
|
|
318
|
+
author: utils_1.removeUndefinedValues({
|
|
319
|
+
date: tags[tags_1.GIT_COMMIT_AUTHOR_DATE],
|
|
320
|
+
email: tags[tags_1.GIT_COMMIT_AUTHOR_EMAIL],
|
|
321
|
+
name: tags[tags_1.GIT_COMMIT_AUTHOR_NAME],
|
|
322
|
+
}),
|
|
323
|
+
committer: utils_1.removeUndefinedValues({
|
|
324
|
+
date: tags[tags_1.GIT_COMMIT_COMMITTER_DATE],
|
|
325
|
+
email: tags[tags_1.GIT_COMMIT_COMMITTER_EMAIL],
|
|
326
|
+
name: tags[tags_1.GIT_COMMIT_COMMITTER_NAME],
|
|
327
|
+
}),
|
|
328
|
+
message: tags[tags_1.GIT_COMMIT_MESSAGE],
|
|
329
|
+
sha: tags[tags_1.GIT_SHA],
|
|
330
|
+
}),
|
|
331
|
+
repository_url: tags[tags_1.GIT_REPOSITORY_URL],
|
|
332
|
+
tag: tags[tags_1.GIT_TAG],
|
|
333
|
+
}),
|
|
334
|
+
};
|
|
335
|
+
return metadata;
|
|
376
336
|
};
|
|
377
337
|
exports.getCIMetadata = getCIMetadata;
|
|
338
|
+
const parsePipelineNumber = (pipelineNumberStr) => {
|
|
339
|
+
if (pipelineNumberStr) {
|
|
340
|
+
const pipelineNumber = parseInt(pipelineNumberStr, 10);
|
|
341
|
+
return isFinite(pipelineNumber) ? pipelineNumber : undefined;
|
|
342
|
+
}
|
|
343
|
+
};
|
|
@@ -2,16 +2,42 @@ import { AxiosPromise, AxiosRequestConfig, AxiosResponse } from 'axios';
|
|
|
2
2
|
import { CI_JOB_NAME, CI_JOB_URL, CI_PIPELINE_ID, CI_PIPELINE_NAME, CI_PIPELINE_NUMBER, CI_PIPELINE_URL, CI_PROVIDER_NAME, CI_STAGE_NAME, CI_WORKSPACE_PATH, GIT_BRANCH, GIT_COMMIT_AUTHOR_DATE, GIT_COMMIT_AUTHOR_EMAIL, GIT_COMMIT_AUTHOR_NAME, GIT_COMMIT_COMMITTER_DATE, GIT_COMMIT_COMMITTER_EMAIL, GIT_COMMIT_COMMITTER_NAME, GIT_COMMIT_MESSAGE, GIT_REPOSITORY_URL, GIT_SHA, GIT_TAG } from './tags';
|
|
3
3
|
export interface Metadata {
|
|
4
4
|
ci: {
|
|
5
|
+
job: {
|
|
6
|
+
name?: string;
|
|
7
|
+
url?: string;
|
|
8
|
+
};
|
|
5
9
|
pipeline: {
|
|
10
|
+
id?: string;
|
|
11
|
+
name?: string;
|
|
12
|
+
number?: number;
|
|
6
13
|
url?: string;
|
|
7
14
|
};
|
|
8
15
|
provider: {
|
|
9
|
-
name
|
|
16
|
+
name?: string;
|
|
10
17
|
};
|
|
18
|
+
stage: {
|
|
19
|
+
name?: string;
|
|
20
|
+
};
|
|
21
|
+
workspace_path?: string;
|
|
11
22
|
};
|
|
12
23
|
git: {
|
|
13
24
|
branch?: string;
|
|
14
|
-
|
|
25
|
+
commit: {
|
|
26
|
+
author: {
|
|
27
|
+
date?: string;
|
|
28
|
+
email?: string;
|
|
29
|
+
name?: string;
|
|
30
|
+
};
|
|
31
|
+
committer: {
|
|
32
|
+
date?: string;
|
|
33
|
+
email?: string;
|
|
34
|
+
name?: string;
|
|
35
|
+
};
|
|
36
|
+
message?: string;
|
|
37
|
+
sha?: string;
|
|
38
|
+
};
|
|
39
|
+
repository_url?: string;
|
|
40
|
+
tag?: string;
|
|
15
41
|
};
|
|
16
42
|
}
|
|
17
43
|
export declare type SpanTag = typeof CI_JOB_NAME | typeof CI_JOB_URL | typeof CI_PIPELINE_ID | typeof CI_PIPELINE_NAME | typeof CI_PIPELINE_NUMBER | typeof CI_PIPELINE_URL | typeof CI_PROVIDER_NAME | typeof CI_STAGE_NAME | typeof CI_WORKSPACE_PATH | typeof GIT_BRANCH | typeof GIT_REPOSITORY_URL | typeof GIT_SHA | typeof GIT_TAG | typeof GIT_COMMIT_AUTHOR_EMAIL | typeof GIT_COMMIT_AUTHOR_NAME | typeof GIT_COMMIT_AUTHOR_DATE | typeof GIT_COMMIT_MESSAGE | typeof GIT_COMMIT_COMMITTER_DATE | typeof GIT_COMMIT_COMMITTER_EMAIL | typeof GIT_COMMIT_COMMITTER_NAME;
|
|
@@ -5,11 +5,20 @@ const tags_1 = require("./tags");
|
|
|
5
5
|
const utils_1 = require("./utils");
|
|
6
6
|
const getUserGitMetadata = () => {
|
|
7
7
|
const { DD_GIT_REPOSITORY_URL, DD_GIT_COMMIT_SHA, DD_GIT_BRANCH, DD_GIT_TAG, DD_GIT_COMMIT_MESSAGE, DD_GIT_COMMIT_AUTHOR_NAME, DD_GIT_COMMIT_AUTHOR_EMAIL, DD_GIT_COMMIT_AUTHOR_DATE, DD_GIT_COMMIT_COMMITTER_NAME, DD_GIT_COMMIT_COMMITTER_EMAIL, DD_GIT_COMMIT_COMMITTER_DATE, } = process.env;
|
|
8
|
+
let branch = utils_1.normalizeRef(DD_GIT_BRANCH);
|
|
9
|
+
let tag = utils_1.normalizeRef(DD_GIT_TAG);
|
|
10
|
+
if (DD_GIT_TAG) {
|
|
11
|
+
branch = undefined;
|
|
12
|
+
}
|
|
13
|
+
if ((DD_GIT_BRANCH === null || DD_GIT_BRANCH === void 0 ? void 0 : DD_GIT_BRANCH.includes('origin/tags')) || (DD_GIT_BRANCH === null || DD_GIT_BRANCH === void 0 ? void 0 : DD_GIT_BRANCH.includes('refs/heads/tags'))) {
|
|
14
|
+
branch = undefined;
|
|
15
|
+
tag = utils_1.normalizeRef(DD_GIT_BRANCH);
|
|
16
|
+
}
|
|
8
17
|
return utils_1.removeEmptyValues({
|
|
9
18
|
[tags_1.GIT_REPOSITORY_URL]: DD_GIT_REPOSITORY_URL,
|
|
10
|
-
[tags_1.GIT_BRANCH]:
|
|
19
|
+
[tags_1.GIT_BRANCH]: branch,
|
|
11
20
|
[tags_1.GIT_SHA]: DD_GIT_COMMIT_SHA,
|
|
12
|
-
[tags_1.GIT_TAG]:
|
|
21
|
+
[tags_1.GIT_TAG]: tag,
|
|
13
22
|
[tags_1.GIT_COMMIT_MESSAGE]: DD_GIT_COMMIT_MESSAGE,
|
|
14
23
|
[tags_1.GIT_COMMIT_COMMITTER_DATE]: DD_GIT_COMMIT_COMMITTER_DATE,
|
|
15
24
|
[tags_1.GIT_COMMIT_COMMITTER_EMAIL]: DD_GIT_COMMIT_COMMITTER_EMAIL,
|
package/dist/helpers/utils.d.ts
CHANGED
|
@@ -28,4 +28,8 @@ export declare const getProxyAgent: (proxyOpts?: ProxyConfiguration | undefined)
|
|
|
28
28
|
export declare const getApiHostForSite: (site: string) => string;
|
|
29
29
|
export declare const buildPath: (...args: string[]) => string;
|
|
30
30
|
export declare const removeEmptyValues: (tags: SpanTags) => {};
|
|
31
|
+
export declare const removeUndefinedValues: <T extends {
|
|
32
|
+
[key: string]: any;
|
|
33
|
+
}>(object: T) => T;
|
|
34
|
+
export declare const normalizeRef: (ref: string | undefined) => string | undefined;
|
|
31
35
|
export {};
|
package/dist/helpers/utils.js
CHANGED
|
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.removeEmptyValues = exports.buildPath = exports.getApiHostForSite = exports.getProxyAgent = exports.getRequestBuilder = exports.getProxyUrl = exports.parseConfigFile = exports.getConfig = exports.pick = void 0;
|
|
15
|
+
exports.normalizeRef = exports.removeUndefinedValues = exports.removeEmptyValues = exports.buildPath = exports.getApiHostForSite = exports.getProxyAgent = exports.getRequestBuilder = exports.getProxyUrl = exports.parseConfigFile = exports.getConfig = exports.pick = void 0;
|
|
16
16
|
const fs_1 = __importDefault(require("fs"));
|
|
17
17
|
const util_1 = require("util");
|
|
18
18
|
const axios_1 = __importDefault(require("axios"));
|
|
@@ -130,3 +130,20 @@ const removeEmptyValues = (tags) => Object.keys(tags).reduce((filteredTags, tag)
|
|
|
130
130
|
return Object.assign(Object.assign({}, filteredTags), { [tag]: tags[tag] });
|
|
131
131
|
}, {});
|
|
132
132
|
exports.removeEmptyValues = removeEmptyValues;
|
|
133
|
+
const removeUndefinedValues = (object) => {
|
|
134
|
+
const newObject = Object.assign({}, object);
|
|
135
|
+
for (const [key, value] of Object.entries(newObject)) {
|
|
136
|
+
if (value === undefined) {
|
|
137
|
+
delete newObject[key];
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return newObject;
|
|
141
|
+
};
|
|
142
|
+
exports.removeUndefinedValues = removeUndefinedValues;
|
|
143
|
+
const normalizeRef = (ref) => {
|
|
144
|
+
if (!ref) {
|
|
145
|
+
return ref;
|
|
146
|
+
}
|
|
147
|
+
return ref.replace(/origin\/|refs\/heads\/|tags\//gm, '');
|
|
148
|
+
};
|
|
149
|
+
exports.normalizeRef = normalizeRef;
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,34 +1,26 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
1
|
"use strict";
|
|
3
|
-
var
|
|
4
|
-
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
5
20
|
};
|
|
6
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
};
|
|
13
|
-
process.on('uncaughtException', onError);
|
|
14
|
-
process.on('unhandledRejection', onError);
|
|
15
|
-
const cli = new clipanion_1.Cli({
|
|
16
|
-
binaryLabel: 'Datadog CI',
|
|
17
|
-
binaryName: 'datadog-ci',
|
|
18
|
-
binaryVersion: require('../package.json').version,
|
|
19
|
-
});
|
|
20
|
-
const commandsPath = `${__dirname}/commands`;
|
|
21
|
-
for (const commandFolder of fs_1.default.readdirSync(commandsPath)) {
|
|
22
|
-
const commandPath = `${commandsPath}/${commandFolder}`;
|
|
23
|
-
if (fs_1.default.statSync(commandPath).isDirectory()) {
|
|
24
|
-
// tslint:disable-next-line: no-var-requires
|
|
25
|
-
require(commandPath).forEach((command) => cli.register(command));
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
if (require.main === module) {
|
|
29
|
-
cli.runExit(process.argv.slice(2), {
|
|
30
|
-
stderr: process.stderr,
|
|
31
|
-
stdin: process.stdin,
|
|
32
|
-
stdout: process.stdout,
|
|
33
|
-
});
|
|
34
|
-
}
|
|
22
|
+
exports.synthetics = exports.utils = void 0;
|
|
23
|
+
const synthetics = __importStar(require("./commands/synthetics"));
|
|
24
|
+
exports.synthetics = synthetics;
|
|
25
|
+
const utils = __importStar(require("./helpers/utils"));
|
|
26
|
+
exports.utils = utils;
|