From 67e0cada00d5d1556c692ba04824b88f10a88b49 Mon Sep 17 00:00:00 2001 From: v-zhangjc9 Date: Wed, 2 Jul 2025 17:29:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(bin):=20=E4=BC=98=E5=8C=96=E6=89=93?= =?UTF-8?q?=E5=8C=85=E8=84=9A=E6=9C=AC=EF=BC=8C=E9=81=87=E5=88=B0=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E4=BF=AE=E6=94=B9=E7=9A=84=E6=A8=A1=E5=9D=97=E5=B0=B1?= =?UTF-8?q?=E8=B7=B3=E8=BF=87=E5=8F=91=E5=B8=83=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + bin/library.js | 37 ++++++++++++++++++++++++++++++++++++- bin/test.js | 3 +++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 bin/test.js diff --git a/.gitignore b/.gitignore index 79ce2f5..dbc0b31 100644 --- a/.gitignore +++ b/.gitignore @@ -110,3 +110,4 @@ Network Trash Folder Temporary Items .apdisk **/temp/ +.build \ No newline at end of file diff --git a/bin/library.js b/bin/library.js index 36b3ad9..c8cd079 100644 --- a/bin/library.js +++ b/bin/library.js @@ -1,5 +1,5 @@ import {$, fetch, fs, glob, os, path, spinner, syncProcessCwd, usePowerShell} from 'zx' -import {isEqual, trim, fileSize} from "licia"; +import {fileSize, isEqual, trim} from "licia"; import md5file from 'md5-file' syncProcessCwd(true) @@ -41,7 +41,38 @@ const millisecondToString = (timestamp) => { return parts.join('') } +const projectRootPath = () => path.dirname(import.meta.dirname) + +export const isModified = async (target) => { + if (!target || !(await fs.exists(target))) { + throw new Error("Target 不存在") + } + let stat = fs.statSync(target) + let currentModifiedTime = stat.mtimeMs + + let buildPath = `${projectRootPath()}/.build` + if (!(await fs.exists(buildPath))) { + fs.mkdirSync(buildPath, {recursive: true}) + } + let modifiedTimeDataPath = `${buildPath}/modified_time.json` + if (!(await fs.exists(modifiedTimeDataPath))) { + fs.writeFileSync(modifiedTimeDataPath, '{}') + } + let modifiedTimeData = JSON.parse(await fs.readFile(modifiedTimeDataPath, 'utf-8')) + let lastModifiedTime = modifiedTimeData[target] + if (lastModifiedTime && isEqual(currentModifiedTime, lastModifiedTime)) { + return false + } + modifiedTimeData[target] = currentModifiedTime + fs.writeFileSync(modifiedTimeDataPath, JSON.stringify(modifiedTimeData, null, 2)) + return true +} + export const run_deploy = async (project) => { + if (!(await isModified(`${projectRootPath()}/${project}`))) { + console.log(`✅ Skip deploy ${project}`) + return + } let output = await spinner( `Deploying project ${project}`, () => $`mvn -pl ${project} clean deploy -D skipTests -s ${maven_setting}` @@ -50,6 +81,10 @@ export const run_deploy = async (project) => { } export const run_deploy_root = async () => { + if (!(await isModified(`${projectRootPath()}/pom.xml`))) { + console.log(`✅ Skip deploy root`) + return + } let output = await spinner( `Deploying root`, () => $`mvn clean deploy -N -D skipTests -s ${maven_setting}` diff --git a/bin/test.js b/bin/test.js new file mode 100644 index 0000000..329db90 --- /dev/null +++ b/bin/test.js @@ -0,0 +1,3 @@ +import {isModified} from './library.js' + +console.log(await isModified('/Users/lanyuanxiaoyao/Project/IdeaProjects/hudi-service/pom.xml')) \ No newline at end of file