This is an automated email from the ASF dual-hosted git repository.
nicholasjiang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-celeborn.git
The following commit(s) were added to refs/heads/main by this push:
new d315ff505 [CELEBORN-1240] Introduce Husky Configuration to Celeborn Web
d315ff505 is described below
commit d315ff5055e72d4793e5d93aa1ea9ce136efcc48
Author: tiny-dust <[email protected]>
AuthorDate: Fri Jan 26 16:23:42 2024 +0800
[CELEBORN-1240] Introduce Husky Configuration to Celeborn Web

### What changes were proposed in this pull request?
- Added Husky to enforce code quality with automated tasks during Git
events.
- Added lint-staged for optimized linting on staged files before each
commit.
### Why are the changes needed?
Enhances code quality.
### Does this PR introduce _any_ user-facing change?
No.
### How was this patch tested?
Local test.
Closes #2250 from tiny-dust/CELEBORN-1240.
Lead-authored-by: tiny-dust <[email protected]>
Co-authored-by: 周顺顺 <[email protected]>
Signed-off-by: SteNicholas <[email protected]>
---
.github/workflows/web_lint.yml | 63 ++++++++
CONTRIBUTING.md | 6 +
dev/reformat | 19 ++-
pom.xml | 1 +
dev/reformat => web/.husky/pre-commit | 14 +-
web/README.md | 4 +
web/package.json | 9 +-
web/pnpm-lock.yaml | 276 ++++++++++++++++++++++++++++++++++
web/pom.xml | 83 ++++++++++
9 files changed, 457 insertions(+), 18 deletions(-)
diff --git a/.github/workflows/web_lint.yml b/.github/workflows/web_lint.yml
new file mode 100644
index 000000000..babb61502
--- /dev/null
+++ b/.github/workflows/web_lint.yml
@@ -0,0 +1,63 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+name: Lint Check for Web
+
+on:
+ push:
+ branches:
+ - main
+ - branch-*
+ pull_request:
+ branches:
+ - main
+ - branch-*
+
+concurrency:
+ group: style-${{ github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: pnpm/action-setup@v2
+ with:
+ version: 8
+
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ # When updating node and pnpm version, also need to update the version in
`web/pom.xml`
+ - name: Use Node.js v20.11.0
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20.11.0
+
+ - name: Use pnpm v8.14.3
+ uses: pnpm/action-setup@v2
+ with:
+ version: 8.14.3
+
+ - name: Install dependencies
+ run: pnpm install
+ working-directory: ./web
+
+ - name: Lint and format
+ run: pnpm run lint
+ working-directory: ./web
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 75aa28fbd..3b1b835b9 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -8,6 +8,12 @@ This project uses check-style plugins. Run some checks before
you create a new p
dev/reformat
```
+Meanwhile, run some checks of web with changes of web module before you create
a new pull request.
+
+```shell
+dev/reformat --web
+```
+
If you have changed configuration, run following command to refresh docs.
```shell
UPDATE=1 build/mvn clean test -pl common -am -Dtest=none
-DwildcardSuites=org.apache.celeborn.ConfigurationSuite
diff --git a/dev/reformat b/dev/reformat
index 0b30a3776..9c79b31a8 100755
--- a/dev/reformat
+++ b/dev/reformat
@@ -19,10 +19,15 @@
set -x
PROJECT_DIR="$(cd "`dirname "$0"`/.."; pwd)"
-${PROJECT_DIR}/build/mvn spotless:apply -Pflink-1.14
-${PROJECT_DIR}/build/mvn spotless:apply -Pflink-1.15
-${PROJECT_DIR}/build/mvn spotless:apply -Pflink-1.17
-${PROJECT_DIR}/build/mvn spotless:apply -Pflink-1.18
-${PROJECT_DIR}/build/mvn spotless:apply -Pspark-2.4
-${PROJECT_DIR}/build/mvn spotless:apply -Pspark-3.3
-${PROJECT_DIR}/build/mvn spotless:apply -Pmr
+
+if [ "$1" == "--web" ]; then
+ ${PROJECT_DIR}/build/mvn clean install -pl web
+else
+ ${PROJECT_DIR}/build/mvn spotless:apply -Pflink-1.14
+ ${PROJECT_DIR}/build/mvn spotless:apply -Pflink-1.15
+ ${PROJECT_DIR}/build/mvn spotless:apply -Pflink-1.17
+ ${PROJECT_DIR}/build/mvn spotless:apply -Pflink-1.18
+ ${PROJECT_DIR}/build/mvn spotless:apply -Pspark-2.4
+ ${PROJECT_DIR}/build/mvn spotless:apply -Pspark-3.3
+ ${PROJECT_DIR}/build/mvn spotless:apply -Pmr
+fi
diff --git a/pom.xml b/pom.xml
index 7880448b7..c784b0888 100644
--- a/pom.xml
+++ b/pom.xml
@@ -36,6 +36,7 @@
<module>service</module>
<module>master</module>
<module>worker</module>
+ <module>web</module>
</modules>
<distributionManagement>
diff --git a/dev/reformat b/web/.husky/pre-commit
similarity index 64%
copy from dev/reformat
copy to web/.husky/pre-commit
index 0b30a3776..6584a572b 100755
--- a/dev/reformat
+++ b/web/.husky/pre-commit
@@ -1,4 +1,3 @@
-#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
@@ -16,13 +15,8 @@
# limitations under the License.
#
-set -x
+#!/usr/bin/env sh
-PROJECT_DIR="$(cd "`dirname "$0"`/.."; pwd)"
-${PROJECT_DIR}/build/mvn spotless:apply -Pflink-1.14
-${PROJECT_DIR}/build/mvn spotless:apply -Pflink-1.15
-${PROJECT_DIR}/build/mvn spotless:apply -Pflink-1.17
-${PROJECT_DIR}/build/mvn spotless:apply -Pflink-1.18
-${PROJECT_DIR}/build/mvn spotless:apply -Pspark-2.4
-${PROJECT_DIR}/build/mvn spotless:apply -Pspark-3.3
-${PROJECT_DIR}/build/mvn spotless:apply -Pmr
+. "$(dirname -- "$0")/_/husky.sh"
+
+cd web && pnpm run lint:lint-staged
diff --git a/web/README.md b/web/README.md
index 6d400b0c7..ca0cd4ae7 100644
--- a/web/README.md
+++ b/web/README.md
@@ -44,5 +44,9 @@ pnpm build
### Lint with [ESLint](https://eslint.org/)
```sh
+# Whole project
pnpm lint
+
+# Staged files for commit
+pnpm lint:lint-staged
```
diff --git a/web/package.json b/web/package.json
index 2ef0011b7..25b4e31ff 100644
--- a/web/package.json
+++ b/web/package.json
@@ -10,7 +10,9 @@
"build-only": "vite build",
"type-check": "vue-tsc --build --force",
"lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix
--ignore-path .gitignore",
- "format": "prettier --write src/"
+ "lint:lint-staged": "lint-staged",
+ "format": "prettier --write src/",
+ "prepare": "cd ../ && husky install web/.husky"
},
"dependencies": {
"pinia": "^2.1.7",
@@ -28,6 +30,8 @@
"@vue/tsconfig": "^0.5.0",
"eslint": "^8.49.0",
"eslint-plugin-vue": "^9.17.0",
+ "husky": "^8.0.0",
+ "lint-staged": "^15.2.0",
"naive-ui": "^2.37.3",
"npm-run-all2": "^6.1.1",
"prettier": "^3.0.3",
@@ -37,5 +41,8 @@
"unplugin-vue-components": "^0.26.0",
"vite": "^5.0.10",
"vue-tsc": "^1.8.25"
+ },
+ "lint-staged": {
+ "*.{vue,js,jsx,cjs,mjs,ts,tsx,cts,mts}": "eslint --fix --ignore-path
.gitignore --config .eslintrc.cjs"
}
}
diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index 34fbffe67..1dc9c833b 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -17,6 +17,10 @@
lockfileVersion: '6.0'
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
dependencies:
pinia:
specifier: ^2.1.7
@@ -59,6 +63,12 @@ devDependencies:
eslint-plugin-vue:
specifier: ^9.17.0
version: 9.17.0([email protected])
+ husky:
+ specifier: ^8.0.0
+ version: 8.0.3
+ lint-staged:
+ specifier: ^15.2.0
+ version: 15.2.0
naive-ui:
specifier: ^2.37.3
version: 2.37.3([email protected])
@@ -1285,11 +1295,23 @@ packages:
uri-js: 4.4.1
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==}
+ engines: {node: '>=14.16'}
+ dependencies:
+ type-fest: 3.13.1
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
+ engines: {node: '>=12'}
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
engines: {node: '>=4'}
@@ -1405,6 +1427,11 @@ packages:
supports-color: 7.2.0
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
engines: {node: '>= 8.10.0'}
@@ -1420,6 +1447,21 @@ packages:
fsevents: 2.3.3
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ restore-cursor: 4.0.0
+ dev: true
+
+ /[email protected]:
+ resolution: {integrity:
sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
+ engines: {node: '>=18'}
+ dependencies:
+ slice-ansi: 5.0.0
+ string-width: 7.1.0
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
dependencies:
@@ -1441,6 +1483,15 @@ packages:
resolution: {integrity:
sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
+ dev: true
+
+ /[email protected]:
+ resolution: {integrity:
sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
+ engines: {node: '>=16'}
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==}
dev: true
@@ -1535,6 +1586,10 @@ packages:
resolution: {integrity:
sha512-7BvxzXrHFliyQ1oZc6NRMjyEaKOO1Ma1NY98sFZofogWlm+klLWSgrDw7EhatiMgi4R4NV+iWxDdxuIKXtPbOw==}
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==}
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
engines: {node: '>=0.12'}
@@ -1746,10 +1801,29 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==}
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
+ engines: {node: '>=16.17'}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 8.0.1
+ human-signals: 5.0.0
+ is-stream: 3.0.0
+ merge-stream: 2.0.0
+ npm-run-path: 5.2.0
+ onetime: 6.0.0
+ signal-exit: 4.1.0
+ strip-final-newline: 3.0.0
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
dev: true
@@ -1839,6 +1913,16 @@ packages:
engines: {node: '>=6.9.0'}
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==}
+ engines: {node: '>=18'}
+ dev: true
+
+ /[email protected]:
+ resolution: {integrity:
sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
+ engines: {node: '>=16'}
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
@@ -1931,6 +2015,17 @@ packages:
engines: {node: '>=8'}
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
+ engines: {node: '>=16.17.0'}
+ dev: true
+
+ /[email protected]:
+ resolution: {integrity:
sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==}
+ engines: {node: '>=14'}
+ hasBin: true
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==}
engines: {node: '>= 4'}
@@ -1986,6 +2081,18 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /[email protected]:
+ resolution: {integrity:
sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
+ engines: {node: '>=18'}
+ dependencies:
+ get-east-asian-width: 1.2.0
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
@@ -2003,6 +2110,11 @@ packages:
engines: {node: '>=8'}
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
dev: true
@@ -2065,11 +2177,47 @@ packages:
type-check: 0.4.0
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==}
+ engines: {node: '>=14'}
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-TFZzUEV00f+2YLaVPWBWGAMq7So6yQx+GG8YRMDeOEIf95Zn5RyiLMsEiX4KTNl9vq/w+NqRJkLA1kPIo15ufQ==}
+ engines: {node: '>=18.12.0'}
+ hasBin: true
+ dependencies:
+ chalk: 5.3.0
+ commander: 11.1.0
+ debug: 4.3.4
+ execa: 8.0.1
+ lilconfig: 3.0.0
+ listr2: 8.0.0
+ micromatch: 4.0.5
+ pidtree: 0.6.0
+ string-argv: 0.3.2
+ yaml: 2.3.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /[email protected]:
+ resolution: {integrity:
sha512-u8cusxAcyqAiQ2RhYvV7kRKNLgUvtObIbhOX2NCXqvp1UU32xIg5CT22ykS2TPKJXZWJwtK3IKLiqAGlGNE+Zg==}
+ engines: {node: '>=18.0.0'}
+ dependencies:
+ cli-truncate: 4.0.0
+ colorette: 2.0.20
+ eventemitter3: 5.0.1
+ log-update: 6.0.0
+ rfdc: 1.3.1
+ wrap-ansi: 9.0.0
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
engines: {node: '>=14'}
@@ -2102,6 +2250,17 @@ packages:
resolution: {integrity:
sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==}
+ engines: {node: '>=18'}
+ dependencies:
+ ansi-escapes: 6.2.0
+ cli-cursor: 4.0.0
+ slice-ansi: 7.1.0
+ strip-ansi: 7.1.0
+ wrap-ansi: 9.0.0
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==}
engines: {node: 14 || >=16.14}
@@ -2131,6 +2290,10 @@ packages:
engines: {node: '>= 0.10.0'}
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
@@ -2144,6 +2307,16 @@ packages:
picomatch: 2.3.1
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /[email protected]:
+ resolution: {integrity:
sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
+ engines: {node: '>=12'}
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
@@ -2243,6 +2416,13 @@ packages:
shell-quote: 1.8.1
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ path-key: 4.0.0
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
dependencies:
@@ -2255,6 +2435,20 @@ packages:
wrappy: 1.0.2
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+ dependencies:
+ mimic-fn: 2.1.0
+ dev: true
+
+ /[email protected]:
+ resolution: {integrity:
sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ mimic-fn: 4.0.0
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
engines: {node: '>= 0.8.0'}
@@ -2318,6 +2512,11 @@ packages:
engines: {node: '>=8'}
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
+ engines: {node: '>=12'}
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
dev: true
@@ -2449,11 +2648,23 @@ packages:
supports-preserve-symlinks-flag: 1.0.0
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==}
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
hasBin: true
@@ -2537,11 +2748,36 @@ packages:
resolution: {integrity:
sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==}
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+ dev: true
+
+ /[email protected]:
+ resolution: {integrity:
sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
engines: {node: '>=8'}
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 4.0.0
+ dev: true
+
+ /[email protected]:
+ resolution: {integrity:
sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
+ engines: {node: '>=18'}
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 5.0.0
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'}
@@ -2568,6 +2804,20 @@ packages:
resolution: {integrity:
sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==}
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
+ engines: {node: '>=0.6.19'}
+ dev: true
+
+ /[email protected]:
+ resolution: {integrity:
sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==}
+ engines: {node: '>=18'}
+ dependencies:
+ emoji-regex: 10.3.0
+ get-east-asian-width: 1.2.0
+ strip-ansi: 7.1.0
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
engines: {node: '>=8'}
@@ -2575,6 +2825,18 @@ packages:
ansi-regex: 5.0.1
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ ansi-regex: 6.0.1
+ dev: true
+
+ /[email protected]:
+ resolution: {integrity:
sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
+ engines: {node: '>=12'}
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
@@ -2957,6 +3219,15 @@ packages:
isexe: 2.0.0
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
+ engines: {node: '>=18'}
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 7.1.0
+ strip-ansi: 7.1.0
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: true
@@ -2974,6 +3245,11 @@ packages:
resolution: {integrity:
sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
dev: true
+ /[email protected]:
+ resolution: {integrity:
sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
+ engines: {node: '>= 14'}
+ dev: true
+
/[email protected]:
resolution: {integrity:
sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
diff --git a/web/pom.xml b/web/pom.xml
new file mode 100644
index 000000000..7695a552d
--- /dev/null
+++ b/web/pom.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one or more
+ ~ contributor license agreements. See the NOTICE file distributed with
+ ~ this work for additional information regarding copyright ownership.
+ ~ The ASF licenses this file to You under the Apache License, Version 2.0
+ ~ (the "License"); you may not use this file except in compliance with
+ ~ the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.celeborn</groupId>
+ <artifactId>celeborn-parent_${scala.binary.version}</artifactId>
+ <version>${project.version}</version>
+ </parent>
+
+ <artifactId>celeborn-web_${scala.binary.version}</artifactId>
+ <packaging>pom</packaging>
+ <name>Celeborn Web</name>
+
+ <properties>
+ <!-- When updating `node.version` and `pnpm.version`, alse need to update
the `node` and `pnpm` versions in `.github/workflows/web_lint.yml` -->
+ <build.node.version>v20.11.0</build.node.version>
+ <build.pnpm.version>8.14.3</build.pnpm.version>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>com.github.eirslett</groupId>
+ <artifactId>frontend-maven-plugin</artifactId>
+ <version>1.15.0</version>
+
+ <executions>
+ <execution>
+ <id>install node and pnpm</id>
+ <goals>
+ <goal>install-node-and-pnpm</goal>
+ </goals>
+ <configuration>
+ <nodeVersion>${build.node.version}</nodeVersion>
+ <pnpmVersion>${build.pnpm.version}</pnpmVersion>
+ <installDirectory>${project.build.directory}</installDirectory>
+ </configuration>
+ </execution>
+
+ <execution>
+ <id>pnpm install</id>
+ <goals>
+ <goal>pnpm</goal>
+ </goals>
+ <phase>generate-resources</phase>
+ <configuration>
+ <arguments>install</arguments>
+ <workingDirectory>${project.build.directory}</workingDirectory>
+ </configuration>
+ </execution>
+
+ <execution>
+ <id>pnpm run lint</id>
+ <goals>
+ <goal>pnpm</goal>
+ </goals>
+ <phase>generate-resources</phase>
+ <configuration>
+ <arguments>run lint</arguments>
+ <workingDirectory>${project.build.directory}</workingDirectory>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>