Merge pull request #28491 from Pike/knip-workspace-config

Improve knip reports by using a single config with workspaces
This commit is contained in:
Fredrik Adelöw
2025-01-29 16:50:12 +01:00
committed by GitHub
127 changed files with 745 additions and 518 deletions
+11 -45
View File
@@ -1,79 +1,45 @@
# Knip report
## Unused dependencies (63)
## Unused dependencies (30)
| Name | Location | Severity |
| :----------------------------------------------- | :----------- | :------- |
| @backstage/plugin-techdocs-module-addons-contrib | package.json | error |
| @roadiehq/backstage-plugin-github-pull-requests | package.json | error |
| @backstage/plugin-catalog-unprocessed-entities | package.json | error |
| @roadiehq/backstage-plugin-github-insights | package.json | error |
| @oriflame/backstage-plugin-score-card | package.json | error |
| @backstage/plugin-newrelic-dashboard | package.json | error |
| @roadiehq/backstage-plugin-buildkite | package.json | error |
| @roadiehq/backstage-plugin-travis-ci | package.json | error |
| @backstage/plugin-kubernetes-cluster | package.json | error |
| @backstage/plugin-permission-react | package.json | error |
| @backstage/plugin-scaffolder-react | package.json | error |
| @backstage/plugin-entity-feedback | package.json | error |
| @backstage/plugin-linguist-common | package.json | error |
| @backstage/plugin-apache-airflow | package.json | error |
| @backstage/plugin-catalog-common | package.json | error |
| @backstage/plugin-github-actions | package.json | error |
| @backstage/plugin-octopus-deploy | package.json | error |
| @backstage/plugin-techdocs-react | package.json | error |
| @backstage/plugin-catalog-graph | package.json | error |
| @backstage/plugin-catalog-react | package.json | error |
| @backstage/plugin-code-coverage | package.json | error |
| @backstage/plugin-cost-insights | package.json | error |
| @backstage/plugin-notifications | package.json | error |
| @backstage/plugin-search-common | package.json | error |
| @backstage/plugin-tech-insights | package.json | error |
| @backstage/plugin-azure-devops | package.json | error |
| @backstage/plugin-gcp-projects | package.json | error |
| @backstage/plugin-search-react | package.json | error |
| @backstage/plugin-azure-sites | package.json | error |
| @backstage/plugin-cloudbuild | package.json | error |
| @backstage/plugin-kubernetes | package.json | error |
| @backstage/plugin-lighthouse | package.json | error |
| @backstage/integration-react | package.json | error |
| @backstage/plugin-auth-react | package.json | error |
| @backstage/plugin-scaffolder | package.json | error |
| @backstage/plugin-stackstorm | package.json | error |
| @backstage/plugin-dynatrace | package.json | error |
| @backstage/plugin-shortcuts | package.json | error |
| @backstage/plugin-airbrake | package.json | error |
| @backstage/frontend-app-api | package.json | error |
| @backstage/core-plugin-api | package.json | error |
| @backstage/plugin-api-docs | package.json | error |
| @backstage/plugin-devtools | package.json | error |
| @backstage/plugin-linguist | package.json | error |
| @backstage/plugin-newrelic | package.json | error |
| @backstage/plugin-playlist | package.json | error |
| @backstage/plugin-puppetdb | package.json | error |
| @circleci/backstage-plugin | package.json | error |
| @backstage/plugin-catalog | package.json | error |
| @backstage/plugin-explore | package.json | error |
| @backstage/plugin-jenkins | package.json | error |
| @backstage/plugin-rollbar | package.json | error |
| @backstage/plugin-signals | package.json | error |
| @backstage/catalog-model | package.json | error |
| @backstage/plugin-badges | package.json | error |
| @backstage/plugin-search | package.json | error |
| @backstage/plugin-sentry | package.json | error |
| @backstage/app-defaults | package.json | error |
| @backstage/plugin-kafka | package.json | error |
| app-next-example-plugin | package.json | error |
| @backstage/plugin-gocd | package.json | error |
| @backstage/plugin-todo | package.json | error |
| @backstage/plugin-adr | package.json | error |
| @backstage/plugin-app | package.json | error |
| @backstage/plugin-org | package.json | error |
| @backstage/config | package.json | error |
| @material-ui/lab | package.json | error |
| zen-observable | package.json | error |
| @octokit/rest | package.json | error |
| react-use | package.json | error |
| history | package.json | error |
| lodash | package.json | error |
## Unused devDependencies (6)
## Unused devDependencies (5)
| Name | Location | Severity |
| :-------------------------- | :----------- | :------- |
| @testing-library/user-event | package.json | error |
| @testing-library/react | package.json | error |
| @types/zen-observable | package.json | error |
| @testing-library/dom | package.json | error |
| @types/jquery | package.json | error |
+12 -20
View File
@@ -1,33 +1,25 @@
# Knip report
## Unused dependencies (14)
## Unused dependencies (8)
| Name | Location | Severity |
| :-------------------------------- | :----------- | :------- |
| @backstage/plugin-linguist-common | package.json | error |
| @backstage/plugin-search-common | package.json | error |
| @backstage/plugin-azure-sites | package.json | error |
| @backstage/frontend-app-api | package.json | error |
| @backstage/plugin-airbrake | package.json | error |
| vite-plugin-node-polyfills | package.json | error |
| @vitejs/plugin-react | package.json | error |
| @material-ui/lab | package.json | error |
| vite-plugin-html | package.json | error |
| zen-observable | package.json | error |
| @octokit/rest | package.json | error |
| react-router | package.json | error |
| history | package.json | error |
| vite | package.json | error |
| Name | Location | Severity |
| :------------------------------ | :----------- | :------- |
| @backstage/plugin-search-common | package.json | error |
| @backstage/plugin-auth-react | package.json | error |
| @backstage/frontend-app-api | package.json | error |
| @material-ui/lab | package.json | error |
| zen-observable | package.json | error |
| @octokit/rest | package.json | error |
| react-router | package.json | error |
| history | package.json | error |
## Unused devDependencies (5)
## Unused devDependencies (3)
| Name | Location | Severity |
| :-------------------------- | :----------- | :------- |
| @testing-library/user-event | package.json | error |
| @types/zen-observable | package.json | error |
| @testing-library/dom | package.json | error |
| @types/jquery | package.json | error |
| cross-env | package.json | error |
## Unlisted dependencies (1)
+45 -4
View File
@@ -1,8 +1,49 @@
# Knip report
## Unused dependencies (1)
## Unused dependencies (27)
| Name | Location | Severity |
| :---------------- | :----------- | :------- |
| winston-transport | package.json | error |
| Name | Location | Severity |
| :-------------------------------- | :----------- | :------- |
| @backstage/plugin-permission-node | package.json | error |
| @backstage/plugin-auth-node | package.json | error |
| @backstage/config-loader | package.json | error |
| @backstage/cli-common | package.json | error |
| @manypkg/get-packages | package.json | error |
| @backstage/config | package.json | error |
| winston-transport | package.json | error |
| @backstage/types | package.json | error |
| path-to-regexp | package.json | error |
| compression | package.json | error |
| triple-beam | package.json | error |
| node-forge | package.json | error |
| selfsigned | package.json | error |
| minimatch | package.json | error |
| stoppable | package.json | error |
| minimist | package.json | error |
| logform | package.json | error |
| winston | package.json | error |
| cookie | package.json | error |
| helmet | package.json | error |
| lodash | package.json | error |
| morgan | package.json | error |
| luxon | package.json | error |
| cors | package.json | error |
| jose | package.json | error |
| knex | package.json | error |
| uuid | package.json | error |
## Unused devDependencies (10)
| Name | Location | Severity |
| :-------------------------- | :----------- | :------- |
| @backstage/backend-defaults | package.json | error |
| @types/compression | package.json | error |
| @types/http-errors | package.json | error |
| @types/node-forge | package.json | error |
| @types/stoppable | package.json | error |
| @types/minimist | package.json | error |
| @types/morgan | package.json | error |
| http-errors | package.json | error |
| supertest | package.json | error |
| msw | package.json | error |
+20 -3
View File
@@ -1,8 +1,25 @@
# Knip report
## Unused dependencies (6)
| Name | Location | Severity |
| :-------------------- | :----------- | :------- |
| @backstage/cli-common | package.json | error |
| @azure/identity | package.json | error |
| better-sqlite3 | package.json | error |
| isomorphic-git | package.json | error |
| minimist | package.json | error |
| mysql2 | package.json | error |
## Unused devDependencies (1)
| Name | Location | Severity |
| :---------------------------- | :----------- | :------- |
| @backstage/backend-test-utils | package.json | error |
| Name | Location | Severity |
| :--------------- | :----------- | :------- |
| @types/stoppable | package.json | error |
## Referenced optional peerDependencies (1)
| Name | Location | Severity |
| :-------------------------------- | :----------- | :------- |
| @google-cloud/cloud-sql-connector | package.json | error |
@@ -1,9 +1,8 @@
# Knip report
## Unused dependencies (2)
## Unused dependencies (1)
| Name | Location | Severity |
| :------------------------------ | :----------- | :------- |
| @backstage/plugin-search-common | package.json | error |
| @backstage/errors | package.json | error |
+5 -4
View File
@@ -6,22 +6,23 @@
| :------------------------------------------------- | :----------- | :------- |
| @backstage/plugin-scaffolder-backend-module-gitlab | package.json | error |
| @backstage/plugin-scaffolder-backend-module-rails | package.json | error |
| @backstage/plugin-azure-sites-common | package.json | error |
| @backstage/plugin-tech-insights-node | package.json | error |
| @backstage/plugin-search-backend-module-catalog | package.json | error |
| @backstage/plugin-signals-backend | package.json | error |
| azure-devops-node-api | package.json | error |
| pg-connection-string | package.json | error |
| @gitbeaker/node | package.json | error |
| better-sqlite3 | package.json | error |
| @octokit/rest | package.json | error |
| example-app | package.json | error |
| dockerode | package.json | error |
| mysql2 | package.json | error |
| luxon | package.json | error |
| pg | package.json | error |
## Unused devDependencies (2)
## Unused devDependencies (3)
| Name | Location | Severity |
| :------------------------------- | :----------- | :------- |
| @types/express-serve-static-core | package.json | error |
| @types/dockerode | package.json | error |
| @types/luxon | package.json | error |
@@ -1,9 +1,8 @@
# Knip report
## Unused dependencies (2)
## Unused dependencies (1)
| Name | Location | Severity |
| :---------------------------- | :----------- | :------- |
| @backstage/backend-plugin-api | package.json | error |
| lodash | package.json | error |
@@ -1,2 +1,8 @@
# Knip report
## Unused dependencies (1)
| Name | Location | Severity |
| :-------------------------- | :----------- | :------- |
| @backstage/plugin-auth-node | package.json | error |
+9 -7
View File
@@ -1,11 +1,13 @@
# Knip report
## Unused dependencies (4)
## Unused dependencies (6)
| Name | Location | Severity |
| :------------- | :----------- | :------- |
| better-sqlite3 | package.json | error |
| mysql2 | package.json | error |
| msw | package.json | error |
| pg | package.json | error |
| Name | Location | Severity |
| :------------------------------- | :----------- | :------- |
| @types/express-serve-static-core | package.json | error |
| @backstage/plugin-auth-node | package.json | error |
| better-sqlite3 | package.json | error |
| @types/qs | package.json | error |
| mysql2 | package.json | error |
| pg | package.json | error |
+5 -2
View File
@@ -1,12 +1,15 @@
# Knip report
## Unused dependencies (5)
## Unused dependencies (8)
| Name | Location | Severity |
| :----------------------------------------------- | :----------- | :------- |
| @backstage/plugin-catalog-backend-module-openapi | package.json | error |
| @opentelemetry/auto-instrumentations-node | package.json | error |
| @backstage/plugin-search-backend-node | package.json | error |
| @backstage/plugin-permission-common | package.json | error |
| @opentelemetry/exporter-prometheus | package.json | error |
| @backstage/plugin-permission-node | package.json | error |
| @backstage/backend-tasks | package.json | error |
| @opentelemetry/sdk-node | package.json | error |
| example-app | package.json | error |
+59 -58
View File
@@ -1,68 +1,69 @@
# Knip report
## Unused dependencies (28)
## Unused dependencies (26)
| Name | Location | Severity |
| :------------------------------- | :----------- | :------- |
| @typescript-eslint/eslint-plugin | package.json | error |
| @spotify/eslint-config-react | package.json | error |
| eslint-formatter-friendly | package.json | error |
| eslint-plugin-deprecation | package.json | error |
| eslint-plugin-react-hooks | package.json | error |
| @sucrase/webpack-loader | package.json | error |
| eslint-plugin-jsx-a11y | package.json | error |
| jest-environment-jsdom | package.json | error |
| terser-webpack-plugin | package.json | error |
| eslint-plugin-react | package.json | error |
| @types/webpack-env | package.json | error |
| @svgr/plugin-svgo | package.json | error |
| @svgr/plugin-jsx | package.json | error |
| jest-css-modules | package.json | error |
| @swc/helpers | package.json | error |
| jest-runtime | package.json | error |
| cross-fetch | package.json | error |
| @svgr/core | package.json | error |
| @swc/core | package.json | error |
| @swc/jest | package.json | error |
| esbuild | package.json | error |
| pirates | package.json | error |
| postcss | package.json | error |
| process | package.json | error |
| sucrase | package.json | error |
| buffer | package.json | error |
| glob | package.json | error |
| util | package.json | error |
| Name | Location | Severity |
| :--------------------------- | :----------- | :------- |
| @spotify/eslint-config-react | package.json | error |
| eslint-formatter-friendly | package.json | error |
| eslint-plugin-react-hooks | package.json | error |
| @backstage/catalog-model | package.json | error |
| @octokit/graphql-schema | package.json | error |
| @sucrase/webpack-loader | package.json | error |
| @backstage/integration | package.json | error |
| eslint-plugin-jsx-a11y | package.json | error |
| jest-environment-jsdom | package.json | error |
| terser-webpack-plugin | package.json | error |
| eslint-plugin-react | package.json | error |
| @octokit/oauth-app | package.json | error |
| @svgr/plugin-svgo | package.json | error |
| @octokit/graphql | package.json | error |
| @svgr/plugin-jsx | package.json | error |
| jest-css-modules | package.json | error |
| git-url-parse | package.json | error |
| jest-runtime | package.json | error |
| cross-fetch | package.json | error |
| @svgr/core | package.json | error |
| @swc/jest | package.json | error |
| process | package.json | error |
| sucrase | package.json | error |
| buffer | package.json | error |
| glob | package.json | error |
| util | package.json | error |
## Unused devDependencies (11)
## Unused devDependencies (14)
| Name | Location | Severity |
| :-------------------------------------- | :----------- | :------- |
| @types/rollup-plugin-peer-deps-external | package.json | error |
| @backstage/backend-plugin-api | package.json | error |
| @types/terser-webpack-plugin | package.json | error |
| @backstage/core-components | package.json | error |
| @backstage/core-app-api | package.json | error |
| @backstage/dev-utils | package.json | error |
| @types/http-proxy | package.json | error |
| @types/svgo | package.json | error |
| @types/ejs | package.json | error |
| nodemon | package.json | error |
| del | package.json | error |
| Name | Location | Severity |
| :--------------------------------------------------- | :----------- | :------- |
| @backstage/plugin-auth-backend-module-guest-provider | package.json | error |
| @types/rollup-plugin-peer-deps-external | package.json | error |
| @backstage/plugin-auth-backend | package.json | error |
| @backstage/plugin-catalog-node | package.json | error |
| @types/terser-webpack-plugin | package.json | error |
| @backstage/core-components | package.json | error |
| @backstage/catalog-client | package.json | error |
| @backstage/core-app-api | package.json | error |
| @types/webpack-sources | package.json | error |
| @backstage/dev-utils | package.json | error |
| @types/http-proxy | package.json | error |
| @types/svgo | package.json | error |
| @types/ejs | package.json | error |
| del | package.json | error |
## Referenced optional peerDependencies (4)
## Referenced optional peerDependencies (3)
| Name | Location | Severity |
| :------------------------- | :----------- | :------- |
| vite-plugin-node-polyfills | package.json | error |
| @vitejs/plugin-react | package.json | error |
| vite-plugin-html | package.json | error |
| vite | package.json | error |
| Name | Location | Severity |
| :--------------------------- | :----------- | :------- |
| @rspack/plugin-react-refresh | package.json | error |
| @rspack/dev-server | package.json | error |
| @rspack/core | package.json | error |
## Unlisted dependencies (3)
## Unlisted dependencies (4)
| Name | Location | Severity |
| :----------------- | :----------------------------------------- | :------- |
| prettier | src/commands/migrate/packageLintConfigs.ts | error |
| react-dom/client | src/lib/bundler/hasReactDomClient.ts | error |
| react/package.json | src/lib/bundler/server.ts | error |
| Name | Location | Severity |
| :-------- | :----------------------------------- | :------- |
| react-dom | src/lib/bundler/hasReactDomClient.ts | error |
| react-dom | src/lib/bundler/config.ts | error |
| react | src/lib/bundler/config.ts | error |
| react | src/lib/bundler/server.ts | error |
+1 -3
View File
@@ -6,15 +6,13 @@
| :------ | :----------- | :------- |
| history | package.json | error |
## Unused devDependencies (7)
## Unused devDependencies (5)
| Name | Location | Severity |
| :--------------------------- | :----------- | :------- |
| @testing-library/react-hooks | package.json | error |
| @testing-library/user-event | package.json | error |
| react-router-dom-stable | package.json | error |
| react-router-dom-beta | package.json | error |
| @testing-library/dom | package.json | error |
| react-router-stable | package.json | error |
| react-router-beta | package.json | error |
+8
View File
@@ -1,2 +1,10 @@
# Knip report
## Unused devDependencies (3)
| Name | Location | Severity |
| :-------------------------- | :----------- | :------- |
| @backstage/frontend-app-api | package.json | error |
| @backstage/types | package.json | error |
| zod | package.json | error |
+5 -8
View File
@@ -1,20 +1,17 @@
# Knip report
## Unused dependencies (3)
## Unused dependencies (1)
| Name | Location | Severity |
| :------------ | :----------- | :------- |
| @date-io/core | package.json | error |
| linkifyjs | package.json | error |
| pluralize | package.json | error |
| Name | Location | Severity |
| :-------- | :----------- | :------- |
| pluralize | package.json | error |
## Unused devDependencies (4)
## Unused devDependencies (3)
| Name | Location | Severity |
| :---------------------- | :----------- | :------- |
| @backstage/app-defaults | package.json | error |
| @types/google-protobuf | package.json | error |
| @testing-library/dom | package.json | error |
| cross-fetch | package.json | error |
## Unlisted dependencies (3)
+1 -2
View File
@@ -1,9 +1,8 @@
# Knip report
## Unused devDependencies (2)
## Unused devDependencies (1)
| Name | Location | Severity |
| :-------------------------- | :----------- | :------- |
| @testing-library/user-event | package.json | error |
| @testing-library/dom | package.json | error |
+1 -2
View File
@@ -1,9 +1,8 @@
# Knip report
## Unused devDependencies (2)
## Unused devDependencies (1)
| Name | Location | Severity |
| :-------------------- | :----------- | :------- |
| @types/command-exists | package.json | error |
| nodemon | package.json | error |
-6
View File
@@ -1,8 +1,2 @@
# Knip report
## Unused devDependencies (1)
| Name | Location | Severity |
| :------------------- | :----------- | :------- |
| @testing-library/dom | package.json | error |
+4 -5
View File
@@ -1,9 +1,8 @@
# Knip report
## Unused devDependencies (2)
## Unused dependencies (1)
| Name | Location | Severity |
| :--------------- | :----------- | :------- |
| @types/puppeteer | package.json | error |
| nodemon | package.json | error |
| Name | Location | Severity |
| :-------------------- | :----------- | :------- |
| @backstage/create-app | package.json | error |
-7
View File
@@ -1,9 +1,2 @@
# Knip report
## Unlisted dependencies (2)
| Name | Location | Severity |
| :----- | :----------------------------- | :------- |
| estree | rules/no-undeclared-imports.js | error |
| estree | lib/visitImports.js | error |
+8
View File
@@ -1,2 +1,10 @@
# Knip report
## Unused dependencies (3)
| Name | Location | Severity |
| :--------------------------- | :----------- | :------- |
| @backstage/frontend-defaults | package.json | error |
| @backstage/errors | package.json | error |
| zod | package.json | error |
@@ -0,0 +1,2 @@
# Knip report
+20
View File
@@ -0,0 +1,20 @@
# Knip report
## Unused dependencies (3)
| Name | Location | Severity |
| :------------------------ | :----------- | :------- |
| @backstage/version-bridge | package.json | error |
| @backstage/types | package.json | error |
| zod | package.json | error |
## Unused devDependencies (5)
| Name | Location | Severity |
| :----------------------------- | :----------- | :------- |
| @backstage/frontend-test-utils | package.json | error |
| @backstage/frontend-app-api | package.json | error |
| @testing-library/jest-dom | package.json | error |
| @testing-library/react | package.json | error |
| @backstage/test-utils | package.json | error |
@@ -8,3 +8,9 @@
| @material-ui/core | package.json | error |
| lodash | package.json | error |
## Unused devDependencies (1)
| Name | Location | Severity |
| :-------------------------- | :----------- | :------- |
| @backstage/frontend-app-api | package.json | error |
@@ -1,2 +1,9 @@
# Knip report
## Unused dependencies (2)
| Name | Location | Severity |
| :------------------------ | :----------- | :------- |
| @backstage/version-bridge | package.json | error |
| zod | package.json | error |
+9
View File
@@ -0,0 +1,9 @@
# Knip report
## Unused devDependencies (2)
| Name | Location | Severity |
| :------------------------ | :----------- | :------- |
| @testing-library/jest-dom | package.json | error |
| @testing-library/react | package.json | error |
+1 -1
View File
@@ -5,8 +5,8 @@
| Name | Location | Severity |
| :---------------------------------- | :----------- | :------- |
| @openapitools/openapi-generator-cli | package.json | error |
| @stoplight/spectral-functions | package.json | error |
| @stoplight/spectral-runtime | package.json | error |
| @electric-sql/pglite | package.json | error |
| is-glob | package.json | error |
| glob | package.json | error |
+1
View File
@@ -74,6 +74,7 @@
"just-diff": "^6.0.2",
"knex": "^3.0.0",
"knex-pglite": "^0.11.0",
"knip": "^5.42.0",
"lodash": "^4.17.21",
"minimatch": "^9.0.0",
"p-limit": "^3.0.2",
@@ -18,10 +18,13 @@ import pLimit from 'p-limit';
import os from 'os';
import { relative as relativePath, resolve as resolvePath } from 'path';
import fs from 'fs-extra';
import type { KnipConfig } from 'knip';
import { createBinRunner } from '../util';
// Ignore this due to Knip error: Error: ENAMETOOLONG: name too long, scandir
const ignoredPackages = ['packages/techdocs-cli-embedded-app'];
// Ignore these
const ignoredPackages = [
'packages/canon', // storybook config is different from the rest
];
interface KnipExtractionOptions {
packageDirs: string[];
@@ -29,7 +32,7 @@ interface KnipExtractionOptions {
}
interface KnipConfigOptions {
packageDir: string;
knipConfigPath: string;
}
interface KnipPackageOptions {
@@ -55,41 +58,43 @@ function logKnipReportInstructions() {
console.log('');
}
async function generateKnipConfig({ packageDir }: KnipConfigOptions) {
const knipConfig = {
entry: [
'dev/index.{ts,tsx}',
'src/index.{ts,tsx}',
'src/alpha.{ts,tsx}',
'src/routes.ts',
'src/run.ts',
],
async function generateKnipConfig({ knipConfigPath }: KnipConfigOptions) {
const knipConfig: KnipConfig = {
workspaces: {
'.': {},
'{packages,plugins}/*': {
entry: ['dev/index.{ts,tsx}', 'src/index.{ts,tsx}'],
ignore: [
'.eslintrc.js',
'config.d.ts',
'knexfile.js',
'node_modules/**',
'dist/**',
'{fixtures,migrations,templates}/**',
'src/tests/transforms/__fixtures__/**', // cli packaging tests
],
},
},
jest: {
entry: ['src/setupTests.ts', '**/*.test.{ts,tsx}'],
entry: ['src/setupTests.ts', 'src/**/*.test.{ts,tsx}'],
},
storybook: { entry: 'src/components/**/*.stories.tsx' },
ignore: [
'.eslintrc.js',
'config.d.ts',
'knexfile.js',
'node_modules/**',
'dist/**',
'{fixtures,migrations,templates}/**',
],
ignoreDependencies: [
// these is reported as a referenced optional peerDependencies
// TBD: investigate what triggers these
'@types/react',
'@types/jest',
'@internal/.*', // internal packages are not published and inlined
'@backstage/cli', // everything depends on this for its package.json commands
'@backstage/theme', // this uses `declare module` in .d.ts so is implicitly used whenever extensions are needed
],
};
await fs.writeFile(
`${packageDir}/knip.json`,
JSON.stringify(knipConfig, null, 2),
);
await fs.writeFile(knipConfigPath, JSON.stringify(knipConfig, null, 2));
}
function cleanKnipConfig({ packageDir }: KnipConfigOptions) {
if (fs.existsSync(`${packageDir}/knip.json`)) {
fs.rmSync(`${packageDir}/knip.json`);
function cleanKnipConfig({ knipConfigPath }: KnipConfigOptions) {
if (fs.existsSync(knipConfigPath)) {
fs.rmSync(knipConfigPath);
}
}
@@ -105,13 +110,11 @@ async function handlePackage({
}
const fullDir = cliPaths.resolveTargetRoot(packageDir);
const reportPath = resolvePath(fullDir, 'knip-report.md');
const run = createBinRunner(fullDir, '');
const run = createBinRunner(cliPaths.targetRoot, '');
await generateKnipConfig({ packageDir: fullDir });
const report = await run(
let report = await run(
`${knipDir}/knip.js`,
`--directory ${fullDir}`, // Run in the package directory
`-W ${packageDir}`, // Run the desired workspace
'--config knip.json',
'--no-exit-code', // Removing this will end the process in case there are findings by knip
'--no-progress', // Remove unnecessary debugging from output
@@ -120,7 +123,17 @@ async function handlePackage({
'--reporter markdown',
);
cleanKnipConfig({ packageDir: fullDir });
// Adjust report paths to be relative to workspace
report = report.replaceAll(`| ${packageDir}/`, '| ');
// Adjust table separators
report = report.replaceAll(
new RegExp(`(\\| :-+ \\| :)-{${packageDir.length + 1}}`, 'g'),
(_, p1) => p1,
);
report = report.replaceAll(
new RegExp(` \\| Location {1,${packageDir.length + 2}}`, 'g'),
' | Location ',
);
const existingReport = await fs.readFile(reportPath, 'utf8').catch(error => {
if (error.code === 'ENOENT') {
@@ -160,8 +173,10 @@ export async function runKnipReports({
isLocalBuild,
}: KnipExtractionOptions) {
const knipDir = cliPaths.resolveTargetRoot('./node_modules/knip/bin/');
const knipConfigPath = cliPaths.resolveTargetRoot('./knip.json');
const limiter = pLimit(os.cpus().length);
await generateKnipConfig({ knipConfigPath });
try {
await Promise.all(
packageDirs.map(packageDir =>
@@ -170,15 +185,9 @@ export async function runKnipReports({
),
),
);
await cleanKnipConfig({ knipConfigPath });
} catch (e) {
console.log(
`Error occurred during knip reporting: ${e}, cleaning knip configs`,
);
packageDirs.map(packageDir => {
const fullDir = cliPaths.resolveTargetRoot(packageDir);
cleanKnipConfig({ packageDir: fullDir });
});
console.log(`Error occurred during knip reporting: ${e}`);
throw e;
}
}
+2 -1
View File
@@ -35,11 +35,12 @@ export function createBinRunner(cwd: string, path: string) {
{
cwd,
shell: true,
timeout: 60000,
timeout: 3 * 60 * 1000,
maxBuffer: 1024 * 1024,
},
(err, stdout, stderr) => {
if (err) {
console.log('err', err);
reject(new Error(`${err.message}\n${stderr}`));
} else if (stderr) {
reject(new Error(`Command printed error output: ${stderr}`));
@@ -0,0 +1,2 @@
# Knip report
@@ -1,21 +1,17 @@
# Knip report
## Unused dependencies (4)
## Unused dependencies (2)
| Name | Location |
|:----------------------|:-------------|
| history | package.json |
| react-use | package.json |
| @backstage/theme | package.json |
| @backstage/test-utils | package.json |
| Name | Location | Severity |
| :-------- | :----------- | :------- |
| react-use | package.json | error |
| history | package.json | error |
## Unused devDependencies (5)
## Unused devDependencies (3)
| Name | Location |
|:----------------------------|:-------------|
| cross-env | package.json |
| @testing-library/dom | package.json |
| @testing-library/react | package.json |
| @testing-library/jest-dom | package.json |
| @testing-library/user-event | package.json |
| Name | Location | Severity |
| :-------------------------- | :----------- | :------- |
| @testing-library/user-event | package.json | error |
| @testing-library/dom | package.json | error |
| cross-env | package.json | error |
+4 -4
View File
@@ -8,8 +8,8 @@
## Unused devDependencies (2)
| Name | Location | Severity |
| :----------------- | :----------- | :------- |
| @types/webpack-env | package.json | error |
| nodemon | package.json | error |
| Name | Location | Severity |
| :------------------------ | :----------- | :------- |
| techdocs-cli-embedded-app | package.json | error |
| @types/webpack-env | package.json | error |
-6
View File
@@ -1,8 +1,2 @@
# Knip report
## Unused dependencies (1)
| Name | Location | Severity |
| :---------------- | :----------- | :------- |
| @material-ui/core | package.json | error |
+4 -5
View File
@@ -1,9 +1,8 @@
# Knip report
## Unused dependencies (2)
## Unused devDependencies (1)
| Name | Location | Severity |
| :-------------- | :----------- | :------- |
| @emotion/styled | package.json | error |
| @emotion/react | package.json | error |
| Name | Location | Severity |
| :--------------- | :----------- | :------- |
| react-router-dom | package.json | error |
+6
View File
@@ -1,2 +1,8 @@
# Knip report
## Unused devDependencies (1)
| Name | Location | Severity |
| :--------------- | :----------- | :------- |
| react-router-dom | package.json | error |
+2
View File
@@ -0,0 +1,2 @@
# Knip report