@form8ion/codecov 7.7.0 → 7.8.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/lib/index.js +20 -7
- package/lib/index.js.map +1 -1
- package/package.json +10 -9
- package/src/badge/scaffolder.js +9 -5
- package/src/badge/scaffolder.test.js +7 -4
- package/src/lifter.js +3 -1
- package/src/lifter.test.js +1 -1
- package/src/scaffolder.js +4 -1
- package/src/scaffolder.test.js +16 -2
- package/src/vcs-host-checker.js +5 -0
- package/src/vcs-host-checker.test.js +25 -0
package/lib/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { sourceHostedOnGitHub } from '@form8ion/github-core';
|
|
1
2
|
import { writeConfigFile, fileTypes, fileExists } from '@form8ion/core';
|
|
2
3
|
import deepmerge from 'deepmerge';
|
|
3
4
|
import { promises } from 'node:fs';
|
|
@@ -6,6 +7,10 @@ import { execa } from 'execa';
|
|
|
6
7
|
import { removeActionFromJobs, loadWorkflowFile, writeWorkflowFile, workflowFileExists } from '@form8ion/github-workflows-core';
|
|
7
8
|
import got from 'got';
|
|
8
9
|
|
|
10
|
+
function vcsHostIsSupportedByCodecov({projectRoot}) {
|
|
11
|
+
return sourceHostedOnGitHub({projectRoot});
|
|
12
|
+
}
|
|
13
|
+
|
|
9
14
|
async function scaffoldConfig({projectRoot}) {
|
|
10
15
|
await writeConfigFile({
|
|
11
16
|
format: fileTypes.YAML,
|
|
@@ -16,7 +21,9 @@ async function scaffoldConfig({projectRoot}) {
|
|
|
16
21
|
}
|
|
17
22
|
|
|
18
23
|
async function scaffold$1({projectRoot}) {
|
|
19
|
-
await
|
|
24
|
+
if (await vcsHostIsSupportedByCodecov({projectRoot})) {
|
|
25
|
+
await scaffoldConfig({projectRoot});
|
|
26
|
+
}
|
|
20
27
|
|
|
21
28
|
return {};
|
|
22
29
|
}
|
|
@@ -40,11 +47,15 @@ async function scaffold({vcs, apiAccessToken}) {
|
|
|
40
47
|
badges: {
|
|
41
48
|
status: {
|
|
42
49
|
coverage: {
|
|
43
|
-
img:
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
50
|
+
img:
|
|
51
|
+
`https://img.shields.io/codecov/c/${vcs.host}/${vcs.owner}/${vcs.name}/${vcs.defaultBranch}?logo=codecov${
|
|
52
|
+
apiAccessToken
|
|
53
|
+
? `&token=${(await fetchRepositoryDetails({
|
|
54
|
+
vcs,
|
|
55
|
+
apiAccessToken
|
|
56
|
+
})).image_token}`
|
|
57
|
+
: ''
|
|
58
|
+
}`,
|
|
48
59
|
link: `https://codecov.io/${vcs.host}/${vcs.owner}/${vcs.name}`,
|
|
49
60
|
text: 'Codecov'
|
|
50
61
|
}
|
|
@@ -179,9 +190,11 @@ async function liftReporter({projectRoot, packageManager}) {
|
|
|
179
190
|
}
|
|
180
191
|
|
|
181
192
|
async function lift({projectRoot, packageManager, vcs}) {
|
|
193
|
+
const enhancedVcs = {...vcs, defaultBranch: 'master'};
|
|
194
|
+
|
|
182
195
|
const [reportingResults, badgeResults] = await Promise.all([
|
|
183
196
|
liftReporter({projectRoot, packageManager}),
|
|
184
|
-
scaffold({vcs}),
|
|
197
|
+
scaffold({vcs: enhancedVcs}),
|
|
185
198
|
scaffoldConfig({projectRoot})
|
|
186
199
|
]);
|
|
187
200
|
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/config/scaffolder.js","../src/scaffolder.js","../src/tester.js","../src/badge/repository-details-fetcher.js","../src/badge/scaffolder.js","../src/reporter/ci-providers/github-workflows/action/constants.js","../src/reporter/ci-providers/github-workflows/action/scaffolder.js","../src/reporter/ci-providers/github-workflows/action/tester.js","../src/reporter/ci-providers/github-workflows/action/lifter.js","../src/reporter/ci-providers/github-workflows/action/remover.js","../src/reporter/ci-providers/github-workflows/steps/tester.js","../src/reporter/ci-providers/github-workflows/steps/lifter.js","../src/reporter/ci-providers/github-workflows/lifter.js","../src/reporter/ci-providers/github-workflows/remover.js","../src/reporter/ci-providers/github-workflows/predicate.js","../src/reporter/lifter.js","../src/lifter.js","../src/remover.js"],"sourcesContent":["import {fileTypes, writeConfigFile} from '@form8ion/core';\n\nexport default async function scaffoldConfig({projectRoot}) {\n await writeConfigFile({\n format: fileTypes.YAML,\n path: projectRoot,\n name: '.codecov',\n config: {comment: {layout: 'reach,diff,flags,tree'}}\n });\n}\n","import {scaffold as scaffoldConfig} from './config/index.js';\n\nexport async function scaffold({projectRoot}) {\n await scaffoldConfig({projectRoot});\n\n return {};\n}\n","import {fileExists} from '@form8ion/core';\n\nexport default async function codecovInUse({projectRoot}) {\n return fileExists(`${projectRoot}/.codecov.yml`);\n}\n","import got from 'got';\n\nexport default async function fetchRepositoryDetails({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.js';\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}/master?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","export const ACTION_NAME = 'codecov/codecov-action';\n","import {ACTION_NAME} from './constants.js';\n\nexport default function scaffoldAction() {\n return {\n name: 'Upload unit test coverage to Codecov',\n uses: `${ACTION_NAME}@v5.5.2`,\n with: {\n // eslint-disable-next-line no-template-curly-in-string\n token: '${{ secrets.CODECOV_TOKEN }}',\n flags: 'unit',\n report_type: 'coverage'\n }\n };\n}\n","import {ACTION_NAME} from './constants.js';\n\nexport default function stepIsCodecovAction(step) {\n if (!step.uses) return false;\n\n const [actionName] = step.uses.split('@');\n\n return ACTION_NAME === actionName;\n}\n","export default function liftAction(action) {\n return {\n name: 'Upload unit test coverage to Codecov',\n ...action,\n with: {\n // eslint-disable-next-line no-template-curly-in-string\n token: '${{ secrets.CODECOV_TOKEN }}',\n flags: 'unit',\n report_type: 'coverage'\n }\n };\n}\n","import {removeActionFromJobs} from '@form8ion/github-workflows-core';\nimport {ACTION_NAME} from './constants.js';\n\nexport default function removeCodecovActionFrom(jobs) {\n return removeActionFromJobs(jobs, ACTION_NAME);\n}\n","import {test as stepIsCodecovAction} from '../action/index.js';\n\nexport default function codecovActionExistsInSteps(steps) {\n return !!steps.find(step => stepIsCodecovAction(step));\n}\n","import {scaffold as scaffoldAction, lift as liftAction, test as stepIsCodecovAction} from '../action/index.js';\nimport codecovActionExistsInSteps from './tester.js';\n\nexport default function liftSteps(steps) {\n if (!codecovActionExistsInSteps(steps)) {\n const stepsWithLegacyReportingRemoved = steps.filter(({run}) => 'npm run coverage:report' !== run);\n\n return [...stepsWithLegacyReportingRemoved, scaffoldAction()];\n }\n\n return steps.map(step => {\n if (stepIsCodecovAction(step)) return liftAction(step);\n\n return step;\n });\n}\n","import {loadWorkflowFile, writeWorkflowFile} from '@form8ion/github-workflows-core';\n\nimport {lift as liftSteps} from './steps/index.js';\n\nexport async function lift({projectRoot}) {\n const ciWorkflowName = 'node-ci';\n\n const workflowDetails = await loadWorkflowFile({projectRoot, name: ciWorkflowName});\n const {jobs: {verify: {steps}}} = workflowDetails;\n\n await writeWorkflowFile({\n projectRoot,\n name: ciWorkflowName,\n config: {\n ...workflowDetails,\n jobs: {\n ...workflowDetails.jobs,\n verify: {\n ...workflowDetails.jobs.verify,\n steps: liftSteps(steps)\n }\n }\n }\n });\n}\n","import {loadWorkflowFile, writeWorkflowFile} from '@form8ion/github-workflows-core';\nimport {remove as removeCodecovActionFrom} from './action/index.js';\n\nexport default async function removeCodecovAction({projectRoot}) {\n const existingConfig = await loadWorkflowFile({projectRoot, name: 'node-ci'});\n existingConfig.jobs = removeCodecovActionFrom(existingConfig.jobs);\n\n await writeWorkflowFile({projectRoot, name: 'node-ci', config: existingConfig});\n}\n","import {workflowFileExists} from '@form8ion/github-workflows-core';\n\nexport default function ciWorkflowExists({projectRoot}) {\n return workflowFileExists({projectRoot, name: 'node-ci'});\n}\n","import {promises as fs} from 'node:fs';\nimport {writePackageJson} from '@form8ion/javascript-core';\n\nimport {execa} from 'execa';\nimport {lift as liftCiProvider, test as ciProviderIsLiftable} from './ci-providers/index.js';\n\nexport default async function liftReporter({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 writePackageJson({projectRoot, config: 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 deepmerge from 'deepmerge';\n\nimport {scaffold as scaffoldConfig} from './config/index.js';\nimport {scaffold as scaffoldBadge} from './badge/index.js';\nimport {lift as liftReporting} from './reporter/index.js';\n\nexport async function lift({projectRoot, packageManager, vcs}) {\n const [reportingResults, badgeResults] = await Promise.all([\n liftReporting({projectRoot, packageManager}),\n scaffoldBadge({vcs}),\n scaffoldConfig({projectRoot})\n ]);\n\n return deepmerge.all([reportingResults, badgeResults]);\n}\n","import {remove as removeAction, test as githubWorkflowExists} from './reporter/ci-providers/github-workflows/index.js';\n\nexport default async function removeCodecov({projectRoot}) {\n if (await githubWorkflowExists({projectRoot})) {\n await removeAction({projectRoot});\n }\n\n return {};\n}\n"],"names":["scaffold","lift","ciProviderIsLiftable","fs","liftCiProvider","liftReporting","scaffoldBadge","githubWorkflowExists","removeAction"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/vcs-host-checker.js","../src/config/scaffolder.js","../src/scaffolder.js","../src/tester.js","../src/badge/repository-details-fetcher.js","../src/badge/scaffolder.js","../src/reporter/ci-providers/github-workflows/action/constants.js","../src/reporter/ci-providers/github-workflows/action/scaffolder.js","../src/reporter/ci-providers/github-workflows/action/tester.js","../src/reporter/ci-providers/github-workflows/action/lifter.js","../src/reporter/ci-providers/github-workflows/action/remover.js","../src/reporter/ci-providers/github-workflows/steps/tester.js","../src/reporter/ci-providers/github-workflows/steps/lifter.js","../src/reporter/ci-providers/github-workflows/lifter.js","../src/reporter/ci-providers/github-workflows/remover.js","../src/reporter/ci-providers/github-workflows/predicate.js","../src/reporter/lifter.js","../src/lifter.js","../src/remover.js"],"sourcesContent":["import {sourceHostedOnGitHub} from '@form8ion/github-core';\n\nexport default function vcsHostIsSupportedByCodecov({projectRoot}) {\n return sourceHostedOnGitHub({projectRoot});\n}\n","import {fileTypes, writeConfigFile} from '@form8ion/core';\n\nexport default async function scaffoldConfig({projectRoot}) {\n await writeConfigFile({\n format: fileTypes.YAML,\n path: projectRoot,\n name: '.codecov',\n config: {comment: {layout: 'reach,diff,flags,tree'}}\n });\n}\n","import vcsHostIsSupportedByCodecov from './vcs-host-checker.js';\nimport {scaffold as scaffoldConfig} from './config/index.js';\n\nexport async function scaffold({projectRoot}) {\n if (await vcsHostIsSupportedByCodecov({projectRoot})) {\n await scaffoldConfig({projectRoot});\n }\n\n return {};\n}\n","import {fileExists} from '@form8ion/core';\n\nexport default async function codecovInUse({projectRoot}) {\n return fileExists(`${projectRoot}/.codecov.yml`);\n}\n","import got from 'got';\n\nexport default async function fetchRepositoryDetails({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.js';\n\nexport async function scaffold({vcs, apiAccessToken}) {\n return {\n ...['github', 'gitlab', 'bitbucket'].includes(vcs?.host) && {\n badges: {\n status: {\n coverage: {\n img:\n `https://img.shields.io/codecov/c/${vcs.host}/${vcs.owner}/${vcs.name}/${vcs.defaultBranch}?logo=codecov${\n apiAccessToken\n ? `&token=${(await fetchRepositoryDetails({\n vcs,\n apiAccessToken\n })).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","export const ACTION_NAME = 'codecov/codecov-action';\n","import {ACTION_NAME} from './constants.js';\n\nexport default function scaffoldAction() {\n return {\n name: 'Upload unit test coverage to Codecov',\n uses: `${ACTION_NAME}@v5.5.2`,\n with: {\n // eslint-disable-next-line no-template-curly-in-string\n token: '${{ secrets.CODECOV_TOKEN }}',\n flags: 'unit',\n report_type: 'coverage'\n }\n };\n}\n","import {ACTION_NAME} from './constants.js';\n\nexport default function stepIsCodecovAction(step) {\n if (!step.uses) return false;\n\n const [actionName] = step.uses.split('@');\n\n return ACTION_NAME === actionName;\n}\n","export default function liftAction(action) {\n return {\n name: 'Upload unit test coverage to Codecov',\n ...action,\n with: {\n // eslint-disable-next-line no-template-curly-in-string\n token: '${{ secrets.CODECOV_TOKEN }}',\n flags: 'unit',\n report_type: 'coverage'\n }\n };\n}\n","import {removeActionFromJobs} from '@form8ion/github-workflows-core';\nimport {ACTION_NAME} from './constants.js';\n\nexport default function removeCodecovActionFrom(jobs) {\n return removeActionFromJobs(jobs, ACTION_NAME);\n}\n","import {test as stepIsCodecovAction} from '../action/index.js';\n\nexport default function codecovActionExistsInSteps(steps) {\n return !!steps.find(step => stepIsCodecovAction(step));\n}\n","import {scaffold as scaffoldAction, lift as liftAction, test as stepIsCodecovAction} from '../action/index.js';\nimport codecovActionExistsInSteps from './tester.js';\n\nexport default function liftSteps(steps) {\n if (!codecovActionExistsInSteps(steps)) {\n const stepsWithLegacyReportingRemoved = steps.filter(({run}) => 'npm run coverage:report' !== run);\n\n return [...stepsWithLegacyReportingRemoved, scaffoldAction()];\n }\n\n return steps.map(step => {\n if (stepIsCodecovAction(step)) return liftAction(step);\n\n return step;\n });\n}\n","import {loadWorkflowFile, writeWorkflowFile} from '@form8ion/github-workflows-core';\n\nimport {lift as liftSteps} from './steps/index.js';\n\nexport async function lift({projectRoot}) {\n const ciWorkflowName = 'node-ci';\n\n const workflowDetails = await loadWorkflowFile({projectRoot, name: ciWorkflowName});\n const {jobs: {verify: {steps}}} = workflowDetails;\n\n await writeWorkflowFile({\n projectRoot,\n name: ciWorkflowName,\n config: {\n ...workflowDetails,\n jobs: {\n ...workflowDetails.jobs,\n verify: {\n ...workflowDetails.jobs.verify,\n steps: liftSteps(steps)\n }\n }\n }\n });\n}\n","import {loadWorkflowFile, writeWorkflowFile} from '@form8ion/github-workflows-core';\nimport {remove as removeCodecovActionFrom} from './action/index.js';\n\nexport default async function removeCodecovAction({projectRoot}) {\n const existingConfig = await loadWorkflowFile({projectRoot, name: 'node-ci'});\n existingConfig.jobs = removeCodecovActionFrom(existingConfig.jobs);\n\n await writeWorkflowFile({projectRoot, name: 'node-ci', config: existingConfig});\n}\n","import {workflowFileExists} from '@form8ion/github-workflows-core';\n\nexport default function ciWorkflowExists({projectRoot}) {\n return workflowFileExists({projectRoot, name: 'node-ci'});\n}\n","import {promises as fs} from 'node:fs';\nimport {writePackageJson} from '@form8ion/javascript-core';\n\nimport {execa} from 'execa';\nimport {lift as liftCiProvider, test as ciProviderIsLiftable} from './ci-providers/index.js';\n\nexport default async function liftReporter({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 writePackageJson({projectRoot, config: 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 deepmerge from 'deepmerge';\n\nimport {scaffold as scaffoldConfig} from './config/index.js';\nimport {scaffold as scaffoldBadge} from './badge/index.js';\nimport {lift as liftReporting} from './reporter/index.js';\n\nexport async function lift({projectRoot, packageManager, vcs}) {\n const enhancedVcs = {...vcs, defaultBranch: 'master'};\n\n const [reportingResults, badgeResults] = await Promise.all([\n liftReporting({projectRoot, packageManager}),\n scaffoldBadge({vcs: enhancedVcs}),\n scaffoldConfig({projectRoot})\n ]);\n\n return deepmerge.all([reportingResults, badgeResults]);\n}\n","import {remove as removeAction, test as githubWorkflowExists} from './reporter/ci-providers/github-workflows/index.js';\n\nexport default async function removeCodecov({projectRoot}) {\n if (await githubWorkflowExists({projectRoot})) {\n await removeAction({projectRoot});\n }\n\n return {};\n}\n"],"names":["scaffold","lift","ciProviderIsLiftable","fs","liftCiProvider","liftReporting","scaffoldBadge","githubWorkflowExists","removeAction"],"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": "7.
|
|
5
|
+
"version": "7.8.1",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"engines": {
|
|
8
8
|
"node": "^20.19.0 || >=22.14.0"
|
|
@@ -54,9 +54,10 @@
|
|
|
54
54
|
"access": "public",
|
|
55
55
|
"provenance": true
|
|
56
56
|
},
|
|
57
|
-
"packageManager": "npm@11.12.
|
|
57
|
+
"packageManager": "npm@11.12.1+sha512.cdca14b85d647b3192028d02aadbe82d75f79a446aceea9874be98e6d768f20ebd3555770a48d0e9906106007877bbc690f715e9372f2e2dc644a3c3157fb14c",
|
|
58
58
|
"dependencies": {
|
|
59
59
|
"@form8ion/core": "^4.6.1",
|
|
60
|
+
"@form8ion/github-core": "^2.0.0",
|
|
60
61
|
"@form8ion/github-workflows-core": "^6.0.0-beta.1",
|
|
61
62
|
"@form8ion/javascript-core": "^12.0.0",
|
|
62
63
|
"deepmerge": "^4.3.1",
|
|
@@ -64,16 +65,16 @@
|
|
|
64
65
|
"got": "^14.6.6"
|
|
65
66
|
},
|
|
66
67
|
"devDependencies": {
|
|
67
|
-
"@codecov/rollup-plugin": "
|
|
68
|
-
"@cucumber/cucumber": "12.
|
|
68
|
+
"@codecov/rollup-plugin": "2.0.0",
|
|
69
|
+
"@cucumber/cucumber": "12.8.1",
|
|
69
70
|
"@form8ion/commitlint-config": "2.0.11",
|
|
70
71
|
"@form8ion/eslint-config": "7.1.0-beta.1",
|
|
71
72
|
"@form8ion/eslint-config-cucumber": "1.4.1",
|
|
72
73
|
"@form8ion/eslint-config-vitest": "1.1.0",
|
|
73
74
|
"@form8ion/remark-lint-preset": "6.0.7",
|
|
74
75
|
"@rollup/plugin-node-resolve": "16.0.3",
|
|
75
|
-
"@travi/any": "3.
|
|
76
|
-
"@vitest/coverage-v8": "4.1.
|
|
76
|
+
"@travi/any": "3.3.0",
|
|
77
|
+
"@vitest/coverage-v8": "4.1.4",
|
|
77
78
|
"chai": "6.2.2",
|
|
78
79
|
"cz-conventional-changelog": "3.3.0",
|
|
79
80
|
"gherkin-lint": "4.2.4",
|
|
@@ -83,17 +84,17 @@
|
|
|
83
84
|
"lockfile-lint": "5.0.0",
|
|
84
85
|
"ls-engines": "0.9.4",
|
|
85
86
|
"mock-fs": "5.5.0",
|
|
86
|
-
"nock": "14.0.
|
|
87
|
+
"nock": "14.0.12",
|
|
87
88
|
"npm-run-all2": "8.0.4",
|
|
88
89
|
"publint": "0.3.18",
|
|
89
90
|
"remark-cli": "12.0.1",
|
|
90
91
|
"remark-toc": "9.0.0",
|
|
91
92
|
"remark-usage": "11.0.1",
|
|
92
93
|
"rimraf": "6.1.3",
|
|
93
|
-
"rollup": "4.60.
|
|
94
|
+
"rollup": "4.60.1",
|
|
94
95
|
"rollup-plugin-auto-external": "2.0.0",
|
|
95
96
|
"testdouble": "3.20.2",
|
|
96
|
-
"vitest": "4.1.
|
|
97
|
+
"vitest": "4.1.4",
|
|
97
98
|
"vitest-when": "0.10.0"
|
|
98
99
|
}
|
|
99
100
|
}
|
package/src/badge/scaffolder.js
CHANGED
|
@@ -6,11 +6,15 @@ export async function scaffold({vcs, apiAccessToken}) {
|
|
|
6
6
|
badges: {
|
|
7
7
|
status: {
|
|
8
8
|
coverage: {
|
|
9
|
-
img:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
img:
|
|
10
|
+
`https://img.shields.io/codecov/c/${vcs.host}/${vcs.owner}/${vcs.name}/${vcs.defaultBranch}?logo=codecov${
|
|
11
|
+
apiAccessToken
|
|
12
|
+
? `&token=${(await fetchRepositoryDetails({
|
|
13
|
+
vcs,
|
|
14
|
+
apiAccessToken
|
|
15
|
+
})).image_token}`
|
|
16
|
+
: ''
|
|
17
|
+
}`,
|
|
14
18
|
link: `https://codecov.io/${vcs.host}/${vcs.owner}/${vcs.name}`,
|
|
15
19
|
text: 'Codecov'
|
|
16
20
|
}
|
|
@@ -11,18 +11,20 @@ describe('badge scaffolder', () => {
|
|
|
11
11
|
const vcsHost = any.fromList(['github', 'gitlab', 'bitbucket']);
|
|
12
12
|
const vcsOwner = any.word();
|
|
13
13
|
const vcsName = any.word();
|
|
14
|
+
const defaultBranch = any.word();
|
|
14
15
|
const vcs = {
|
|
15
16
|
...any.simpleObject(),
|
|
16
17
|
host: vcsHost,
|
|
17
18
|
owner: vcsOwner,
|
|
18
|
-
name: vcsName
|
|
19
|
+
name: vcsName,
|
|
20
|
+
defaultBranch
|
|
19
21
|
};
|
|
20
22
|
|
|
21
23
|
it('should scaffold badge details for supported vcs hosts', async () => {
|
|
22
24
|
const {badges} = await scaffold({vcs});
|
|
23
25
|
|
|
24
26
|
expect(badges.status.coverage).toEqual({
|
|
25
|
-
img: `https://img.shields.io/codecov/c/${vcsHost}/${vcsOwner}/${vcsName}
|
|
27
|
+
img: `https://img.shields.io/codecov/c/${vcsHost}/${vcsOwner}/${vcsName}/${defaultBranch}?logo=codecov`,
|
|
26
28
|
link: `https://codecov.io/${vcsHost}/${vcsOwner}/${vcsName}`,
|
|
27
29
|
text: 'Codecov'
|
|
28
30
|
});
|
|
@@ -35,8 +37,9 @@ describe('badge scaffolder', () => {
|
|
|
35
37
|
|
|
36
38
|
const {badges} = await scaffold({vcs, apiAccessToken});
|
|
37
39
|
|
|
38
|
-
expect(badges.status.coverage.img)
|
|
39
|
-
|
|
40
|
+
expect(badges.status.coverage.img).toEqual(
|
|
41
|
+
`https://img.shields.io/codecov/c/${vcsHost}/${vcsOwner}/${vcsName}/${defaultBranch}?logo=codecov&token=${token}`
|
|
42
|
+
);
|
|
40
43
|
});
|
|
41
44
|
|
|
42
45
|
it('should not define the badge if shields.io badge does not support the host', async () => {
|
package/src/lifter.js
CHANGED
|
@@ -5,9 +5,11 @@ import {scaffold as scaffoldBadge} from './badge/index.js';
|
|
|
5
5
|
import {lift as liftReporting} from './reporter/index.js';
|
|
6
6
|
|
|
7
7
|
export async function lift({projectRoot, packageManager, vcs}) {
|
|
8
|
+
const enhancedVcs = {...vcs, defaultBranch: 'master'};
|
|
9
|
+
|
|
8
10
|
const [reportingResults, badgeResults] = await Promise.all([
|
|
9
11
|
liftReporting({projectRoot, packageManager}),
|
|
10
|
-
scaffoldBadge({vcs}),
|
|
12
|
+
scaffoldBadge({vcs: enhancedVcs}),
|
|
11
13
|
scaffoldConfig({projectRoot})
|
|
12
14
|
]);
|
|
13
15
|
|
package/src/lifter.test.js
CHANGED
|
@@ -23,7 +23,7 @@ describe('lifter', () => {
|
|
|
23
23
|
const badgeResults = any.simpleObject();
|
|
24
24
|
const mergedResults = any.simpleObject();
|
|
25
25
|
when(liftReporting).calledWith({projectRoot, packageManager}).thenResolve(reportingResults);
|
|
26
|
-
when(scaffoldBadge).calledWith({vcs}).thenResolve(badgeResults);
|
|
26
|
+
when(scaffoldBadge).calledWith({vcs: {...vcs, defaultBranch: 'master'}}).thenResolve(badgeResults);
|
|
27
27
|
when(deepmerge.all).calledWith([reportingResults, badgeResults]).thenReturn(mergedResults);
|
|
28
28
|
|
|
29
29
|
expect(await lift({projectRoot, packageManager, vcs})).toEqual(mergedResults);
|
package/src/scaffolder.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import vcsHostIsSupportedByCodecov from './vcs-host-checker.js';
|
|
1
2
|
import {scaffold as scaffoldConfig} from './config/index.js';
|
|
2
3
|
|
|
3
4
|
export async function scaffold({projectRoot}) {
|
|
4
|
-
await
|
|
5
|
+
if (await vcsHostIsSupportedByCodecov({projectRoot})) {
|
|
6
|
+
await scaffoldConfig({projectRoot});
|
|
7
|
+
}
|
|
5
8
|
|
|
6
9
|
return {};
|
|
7
10
|
}
|
package/src/scaffolder.test.js
CHANGED
|
@@ -1,18 +1,32 @@
|
|
|
1
1
|
import {describe, expect, it, vi} from 'vitest';
|
|
2
|
+
import {when} from 'vitest-when';
|
|
2
3
|
import any from '@travi/any';
|
|
3
4
|
|
|
5
|
+
import vcsHostIsSupportedByCodecov from './vcs-host-checker.js';
|
|
4
6
|
import {scaffold as scaffoldConfig} from './config/index.js';
|
|
5
7
|
import {scaffold} from './scaffolder.js';
|
|
6
8
|
|
|
9
|
+
vi.mock('./vcs-host-checker.js');
|
|
7
10
|
vi.mock('./config/index.js');
|
|
8
11
|
|
|
9
12
|
describe('scaffolder', () => {
|
|
10
|
-
|
|
11
|
-
|
|
13
|
+
const projectRoot = any.string();
|
|
14
|
+
|
|
15
|
+
it('should configure codecov when the vcs host is supported by codecov', async () => {
|
|
16
|
+
when(vcsHostIsSupportedByCodecov).calledWith({projectRoot}).thenResolve(true);
|
|
12
17
|
|
|
13
18
|
const results = await scaffold({projectRoot});
|
|
14
19
|
|
|
15
20
|
expect(results).toEqual({});
|
|
16
21
|
expect(scaffoldConfig).toHaveBeenCalledWith({projectRoot});
|
|
17
22
|
});
|
|
23
|
+
|
|
24
|
+
it('should simply return empty results when the vcs host is not supported by codecov', async () => {
|
|
25
|
+
when(vcsHostIsSupportedByCodecov).calledWith({projectRoot}).thenResolve(false);
|
|
26
|
+
|
|
27
|
+
const results = await scaffold({projectRoot});
|
|
28
|
+
|
|
29
|
+
expect(results).toEqual({});
|
|
30
|
+
expect(scaffoldConfig).not.toHaveBeenCalled();
|
|
31
|
+
});
|
|
18
32
|
});
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {sourceHostedOnGitHub} from '@form8ion/github-core';
|
|
2
|
+
|
|
3
|
+
import {describe, it, vi, expect} from 'vitest';
|
|
4
|
+
import {when} from 'vitest-when';
|
|
5
|
+
import any from '@travi/any';
|
|
6
|
+
|
|
7
|
+
import vcsHostIsSupportedByCodecov from './vcs-host-checker.js';
|
|
8
|
+
|
|
9
|
+
vi.mock('@form8ion/github-core');
|
|
10
|
+
|
|
11
|
+
describe('Supported VCS Host Checker', () => {
|
|
12
|
+
const projectRoot = any.string();
|
|
13
|
+
|
|
14
|
+
it('should return `false` for unsupported VCS hosts', async () => {
|
|
15
|
+
when(sourceHostedOnGitHub).calledWith({projectRoot}).thenResolve(false);
|
|
16
|
+
|
|
17
|
+
expect(await vcsHostIsSupportedByCodecov({projectRoot})).toBe(false);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('should return `true` for GitHub', async () => {
|
|
21
|
+
when(sourceHostedOnGitHub).calledWith({projectRoot}).thenResolve(true);
|
|
22
|
+
|
|
23
|
+
expect(await vcsHostIsSupportedByCodecov({projectRoot})).toBe(true);
|
|
24
|
+
});
|
|
25
|
+
});
|