diff --git a/.github/workflows/ci-loaders.yml b/.github/workflows/ci-loaders.yml deleted file mode 100644 index 76afd0b86..000000000 --- a/.github/workflows/ci-loaders.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Continuous Integration (Loaders) - -on: [pull_request] - -jobs: - build: - runs-on: ubuntu-22.04 - - strategy: - matrix: - node: [22, 24] - - steps: - - uses: actions/checkout@v4 - - name: Install Chromium Library Dependencies - run: | - sh ./.github/workflows/chromium-lib-install.sh - - name: Use Node.js ${{ matrix.node }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node }} - - uses: pnpm/action-setup@v4 - name: Install pnpm - with: - version: latest - - name: Installing project dependencies - run: | - yarn install --frozen-lockfile - - name: Test - run: | - yarn test:loaders diff --git a/.github/workflows/ci-win-loaders.yml b/.github/workflows/ci-win-loaders.yml index 9a15133d2..2bf49db52 100644 --- a/.github/workflows/ci-win-loaders.yml +++ b/.github/workflows/ci-win-loaders.yml @@ -11,18 +11,19 @@ jobs: node: [22] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Use Node.js ${{ matrix.node }} - uses: actions/setup-node@v4 + uses: actions/setup-node@v6 with: node-version: ${{ matrix.node }} - - uses: pnpm/action-setup@v4 - name: Install pnpm - with: - version: latest + cache: "yarn" - name: Installing project dependencies run: | yarn install --frozen-lockfile --network-timeout 1000000 - name: Test run: | yarn test:loaders:win + - name: Test fixed + if: ${{ always() }} + run: | + yarn test:loaders:win2 diff --git a/.github/workflows/ci-win.yml b/.github/workflows/ci-win.yml deleted file mode 100644 index bac8b1586..000000000 --- a/.github/workflows/ci-win.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Continuous Integration Windows - -on: [pull_request] - -jobs: - build: - runs-on: windows-latest - - strategy: - matrix: - node: [22] - - steps: - - uses: actions/checkout@v4 - - name: Use Node.js ${{ matrix.node }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node }} - - uses: pnpm/action-setup@v4 - name: Install pnpm - with: - version: latest - - name: Installing project dependencies - run: | - yarn install --frozen-lockfile --network-timeout 1000000 - - name: Test - run: | - yarn test - - name: Build - run: | - yarn clean && yarn build diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 5ed1f864b..000000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: Continuous Integration - -on: [pull_request] - -jobs: - build: - runs-on: ubuntu-22.04 - - strategy: - matrix: - node: [22, 24] - - steps: - - uses: actions/checkout@v4 - - name: Install Chromium Library Dependencies - run: | - sh ./.github/workflows/chromium-lib-install.sh - - name: Use Node.js ${{ matrix.node }} - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node }} - - uses: pnpm/action-setup@v4 - name: Install pnpm - with: - version: latest - - name: Installing project dependencies - run: | - yarn install --frozen-lockfile - - name: Lint - run: | - yarn lint - - name: Check Formatting - run: | - yarn run format:check - - name: Test - run: | - yarn test - - name: Build - run: | - yarn clean && yarn build - - name: Commitlint Check - if: github.event_name == 'push' - run: yarn commit:lint diff --git a/.husky/commit-msg b/.husky/commit-msg deleted file mode 100644 index f0158c601..000000000 --- a/.husky/commit-msg +++ /dev/null @@ -1 +0,0 @@ -yarn commit:edit \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100644 index 1a1f1f060..000000000 --- a/.husky/pre-commit +++ /dev/null @@ -1 +0,0 @@ -yarn lint-staged \ No newline at end of file diff --git a/.mocharc.cjs b/.mocharc.cjs index 299c579d5..5651338d0 100644 --- a/.mocharc.cjs +++ b/.mocharc.cjs @@ -1,3 +1,5 @@ module.exports = { timeout: 90000, + // bail: true, + // reporter: "min", }; diff --git a/package.json b/package.json index 96f1ef357..996aae1d9 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "author": "Owen Buckley ", "license": "MIT", "type": "module", + "packageManager": "yarn@1.22.22", "workspaces": { "packages": [ "packages/*", @@ -21,7 +22,8 @@ "dev": "yarn workspace www dev", "test": "cross-env BROWSERSLIST_IGNORE_OLD_DATA=true __GWD_ROLLUP_MODE__=strict NODE_NO_WARNINGS=1 c8 mocha --exclude \"./packages/**/test/cases/loaders-*/**\" \"./packages/**/**/*.spec.js\"", "test:loaders": "cross-env BROWSERSLIST_IGNORE_OLD_DATA=true __GWD_ROLLUP_MODE__=strict NODE_NO_WARNINGS=1 node --import $(pwd)/test/test-register.js ./node_modules/mocha/bin/mocha \"./packages/**/**/*.spec.js\"", - "test:loaders:win": "cross-env BROWSERSLIST_IGNORE_OLD_DATA=true __GWD_ROLLUP_MODE__=strict NODE_NO_WARNINGS=1 node --import file:\\\\%cd%\\test\\test-register.js ./node_modules/mocha/bin/mocha --exclude \"./packages/init/test/cases/**\" \"./packages/**/**/*.spec.js\"", + "test:loaders:win": "cross-env BROWSERSLIST_IGNORE_OLD_DATA=true __GWD_ROLLUP_MODE__=strict NODE_NO_WARNINGS=1 node --import file:\\\\%cd%\\test\\test-register.js ./node_modules/mocha/bin/mocha --exclude \"./packages/init/test/cases/**\" \"./packages/cli/test/cases/build.default.import-node-modules/build.default.import-node-modules.spec.js\"", + "test:loaders:win2": "cross-env BROWSERSLIST_IGNORE_OLD_DATA=true __GWD_ROLLUP_MODE__=strict NODE_NO_WARNINGS=1 node --import file:\\\\%cd%\\test\\test-register.js ./node_modules/mocha/bin/mocha \"./packages/cli/test/cases/build.default.import-node-modules-copy/build.default.import-node-modules.spec.js\"", "test:tdd": "yarn test --watch", "lint": "yarn run lint:ls && yarn run lint:js && yarn run lint:types", "lint:js": "eslint", diff --git a/packages/cli/test/cases/build.default.import-node-modules-copy/build.default.import-node-modules.spec.js b/packages/cli/test/cases/build.default.import-node-modules-copy/build.default.import-node-modules.spec.js new file mode 100644 index 000000000..b955dda12 --- /dev/null +++ b/packages/cli/test/cases/build.default.import-node-modules-copy/build.default.import-node-modules.spec.js @@ -0,0 +1,230 @@ +/* + * Use Case + * Run Greenwood with and loading different references to node_module types to ensure proper support. + * Sets prerender: true to validate the functionality. + * + * User Result + * Should generate a bare bones Greenwood build without erroring. + * + * User Command + * greenwood build + * + * User Config + * None + * + * User Workspace + * src/ + * pages/ + * index.html + * scripts/ + * main.js + * styles/ + * theme.css + */ +import chai from "chai"; +import fs from "node:fs"; +import glob from "glob-promise"; +import { JSDOM } from "jsdom"; +import path from "node:path"; +import { + getOutputTeardownFiles, + getDependencyFiles, + HASH_REGEX, +} from "../../../../../test/utils.js"; +import { Runner } from "gallinago"; +import { fileURLToPath } from "node:url"; + +const expect = chai.expect; + +describe("Build Greenwood With FIXED: ", function () { + const LABEL = "Importing packages from node modules FIXED"; + const cliPath = path.join(process.cwd(), "packages/cli/src/bin.js"); + const outputPath = fileURLToPath(new URL(".", import.meta.url)); + let runner; + + before(function () { + this.context = { + publicDir: path.join(outputPath, "public"), + }; + runner = new Runner(); + }); + + describe(LABEL, function () { + let dom; + + before(async function () { + // this package has a known issue with import.meta.resolve + // in that it has no main, module, or exports so it has to be hoisted + // at least for this current version, as well as for testing relative ../node_modules references + // https://unpkg.com/browse/font-awesome@4.7.0/package.json + // https://github.com/FortAwesome/Font-Awesome/pull/19041 + const fontAwesomePackageJson = await getDependencyFiles( + `${process.cwd()}/node_modules/font-awesome/package.json`, + `${outputPath}/node_modules/font-awesome/`, + ); + const fontAwesomeCssFiles = await getDependencyFiles( + `${process.cwd()}/node_modules/font-awesome/css/*`, + `${outputPath}/node_modules/font-awesome/css/`, + ); + const fontAwesomeFontFiles = await getDependencyFiles( + `${process.cwd()}/node_modules/font-awesome/fonts/*`, + `${outputPath}/node_modules/font-awesome/fonts/`, + ); + + try { + await runner.setup(outputPath, [ + ...fontAwesomePackageJson, + ...fontAwesomeCssFiles, + ...fontAwesomeFontFiles, + ]); + } catch (error) { + console.error("Caught busy error in setup", JSON.stringify(error, null, 2)); + throw error; + } + + await new Promise((resolve) => setTimeout(resolve, 3000)); + + try { + await runner.runCommand(cliPath, "build"); + } catch (error) { + console.error("Caught busy error in build", JSON.stringify(error, null, 2)); + throw error; + } + + dom = await JSDOM.fromFile(path.resolve(this.context.publicDir, "index.html")); + }); + + describe(' + + + + + + diff --git a/packages/cli/test/cases/build.default.import-node-modules-copy/src/scripts/main.js b/packages/cli/test/cases/build.default.import-node-modules-copy/src/scripts/main.js new file mode 100644 index 000000000..45baff541 --- /dev/null +++ b/packages/cli/test/cases/build.default.import-node-modules-copy/src/scripts/main.js @@ -0,0 +1,17 @@ +import { LitElement } from "lit"; +import { defaults } from "lodash-es"; +import { lazyReducerEnhancer } from "pwa-helpers"; +import { createStore } from "redux"; + +try { + document.getElementsByClassName("output-lit")[0].innerHTML = + `import from lit ${btoa(LitElement.prototype).slice(0, 16)}`; + document.getElementsByClassName("output-lodash")[0].innerHTML = + `import from lodash-es ${JSON.stringify(defaults({ a: 1 }, { b: 2 }, { a: 3 }))}`; + document.getElementsByClassName("output-pwa")[0].innerHTML = + `import from pwa-helpers ${btoa(lazyReducerEnhancer).slice(0, 16)}`; + document.getElementsByClassName("output-redux")[0].innerHTML = + `import from redux ${btoa(createStore).slice(0, 16)}`; +} catch (e) { + document.getElementsByClassName("output-error")[0].innerHTML = e; +} diff --git a/packages/cli/test/cases/build.default.import-node-modules-copy/src/styles/theme.css b/packages/cli/test/cases/build.default.import-node-modules-copy/src/styles/theme.css new file mode 100644 index 000000000..fb4cf5905 --- /dev/null +++ b/packages/cli/test/cases/build.default.import-node-modules-copy/src/styles/theme.css @@ -0,0 +1,2 @@ +@import url("/node_modules/@spectrum-web-components/styles/all-large-dark.css"); +@import url("../../node_modules/font-awesome/css/font-awesome.css"); diff --git a/packages/cli/test/cases/build.default.import-node-modules/build.default.import-node-modules.spec.js b/packages/cli/test/cases/build.default.import-node-modules/build.default.import-node-modules.spec.js index f7dd58c34..59a4bcef0 100644 --- a/packages/cli/test/cases/build.default.import-node-modules/build.default.import-node-modules.spec.js +++ b/packages/cli/test/cases/build.default.import-node-modules/build.default.import-node-modules.spec.js @@ -71,12 +71,23 @@ describe("Build Greenwood With: ", function () { `${outputPath}/node_modules/font-awesome/fonts/`, ); - await runner.setup(outputPath, [ - ...fontAwesomePackageJson, - ...fontAwesomeCssFiles, - ...fontAwesomeFontFiles, - ]); - await runner.runCommand(cliPath, "build"); + try { + await runner.setup(outputPath, [ + ...fontAwesomePackageJson, + ...fontAwesomeCssFiles, + ...fontAwesomeFontFiles, + ]); + } catch (error) { + console.error("Caught busy error in setup", JSON.stringify(error, null, 2)); + throw error; + } + + try { + await runner.runCommand(cliPath, "build"); + } catch (error) { + console.error("Caught busy error in build", JSON.stringify(error, null, 2)); + throw error; + } dom = await JSDOM.fromFile(path.resolve(this.context.publicDir, "index.html")); });