diff --git a/.github/workflows/bundler-friendly.yml b/.github/workflows/bundler-friendly.yml new file mode 100644 index 000000000000..a4faffafd7c4 --- /dev/null +++ b/.github/workflows/bundler-friendly.yml @@ -0,0 +1,61 @@ +name: Bundler_Friendly + +on: + schedule: + # “At 00:00 on Sunday.” https://crontab.guru/#0%C2%A00%C2%A0*%C2%A0*%C2%A00 + - cron: "0 0 * * 0" + pull_request: + paths: + # This workflow file + - ".github/workflows/bundler-friendly.yml" + +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + cache: "yarn" + + - name: Install Dependencies + run: yarn install --frozen-lockfile + + - name: Build Package + run: yarn build + + - name: Upload Artifact + uses: actions/upload-artifact@v2 + with: + name: dist + path: dist + + webpack: + name: Bundle Prettier with webpack + runs-on: ubuntu-latest + needs: [build] + defaults: + run: + working-directory: scripts/tools/bundle-prettier-with-webpack-test + steps: + - name: Checkout + uses: actions/checkout@v2.4.0 + + - name: Setup Node.js + uses: actions/setup-node@v2.5.1 + + - name: Download Artifact + uses: actions/download-artifact@v2 + with: + name: dist + path: dist + + - name: Install Dependencies + run: yarn install --frozen-lockfile + + - name: Test + run: yarn test diff --git a/.github/workflows/dev-package-test.yml b/.github/workflows/dev-package-test.yml index 7b4270853640..3da079dd4e4e 100644 --- a/.github/workflows/dev-package-test.yml +++ b/.github/workflows/dev-package-test.yml @@ -2,12 +2,14 @@ name: Dev_Package_Test on: schedule: - - cron: "0 0 * * 1" + # “At 00:00 on Sunday.” https://crontab.guru/#0%C2%A00%C2%A0*%C2%A0*%C2%A00 + - cron: "0 0 * * 0" pull_request: paths: - "package.json" - - ".github/workflows/dev-package-test.yml" - "yarn.lock" + # This workflow file + - ".github/workflows/dev-package-test.yml" jobs: test: diff --git a/.github/workflows/prod-test.yml b/.github/workflows/prod-test.yml index 7f2c531f35b4..affdbcb3da8c 100644 --- a/.github/workflows/prod-test.yml +++ b/.github/workflows/prod-test.yml @@ -169,29 +169,3 @@ jobs: - name: Run CLI on Node.js v0.10.48 run: node dist/bin-prettier --version 2>&1 >/dev/null | grep "prettier requires at least version 10.13.0 of Node, please upgrade" || exit 1 - - webpack-friendly: - name: Bundle Prettier with webpack - runs-on: ubuntu-latest - needs: [build] - defaults: - run: - working-directory: scripts/tools/bundle-prettier-with-webpack-test - steps: - - name: Checkout - uses: actions/checkout@v2.4.0 - - - name: Setup Node.js - uses: actions/setup-node@v2.5.1 - - - name: Download Artifact - uses: actions/download-artifact@v2 - with: - name: dist - path: dist - - - name: Install Dependencies - run: yarn install --frozen-lockfile - - - name: Test - run: yarn test diff --git a/scripts/tools/bundle-prettier-with-webpack-test/index.js b/scripts/tools/bundle-prettier-with-webpack-test/index.js index 2d5a53885c58..6b9f38e66338 100644 --- a/scripts/tools/bundle-prettier-with-webpack-test/index.js +++ b/scripts/tools/bundle-prettier-with-webpack-test/index.js @@ -1,6 +1,7 @@ import { fileURLToPath } from "node:url"; import path from "node:path"; import crypto from "node:crypto"; +import fs from "node:fs/promises"; import webpack from "webpack"; import { DIST_DIR } from "../../../scripts/utils/index.mjs"; @@ -32,24 +33,43 @@ const TEMPORARY_DIRECTORY = fileURLToPath(new URL("./.tmp", import.meta.url)); /* `require` in `parser-typescript.js`, #12338 */ (async () => { - const PROBLEMATIC_WARNING_MESSAGE = - "Critical dependency: require function is used in a way in which dependencies cannot be statically extracted"; - - const stats = await runWebpack({ - mode: "production", - entry: path.join(DIST_DIR, "parser-typescript.js"), - output: { - path: TEMPORARY_DIRECTORY, - filename: getRandomFileName("output"), - }, - }); - const result = stats.toJson(); - const { warnings } = result; - const error = warnings.find( - ({ message }) => message === PROBLEMATIC_WARNING_MESSAGE - ); - if (error) { - console.error(error); - throw new Error("Unexpected webpack warning."); + const files = await fs.readdir(DIST_DIR); + for (const file of files) { + if ( + !( + file.startsWith("parser-") || + file === "standalone.js" || + file === "doc.js" + ) + ) { + continue; + } + + console.log(`Testing ${file}: `); + + const stats = await runWebpack({ + mode: "production", + entry: path.join(DIST_DIR, file), + output: { + path: TEMPORARY_DIRECTORY, + filename: getRandomFileName(file), + }, + }); + const result = stats.toJson(); + const warnings = result.warnings.filter( + ({ message }) => + !( + message.startsWith("entrypoint size limit:") || + message.startsWith("asset size limit:") || + message.startsWith("webpack performance recommendations:") + ) + ); + + if (warnings.length > 0) { + console.log(warnings); + throw new Error("Unexpected webpack warning."); + } + + console.log("Passed."); } })();