@datadog/datadog-ci 0.17.12 → 0.18.1
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/README.md +6 -1
- package/dist/commands/git-metadata/__tests__/git.test.js +44 -2
- package/dist/commands/git-metadata/__tests__/library.test.d.ts +1 -0
- package/dist/commands/git-metadata/__tests__/library.test.js +82 -0
- package/dist/commands/git-metadata/git.d.ts +1 -2
- package/dist/commands/git-metadata/git.js +13 -25
- package/dist/commands/git-metadata/index.d.ts +1 -0
- package/dist/commands/git-metadata/index.js +13 -0
- package/dist/commands/git-metadata/library.d.ts +6 -0
- package/dist/commands/git-metadata/library.js +68 -0
- package/dist/commands/git-metadata/upload.d.ts +1 -2
- package/dist/commands/git-metadata/upload.js +31 -27
- package/dist/commands/junit/upload.js +1 -1
- package/dist/commands/lambda/__tests__/fixtures.d.ts +5 -1
- package/dist/commands/lambda/__tests__/fixtures.js +13 -2
- package/dist/commands/lambda/__tests__/functions/commons.test.js +267 -2
- package/dist/commands/lambda/__tests__/functions/instrument.test.js +64 -42
- package/dist/commands/lambda/__tests__/functions/uninstrument.test.js +34 -0
- package/dist/commands/lambda/__tests__/instrument.test.js +644 -5
- package/dist/commands/lambda/__tests__/prompt.test.d.ts +1 -0
- package/dist/commands/lambda/__tests__/prompt.test.js +216 -0
- package/dist/commands/lambda/__tests__/uninstrument.test.js +310 -4
- package/dist/commands/lambda/constants.d.ts +46 -16
- package/dist/commands/lambda/constants.js +66 -18
- package/dist/commands/lambda/functions/commons.d.ts +20 -3
- package/dist/commands/lambda/functions/commons.js +116 -9
- package/dist/commands/lambda/functions/instrument.d.ts +1 -1
- package/dist/commands/lambda/functions/instrument.js +69 -26
- package/dist/commands/lambda/functions/uninstrument.js +23 -7
- package/dist/commands/lambda/instrument.d.ts +2 -0
- package/dist/commands/lambda/instrument.js +104 -48
- package/dist/commands/lambda/interfaces.d.ts +4 -0
- package/dist/commands/lambda/prompt.d.ts +9 -0
- package/dist/commands/lambda/prompt.js +187 -0
- package/dist/commands/lambda/uninstrument.d.ts +1 -0
- package/dist/commands/lambda/uninstrument.js +68 -30
- package/dist/commands/synthetics/__tests__/cli.test.js +1 -0
- package/dist/commands/synthetics/__tests__/fixtures.js +1 -0
- package/dist/commands/synthetics/__tests__/run-test.test.js +48 -2
- package/dist/commands/synthetics/__tests__/utils.test.js +38 -0
- package/dist/commands/synthetics/command.d.ts +1 -0
- package/dist/commands/synthetics/command.js +11 -5
- package/dist/commands/synthetics/crypto.d.ts +2 -1
- package/dist/commands/synthetics/interfaces.d.ts +13 -4
- package/dist/commands/synthetics/interfaces.js +7 -3
- package/dist/commands/synthetics/reporters/default.js +5 -1
- package/dist/commands/synthetics/run-test.d.ts +2 -0
- package/dist/commands/synthetics/run-test.js +3 -1
- package/dist/commands/synthetics/utils.d.ts +4 -0
- package/dist/commands/synthetics/utils.js +44 -16
- package/dist/commands/trace/api.js +1 -1
- package/dist/helpers/__tests__/ci.test.js +71 -24
- package/dist/helpers/__tests__/user-provided-git.test.js +69 -27
- package/dist/helpers/ci.js +1 -1
- package/dist/helpers/git.js +1 -1
- package/dist/helpers/user-provided-git.d.ts +2 -1
- package/dist/helpers/user-provided-git.js +18 -3
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3 -1
- package/package.json +1 -1
|
@@ -31,7 +31,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
31
31
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
32
32
|
};
|
|
33
33
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
-
exports.retry = exports.runTests = exports.getTestsToTrigger = exports.getReporter = exports.getResultDuration = exports.createSummary = exports.createTriggerResultMap = exports.waitForResults = exports.wait = exports.getSuites = exports.hasTestSucceeded = exports.hasResultPassed = exports.isCriticalError = exports.getStrictestExecutionRule = exports.getExecutionRule = exports.handleConfig = void 0;
|
|
34
|
+
exports.parseVariablesFromCli = exports.retry = exports.runTests = exports.getTestsToTrigger = exports.getReporter = exports.getResultDuration = exports.createSummary = exports.createTriggerResultMap = exports.waitForResults = exports.wait = exports.getSuites = exports.hasTestSucceeded = exports.hasResultPassed = exports.isCriticalError = exports.getStrictestExecutionRule = exports.getExecutionRule = exports.setCiTriggerApp = exports.handleConfig = void 0;
|
|
35
35
|
const fs = __importStar(require("fs"));
|
|
36
36
|
const path = __importStar(require("path"));
|
|
37
37
|
const url_1 = require("url");
|
|
@@ -47,6 +47,7 @@ const PUBLIC_ID_REGEX = /^[\d\w]{3}-[\d\w]{3}-[\d\w]{3}$/;
|
|
|
47
47
|
const SUBDOMAIN_REGEX = /(.*?)\.(?=[^\/]*\..{2,5})/;
|
|
48
48
|
const TEMPLATE_REGEX = /{{\s*([^{}]*?)\s*}}/g;
|
|
49
49
|
const template = (st, context) => st.replace(TEMPLATE_REGEX, (match, p1) => (p1 in context ? context[p1] : match));
|
|
50
|
+
let ciTriggerApp = 'npm_package';
|
|
50
51
|
const handleConfig = (test, publicId, reporter, config) => {
|
|
51
52
|
const executionRule = exports.getExecutionRule(test, config);
|
|
52
53
|
let handledConfig = {
|
|
@@ -69,16 +70,24 @@ const handleConfig = (test, publicId, reporter, config) => {
|
|
|
69
70
|
'locations',
|
|
70
71
|
'pollingTimeout',
|
|
71
72
|
'retry',
|
|
73
|
+
'startUrlSubstitutionRegex',
|
|
72
74
|
'tunnel',
|
|
73
75
|
'variables',
|
|
74
76
|
]));
|
|
75
77
|
if ((test.type === 'browser' || test.subtype === 'http') && config.startUrl) {
|
|
76
78
|
const context = parseUrlVariables(test.config.request.url, reporter);
|
|
79
|
+
if (URL_VARIABLES.some((v) => { var _a; return (_a = config.startUrl) === null || _a === void 0 ? void 0 : _a.includes(v); })) {
|
|
80
|
+
reporter.error('[DEPRECATION] The usage of URL variables is deprecated, see explanation in the README\n\n');
|
|
81
|
+
}
|
|
77
82
|
handledConfig.startUrl = template(config.startUrl, context);
|
|
78
83
|
}
|
|
79
84
|
return handledConfig;
|
|
80
85
|
};
|
|
81
86
|
exports.handleConfig = handleConfig;
|
|
87
|
+
const setCiTriggerApp = (source) => {
|
|
88
|
+
ciTriggerApp = source;
|
|
89
|
+
};
|
|
90
|
+
exports.setCiTriggerApp = setCiTriggerApp;
|
|
82
91
|
const parseUrlVariables = (url, reporter) => {
|
|
83
92
|
const context = Object.assign(Object.assign({}, process.env), { URL: url });
|
|
84
93
|
let objUrl;
|
|
@@ -104,19 +113,20 @@ const parseUrlVariables = (url, reporter) => {
|
|
|
104
113
|
context.SUBDOMAIN = subdomainMatch ? subdomainMatch[1] : undefined;
|
|
105
114
|
return context;
|
|
106
115
|
};
|
|
116
|
+
const URL_VARIABLES = [
|
|
117
|
+
'DOMAIN',
|
|
118
|
+
'HASH',
|
|
119
|
+
'HOST',
|
|
120
|
+
'HOSTNAME',
|
|
121
|
+
'ORIGIN',
|
|
122
|
+
'PARAMS',
|
|
123
|
+
'PATHNAME',
|
|
124
|
+
'PORT',
|
|
125
|
+
'PROTOCOL',
|
|
126
|
+
'SUBDOMAIN',
|
|
127
|
+
];
|
|
107
128
|
const warnOnReservedEnvVarNames = (context, reporter) => {
|
|
108
|
-
const reservedVarNames = new Set(
|
|
109
|
-
'DOMAIN',
|
|
110
|
-
'HASH',
|
|
111
|
-
'HOST',
|
|
112
|
-
'HOSTNAME',
|
|
113
|
-
'ORIGIN',
|
|
114
|
-
'PARAMS',
|
|
115
|
-
'PATHNAME',
|
|
116
|
-
'PORT',
|
|
117
|
-
'PROTOCOL',
|
|
118
|
-
'SUBDOMAIN',
|
|
119
|
-
]);
|
|
129
|
+
const reservedVarNames = new Set(URL_VARIABLES);
|
|
120
130
|
const usedEnvVarNames = Object.keys(context).filter((name) => reservedVarNames.has(name));
|
|
121
131
|
if (usedEnvVarNames.length > 0) {
|
|
122
132
|
const names = usedEnvVarNames.join(', ');
|
|
@@ -403,9 +413,8 @@ exports.getTestsToTrigger = getTestsToTrigger;
|
|
|
403
413
|
const runTests = (api, testsToTrigger) => __awaiter(void 0, void 0, void 0, function* () {
|
|
404
414
|
const payload = { tests: testsToTrigger };
|
|
405
415
|
const ciMetadata = ci_1.getCIMetadata();
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
}
|
|
416
|
+
const syntheticsMetadata = Object.assign(Object.assign({ ci: { job: {}, pipeline: {}, provider: {}, stage: {} }, git: { commit: { author: {}, committer: {} } } }, ciMetadata), { trigger_app: ciTriggerApp });
|
|
417
|
+
payload.metadata = syntheticsMetadata;
|
|
409
418
|
try {
|
|
410
419
|
return yield api.triggerTests(payload);
|
|
411
420
|
}
|
|
@@ -435,3 +444,22 @@ const retry = (func, shouldRetryAfterWait) => __awaiter(void 0, void 0, void 0,
|
|
|
435
444
|
return trier();
|
|
436
445
|
});
|
|
437
446
|
exports.retry = retry;
|
|
447
|
+
const parseVariablesFromCli = (variableArguments = [], logFunction) => {
|
|
448
|
+
const variables = {};
|
|
449
|
+
for (const variableArgument of variableArguments) {
|
|
450
|
+
const separatorIndex = variableArgument.indexOf('=');
|
|
451
|
+
if (separatorIndex === -1) {
|
|
452
|
+
logFunction(`Ignoring variable "${variableArgument}" as separator "=" was not found`);
|
|
453
|
+
continue;
|
|
454
|
+
}
|
|
455
|
+
if (separatorIndex === 0) {
|
|
456
|
+
logFunction(`Ignoring variable "${variableArgument}" as variable name is empty`);
|
|
457
|
+
continue;
|
|
458
|
+
}
|
|
459
|
+
const key = variableArgument.substring(0, separatorIndex);
|
|
460
|
+
const value = variableArgument.substring(separatorIndex + 1);
|
|
461
|
+
variables[key] = value;
|
|
462
|
+
}
|
|
463
|
+
return Object.keys(variables).length > 0 ? variables : undefined;
|
|
464
|
+
};
|
|
465
|
+
exports.parseVariablesFromCli = parseVariablesFromCli;
|
|
@@ -18,7 +18,7 @@ const utils_1 = require("../../helpers/utils");
|
|
|
18
18
|
const maxBodyLength = Infinity;
|
|
19
19
|
const reportCustomSpan = (request) => (customSpan, provider) => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
20
|
const gitSpanTags = yield git_1.getGitMetadata();
|
|
21
|
-
const userGitSpanTags = user_provided_git_1.
|
|
21
|
+
const userGitSpanTags = user_provided_git_1.getUserGitSpanTags();
|
|
22
22
|
return request({
|
|
23
23
|
data: Object.assign(Object.assign({}, customSpan), { tags: Object.assign(Object.assign(Object.assign({}, gitSpanTags), userGitSpanTags), customSpan.tags) }),
|
|
24
24
|
headers: {
|
|
@@ -8,6 +8,42 @@ const path_1 = __importDefault(require("path"));
|
|
|
8
8
|
const ci_1 = require("../ci");
|
|
9
9
|
const user_provided_git_1 = require("../user-provided-git");
|
|
10
10
|
const CI_PROVIDERS = fs_1.default.readdirSync(path_1.default.join(__dirname, 'ci-env'));
|
|
11
|
+
const ciAppTagsToMetadata = (tags) => {
|
|
12
|
+
const metadata = {
|
|
13
|
+
ci: { job: {}, pipeline: {}, provider: {}, stage: {} },
|
|
14
|
+
git: { commit: { author: {}, committer: {} } },
|
|
15
|
+
};
|
|
16
|
+
Object.entries(tags).forEach(([tag, value]) => {
|
|
17
|
+
// Ignore JSON fixtures pipeline number that can't be parsed to numbers
|
|
18
|
+
if (!value || tag === 'ci.pipeline.number') {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
// Get Metadata nested property from tag name ('git.commit.author.name')
|
|
22
|
+
let currentAttr = metadata;
|
|
23
|
+
// Current attribute up to second to last
|
|
24
|
+
const properties = tag.split('.');
|
|
25
|
+
for (let i = 0; i < properties.length - 1; i++) {
|
|
26
|
+
currentAttr = currentAttr[properties[i]];
|
|
27
|
+
}
|
|
28
|
+
const attributeName = properties[properties.length - 1];
|
|
29
|
+
currentAttr[attributeName] = value;
|
|
30
|
+
});
|
|
31
|
+
return metadata;
|
|
32
|
+
};
|
|
33
|
+
const ddMetadataToSpanTags = (ddMetadata) => {
|
|
34
|
+
const spanTags = {};
|
|
35
|
+
Object.entries(ddMetadata).map(([key, value]) => {
|
|
36
|
+
let tagKey = key.split('_').slice(1).join('.').toLocaleLowerCase(); // Split and remove DD prefix
|
|
37
|
+
if (tagKey === 'git.repository.url') {
|
|
38
|
+
tagKey = 'git.repository_url';
|
|
39
|
+
}
|
|
40
|
+
else if (tagKey === 'ci.workspace.path') {
|
|
41
|
+
tagKey = 'ci.workspace_path';
|
|
42
|
+
}
|
|
43
|
+
spanTags[tagKey] = value;
|
|
44
|
+
});
|
|
45
|
+
return spanTags;
|
|
46
|
+
};
|
|
11
47
|
describe('getCIMetadata', () => {
|
|
12
48
|
test('non-recognized CI returns undefined', () => {
|
|
13
49
|
process.env = {};
|
|
@@ -41,11 +77,44 @@ describe('getCIMetadata', () => {
|
|
|
41
77
|
expect(ci_1.getCIMetadata()).toEqual(expectedMetadata);
|
|
42
78
|
});
|
|
43
79
|
});
|
|
80
|
+
describe.each(CI_PROVIDERS)('Ensure DD env variables override %s env variables', (ciProvider) => {
|
|
81
|
+
const DD_METADATA = {
|
|
82
|
+
DD_CI_JOB_NAME: 'DD_CI_JOB_NAME',
|
|
83
|
+
DD_CI_JOB_URL: 'DD_CI_JOB_URL',
|
|
84
|
+
DD_CI_PIPELINE_ID: 'DD_CI_PIPELINE_ID',
|
|
85
|
+
DD_CI_PIPELINE_NAME: 'DD_CI_PIPELINE_NAME',
|
|
86
|
+
DD_CI_PIPELINE_NUMBER: 'DD_CI_PIPELINE_NUMBER',
|
|
87
|
+
DD_CI_PIPELINE_URL: 'DD_CI_PIPELINE_URL',
|
|
88
|
+
DD_CI_PROVIDER_NAME: 'DD_CI_PROVIDER_NAME',
|
|
89
|
+
DD_CI_STAGE_NAME: 'DD_CI_STAGE_NAME',
|
|
90
|
+
DD_CI_WORKSPACE_PATH: 'DD_CI_WORKSPACE_PATH',
|
|
91
|
+
DD_GIT_BRANCH: 'DD_GIT_BRANCH',
|
|
92
|
+
DD_GIT_COMMIT_AUTHOR_DATE: 'DD_GIT_COMMIT_AUTHOR_DATE',
|
|
93
|
+
DD_GIT_COMMIT_AUTHOR_EMAIL: 'DD_GIT_COMMIT_AUTHOR_EMAIL',
|
|
94
|
+
DD_GIT_COMMIT_AUTHOR_NAME: 'DD_GIT_COMMIT_AUTHOR_NAME',
|
|
95
|
+
DD_GIT_COMMIT_COMMITTER_DATE: 'DD_GIT_COMMIT_COMMITTER_DATE',
|
|
96
|
+
DD_GIT_COMMIT_COMMITTER_EMAIL: 'DD_GIT_COMMIT_COMMITTER_EMAIL',
|
|
97
|
+
DD_GIT_COMMIT_COMMITTER_NAME: 'DD_GIT_COMMIT_COMMITTER_NAME',
|
|
98
|
+
DD_GIT_COMMIT_MESSAGE: 'DD_GIT_COMMIT_MESSAGE',
|
|
99
|
+
DD_GIT_COMMIT_SHA: 'DD_GIT_COMMIT_SHA',
|
|
100
|
+
DD_GIT_REPOSITORY_URL: 'DD_GIT_REPOSITORY_URL',
|
|
101
|
+
DD_GIT_TAG: 'DD_GIT_TAG',
|
|
102
|
+
};
|
|
103
|
+
const expectedMetadata = ciAppTagsToMetadata(ddMetadataToSpanTags(DD_METADATA));
|
|
104
|
+
delete expectedMetadata.git.branch;
|
|
105
|
+
const assertions = require(path_1.default.join(__dirname, 'ci-env', ciProvider));
|
|
106
|
+
it.each(assertions)('spec %#', (env, tags) => {
|
|
107
|
+
process.env = Object.assign(Object.assign({}, env), DD_METADATA);
|
|
108
|
+
const ciMetadata = ci_1.getCIMetadata();
|
|
109
|
+
ciMetadata === null || ciMetadata === void 0 ? true : delete ciMetadata.git.branch;
|
|
110
|
+
expect(ciMetadata).toEqual(expectedMetadata);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
44
113
|
});
|
|
45
114
|
describe('ci spec', () => {
|
|
46
115
|
test('returns an empty object if the CI is not supported', () => {
|
|
47
116
|
process.env = {};
|
|
48
|
-
const tags = Object.assign(Object.assign({}, ci_1.getCISpanTags()), user_provided_git_1.
|
|
117
|
+
const tags = Object.assign(Object.assign(Object.assign({}, ci_1.getCISpanTags()), user_provided_git_1.getUserCISpanTags()), user_provided_git_1.getUserGitSpanTags());
|
|
49
118
|
expect(tags).toEqual({});
|
|
50
119
|
});
|
|
51
120
|
CI_PROVIDERS.forEach((ciProvider) => {
|
|
@@ -53,31 +122,9 @@ describe('ci spec', () => {
|
|
|
53
122
|
assertions.forEach(([env, expectedSpanTags], index) => {
|
|
54
123
|
test(`reads env info for spec ${index} from ${ciProvider}`, () => {
|
|
55
124
|
process.env = env;
|
|
56
|
-
const tags = Object.assign(Object.assign({}, ci_1.getCISpanTags()), user_provided_git_1.
|
|
125
|
+
const tags = Object.assign(Object.assign({}, ci_1.getCISpanTags()), user_provided_git_1.getUserGitSpanTags());
|
|
57
126
|
expect(tags).toEqual(expectedSpanTags);
|
|
58
127
|
});
|
|
59
128
|
});
|
|
60
129
|
});
|
|
61
130
|
});
|
|
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
|
-
};
|
|
@@ -2,19 +2,22 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tags_1 = require("../tags");
|
|
4
4
|
const user_provided_git_1 = require("../user-provided-git");
|
|
5
|
-
describe('
|
|
5
|
+
describe('getUserGitSpanTags', () => {
|
|
6
|
+
const DD_GIT_METADATA = {
|
|
7
|
+
DD_GIT_BRANCH: 'DD_GIT_BRANCH',
|
|
8
|
+
DD_GIT_COMMIT_AUTHOR_DATE: 'DD_GIT_COMMIT_AUTHOR_DATE',
|
|
9
|
+
DD_GIT_COMMIT_AUTHOR_EMAIL: 'DD_GIT_COMMIT_AUTHOR_EMAIL',
|
|
10
|
+
DD_GIT_COMMIT_AUTHOR_NAME: 'DD_GIT_COMMIT_AUTHOR_NAME',
|
|
11
|
+
DD_GIT_COMMIT_COMMITTER_DATE: 'DD_GIT_COMMIT_COMMITTER_DATE',
|
|
12
|
+
DD_GIT_COMMIT_COMMITTER_EMAIL: 'DD_GIT_COMMIT_COMMITTER_EMAIL',
|
|
13
|
+
DD_GIT_COMMIT_COMMITTER_NAME: 'DD_GIT_COMMIT_COMMITTER_NAME',
|
|
14
|
+
DD_GIT_COMMIT_MESSAGE: 'DD_GIT_COMMIT_MESSAGE',
|
|
15
|
+
DD_GIT_COMMIT_SHA: 'DD_GIT_COMMIT_SHA',
|
|
16
|
+
DD_GIT_REPOSITORY_URL: 'DD_GIT_REPOSITORY_URL',
|
|
17
|
+
};
|
|
6
18
|
it('reads user defined git metadata successfully', () => {
|
|
7
|
-
process.env
|
|
8
|
-
|
|
9
|
-
process.env.DD_GIT_BRANCH = 'DD_GIT_BRANCH';
|
|
10
|
-
process.env.DD_GIT_COMMIT_MESSAGE = 'DD_GIT_COMMIT_MESSAGE';
|
|
11
|
-
process.env.DD_GIT_COMMIT_AUTHOR_NAME = 'DD_GIT_COMMIT_AUTHOR_NAME';
|
|
12
|
-
process.env.DD_GIT_COMMIT_AUTHOR_EMAIL = 'DD_GIT_COMMIT_AUTHOR_EMAIL';
|
|
13
|
-
process.env.DD_GIT_COMMIT_AUTHOR_DATE = 'DD_GIT_COMMIT_AUTHOR_DATE';
|
|
14
|
-
process.env.DD_GIT_COMMIT_COMMITTER_NAME = 'DD_GIT_COMMIT_COMMITTER_NAME';
|
|
15
|
-
process.env.DD_GIT_COMMIT_COMMITTER_EMAIL = 'DD_GIT_COMMIT_COMMITTER_EMAIL';
|
|
16
|
-
process.env.DD_GIT_COMMIT_COMMITTER_DATE = 'DD_GIT_COMMIT_COMMITTER_DATE';
|
|
17
|
-
const result = user_provided_git_1.getUserGitMetadata();
|
|
19
|
+
process.env = Object.assign({}, DD_GIT_METADATA);
|
|
20
|
+
const result = user_provided_git_1.getUserGitSpanTags();
|
|
18
21
|
expect(result).toEqual({
|
|
19
22
|
[tags_1.GIT_REPOSITORY_URL]: 'DD_GIT_REPOSITORY_URL',
|
|
20
23
|
[tags_1.GIT_BRANCH]: 'DD_GIT_BRANCH',
|
|
@@ -29,8 +32,8 @@ describe('getUserGitMetadata', () => {
|
|
|
29
32
|
});
|
|
30
33
|
});
|
|
31
34
|
it('does not include empty values', () => {
|
|
32
|
-
|
|
33
|
-
const result = user_provided_git_1.
|
|
35
|
+
process.env = Object.assign(Object.assign({}, DD_GIT_METADATA), { DD_GIT_COMMIT_SHA: undefined });
|
|
36
|
+
const result = user_provided_git_1.getUserGitSpanTags();
|
|
34
37
|
expect(result).toEqual({
|
|
35
38
|
[tags_1.GIT_REPOSITORY_URL]: 'DD_GIT_REPOSITORY_URL',
|
|
36
39
|
[tags_1.GIT_BRANCH]: 'DD_GIT_BRANCH',
|
|
@@ -44,11 +47,12 @@ describe('getUserGitMetadata', () => {
|
|
|
44
47
|
});
|
|
45
48
|
});
|
|
46
49
|
it('overwrites branch when tag is available', () => {
|
|
47
|
-
process.env.DD_GIT_TAG
|
|
48
|
-
const result = user_provided_git_1.
|
|
50
|
+
process.env = Object.assign(Object.assign({}, DD_GIT_METADATA), { DD_GIT_TAG: 'DD_GIT_TAG' });
|
|
51
|
+
const result = user_provided_git_1.getUserGitSpanTags();
|
|
49
52
|
expect(result).toEqual({
|
|
50
53
|
[tags_1.GIT_TAG]: 'DD_GIT_TAG',
|
|
51
54
|
[tags_1.GIT_REPOSITORY_URL]: 'DD_GIT_REPOSITORY_URL',
|
|
55
|
+
[tags_1.GIT_SHA]: 'DD_GIT_COMMIT_SHA',
|
|
52
56
|
[tags_1.GIT_COMMIT_MESSAGE]: 'DD_GIT_COMMIT_MESSAGE',
|
|
53
57
|
[tags_1.GIT_COMMIT_COMMITTER_DATE]: 'DD_GIT_COMMIT_COMMITTER_DATE',
|
|
54
58
|
[tags_1.GIT_COMMIT_COMMITTER_EMAIL]: 'DD_GIT_COMMIT_COMMITTER_EMAIL',
|
|
@@ -59,17 +63,55 @@ describe('getUserGitMetadata', () => {
|
|
|
59
63
|
});
|
|
60
64
|
});
|
|
61
65
|
it('returns an empty object if no user git is defined', () => {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
66
|
+
process.env = {};
|
|
67
|
+
const result = user_provided_git_1.getUserGitSpanTags();
|
|
68
|
+
expect(result).toEqual({});
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe('getUserCISpanTags', () => {
|
|
72
|
+
const DD_CI_METADATA = {
|
|
73
|
+
DD_CI_JOB_NAME: 'DD_CI_JOB_NAME',
|
|
74
|
+
DD_CI_JOB_URL: 'DD_CI_JOB_URL',
|
|
75
|
+
DD_CI_PIPELINE_ID: 'DD_CI_PIPELINE_ID',
|
|
76
|
+
DD_CI_PIPELINE_NAME: 'DD_CI_PIPELINE_NAME',
|
|
77
|
+
DD_CI_PIPELINE_NUMBER: 'DD_CI_PIPELINE_NUMBER',
|
|
78
|
+
DD_CI_PIPELINE_URL: 'DD_CI_PIPELINE_URL',
|
|
79
|
+
DD_CI_PROVIDER_NAME: 'DD_CI_PROVIDER_NAME',
|
|
80
|
+
DD_CI_STAGE_NAME: 'DD_CI_STAGE_NAME',
|
|
81
|
+
DD_CI_WORKSPACE_PATH: 'DD_CI_WORKSPACE_PATH',
|
|
82
|
+
};
|
|
83
|
+
it('reads user defined CI metadata successfully', () => {
|
|
84
|
+
process.env = Object.assign({}, DD_CI_METADATA);
|
|
85
|
+
const result = user_provided_git_1.getUserCISpanTags();
|
|
86
|
+
expect(result).toEqual({
|
|
87
|
+
[tags_1.CI_JOB_NAME]: 'DD_CI_JOB_NAME',
|
|
88
|
+
[tags_1.CI_JOB_URL]: 'DD_CI_JOB_URL',
|
|
89
|
+
[tags_1.CI_PIPELINE_ID]: 'DD_CI_PIPELINE_ID',
|
|
90
|
+
[tags_1.CI_PIPELINE_NAME]: 'DD_CI_PIPELINE_NAME',
|
|
91
|
+
[tags_1.CI_PIPELINE_NUMBER]: 'DD_CI_PIPELINE_NUMBER',
|
|
92
|
+
[tags_1.CI_PIPELINE_URL]: 'DD_CI_PIPELINE_URL',
|
|
93
|
+
[tags_1.CI_PROVIDER_NAME]: 'DD_CI_PROVIDER_NAME',
|
|
94
|
+
[tags_1.CI_STAGE_NAME]: 'DD_CI_STAGE_NAME',
|
|
95
|
+
[tags_1.CI_WORKSPACE_PATH]: 'DD_CI_WORKSPACE_PATH',
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
it('does not include empty values', () => {
|
|
99
|
+
process.env = Object.assign(Object.assign({}, DD_CI_METADATA), { DD_CI_PIPELINE_ID: undefined });
|
|
100
|
+
const result = user_provided_git_1.getUserCISpanTags();
|
|
101
|
+
expect(result).toEqual({
|
|
102
|
+
[tags_1.CI_JOB_NAME]: 'DD_CI_JOB_NAME',
|
|
103
|
+
[tags_1.CI_JOB_URL]: 'DD_CI_JOB_URL',
|
|
104
|
+
[tags_1.CI_PIPELINE_NAME]: 'DD_CI_PIPELINE_NAME',
|
|
105
|
+
[tags_1.CI_PIPELINE_NUMBER]: 'DD_CI_PIPELINE_NUMBER',
|
|
106
|
+
[tags_1.CI_PIPELINE_URL]: 'DD_CI_PIPELINE_URL',
|
|
107
|
+
[tags_1.CI_PROVIDER_NAME]: 'DD_CI_PROVIDER_NAME',
|
|
108
|
+
[tags_1.CI_STAGE_NAME]: 'DD_CI_STAGE_NAME',
|
|
109
|
+
[tags_1.CI_WORKSPACE_PATH]: 'DD_CI_WORKSPACE_PATH',
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
it('returns an empty object if no user CI is defined', () => {
|
|
113
|
+
process.env = {};
|
|
114
|
+
const result = user_provided_git_1.getUserCISpanTags();
|
|
73
115
|
expect(result).toEqual({});
|
|
74
116
|
});
|
|
75
117
|
});
|
package/dist/helpers/ci.js
CHANGED
|
@@ -288,7 +288,7 @@ const getCISpanTags = () => {
|
|
|
288
288
|
};
|
|
289
289
|
exports.getCISpanTags = getCISpanTags;
|
|
290
290
|
const getCIMetadata = () => {
|
|
291
|
-
const tags = Object.assign(Object.assign({}, exports.getCISpanTags()), user_provided_git_1.
|
|
291
|
+
const tags = Object.assign(Object.assign(Object.assign({}, exports.getCISpanTags()), user_provided_git_1.getUserCISpanTags()), user_provided_git_1.getUserGitSpanTags());
|
|
292
292
|
if (!tags || !Object.keys(tags).length) {
|
|
293
293
|
return;
|
|
294
294
|
}
|
package/dist/helpers/git.js
CHANGED
|
@@ -28,7 +28,7 @@ const getGitMetadata = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
28
28
|
git.branch(),
|
|
29
29
|
git.listRemote(['--get-url']),
|
|
30
30
|
git.show(['-s', '--format=%s']),
|
|
31
|
-
git.show(['-s', '--format=%an,%ae,%
|
|
31
|
+
git.show(['-s', '--format=%an,%ae,%aI,%cn,%ce,%cI']),
|
|
32
32
|
]);
|
|
33
33
|
const [authorName, authorEmail, authorDate, committerName, committerEmail, committerDate,] = authorAndCommitter.split(',');
|
|
34
34
|
return {
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const getUserGitSpanTags: () => {};
|
|
2
|
+
export declare const getUserCISpanTags: () => {};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getUserCISpanTags = exports.getUserGitSpanTags = void 0;
|
|
4
4
|
const tags_1 = require("./tags");
|
|
5
5
|
const utils_1 = require("./utils");
|
|
6
|
-
const
|
|
6
|
+
const getUserGitSpanTags = () => {
|
|
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
8
|
let branch = utils_1.normalizeRef(DD_GIT_BRANCH);
|
|
9
9
|
let tag = utils_1.normalizeRef(DD_GIT_TAG);
|
|
@@ -28,4 +28,19 @@ const getUserGitMetadata = () => {
|
|
|
28
28
|
[tags_1.GIT_COMMIT_AUTHOR_NAME]: DD_GIT_COMMIT_AUTHOR_NAME,
|
|
29
29
|
});
|
|
30
30
|
};
|
|
31
|
-
exports.
|
|
31
|
+
exports.getUserGitSpanTags = getUserGitSpanTags;
|
|
32
|
+
const getUserCISpanTags = () => {
|
|
33
|
+
const { DD_CI_JOB_NAME, DD_CI_JOB_URL, DD_CI_PIPELINE_ID, DD_CI_PIPELINE_NAME, DD_CI_PIPELINE_NUMBER, DD_CI_PIPELINE_URL, DD_CI_PROVIDER_NAME, DD_CI_STAGE_NAME, DD_CI_WORKSPACE_PATH, } = process.env;
|
|
34
|
+
return utils_1.removeEmptyValues({
|
|
35
|
+
[tags_1.CI_JOB_NAME]: DD_CI_JOB_NAME,
|
|
36
|
+
[tags_1.CI_JOB_URL]: DD_CI_JOB_URL,
|
|
37
|
+
[tags_1.CI_PIPELINE_ID]: DD_CI_PIPELINE_ID,
|
|
38
|
+
[tags_1.CI_PIPELINE_NAME]: DD_CI_PIPELINE_NAME,
|
|
39
|
+
[tags_1.CI_PIPELINE_NUMBER]: DD_CI_PIPELINE_NUMBER,
|
|
40
|
+
[tags_1.CI_PIPELINE_URL]: DD_CI_PIPELINE_URL,
|
|
41
|
+
[tags_1.CI_PROVIDER_NAME]: DD_CI_PROVIDER_NAME,
|
|
42
|
+
[tags_1.CI_STAGE_NAME]: DD_CI_STAGE_NAME,
|
|
43
|
+
[tags_1.CI_WORKSPACE_PATH]: DD_CI_WORKSPACE_PATH,
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
exports.getUserCISpanTags = getUserCISpanTags;
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -19,7 +19,9 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
19
19
|
return result;
|
|
20
20
|
};
|
|
21
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
exports.synthetics = exports.utils = void 0;
|
|
22
|
+
exports.gitMetadata = exports.synthetics = exports.utils = void 0;
|
|
23
|
+
const gitMetadata = __importStar(require("./commands/git-metadata"));
|
|
24
|
+
exports.gitMetadata = gitMetadata;
|
|
23
25
|
const synthetics = __importStar(require("./commands/synthetics"));
|
|
24
26
|
exports.synthetics = synthetics;
|
|
25
27
|
const utils = __importStar(require("./helpers/utils"));
|