diff --git a/.github/bundlewatch.json b/.github/bundlewatch.json index 2231c42..7250f01 100644 --- a/.github/bundlewatch.json +++ b/.github/bundlewatch.json @@ -6,6 +6,10 @@ }, { "path": "./packages/*/lib/**/*.!(wasm)" + }, + { + "path": "./packages/*/__tests__/out/**/*.*", + "compression": "none" } ] } diff --git a/.github/workflows/stats.yml b/.github/workflows/stats.yml index 3c2b6cc..a4dff54 100644 --- a/.github/workflows/stats.yml +++ b/.github/workflows/stats.yml @@ -16,6 +16,8 @@ jobs: run: npm ci - name: Build run: npm run build + - name: Test + run: npm run test:sizes - uses: cyrilwanner/bundlewatch-comment-action@v1 with: github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index 545f446..29cb6ff 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,5 @@ lerna-debug.log* # project lib tmp +out target diff --git a/package-lock.json b/package-lock.json index 4a40bd9..5d61d2f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2621,15 +2621,6 @@ "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==", "dev": true }, - "axios": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz", - "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==", - "dev": true, - "requires": { - "follow-redirects": "1.5.10" - } - }, "babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", @@ -2790,165 +2781,6 @@ "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", "dev": true }, - "bundlewatch": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/bundlewatch/-/bundlewatch-0.2.7.tgz", - "integrity": "sha512-tTf6TZHowf2kqHMv9nk7ORDdyU8d4OCF5qjkm8jeZfY9hsOdoyvDq3xtPSw+I8eQJJhkdUvcIMp4Cd3GkUAsrA==", - "dev": true, - "requires": { - "axios": "^0.19.0", - "bytes": "^3.0.0", - "chalk": "^4.0.0", - "ci-env": "^1.14.0", - "commander": "^5.0.0", - "glob": "^7.1.2", - "gzip-size": "^5.1.1", - "jsonpack": "^1.1.5", - "lodash.merge": "^4.6.1", - "read-pkg-up": "^7.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "dependencies": { - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, "byline": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", @@ -2961,12 +2793,6 @@ "integrity": "sha512-/XuKeqWocKsYa/cBY1YbSJSWWqTi4cFgr9S6OyM7PBaPbr9zvNGwWP33vt0uqGhwDdN+y3yhbXVILEUpnwEWGw==", "dev": true }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, "cacache": { "version": "12.0.4", "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", @@ -3089,12 +2915,6 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, - "ci-env": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/ci-env/-/ci-env-1.16.0.tgz", - "integrity": "sha512-ucF9caQEX5wQlY449KZBIJPx91+kRg9tJ3tWSc4+KzrvC5KNiPm/3g1noP8VhdI3046+Vw3jLmKAD0fjCRJTmw==", - "dev": true - }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -5035,15 +4855,6 @@ "readable-stream": "^2.3.6" } }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "dev": true, - "requires": { - "debug": "=3.1.0" - } - }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -5681,16 +5492,6 @@ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", "dev": true }, - "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", - "dev": true, - "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" - } - }, "handlebars": { "version": "4.7.6", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.6.tgz", @@ -6466,12 +6267,6 @@ "graceful-fs": "^4.1.6" } }, - "jsonpack": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/jsonpack/-/jsonpack-1.1.5.tgz", - "integrity": "sha1-1CsNz9kaxY7zEQ+W0sWZQEw9wnw=", - "dev": true - }, "jsonparse": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", @@ -6606,12 +6401,6 @@ "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", "dev": true }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, "lodash.set": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", diff --git a/package.json b/package.json index deeb2bc..2aa0260 100644 --- a/package.json +++ b/package.json @@ -5,9 +5,9 @@ "build": "lerna run build --parallel", "lint": "lerna run lint --parallel", "test": "lerna run test --parallel", + "test:sizes": "lerna run test:sizes --parallel", "postinstall": "lerna bootstrap", - "lerna": "lerna", - "bundlewatch": "bundlewatch --config .github/bundlewatch.json" + "lerna": "lerna" }, "dependencies": {}, "devDependencies": { @@ -18,7 +18,6 @@ "@types/jest": "^25.2.2", "@typescript-eslint/eslint-plugin": "^2.33.0", "@typescript-eslint/parser": "^2.33.0", - "bundlewatch": "^0.2.7", "eslint": "^6.8.0", "eslint-config-airbnb-base": "^14.1.0", "eslint-config-prettier": "^6.11.0", diff --git a/packages/mozjpeg/__tests__/index.test.ts b/packages/mozjpeg/__tests__/index.test.ts index 65d18c0..edecda0 100644 --- a/packages/mozjpeg/__tests__/index.test.ts +++ b/packages/mozjpeg/__tests__/index.test.ts @@ -14,7 +14,7 @@ describe('mozjpeg', () => { initTestUtils(__dirname); }); - afterAll(cleanup); + afterAll(() => cleanup()); // test all image sizes ['tiny', 'small', 'medium', 'large'].forEach((size) => { diff --git a/packages/mozjpeg/package.json b/packages/mozjpeg/package.json index a7111c1..e3810e1 100644 --- a/packages/mozjpeg/package.json +++ b/packages/mozjpeg/package.json @@ -22,7 +22,8 @@ "lint": "tsc --noEmit && eslint . --ext .ts --ext .js", "lint:fix": "npm run lint -- --fix", "test": "jest", - "test:watch": "npm test -- --watch" + "test:watch": "npm test -- --watch", + "test:sizes": "KEEP_IMAGE_OUTPUT=true jest --testPathIgnorePatterns '.*performance.*'" }, "devDependencies": { "@babel/cli": "^7.8.4", diff --git a/packages/oxipng/__tests__/index.test.ts b/packages/oxipng/__tests__/index.test.ts index 4b077f9..a3b2362 100644 --- a/packages/oxipng/__tests__/index.test.ts +++ b/packages/oxipng/__tests__/index.test.ts @@ -13,7 +13,7 @@ describe('oxipng', () => { initTestUtils(__dirname); }); - afterAll(cleanup); + afterAll(() => cleanup()); // test all image sizes ['tiny', 'small', 'medium', 'large'].forEach((size) => { diff --git a/packages/oxipng/package.json b/packages/oxipng/package.json index ccac011..240e9c9 100644 --- a/packages/oxipng/package.json +++ b/packages/oxipng/package.json @@ -22,7 +22,8 @@ "lint": "tsc --noEmit && eslint . --ext .ts --ext .js", "lint:fix": "npm run lint -- --fix", "test": "jest", - "test:watch": "npm test -- --watch" + "test:watch": "npm test -- --watch", + "test:sizes": "KEEP_IMAGE_OUTPUT=true jest --testPathIgnorePatterns '.*performance.*'" }, "devDependencies": { "@babel/cli": "^7.8.4", diff --git a/packages/test-utils/README.md b/packages/test-utils/README.md index 4c4ea1e..e634f13 100644 --- a/packages/test-utils/README.md +++ b/packages/test-utils/README.md @@ -45,10 +45,14 @@ Initializes the test utils by configuring internal paths. Path to the test root. -### `cleanup(): void` +### `cleanup(force?): void` Cleans up tests by removing temporary files and directories. +##### `force?: boolean` + +If true, will forcefully remove the tmp directory, even if the `KEEP_IMAGE_OUTPUT` env variable is set. + ### `async getImage(fileName): { data: Buffer; info: OutputInfo }` Loads an image file and returns its buffer and information. diff --git a/packages/test-utils/src/index.ts b/packages/test-utils/src/index.ts index af99cef..f66feee 100644 --- a/packages/test-utils/src/index.ts +++ b/packages/test-utils/src/index.ts @@ -3,6 +3,7 @@ import fs from 'fs'; import sharp, { OutputInfo, Metadata } from 'sharp'; import rimraf from 'rimraf'; +const keepImageOutput = process.env.KEEP_IMAGE_OUTPUT === 'true'; let basePath: string; let tmpFolder: string; @@ -13,8 +14,8 @@ let tmpFolder: string; */ export const initTestUtils = (nextBasePath: string): void => { basePath = nextBasePath; - tmpFolder = path.resolve(basePath, 'tmp'); - cleanup(); + tmpFolder = path.resolve(basePath, keepImageOutput ? 'out' : 'tmp'); + cleanup(true); }; /** @@ -60,8 +61,10 @@ export const getFileSize = (fileName: string): number => { /** * Cleans up after the test */ -export const cleanup = (): void => { - rimraf.sync(tmpFolder); +export const cleanup = (force = false): void => { + if (!keepImageOutput || force) { + rimraf.sync(tmpFolder); + } }; /** @@ -80,5 +83,5 @@ export const writeTmpBuffer = (data: Buffer, fileName: string): string => { fs.writeFileSync(outputPath, data); - return `tmp/${fileName}`; + return `${keepImageOutput ? 'out' : 'tmp'}/${fileName}`; };