@atlaskit/dependency-version-analytics 1.1.0 → 1.2.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/CHANGELOG.md +12 -0
- package/README.md +5 -3
- package/dist/cjs/cli.js +52 -17
- package/dist/cjs/commands/populate-historic-data/index.js +2 -2
- package/dist/cjs/commands/populate-historic-data/lib/dependency-store.js +227 -451
- package/dist/cjs/commands/populate-historic-data/package.js +31 -75
- package/dist/cjs/commands/populate-historic-data/product.js +129 -289
- package/dist/cjs/commands/populate-historic-data/util/allowed-scopes.js +15 -0
- package/dist/cjs/commands/populate-historic-data/util/generate-csv.js +16 -21
- package/dist/cjs/constants.js +2 -2
- package/dist/cjs/index.js +3 -3
- package/dist/cjs/util/analytics.js +78 -102
- package/dist/cjs/util/get-file-history-from-git.js +4 -4
- package/dist/cjs/util/get-package-version-history.js +7 -5
- package/dist/cjs/util/git.js +75 -205
- package/dist/cjs/util/statlas.js +27 -97
- package/dist/cjs/util/yarn.js +40 -101
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/cli.js +10 -4
- package/dist/es2019/commands/populate-historic-data/lib/dependency-store.js +6 -4
- package/dist/es2019/commands/populate-historic-data/package.js +6 -5
- package/dist/es2019/commands/populate-historic-data/product.js +8 -6
- package/dist/es2019/commands/populate-historic-data/util/allowed-scopes.js +7 -0
- package/dist/es2019/commands/populate-historic-data/util/generate-csv.js +1 -1
- package/dist/es2019/util/analytics.js +5 -4
- package/dist/es2019/util/get-package-version-history.js +2 -0
- package/dist/es2019/version.json +1 -1
- package/dist/esm/cli.js +8 -3
- package/dist/esm/commands/populate-historic-data/lib/dependency-store.js +20 -15
- package/dist/esm/commands/populate-historic-data/package.js +22 -20
- package/dist/esm/commands/populate-historic-data/product.js +45 -42
- package/dist/esm/commands/populate-historic-data/util/allowed-scopes.js +11 -0
- package/dist/esm/commands/populate-historic-data/util/generate-csv.js +1 -1
- package/dist/esm/util/analytics.js +10 -7
- package/dist/esm/util/get-package-version-history.js +2 -0
- package/dist/esm/util/git.js +14 -13
- package/dist/esm/util/statlas.js +8 -7
- package/dist/esm/util/yarn.js +6 -5
- package/dist/esm/version.json +1 -1
- package/dist/types/commands/populate-historic-data/lib/dependency-store.d.ts +3 -2
- package/dist/types/commands/populate-historic-data/types.d.ts +3 -2
- package/dist/types/commands/populate-historic-data/util/allowed-scopes.d.ts +2 -0
- package/dist/types/commands/populate-historic-data/util/generate-csv.d.ts +2 -2
- package/dist/types/util/analytics.d.ts +2 -3
- package/package.json +2 -2
- package/report.api.md +1 -0
- package/tmp/api-report-tmp.d.ts +1 -0
- package/tokenize-arg-string.ts +0 -0
|
@@ -1,24 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.generateCSV = void 0;
|
|
8
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
7
|
/** Generates a CSV of product package changes over time */
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
packageChanges.forEach(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
Object.entries(packageChange.
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
var depColumnIndex = csvData.findIndex(function (item) {
|
|
20
|
-
return item[0] === name;
|
|
21
|
-
});
|
|
8
|
+
const generateCSV = packageChanges => {
|
|
9
|
+
const csvData = [['']];
|
|
10
|
+
packageChanges.forEach(packageChange => {
|
|
11
|
+
const firstColumn = csvData[0];
|
|
12
|
+
const currentRow = firstColumn.push(packageChange.date) - 1;
|
|
13
|
+
Object.entries(packageChange.deps).forEach(([name, {
|
|
14
|
+
version
|
|
15
|
+
}]) => {
|
|
16
|
+
let depColumnIndex = csvData.findIndex(item => item[0] === name);
|
|
22
17
|
if (depColumnIndex === -1) {
|
|
23
18
|
depColumnIndex = csvData.push([name]) - 1;
|
|
24
19
|
}
|
|
@@ -27,8 +22,8 @@ var generateCSV = function generateCSV(packageChanges) {
|
|
|
27
22
|
csvData[depColumnIndex][currentRow] = version;
|
|
28
23
|
});
|
|
29
24
|
});
|
|
30
|
-
for (
|
|
31
|
-
for (
|
|
25
|
+
for (let i = 0; i < csvData.length; i++) {
|
|
26
|
+
for (let j = 0; j < csvData.length; j++) {
|
|
32
27
|
if (typeof csvData[i][j] !== 'string') {
|
|
33
28
|
// console.log('found empty cell');
|
|
34
29
|
csvData[i][j] = '';
|
|
@@ -36,17 +31,17 @@ var generateCSV = function generateCSV(packageChanges) {
|
|
|
36
31
|
}
|
|
37
32
|
if (i !== 0 && csvData[0].length < csvData[i].length) {}
|
|
38
33
|
}
|
|
39
|
-
|
|
40
|
-
csvData.forEach(
|
|
34
|
+
const csvStrings = [];
|
|
35
|
+
csvData.forEach(column => {
|
|
41
36
|
if (!column) {
|
|
42
37
|
return;
|
|
43
38
|
}
|
|
44
|
-
for (
|
|
45
|
-
|
|
39
|
+
for (let rowIndex = 0; rowIndex < csvData[0].length; rowIndex++) {
|
|
40
|
+
const rowItem = column[rowIndex] || '';
|
|
46
41
|
if (typeof csvStrings[rowIndex] !== 'string') {
|
|
47
42
|
csvStrings[rowIndex] = '';
|
|
48
43
|
}
|
|
49
|
-
csvStrings[rowIndex] += "
|
|
44
|
+
csvStrings[rowIndex] += `"${rowItem}",`;
|
|
50
45
|
}
|
|
51
46
|
});
|
|
52
47
|
return csvStrings.join('\n');
|
package/dist/cjs/constants.js
CHANGED
|
@@ -4,9 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.DEP_TYPES = exports.DEFAULT_TAG = void 0;
|
|
7
|
-
|
|
7
|
+
const DEFAULT_TAG = 'atlaskit-dependency-version-analytics-last-run';
|
|
8
8
|
exports.DEFAULT_TAG = DEFAULT_TAG;
|
|
9
|
-
|
|
9
|
+
const DEP_TYPES = [{
|
|
10
10
|
packageJsonKey: 'devDependencies',
|
|
11
11
|
depTypeName: 'devDependency'
|
|
12
12
|
}, {
|
package/dist/cjs/index.js
CHANGED
|
@@ -5,19 +5,19 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
Object.defineProperty(exports, "populatePackage", {
|
|
7
7
|
enumerable: true,
|
|
8
|
-
get: function
|
|
8
|
+
get: function () {
|
|
9
9
|
return _populateHistoricData.populatePackage;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
12
|
Object.defineProperty(exports, "populateProduct", {
|
|
13
13
|
enumerable: true,
|
|
14
|
-
get: function
|
|
14
|
+
get: function () {
|
|
15
15
|
return _populateHistoricData.populateProduct;
|
|
16
16
|
}
|
|
17
17
|
});
|
|
18
18
|
Object.defineProperty(exports, "sendAnalytics", {
|
|
19
19
|
enumerable: true,
|
|
20
|
-
get: function
|
|
20
|
+
get: function () {
|
|
21
21
|
return _analytics.sendAnalytics;
|
|
22
22
|
}
|
|
23
23
|
});
|
|
@@ -6,26 +6,25 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
});
|
|
7
7
|
exports.createUpgradeEvent = createUpgradeEvent;
|
|
8
8
|
exports.sendAnalytics = sendAnalytics;
|
|
9
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
9
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
13
10
|
var _inquirer = _interopRequireDefault(require("inquirer"));
|
|
14
11
|
var _semver = _interopRequireDefault(require("semver"));
|
|
15
12
|
var _analyticsNodeClient = require("@atlassiansox/analytics-node-client");
|
|
16
13
|
var _version = require("../version.json");
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
// @ts-ignore
|
|
15
|
+
|
|
16
|
+
/* eslint-disable-next-line import/no-unresolved */
|
|
17
|
+
|
|
19
18
|
function getUpgradeType(version, previousVersion) {
|
|
20
19
|
if (previousVersion == null && version != null) {
|
|
21
20
|
return 'add';
|
|
22
21
|
} else if (previousVersion != null && version == null) {
|
|
23
22
|
return 'remove';
|
|
24
23
|
} else if (previousVersion != null && version != null && previousVersion !== version) {
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
const coercedPrevious = _semver.default.coerce(previousVersion);
|
|
25
|
+
const coercedNew = _semver.default.coerce(version);
|
|
27
26
|
if (coercedNew == null) {
|
|
28
|
-
console.error(
|
|
27
|
+
console.error(`Found invalid version "${version}", skipping`);
|
|
29
28
|
return null;
|
|
30
29
|
}
|
|
31
30
|
if (coercedPrevious != null && _semver.default.lt(coercedNew, coercedPrevious)) {
|
|
@@ -38,123 +37,100 @@ function getUpgradeType(version, previousVersion) {
|
|
|
38
37
|
}
|
|
39
38
|
}
|
|
40
39
|
function getUpgradeSubType(version, previousVersion) {
|
|
41
|
-
|
|
40
|
+
let upgradeSubType = null;
|
|
42
41
|
if (version == null || previousVersion == null) {
|
|
43
42
|
return upgradeSubType;
|
|
44
43
|
}
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
const parsedOld = _semver.default.coerce(previousVersion);
|
|
45
|
+
const parsedNew = _semver.default.coerce(version);
|
|
47
46
|
if (parsedOld && parsedNew) {
|
|
48
47
|
upgradeSubType = _semver.default.diff(parsedOld.version, parsedNew.version);
|
|
49
48
|
}
|
|
50
49
|
return upgradeSubType;
|
|
51
50
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
|
|
52
|
+
// optionalEventArgs will be included within the event.
|
|
53
|
+
function createUpgradeEvent(name, version, previousVersion, date, optionalEventArgs = {}, tags = {}) {
|
|
55
54
|
if (Number.isNaN(Date.parse(date))) {
|
|
56
|
-
throw new Error(
|
|
55
|
+
throw new Error(`Invalid date: '${date}'`);
|
|
57
56
|
}
|
|
58
|
-
|
|
57
|
+
const upgradeType = getUpgradeType(version, previousVersion);
|
|
59
58
|
if (!upgradeType) {
|
|
60
59
|
// Not an upgrade for this dependency, return null
|
|
61
60
|
return null;
|
|
62
61
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
Object.keys(tags).forEach(function (key) {
|
|
62
|
+
const upgradeSubType = getUpgradeSubType(version, previousVersion);
|
|
63
|
+
const eventVersion = upgradeType !== 'remove' ? version : previousVersion;
|
|
64
|
+
const parsedVersion = _semver.default.coerce(eventVersion);
|
|
65
|
+
let rcKey = null;
|
|
66
|
+
Object.keys(tags).forEach(key => {
|
|
69
67
|
if (key.startsWith('rc')) {
|
|
70
68
|
rcKey = key;
|
|
71
69
|
return;
|
|
72
70
|
}
|
|
73
71
|
});
|
|
74
|
-
return
|
|
72
|
+
return {
|
|
75
73
|
cliVersion: _version.version,
|
|
76
74
|
dependencyName: name,
|
|
77
75
|
versionString: eventVersion,
|
|
78
|
-
major: parsedVersion ?
|
|
79
|
-
minor: parsedVersion ?
|
|
80
|
-
patch: parsedVersion ?
|
|
76
|
+
major: parsedVersion ? `${parsedVersion.major}` : null,
|
|
77
|
+
minor: parsedVersion ? `${parsedVersion.minor}` : null,
|
|
78
|
+
patch: parsedVersion ? `${parsedVersion.patch}` : null,
|
|
81
79
|
date: new Date(date).toISOString(),
|
|
82
|
-
upgradeType
|
|
83
|
-
upgradeSubType
|
|
84
|
-
latestTag: (
|
|
85
|
-
nextTag:
|
|
86
|
-
hotfixTag:
|
|
87
|
-
rcTag: (
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
function sendAnalytics(_x, _x2) {
|
|
91
|
-
return _sendAnalytics.apply(this, arguments);
|
|
80
|
+
upgradeType,
|
|
81
|
+
upgradeSubType,
|
|
82
|
+
latestTag: (tags && tags['latest']) ?? null,
|
|
83
|
+
nextTag: tags['next'] ?? null,
|
|
84
|
+
hotfixTag: tags['hotfix'] ?? null,
|
|
85
|
+
rcTag: (rcKey && tags[rcKey]) ?? null,
|
|
86
|
+
...optionalEventArgs
|
|
87
|
+
};
|
|
92
88
|
}
|
|
93
|
-
function
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
tags: ['atlaskit'],
|
|
132
|
-
source: '@atlaskit/dependency-version-analytics',
|
|
133
|
-
action: 'upgraded',
|
|
134
|
-
actionSubject: 'akDependency',
|
|
135
|
-
attributes: _objectSpread({}, event),
|
|
136
|
-
origin: 'console',
|
|
137
|
-
platform: 'bot'
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
}));
|
|
141
|
-
case 12:
|
|
142
|
-
promises = _context.sent;
|
|
143
|
-
console.log(_chalk.default.green("Sent ".concat(promises.length, " dependency version upgrade analytics events")));
|
|
144
|
-
_context.next = 21;
|
|
145
|
-
break;
|
|
146
|
-
case 16:
|
|
147
|
-
_context.prev = 16;
|
|
148
|
-
_context.t0 = _context["catch"](9);
|
|
149
|
-
console.error(_chalk.default.red('Sending analytics failed'));
|
|
150
|
-
console.error(_context.t0);
|
|
151
|
-
process.exit(1);
|
|
152
|
-
case 21:
|
|
153
|
-
case "end":
|
|
154
|
-
return _context.stop();
|
|
89
|
+
async function sendAnalytics(analyticsEvents, {
|
|
90
|
+
dev,
|
|
91
|
+
limit,
|
|
92
|
+
product,
|
|
93
|
+
skipPrompt
|
|
94
|
+
}) {
|
|
95
|
+
const analyticsEnv = dev ? 'dev' : 'prod';
|
|
96
|
+
const eventsToSend = limit != null ? analyticsEvents.slice(0, limit) : analyticsEvents;
|
|
97
|
+
const client = (0, _analyticsNodeClient.analyticsClient)({
|
|
98
|
+
env: dev ? 'dev' : 'prod',
|
|
99
|
+
product: product
|
|
100
|
+
});
|
|
101
|
+
if (!skipPrompt) {
|
|
102
|
+
const answers = await _inquirer.default.prompt([{
|
|
103
|
+
type: 'confirm',
|
|
104
|
+
name: 'continue',
|
|
105
|
+
message: `Are you sure you want to send ${eventsToSend.length} historical analytics events to '${analyticsEnv}' env for product '${product}?`,
|
|
106
|
+
default: false
|
|
107
|
+
}]);
|
|
108
|
+
if (!answers.continue) {
|
|
109
|
+
console.log('Aborting');
|
|
110
|
+
process.exit(0);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
try {
|
|
114
|
+
const promises = await Promise.all(eventsToSend.map(event => {
|
|
115
|
+
return client.sendTrackEvent({
|
|
116
|
+
anonymousId: 'unknown',
|
|
117
|
+
trackEvent: {
|
|
118
|
+
tags: ['atlaskit'],
|
|
119
|
+
source: '@atlaskit/dependency-version-analytics',
|
|
120
|
+
action: 'upgraded',
|
|
121
|
+
actionSubject: 'akDependency',
|
|
122
|
+
attributes: {
|
|
123
|
+
...event
|
|
124
|
+
},
|
|
125
|
+
origin: 'console',
|
|
126
|
+
platform: 'bot'
|
|
155
127
|
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
|
|
128
|
+
});
|
|
129
|
+
}));
|
|
130
|
+
console.log(_chalk.default.green(`Sent ${promises.length} dependency version upgrade analytics events`));
|
|
131
|
+
} catch (e) {
|
|
132
|
+
console.error(_chalk.default.red('Sending analytics failed'));
|
|
133
|
+
console.error(e);
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
160
136
|
}
|
|
@@ -6,12 +6,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = getFileHistoryFromGit;
|
|
7
7
|
var _child_process = require("child_process");
|
|
8
8
|
// Lock files tend to be huge
|
|
9
|
-
|
|
9
|
+
const FiveMBBuffer = 1024 * 5000;
|
|
10
10
|
function getFileHistoryFromGit(fileName) {
|
|
11
|
-
return new Promise(
|
|
12
|
-
(0, _child_process.exec)(
|
|
11
|
+
return new Promise((resolve, reject) => {
|
|
12
|
+
(0, _child_process.exec)(`git log ${fileName}`, {
|
|
13
13
|
maxBuffer: FiveMBBuffer
|
|
14
|
-
},
|
|
14
|
+
}, (error, stdout, stderr) => {
|
|
15
15
|
if (error) {
|
|
16
16
|
reject(error);
|
|
17
17
|
}
|
|
@@ -6,23 +6,25 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = getPackageVersionHistoryAndTags;
|
|
7
7
|
var _child_process = require("child_process");
|
|
8
8
|
function getPackageVersionHistoryAndTags(packageName) {
|
|
9
|
-
return new Promise(
|
|
10
|
-
(0, _child_process.exec)(
|
|
9
|
+
return new Promise((resolve, reject) => {
|
|
10
|
+
(0, _child_process.exec)(`yarn info ${packageName} --json`, (error, stdout, stderr) => {
|
|
11
11
|
if (error) {
|
|
12
|
+
console.log(`error: Unable to execute yarn info for ${packageName}`);
|
|
12
13
|
reject(error);
|
|
13
14
|
}
|
|
14
15
|
if (stderr) {
|
|
16
|
+
console.log(`stderr: Unable to execute yarn info for ${packageName}`);
|
|
15
17
|
reject(stderr);
|
|
16
18
|
}
|
|
17
|
-
|
|
19
|
+
let json;
|
|
18
20
|
try {
|
|
19
|
-
|
|
21
|
+
const parseData = JSON.parse(stdout).data;
|
|
20
22
|
json = {
|
|
21
23
|
time: parseData['time'],
|
|
22
24
|
'dist-tags': parseData['dist-tags']
|
|
23
25
|
};
|
|
24
26
|
} catch (e) {
|
|
25
|
-
reject(
|
|
27
|
+
reject(`Error parsing json output: ${e}`);
|
|
26
28
|
}
|
|
27
29
|
resolve(json);
|
|
28
30
|
});
|