diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index a670af5c1ef4..77e4f9213a4a 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -96,7 +96,7 @@ clean (`devextreme-nx-infra-plugin:clean` preserving CSS and npm metadata) → l These instructions are based on actual repository analysis including: - Package.json scripts and configurations - GitHub Actions workflows -- Build system files (gulpfile.js, nx.json) +- Build system files (nx.json, project.json) - Project structure and file organization - CI/CD pipeline requirements diff --git a/.github/workflows/visual-tests-demos.yml b/.github/workflows/visual-tests-demos.yml index 10f7185ab952..923ccbd148a5 100644 --- a/.github/workflows/visual-tests-demos.yml +++ b/.github/workflows/visual-tests-demos.yml @@ -863,7 +863,7 @@ jobs: - name: Update bundles config working-directory: apps/demos - run: pnpm exec gulp update-config + run: pnpm run update-config - name: Create bundles dir run: mkdir -p apps/demos/bundles @@ -1000,7 +1000,7 @@ jobs: - name: Update bundles config working-directory: apps/demos - run: pnpm exec gulp update-config + run: pnpm run update-config - name: Create bundles dir run: mkdir -p apps/demos/bundles diff --git a/apps/demos/.gitignore b/apps/demos/.gitignore index a23262c47928..f6c9d4263dc9 100644 --- a/apps/demos/.gitignore +++ b/apps/demos/.gitignore @@ -22,7 +22,6 @@ bundles changed-files.json !.vscode/settings.json -gulpfile.js/.eslintrc.js shared/empty-file.js diff --git a/apps/demos/gulpfile.js/index.js b/apps/demos/gulpfile.js/index.js deleted file mode 100644 index 167923ee01e1..000000000000 --- a/apps/demos/gulpfile.js/index.js +++ /dev/null @@ -1,3 +0,0 @@ -exports.js = require('./js').js; -exports.bundles = require('./js').bundles; -exports.shared = require('./shared').shared; diff --git a/apps/demos/gulpfile.js/js.js b/apps/demos/gulpfile.js/js.js deleted file mode 100644 index 2eea68d0b1e5..000000000000 --- a/apps/demos/gulpfile.js/js.js +++ /dev/null @@ -1,40 +0,0 @@ -/* eslint-disable import/no-extraneous-dependencies */ -const { join } = require('path'); -const { task, parallel, series } = require('gulp'); - -const { init } = require('../utils/shared/config-helper'); -const createConfig = require('../utils/internal/create-config'); -const { copyJsSharedResources } = require('../utils/copy-shared-resources/copy'); -const { copyBundlesFolder, build } = require('../utils/bundle'); - -const demosDir = join(__dirname, '..', 'Demos'); - -function prepareJs(callback) { - init(); - copyJsSharedResources(callback); - createConfig.useBundles = false; - createConfig.run(demosDir); - callback(); -} - -exports.js = prepareJs; - -task('copy-bundles', (callback) => { - copyBundlesFolder(); - callback(); -}); - -task('update-config', (callback) => { - createConfig.useBundles = true; - createConfig.run(demosDir); - callback(); -}); - -exports.bundles = series( - 'copy-bundles', - parallel( - ['vue', 'angular', 'react'].map((framework) => Object.assign((callback) => { - build(framework).then(callback); - }, { displayName: `bundle-${framework}` })), - ), -); diff --git a/apps/demos/gulpfile.js/shared.js b/apps/demos/gulpfile.js/shared.js deleted file mode 100644 index 8e1c9eae4f09..000000000000 --- a/apps/demos/gulpfile.js/shared.js +++ /dev/null @@ -1,8 +0,0 @@ -/* eslint-disable import/no-extraneous-dependencies */ -const { series } = require('gulp'); -const { copyJsSharedResources, copyMvcSharedResources } = require('../utils/copy-shared-resources/copy'); - -exports.shared = series( - copyJsSharedResources, - copyMvcSharedResources, -); diff --git a/apps/demos/package.json b/apps/demos/package.json index 8f8bf636c60a..6f9c7af8d857 100644 --- a/apps/demos/package.json +++ b/apps/demos/package.json @@ -138,7 +138,6 @@ "express": "4.22.1", "glob": "11.1.0", "globals": "catalog:", - "gulp": "4.0.2", "jest": "29.7.0", "jest-environment-node": "29.7.0", "lodash": "4.18.1", @@ -171,8 +170,8 @@ "generate-tgz-packages": "node utils/create-tgz-packages.js", "generate-devextreme-angular-umd": "rollup -c ./rollup.devextreme-angular.umd.config.mjs --silent", "generate-external-bundles": "rollup -c ./rollup.external.bundles.config.mjs --silent", - "prepare-js": "gulp js && pnpm run generate-ng-umd && pnpm run generate-devextreme-angular-umd && pnpm run generate-external-bundles && npm run generate-tgz-packages", - "prepare-shared": "pnpm run prepare-ts && gulp shared", + "prepare-js": "node scripts/prepare-js-configs.js && pnpm run generate-ng-umd && pnpm run generate-devextreme-angular-umd && pnpm run generate-external-bundles && node utils/create-tgz-packages.js", + "prepare-shared": "node scripts/prepare-shared.js", "eslint": "eslint", "lint-html": "prettier --check .", "lint-js": "eslint . --ignore-pattern 'Demos'", @@ -187,8 +186,9 @@ "csp-check": "node utils/server/csp-check.js", "fix-lint": "prettier --write . && eslint --fix . && stylelint **/*.{css,vue} --fix", "prettier": "prettier", - "build-bundles": "gulp bundles", - "prepare-bundles": "pnpm run generate-devextreme-angular-umd && gulp bundles && gulp update-config", + "build-bundles": "node scripts/build-bundles.js", + "update-config": "node scripts/update-config.js", + "prepare-bundles": "pnpm run generate-devextreme-angular-umd && node scripts/build-bundles.js && pnpm run update-config", "convert-to-js": "ts-node ./utils/ts-to-js-converter/cli.ts", "create-typestat-cfg": "cd ./utils/internal && node ./create-typestat-cfg.js", "make-demos-bundle": "ts-node ./utils/create-bundles", diff --git a/apps/demos/project.json b/apps/demos/project.json index 92602e2a4ffe..25e093c51c49 100644 --- a/apps/demos/project.json +++ b/apps/demos/project.json @@ -49,20 +49,31 @@ ] }, "prepare-bundles": { - "executor": "nx:run-script", + "executor": "nx:run-commands", "options": { - "script": "prepare-bundles" + "commands": [ + "pnpm run generate-devextreme-angular-umd", + "node scripts/build-bundles.js", + "node scripts/update-config.js" + ], + "parallel": false, + "cwd": "{projectRoot}" }, "dependsOn": [ // "^build" uncomment me after migrating to PNPM ], "inputs": [ "default", - "{projectRoot}/gulpfile.js/**/*", + "{projectRoot}/scripts/**/*", + "{projectRoot}/utils/bundle/**/*", + "{projectRoot}/utils/internal/create-config.js", + "{projectRoot}/menuMeta.json", "{projectRoot}/rollup.devextreme-angular.umd.config.mjs" ], "outputs": [ - "{projectRoot}/bundles" + "{projectRoot}/bundles", + "{projectRoot}/Demos/**/config.js", + "{projectRoot}/Demos/**/tsconfig.json" ] }, "lint-js": { @@ -103,15 +114,25 @@ "commands": [ "pnpm nx build devextreme", "pnpm nx run-many --targets=pack --projects=devextreme-angular,devextreme-react,devextreme-vue --parallel", - "pnpm run prepare-js" + "node scripts/prepare-js-configs.js", + "pnpm run generate-ng-umd", + "pnpm run generate-devextreme-angular-umd", + "pnpm run generate-external-bundles", + "node utils/create-tgz-packages.js" ], "parallel": false, "cwd": "{projectRoot}" }, "inputs": [ "default", - "{projectRoot}/gulpfile.js/**/*", - "{projectRoot}/rollup.devextreme-angular.umd.config.mjs" + "{projectRoot}/scripts/**/*", + "{projectRoot}/utils/shared/config-helper.js", + "{projectRoot}/utils/internal/create-config.js", + "{projectRoot}/utils/copy-shared-resources/**/*", + "{projectRoot}/menuMeta.json", + "{projectRoot}/rollup.ng.umd.config.mjs", + "{projectRoot}/rollup.devextreme-angular.umd.config.mjs", + "{projectRoot}/rollup.external.bundles.config.mjs" ], "outputs": [ "{projectRoot}/Demos/**/config.js" diff --git a/apps/demos/scripts/build-bundles.js b/apps/demos/scripts/build-bundles.js new file mode 100644 index 000000000000..60e06d2530af --- /dev/null +++ b/apps/demos/scripts/build-bundles.js @@ -0,0 +1,22 @@ +const { copyBundlesFolder, build } = require('../utils/bundle'); + +async function main() { + copyBundlesFolder(); + console.log('copy-bundles: done'); + + const frameworks = ['vue', 'angular', 'react']; + await Promise.all( + frameworks.map(async (framework) => { + console.log(`bundle-${framework}: starting...`); + await build(framework); + console.log(`bundle-${framework}: done`); + }) + ); + + console.log('build-bundles: done'); +} + +main().catch((err) => { + console.error('build-bundles failed:', err); + process.exit(1); +}); diff --git a/apps/demos/scripts/prepare-js-configs.js b/apps/demos/scripts/prepare-js-configs.js new file mode 100644 index 000000000000..6035ff20cb95 --- /dev/null +++ b/apps/demos/scripts/prepare-js-configs.js @@ -0,0 +1,13 @@ +const { join } = require('path'); +const { init } = require('../utils/shared/config-helper'); +const createConfig = require('../utils/internal/create-config'); +const { copyJsSharedResources } = require('../utils/copy-shared-resources/copy'); + +const demosDir = join(__dirname, '..', 'Demos'); + +init(); +copyJsSharedResources(() => {}); +createConfig.useBundles = false; +createConfig.run(demosDir); + +console.log('prepare-js-configs: done'); diff --git a/apps/demos/scripts/prepare-shared.js b/apps/demos/scripts/prepare-shared.js new file mode 100644 index 000000000000..ef6fa911118c --- /dev/null +++ b/apps/demos/scripts/prepare-shared.js @@ -0,0 +1,7 @@ +const { copyJsSharedResources, copyMvcSharedResources } = require('../utils/copy-shared-resources/copy'); + +copyJsSharedResources(() => { + copyMvcSharedResources(() => { + console.log('prepare-shared: done'); + }); +}); diff --git a/apps/demos/scripts/update-config.js b/apps/demos/scripts/update-config.js new file mode 100644 index 000000000000..6379ee5fdc8a --- /dev/null +++ b/apps/demos/scripts/update-config.js @@ -0,0 +1,9 @@ +const { join } = require('path'); +const createConfig = require('../utils/internal/create-config'); + +const demosDir = join(__dirname, '..', 'Demos'); + +createConfig.useBundles = true; +createConfig.run(demosDir); + +console.log('update-config: done'); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 44fd83fc3948..f50bba7088ae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -740,9 +740,6 @@ importers: globals: specifier: 'catalog:' version: 15.14.0 - gulp: - specifier: 4.0.2 - version: 4.0.2 jest: specifier: 29.7.0 version: 29.7.0(@types/node@20.12.8)(babel-plugin-macros@3.1.0)(node-notifier@9.0.1)(ts-node@10.9.2(@swc/core@1.15.30(@swc/helpers@0.5.21))(@types/node@20.12.8)(typescript@5.9.3))