From cadcce5e172fcedff7b4b672c7b229eebed41380 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Thu, 24 Sep 2026 16:01:23 +0800 Subject: [PATCH] chore: move frontend workspace into packages module --- .github/workflows/cd.yaml | 4 +-- .github/workflows/ci.yaml | 14 +++++--- .github/workflows/release-npm.yaml | 4 +++ .husky/pre-commit | 2 +- build.gradle | 33 +++++++++---------- biome.json => packages/biome.json | 5 +-- packages/build.gradle | 32 ++++++++++++++++++ packages/comment-widget/tests/README.md | 12 +++---- packages/example/tsconfig.json | 2 +- package.json => packages/package.json | 4 +-- pnpm-lock.yaml => packages/pnpm-lock.yaml | 21 ++++-------- .../pnpm-workspace.yaml | 5 ++- tsconfig.json => packages/tsconfig.json | 0 packages/ui/vite.config.mjs | 2 +- packages/widget/rslib.config.mjs | 4 +-- packages/widget/tsconfig.json | 2 +- settings.gradle | 1 + 17 files changed, 92 insertions(+), 55 deletions(-) rename biome.json => packages/biome.json (89%) create mode 100644 packages/build.gradle rename package.json => packages/package.json (89%) rename pnpm-lock.yaml => packages/pnpm-lock.yaml (99%) rename pnpm-workspace.yaml => packages/pnpm-workspace.yaml (66%) rename tsconfig.json => packages/tsconfig.json (100%) diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml index 6cb0798f..fd36a502 100644 --- a/.github/workflows/cd.yaml +++ b/.github/workflows/cd.yaml @@ -15,6 +15,6 @@ jobs: with: node-version: "24" java-version: "21" - pnpm-version: "" + pnpm-version: "12.4.2" app-id: app-YXyaD - ui-path: "." + ui-path: "packages" diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ef4709d7..a44a0c1a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -14,18 +14,24 @@ jobs: steps: - uses: actions/checkout@v6 - uses: pnpm/action-setup@v5 + with: + package_json_file: packages/package.json - uses: actions/setup-node@v6 with: node-version: "24" cache: pnpm + cache-dependency-path: packages/pnpm-lock.yaml - run: pnpm install --frozen-lockfile - - run: pnpm -C packages/comment-widget exec playwright install --with-deps chromium - - run: pnpm -C packages/comment-widget test + working-directory: packages + - run: pnpm -C comment-widget exec playwright install --with-deps chromium + working-directory: packages + - run: pnpm -C comment-widget test + working-directory: packages ci: uses: halo-sigs/reusable-workflows/.github/workflows/plugin-ci.yaml@v4 with: node-version: "24" java-version: "21" - pnpm-version: "" - ui-path: "." + pnpm-version: "12.4.2" + ui-path: "packages" diff --git a/.github/workflows/release-npm.yaml b/.github/workflows/release-npm.yaml index 5b3de739..cc7b6c27 100644 --- a/.github/workflows/release-npm.yaml +++ b/.github/workflows/release-npm.yaml @@ -21,8 +21,12 @@ jobs: node-version: "24" registry-url: https://registry.npmjs.org/ - uses: pnpm/action-setup@v5 + with: + package_json_file: packages/package.json - run: pnpm install --frozen-lockfile + working-directory: packages - name: Upgrade npm run: npm i -g npm@latest - name: Publish to NPM run: pnpm run publish + working-directory: packages diff --git a/.husky/pre-commit b/.husky/pre-commit index c27d8893..52bd0f18 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1 +1 @@ -lint-staged +pnpm -C packages exec lint-staged diff --git a/build.gradle b/build.gradle index 1b94bf4d..74e76132 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ plugins { id 'java' id "io.freefair.lombok" version "9.2.0" - id "com.github.node-gradle.node" version "7.1.0" + id "com.github.node-gradle.node" version "7.1.0" apply false id "run.halo.plugin.devtools" version "0.8.0" } @@ -37,25 +37,24 @@ test { useJUnitPlatform() } -node { - pnpmVersion = '12.4.2' - nodeProjectDir = file("${project.projectDir}") -} - -tasks.register('buildFrontend', PnpmTask) { - args = ['build'] - dependsOn('installDepsForUI') -} +sourceSets.main.resources.exclude 'ui/**', 'static/**' -tasks.register('installDepsForUI', PnpmTask) { - args = ['install'] +tasks.named('processResources', Copy) { + dependsOn project(':packages').tasks.named('pnpmBuild') + from(project(':packages').layout.projectDirectory.dir('ui/build/dist')) { + into 'ui' + } + from(project(':packages').layout.projectDirectory.dir('widget/build/dist')) { + into 'static' + } + doFirst { + delete layout.buildDirectory.dir('resources/main/ui'), + layout.buildDirectory.dir('resources/main/static') + } } -build { - // build frontend before build - tasks.named('compileJava').configure { - dependsOn('buildFrontend') - } +tasks.named('clean') { + dependsOn project(':packages').tasks.named('clean') } halo { diff --git a/biome.json b/packages/biome.json similarity index 89% rename from biome.json rename to packages/biome.json index 333f702d..40daab7c 100644 --- a/biome.json +++ b/packages/biome.json @@ -3,11 +3,12 @@ "vcs": { "enabled": true, "clientKind": "git", - "useIgnoreFile": true + "useIgnoreFile": true, + "root": "../" }, "files": { "ignoreUnknown": false, - "includes": ["**", "!**/generated", "!src/main/resources"] + "includes": ["**", "!**/generated"] }, "formatter": { "enabled": true, diff --git a/packages/build.gradle b/packages/build.gradle new file mode 100644 index 00000000..9b8d9079 --- /dev/null +++ b/packages/build.gradle @@ -0,0 +1,32 @@ +plugins { + id 'base' + id 'com.github.node-gradle.node' +} + +node { + pnpmVersion = '12.4.2' + nodeProjectDir = projectDir +} + +tasks.register('pnpmBuild', PnpmTask) { + group = 'build' + args = ['run', 'build'] + dependsOn tasks.named('pnpmInstall') + inputs.files(fileTree(projectDir) { + include 'comment-widget/**', 'ui/**', 'widget/**' + include 'package.json', 'pnpm-lock.yaml', 'pnpm-workspace.yaml', 'tsconfig.json' + exclude '**/node_modules/**', '**/dist/**', '**/build/**', '**/coverage/**' + }) + inputs.file(rootProject.layout.projectDirectory.file('src/main/resources/plugin.yaml')) + outputs.dir('comment-widget/dist') + outputs.dir('ui/build/dist') + outputs.dir('widget/build/dist') +} + +tasks.named('assemble') { + dependsOn tasks.named('pnpmBuild') +} + +tasks.named('clean') { + delete 'comment-widget/dist', 'ui/build', 'widget/build' +} diff --git a/packages/comment-widget/tests/README.md b/packages/comment-widget/tests/README.md index 94cc55ff..02fbf274 100644 --- a/packages/comment-widget/tests/README.md +++ b/packages/comment-widget/tests/README.md @@ -1,11 +1,11 @@ # Tests -Run from the repository root: +Run from the `packages` directory: ```sh pnpm install -pnpm -C packages/comment-widget exec playwright install chromium -pnpm -C packages/comment-widget test +pnpm -C comment-widget exec playwright install chromium +pnpm -C comment-widget test ``` Vitest runs unit tests in Node and `*.browser.test.js` in headless Chromium. @@ -14,9 +14,9 @@ Browser tests import the widget source directly; no build or manual HTTP server To run only one project: ```sh -pnpm -C packages/comment-widget test --project unit -pnpm -C packages/comment-widget test --project browser +pnpm -C comment-widget test --project unit +pnpm -C comment-widget test --project browser ``` On Linux CI, install browser system dependencies with -`pnpm -C packages/comment-widget exec playwright install --with-deps chromium`. +`pnpm -C comment-widget exec playwright install --with-deps chromium`. diff --git a/packages/example/tsconfig.json b/packages/example/tsconfig.json index e7554d67..01796b9d 100644 --- a/packages/example/tsconfig.json +++ b/packages/example/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", + "extends": "../tsconfig.json", "include": ["env.d.ts", "src"] } diff --git a/package.json b/packages/package.json similarity index 89% rename from package.json rename to packages/package.json index 1b883823..9c557306 100644 --- a/package.json +++ b/packages/package.json @@ -14,8 +14,8 @@ "scripts": { "build": "pnpm -r run build", "check": "biome check --write", - "example:dev": "pnpm -C packages/example dev", - "prepare": "husky", + "example:dev": "pnpm -C example dev", + "prepare": "cd .. && packages/node_modules/.bin/husky", "publish": "pnpm -r publish --access public --no-git-checks" }, "lint-staged": { diff --git a/pnpm-lock.yaml b/packages/pnpm-lock.yaml similarity index 99% rename from pnpm-lock.yaml rename to packages/pnpm-lock.yaml index 6b02128e..860e25e8 100644 --- a/pnpm-lock.yaml +++ b/packages/pnpm-lock.yaml @@ -195,7 +195,7 @@ importers: specifier: ^5.0.3 version: 5.0.3(@rspack/core@1.6.8(@swc/helpers@0.5.23))(@vue/language-core@3.3.11)(rolldown@1.2.4)(supports-color@7.2.0)(typescript@6.0.3)(vite@8.2.2(@types/node@24.13.3)(jiti@2.7.0)(yaml@2.9.0)) - packages/comment-widget: + comment-widget: dependencies: '@emoji-mart/data': specifier: ^1.2.1 @@ -307,13 +307,13 @@ importers: specifier: ^5.0.0 version: 5.0.0(@types/node@24.13.3)(@vitest/browser-playwright@5.0.0)(@vitest/ui@5.0.0)(vite@8.2.2(@types/node@24.13.3)(jiti@2.7.0)(yaml@2.9.0)) - packages/example: + example: dependencies: '@halo-dev/comment-widget': specifier: workspace:* version: link:../comment-widget - packages/ui: + ui: dependencies: '@halo-dev/comment-widget': specifier: workspace:* @@ -353,7 +353,7 @@ importers: specifier: ^3.3.7 version: 3.3.11(typescript@6.0.3) - packages/widget: + widget: dependencies: '@halo-dev/comment-widget': specifier: workspace:* @@ -2307,9 +2307,6 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magic-string@1.2.0: - resolution: {integrity: sha512-ptco+HFxTLgjafSLim2LojBSwfg5feBjd+SqyiwdGkzC38UPdZy3zgrHMI2CoTf5fJL38tbHMYWVzIH8BxGqJw==} - magic-string@1.3.1: resolution: {integrity: sha512-rm91zr2Ou+XueDTohjQQjdQEcYM6zVi8KVUCG8Ec3vHwUEKrhSdCNyfuIywkA6hcCAteIn0ZOtAHA6eGpiX+Pg==} @@ -4096,7 +4093,7 @@ snapshots: chokidar: 5.0.0 colorette: 2.0.20 consola: 3.4.2 - magic-string: 1.2.0 + magic-string: 1.3.1 pathe: 2.0.3 perfect-debounce: 2.1.0 tinyglobby: 0.2.17 @@ -4180,7 +4177,7 @@ snapshots: '@unocss/rule-utils@66.8.0': dependencies: '@unocss/core': 66.8.0 - magic-string: 1.2.0 + magic-string: 1.3.1 '@unocss/transformer-attributify-jsx@66.8.0': dependencies: @@ -4209,7 +4206,7 @@ snapshots: '@unocss/core': 66.8.0 '@unocss/inspector': 66.8.0 chokidar: 5.0.0 - magic-string: 1.2.0 + magic-string: 1.3.1 pathe: 2.0.3 tinyglobby: 0.2.17 unplugin-utils: 0.3.2 @@ -5034,10 +5031,6 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.6.0 - magic-string@1.2.0: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - magic-string@1.3.1: dependencies: '@jridgewell/sourcemap-codec': 1.6.0 diff --git a/pnpm-workspace.yaml b/packages/pnpm-workspace.yaml similarity index 66% rename from pnpm-workspace.yaml rename to packages/pnpm-workspace.yaml index 52362f01..1562c52b 100644 --- a/pnpm-workspace.yaml +++ b/packages/pnpm-workspace.yaml @@ -1,5 +1,8 @@ packages: - - packages/** + - comment-widget + - example + - ui + - widget allowBuilds: core-js: true esbuild: true diff --git a/tsconfig.json b/packages/tsconfig.json similarity index 100% rename from tsconfig.json rename to packages/tsconfig.json diff --git a/packages/ui/vite.config.mjs b/packages/ui/vite.config.mjs index cbd4f6e9..9f6c7c34 100644 --- a/packages/ui/vite.config.mjs +++ b/packages/ui/vite.config.mjs @@ -2,7 +2,7 @@ import path from 'node:path'; import { viteConfig } from '@halo-dev/ui-plugin-bundler-kit/vite'; const MANIFEST_PATH = '../../src/main/resources/plugin.yaml'; -const OUT_DIR_PROD = '../../src/main/resources/ui'; +const OUT_DIR_PROD = 'build/dist'; const OUT_DIR_DEV = '../../build/resources/main/ui'; export default viteConfig({ diff --git a/packages/widget/rslib.config.mjs b/packages/widget/rslib.config.mjs index 7b8d763c..d6a85ecf 100644 --- a/packages/widget/rslib.config.mjs +++ b/packages/widget/rslib.config.mjs @@ -26,9 +26,7 @@ export default defineConfig({ }, publicPath: `/plugins/${PLUGIN_NAME}/assets/static/`, distPath: { - root: fileURLToPath( - new URL('../../src/main/resources/static', import.meta.url) - ), + root: fileURLToPath(new URL('./build/dist', import.meta.url)), }, }, }); diff --git a/packages/widget/tsconfig.json b/packages/widget/tsconfig.json index 596e2cf7..3cf966d7 100644 --- a/packages/widget/tsconfig.json +++ b/packages/widget/tsconfig.json @@ -1,4 +1,4 @@ { - "extends": "../../tsconfig.json", + "extends": "../tsconfig.json", "include": ["src"] } diff --git a/settings.gradle b/settings.gradle index 2ad24104..78b902ed 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,2 @@ rootProject.name = 'plugin-comment-widget' +include 'packages'