@form8ion/codecov 1.5.0 → 2.0.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 +2 -0
- package/lib/index.cjs.js +80 -43
- package/lib/index.cjs.js.map +1 -1
- package/lib/index.es.js +80 -43
- package/lib/index.es.js.map +1 -1
- package/package.json +13 -11
package/README.md
CHANGED
|
@@ -45,6 +45,8 @@ code coverage service plugin for form8ion
|
|
|
45
45
|
|
|
46
46
|
* Migrate from the [legacy node uploader](https://github.com/codecov/codecov-node)
|
|
47
47
|
to the [modern uploader](https://docs.codecov.com/docs/codecov-uploader)
|
|
48
|
+
* Currently supports the following CI Providers:
|
|
49
|
+
* [GitHub Action](https://github.com/marketplace/actions/codecov)
|
|
48
50
|
|
|
49
51
|
## Usage
|
|
50
52
|
|
package/lib/index.cjs.js
CHANGED
|
@@ -5,6 +5,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var got = require('got');
|
|
6
6
|
var fs = require('fs');
|
|
7
7
|
var execa = require('execa');
|
|
8
|
+
var jsYaml = require('js-yaml');
|
|
9
|
+
var core = require('@form8ion/core');
|
|
8
10
|
|
|
9
11
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
10
12
|
|
|
@@ -96,48 +98,6 @@ function coverageShouldBeReportedToCodecov({
|
|
|
96
98
|
return !!('Public' === visibility || apiAccessToken && 'github' === vcs.host);
|
|
97
99
|
}
|
|
98
100
|
|
|
99
|
-
function scaffold$2() {
|
|
100
|
-
return {
|
|
101
|
-
devDependencies: ['codecov'],
|
|
102
|
-
scripts: {
|
|
103
|
-
'coverage:report': 'c8 report --reporter=text-lcov > coverage.lcov && codecov'
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
const _excluded = ["scripts"],
|
|
109
|
-
_excluded2 = ["coverage:report"];
|
|
110
|
-
async function liftReporting ({
|
|
111
|
-
projectRoot,
|
|
112
|
-
packageManager
|
|
113
|
-
}) {
|
|
114
|
-
const pathToPackageJson = `${projectRoot}/package.json`;
|
|
115
|
-
const existingPackageContents = await fs.promises.readFile(pathToPackageJson, 'utf-8');
|
|
116
|
-
|
|
117
|
-
const _JSON$parse = JSON.parse(existingPackageContents),
|
|
118
|
-
{
|
|
119
|
-
scripts
|
|
120
|
-
} = _JSON$parse,
|
|
121
|
-
otherTopLevelProperties = _objectWithoutProperties(_JSON$parse, _excluded);
|
|
122
|
-
|
|
123
|
-
const otherScripts = _objectWithoutProperties(scripts, _excluded2);
|
|
124
|
-
|
|
125
|
-
if (scripts['coverage:report']) {
|
|
126
|
-
await fs.promises.writeFile(pathToPackageJson, JSON.stringify(_objectSpread2(_objectSpread2({}, otherTopLevelProperties), {}, {
|
|
127
|
-
scripts: otherScripts
|
|
128
|
-
})));
|
|
129
|
-
await execa__default["default"](packageManager, ['remove', 'codecov']);
|
|
130
|
-
return {
|
|
131
|
-
nextSteps: [{
|
|
132
|
-
summary: 'Configure modern reporting to Codecov on your CI service',
|
|
133
|
-
description: 'Configure the [Codecov Uploader](https://docs.codecov.com/docs/codecov-uploader) appropriately' + ' for your CI Provider. If available for your provider, prefer one of the dedicated wrappers.'
|
|
134
|
-
}]
|
|
135
|
-
};
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return {};
|
|
139
|
-
}
|
|
140
|
-
|
|
141
101
|
async function fetchRepositoryDetails ({
|
|
142
102
|
vcs,
|
|
143
103
|
apiAccessToken
|
|
@@ -185,12 +145,89 @@ async function scaffold({
|
|
|
185
145
|
visibility,
|
|
186
146
|
apiAccessToken
|
|
187
147
|
})) return {};
|
|
188
|
-
return _objectSpread2(
|
|
148
|
+
return _objectSpread2({}, await scaffold$1({
|
|
189
149
|
vcs,
|
|
190
150
|
apiAccessToken
|
|
191
151
|
}));
|
|
192
152
|
}
|
|
193
153
|
|
|
154
|
+
function getPathToWorkflowFile(projectRoot) {
|
|
155
|
+
return `${projectRoot}/.github/workflows/node-ci.yml`;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
function test({
|
|
159
|
+
projectRoot
|
|
160
|
+
}) {
|
|
161
|
+
return core.fileExists(getPathToWorkflowFile(projectRoot));
|
|
162
|
+
}
|
|
163
|
+
async function lift$1({
|
|
164
|
+
projectRoot
|
|
165
|
+
}) {
|
|
166
|
+
const pathToWorkflowFile = getPathToWorkflowFile(projectRoot);
|
|
167
|
+
const workflowDetails = jsYaml.load(await fs.promises.readFile(pathToWorkflowFile, 'utf-8'));
|
|
168
|
+
const {
|
|
169
|
+
jobs: {
|
|
170
|
+
verify: {
|
|
171
|
+
steps
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
} = workflowDetails;
|
|
175
|
+
|
|
176
|
+
if (!steps.find(step => {
|
|
177
|
+
var _step$uses;
|
|
178
|
+
|
|
179
|
+
return (_step$uses = step.uses) === null || _step$uses === void 0 ? void 0 : _step$uses.startsWith('codecov/codecov-action');
|
|
180
|
+
})) {
|
|
181
|
+
const stepsWithLegacyReportingRemoved = steps.filter(({
|
|
182
|
+
run
|
|
183
|
+
}) => 'npm run coverage:report' !== run);
|
|
184
|
+
await fs.promises.writeFile(pathToWorkflowFile, jsYaml.dump(_objectSpread2(_objectSpread2({}, workflowDetails), {}, {
|
|
185
|
+
jobs: _objectSpread2(_objectSpread2({}, workflowDetails.jobs), {}, {
|
|
186
|
+
verify: _objectSpread2(_objectSpread2({}, workflowDetails.jobs.verify), {}, {
|
|
187
|
+
steps: [...stepsWithLegacyReportingRemoved, {
|
|
188
|
+
uses: 'codecov/codecov-action@v2'
|
|
189
|
+
}]
|
|
190
|
+
})
|
|
191
|
+
})
|
|
192
|
+
})));
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const _excluded = ["coverage:report"];
|
|
197
|
+
async function liftReporting ({
|
|
198
|
+
projectRoot,
|
|
199
|
+
packageManager
|
|
200
|
+
}) {
|
|
201
|
+
const pathToPackageJson = `${projectRoot}/package.json`;
|
|
202
|
+
const [ciProviderCanBeLifted, existingPackageContents] = await Promise.all([test({
|
|
203
|
+
projectRoot
|
|
204
|
+
}), fs.promises.readFile(pathToPackageJson, 'utf-8')]);
|
|
205
|
+
const parsedPackageContents = JSON.parse(existingPackageContents);
|
|
206
|
+
const {
|
|
207
|
+
scripts
|
|
208
|
+
} = parsedPackageContents;
|
|
209
|
+
|
|
210
|
+
const otherScripts = _objectWithoutProperties(scripts, _excluded);
|
|
211
|
+
|
|
212
|
+
if (ciProviderCanBeLifted) await lift$1({
|
|
213
|
+
projectRoot
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
if (scripts['coverage:report']) {
|
|
217
|
+
parsedPackageContents.scripts = otherScripts;
|
|
218
|
+
await fs.promises.writeFile(pathToPackageJson, JSON.stringify(parsedPackageContents));
|
|
219
|
+
await execa__default["default"](packageManager, ['remove', 'codecov']);
|
|
220
|
+
return _objectSpread2({}, !ciProviderCanBeLifted && {
|
|
221
|
+
nextSteps: [{
|
|
222
|
+
summary: 'Configure modern reporting to Codecov on your CI service',
|
|
223
|
+
description: 'Configure the [Codecov Uploader](https://docs.codecov.com/docs/codecov-uploader) appropriately' + ' for your CI Provider. If available for your provider, prefer one of the dedicated wrappers.'
|
|
224
|
+
}]
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
return {};
|
|
229
|
+
}
|
|
230
|
+
|
|
194
231
|
function lift({
|
|
195
232
|
projectRoot,
|
|
196
233
|
packageManager
|
package/lib/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../src/predicates.js","../src/
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/predicates.js","../src/badge/repository-details-fetcher.js","../src/badge/scaffolder.js","../src/scaffolder.js","../src/reporter/ci-providers/github-workflows/lifter.js","../src/reporter/lifter.js","../src/lifter.js"],"sourcesContent":["export function coverageShouldBeReportedToCodecov({vcs, visibility, apiAccessToken}) {\n return !!('Public' === visibility || (apiAccessToken && 'github' === vcs.host));\n}\n","import got from '../../thirdparty-wrappers/got';\n\nexport default async function ({vcs, apiAccessToken}) {\n const {body: {repo}} = await got(\n `https://codecov.io/api/gh/${vcs.owner}/${vcs.name}`,\n {headers: {Authorization: apiAccessToken}, responseType: 'json'}\n );\n\n return repo;\n}\n","import fetchRepositoryDetails from './repository-details-fetcher';\n\nexport async function scaffold({vcs, apiAccessToken}) {\n return {\n ...['github', 'gitlab', 'bitbucket'].includes(vcs?.host) && {\n badges: {\n status: {\n coverage: {\n img: `https://img.shields.io/codecov/c/${vcs.host}/${vcs.owner}/${vcs.name}?logo=codecov${\n apiAccessToken\n ? `&token=${(await fetchRepositoryDetails({vcs, apiAccessToken})).image_token}`\n : ''\n }`,\n link: `https://codecov.io/${vcs.host}/${vcs.owner}/${vcs.name}`,\n text: 'Codecov'\n }\n }\n }\n }\n };\n}\n","import {coverageShouldBeReportedToCodecov} from './predicates';\nimport {scaffold as scaffoldBadge} from './badge';\n\nexport async function scaffold({vcs, visibility, apiAccessToken}) {\n if (!coverageShouldBeReportedToCodecov({vcs, visibility, apiAccessToken})) return {};\n\n return {\n ...await scaffoldBadge({vcs, apiAccessToken})\n };\n}\n","import {promises as fs} from 'fs';\nimport {dump, load} from 'js-yaml';\nimport {fileExists} from '@form8ion/core';\n\nfunction getPathToWorkflowFile(projectRoot) {\n return `${projectRoot}/.github/workflows/node-ci.yml`;\n}\n\nexport function test({projectRoot}) {\n return fileExists(getPathToWorkflowFile(projectRoot));\n}\n\nexport async function lift({projectRoot}) {\n const pathToWorkflowFile = getPathToWorkflowFile(projectRoot);\n\n const workflowDetails = load(await fs.readFile(pathToWorkflowFile, 'utf-8'));\n const {jobs: {verify: {steps}}} = workflowDetails;\n\n if (!steps.find(step => step.uses?.startsWith('codecov/codecov-action'))) {\n const stepsWithLegacyReportingRemoved = steps.filter(({run}) => 'npm run coverage:report' !== run);\n\n await fs.writeFile(\n pathToWorkflowFile,\n dump({\n ...workflowDetails,\n jobs: {\n ...workflowDetails.jobs,\n verify: {\n ...workflowDetails.jobs.verify,\n steps: [...stepsWithLegacyReportingRemoved, {uses: 'codecov/codecov-action@v2'}]\n }\n }\n })\n );\n }\n}\n","import {promises as fs} from 'fs';\n\nimport execa from '../../thirdparty-wrappers/execa';\nimport {lift as liftCiProvider, test as ciProviderIsLiftable} from './ci-providers';\n\nexport default async function ({projectRoot, packageManager}) {\n const pathToPackageJson = `${projectRoot}/package.json`;\n\n const [ciProviderCanBeLifted, existingPackageContents] = await Promise.all([\n ciProviderIsLiftable({projectRoot}),\n fs.readFile(pathToPackageJson, 'utf-8')\n ]);\n const parsedPackageContents = JSON.parse(existingPackageContents);\n const {scripts} = parsedPackageContents;\n const {'coverage:report': reportCoverageScript, ...otherScripts} = scripts;\n\n if (ciProviderCanBeLifted) await liftCiProvider({projectRoot});\n\n if (scripts['coverage:report']) {\n parsedPackageContents.scripts = otherScripts;\n await fs.writeFile(pathToPackageJson, JSON.stringify(parsedPackageContents));\n\n await execa(packageManager, ['remove', 'codecov']);\n\n return {\n ...!ciProviderCanBeLifted && {\n nextSteps: [{\n summary: 'Configure modern reporting to Codecov on your CI service',\n description: 'Configure the [Codecov Uploader](https://docs.codecov.com/docs/codecov-uploader) appropriately'\n + ' for your CI Provider. If available for your provider, prefer one of the dedicated wrappers.'\n }]\n }\n };\n }\n\n return {};\n}\n","import {lift as liftReporting} from './reporter';\n\nexport function lift({projectRoot, packageManager}) {\n return liftReporting({projectRoot, packageManager});\n}\n"],"names":["coverageShouldBeReportedToCodecov","vcs","visibility","apiAccessToken","host","body","repo","got","owner","name","headers","Authorization","responseType","scaffold","includes","badges","status","coverage","img","fetchRepositoryDetails","image_token","link","text","scaffoldBadge","getPathToWorkflowFile","projectRoot","test","fileExists","lift","pathToWorkflowFile","workflowDetails","load","fs","readFile","jobs","verify","steps","find","step","uses","startsWith","stepsWithLegacyReportingRemoved","filter","run","writeFile","dump","packageManager","pathToPackageJson","ciProviderCanBeLifted","existingPackageContents","Promise","all","ciProviderIsLiftable","parsedPackageContents","JSON","parse","scripts","otherScripts","liftCiProvider","stringify","execa","nextSteps","summary","description","liftReporting"],"mappings":"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"}
|
package/lib/index.es.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import got from 'got';
|
|
2
2
|
import { promises } from 'fs';
|
|
3
3
|
import execa from 'execa';
|
|
4
|
+
import { load, dump } from 'js-yaml';
|
|
5
|
+
import { fileExists } from '@form8ion/core';
|
|
4
6
|
|
|
5
7
|
function ownKeys(object, enumerableOnly) {
|
|
6
8
|
var keys = Object.keys(object);
|
|
@@ -87,48 +89,6 @@ function coverageShouldBeReportedToCodecov({
|
|
|
87
89
|
return !!('Public' === visibility || apiAccessToken && 'github' === vcs.host);
|
|
88
90
|
}
|
|
89
91
|
|
|
90
|
-
function scaffold$2() {
|
|
91
|
-
return {
|
|
92
|
-
devDependencies: ['codecov'],
|
|
93
|
-
scripts: {
|
|
94
|
-
'coverage:report': 'c8 report --reporter=text-lcov > coverage.lcov && codecov'
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
const _excluded = ["scripts"],
|
|
100
|
-
_excluded2 = ["coverage:report"];
|
|
101
|
-
async function liftReporting ({
|
|
102
|
-
projectRoot,
|
|
103
|
-
packageManager
|
|
104
|
-
}) {
|
|
105
|
-
const pathToPackageJson = `${projectRoot}/package.json`;
|
|
106
|
-
const existingPackageContents = await promises.readFile(pathToPackageJson, 'utf-8');
|
|
107
|
-
|
|
108
|
-
const _JSON$parse = JSON.parse(existingPackageContents),
|
|
109
|
-
{
|
|
110
|
-
scripts
|
|
111
|
-
} = _JSON$parse,
|
|
112
|
-
otherTopLevelProperties = _objectWithoutProperties(_JSON$parse, _excluded);
|
|
113
|
-
|
|
114
|
-
const otherScripts = _objectWithoutProperties(scripts, _excluded2);
|
|
115
|
-
|
|
116
|
-
if (scripts['coverage:report']) {
|
|
117
|
-
await promises.writeFile(pathToPackageJson, JSON.stringify(_objectSpread2(_objectSpread2({}, otherTopLevelProperties), {}, {
|
|
118
|
-
scripts: otherScripts
|
|
119
|
-
})));
|
|
120
|
-
await execa(packageManager, ['remove', 'codecov']);
|
|
121
|
-
return {
|
|
122
|
-
nextSteps: [{
|
|
123
|
-
summary: 'Configure modern reporting to Codecov on your CI service',
|
|
124
|
-
description: 'Configure the [Codecov Uploader](https://docs.codecov.com/docs/codecov-uploader) appropriately' + ' for your CI Provider. If available for your provider, prefer one of the dedicated wrappers.'
|
|
125
|
-
}]
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
return {};
|
|
130
|
-
}
|
|
131
|
-
|
|
132
92
|
async function fetchRepositoryDetails ({
|
|
133
93
|
vcs,
|
|
134
94
|
apiAccessToken
|
|
@@ -176,12 +136,89 @@ async function scaffold({
|
|
|
176
136
|
visibility,
|
|
177
137
|
apiAccessToken
|
|
178
138
|
})) return {};
|
|
179
|
-
return _objectSpread2(
|
|
139
|
+
return _objectSpread2({}, await scaffold$1({
|
|
180
140
|
vcs,
|
|
181
141
|
apiAccessToken
|
|
182
142
|
}));
|
|
183
143
|
}
|
|
184
144
|
|
|
145
|
+
function getPathToWorkflowFile(projectRoot) {
|
|
146
|
+
return `${projectRoot}/.github/workflows/node-ci.yml`;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function test({
|
|
150
|
+
projectRoot
|
|
151
|
+
}) {
|
|
152
|
+
return fileExists(getPathToWorkflowFile(projectRoot));
|
|
153
|
+
}
|
|
154
|
+
async function lift$1({
|
|
155
|
+
projectRoot
|
|
156
|
+
}) {
|
|
157
|
+
const pathToWorkflowFile = getPathToWorkflowFile(projectRoot);
|
|
158
|
+
const workflowDetails = load(await promises.readFile(pathToWorkflowFile, 'utf-8'));
|
|
159
|
+
const {
|
|
160
|
+
jobs: {
|
|
161
|
+
verify: {
|
|
162
|
+
steps
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
} = workflowDetails;
|
|
166
|
+
|
|
167
|
+
if (!steps.find(step => {
|
|
168
|
+
var _step$uses;
|
|
169
|
+
|
|
170
|
+
return (_step$uses = step.uses) === null || _step$uses === void 0 ? void 0 : _step$uses.startsWith('codecov/codecov-action');
|
|
171
|
+
})) {
|
|
172
|
+
const stepsWithLegacyReportingRemoved = steps.filter(({
|
|
173
|
+
run
|
|
174
|
+
}) => 'npm run coverage:report' !== run);
|
|
175
|
+
await promises.writeFile(pathToWorkflowFile, dump(_objectSpread2(_objectSpread2({}, workflowDetails), {}, {
|
|
176
|
+
jobs: _objectSpread2(_objectSpread2({}, workflowDetails.jobs), {}, {
|
|
177
|
+
verify: _objectSpread2(_objectSpread2({}, workflowDetails.jobs.verify), {}, {
|
|
178
|
+
steps: [...stepsWithLegacyReportingRemoved, {
|
|
179
|
+
uses: 'codecov/codecov-action@v2'
|
|
180
|
+
}]
|
|
181
|
+
})
|
|
182
|
+
})
|
|
183
|
+
})));
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const _excluded = ["coverage:report"];
|
|
188
|
+
async function liftReporting ({
|
|
189
|
+
projectRoot,
|
|
190
|
+
packageManager
|
|
191
|
+
}) {
|
|
192
|
+
const pathToPackageJson = `${projectRoot}/package.json`;
|
|
193
|
+
const [ciProviderCanBeLifted, existingPackageContents] = await Promise.all([test({
|
|
194
|
+
projectRoot
|
|
195
|
+
}), promises.readFile(pathToPackageJson, 'utf-8')]);
|
|
196
|
+
const parsedPackageContents = JSON.parse(existingPackageContents);
|
|
197
|
+
const {
|
|
198
|
+
scripts
|
|
199
|
+
} = parsedPackageContents;
|
|
200
|
+
|
|
201
|
+
const otherScripts = _objectWithoutProperties(scripts, _excluded);
|
|
202
|
+
|
|
203
|
+
if (ciProviderCanBeLifted) await lift$1({
|
|
204
|
+
projectRoot
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
if (scripts['coverage:report']) {
|
|
208
|
+
parsedPackageContents.scripts = otherScripts;
|
|
209
|
+
await promises.writeFile(pathToPackageJson, JSON.stringify(parsedPackageContents));
|
|
210
|
+
await execa(packageManager, ['remove', 'codecov']);
|
|
211
|
+
return _objectSpread2({}, !ciProviderCanBeLifted && {
|
|
212
|
+
nextSteps: [{
|
|
213
|
+
summary: 'Configure modern reporting to Codecov on your CI service',
|
|
214
|
+
description: 'Configure the [Codecov Uploader](https://docs.codecov.com/docs/codecov-uploader) appropriately' + ' for your CI Provider. If available for your provider, prefer one of the dedicated wrappers.'
|
|
215
|
+
}]
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
return {};
|
|
220
|
+
}
|
|
221
|
+
|
|
185
222
|
function lift({
|
|
186
223
|
projectRoot,
|
|
187
224
|
packageManager
|
package/lib/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../src/predicates.js","../src/
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/predicates.js","../src/badge/repository-details-fetcher.js","../src/badge/scaffolder.js","../src/scaffolder.js","../src/reporter/ci-providers/github-workflows/lifter.js","../src/reporter/lifter.js","../src/lifter.js"],"sourcesContent":["export function coverageShouldBeReportedToCodecov({vcs, visibility, apiAccessToken}) {\n return !!('Public' === visibility || (apiAccessToken && 'github' === vcs.host));\n}\n","import got from '../../thirdparty-wrappers/got';\n\nexport default async function ({vcs, apiAccessToken}) {\n const {body: {repo}} = await got(\n `https://codecov.io/api/gh/${vcs.owner}/${vcs.name}`,\n {headers: {Authorization: apiAccessToken}, responseType: 'json'}\n );\n\n return repo;\n}\n","import fetchRepositoryDetails from './repository-details-fetcher';\n\nexport async function scaffold({vcs, apiAccessToken}) {\n return {\n ...['github', 'gitlab', 'bitbucket'].includes(vcs?.host) && {\n badges: {\n status: {\n coverage: {\n img: `https://img.shields.io/codecov/c/${vcs.host}/${vcs.owner}/${vcs.name}?logo=codecov${\n apiAccessToken\n ? `&token=${(await fetchRepositoryDetails({vcs, apiAccessToken})).image_token}`\n : ''\n }`,\n link: `https://codecov.io/${vcs.host}/${vcs.owner}/${vcs.name}`,\n text: 'Codecov'\n }\n }\n }\n }\n };\n}\n","import {coverageShouldBeReportedToCodecov} from './predicates';\nimport {scaffold as scaffoldBadge} from './badge';\n\nexport async function scaffold({vcs, visibility, apiAccessToken}) {\n if (!coverageShouldBeReportedToCodecov({vcs, visibility, apiAccessToken})) return {};\n\n return {\n ...await scaffoldBadge({vcs, apiAccessToken})\n };\n}\n","import {promises as fs} from 'fs';\nimport {dump, load} from 'js-yaml';\nimport {fileExists} from '@form8ion/core';\n\nfunction getPathToWorkflowFile(projectRoot) {\n return `${projectRoot}/.github/workflows/node-ci.yml`;\n}\n\nexport function test({projectRoot}) {\n return fileExists(getPathToWorkflowFile(projectRoot));\n}\n\nexport async function lift({projectRoot}) {\n const pathToWorkflowFile = getPathToWorkflowFile(projectRoot);\n\n const workflowDetails = load(await fs.readFile(pathToWorkflowFile, 'utf-8'));\n const {jobs: {verify: {steps}}} = workflowDetails;\n\n if (!steps.find(step => step.uses?.startsWith('codecov/codecov-action'))) {\n const stepsWithLegacyReportingRemoved = steps.filter(({run}) => 'npm run coverage:report' !== run);\n\n await fs.writeFile(\n pathToWorkflowFile,\n dump({\n ...workflowDetails,\n jobs: {\n ...workflowDetails.jobs,\n verify: {\n ...workflowDetails.jobs.verify,\n steps: [...stepsWithLegacyReportingRemoved, {uses: 'codecov/codecov-action@v2'}]\n }\n }\n })\n );\n }\n}\n","import {promises as fs} from 'fs';\n\nimport execa from '../../thirdparty-wrappers/execa';\nimport {lift as liftCiProvider, test as ciProviderIsLiftable} from './ci-providers';\n\nexport default async function ({projectRoot, packageManager}) {\n const pathToPackageJson = `${projectRoot}/package.json`;\n\n const [ciProviderCanBeLifted, existingPackageContents] = await Promise.all([\n ciProviderIsLiftable({projectRoot}),\n fs.readFile(pathToPackageJson, 'utf-8')\n ]);\n const parsedPackageContents = JSON.parse(existingPackageContents);\n const {scripts} = parsedPackageContents;\n const {'coverage:report': reportCoverageScript, ...otherScripts} = scripts;\n\n if (ciProviderCanBeLifted) await liftCiProvider({projectRoot});\n\n if (scripts['coverage:report']) {\n parsedPackageContents.scripts = otherScripts;\n await fs.writeFile(pathToPackageJson, JSON.stringify(parsedPackageContents));\n\n await execa(packageManager, ['remove', 'codecov']);\n\n return {\n ...!ciProviderCanBeLifted && {\n nextSteps: [{\n summary: 'Configure modern reporting to Codecov on your CI service',\n description: 'Configure the [Codecov Uploader](https://docs.codecov.com/docs/codecov-uploader) appropriately'\n + ' for your CI Provider. If available for your provider, prefer one of the dedicated wrappers.'\n }]\n }\n };\n }\n\n return {};\n}\n","import {lift as liftReporting} from './reporter';\n\nexport function lift({projectRoot, packageManager}) {\n return liftReporting({projectRoot, packageManager});\n}\n"],"names":["coverageShouldBeReportedToCodecov","vcs","visibility","apiAccessToken","host","body","repo","got","owner","name","headers","Authorization","responseType","scaffold","includes","badges","status","coverage","img","fetchRepositoryDetails","image_token","link","text","scaffoldBadge","getPathToWorkflowFile","projectRoot","test","fileExists","lift","pathToWorkflowFile","workflowDetails","load","fs","readFile","jobs","verify","steps","find","step","uses","startsWith","stepsWithLegacyReportingRemoved","filter","run","writeFile","dump","packageManager","pathToPackageJson","ciProviderCanBeLifted","existingPackageContents","Promise","all","ciProviderIsLiftable","parsedPackageContents","JSON","parse","scripts","otherScripts","liftCiProvider","stringify","execa","nextSteps","summary","description","liftReporting"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@form8ion/codecov",
|
|
3
3
|
"description": "code coverage service plugin for form8ion",
|
|
4
4
|
"license": "MIT",
|
|
5
|
-
"version": "
|
|
5
|
+
"version": "2.0.1",
|
|
6
6
|
"files": [
|
|
7
7
|
"example.js",
|
|
8
8
|
"lib/"
|
|
@@ -48,26 +48,26 @@
|
|
|
48
48
|
"test:integration:focus": "run-s 'test:integration:base -- --profile focus'"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@babel/register": "7.16.
|
|
51
|
+
"@babel/register": "7.16.7",
|
|
52
52
|
"@cucumber/cucumber": "8.0.0-rc.1",
|
|
53
|
-
"@form8ion/babel-preset": "1.6.
|
|
54
|
-
"@form8ion/commitlint-config": "1.0.
|
|
55
|
-
"@form8ion/eslint-config": "2.0.
|
|
53
|
+
"@form8ion/babel-preset": "1.6.74",
|
|
54
|
+
"@form8ion/commitlint-config": "1.0.25",
|
|
55
|
+
"@form8ion/eslint-config": "2.0.3",
|
|
56
56
|
"@form8ion/eslint-config-cucumber": "1.4.0",
|
|
57
57
|
"@form8ion/eslint-config-mocha": "1.2.17",
|
|
58
58
|
"@form8ion/javascript-core": "4.0.1",
|
|
59
59
|
"@form8ion/remark-lint-preset": "2.1.7",
|
|
60
60
|
"@rollup/plugin-babel": "5.3.0",
|
|
61
|
-
"@rollup/plugin-node-resolve": "13.1.
|
|
61
|
+
"@rollup/plugin-node-resolve": "13.1.2",
|
|
62
62
|
"@travi/any": "2.0.19",
|
|
63
63
|
"ban-sensitive-files": "1.9.16",
|
|
64
|
-
"c8": "7.
|
|
64
|
+
"c8": "7.11.0",
|
|
65
65
|
"chai": "4.3.4",
|
|
66
66
|
"codecov": "3.8.3",
|
|
67
67
|
"cross-env": "7.0.3",
|
|
68
68
|
"cz-conventional-changelog": "3.3.0",
|
|
69
69
|
"gherkin-lint": "4.2.2",
|
|
70
|
-
"http-status-codes": "2.
|
|
70
|
+
"http-status-codes": "2.2.0",
|
|
71
71
|
"husky": "7.0.4",
|
|
72
72
|
"lockfile-lint": "4.6.2",
|
|
73
73
|
"mocha": "9.1.3",
|
|
@@ -79,13 +79,15 @@
|
|
|
79
79
|
"remark-toc": "8.0.1",
|
|
80
80
|
"remark-usage": "10.0.1",
|
|
81
81
|
"rimraf": "3.0.2",
|
|
82
|
-
"rollup": "2.
|
|
82
|
+
"rollup": "2.62.0",
|
|
83
83
|
"rollup-plugin-auto-external": "2.0.0",
|
|
84
84
|
"sinon": "12.0.1",
|
|
85
|
-
"testdouble": "3.16.
|
|
85
|
+
"testdouble": "3.16.4"
|
|
86
86
|
},
|
|
87
87
|
"dependencies": {
|
|
88
|
+
"@form8ion/core": "^1.4.2",
|
|
88
89
|
"execa": "^5.1.1",
|
|
89
|
-
"got": "^11.8.2"
|
|
90
|
+
"got": "^11.8.2",
|
|
91
|
+
"js-yaml": "^4.1.0"
|
|
90
92
|
}
|
|
91
93
|
}
|