@@ -470,6 +470,73 @@ configure(subprojects) {
470470}
471471// endregion Maven
472472
473+ // region updateVersion
474+ /* *
475+ * 以 gradle.properties 中的 projectVersion 为单一来源,同步以下文件:
476+ * 1. package.json 的 "version" 字段
477+ * 2. docs/src 中 Maven/Gradle 依赖版本号(仅含 io.github.hylexus.xtream 坐标的)
478+ * 跳过 release-notes/ 目录(历史版本标题保留不动)。
479+ */
480+ val semverRegex = Regex (""" \d+\.\d+\.\d+(-[a-zA-Z]\w*(\.\w+)*)?""" )
481+
482+ tasks.register(" updateVersion" ) {
483+ group = " release"
484+ description = " 同步 projectVersion 到 package.json 和文档中的依赖版本号(不含 release-notes)"
485+
486+ doLast {
487+ val newVersion = xtreamConfig.projectVersion.trim()
488+ println (" === updateVersion: $newVersion ===" )
489+
490+ // 1. package.json —— 更新 "version" 字段
491+ fileTree(projectDir) {
492+ include(" **/package.json" )
493+ exclude(" **/node_modules/**" )
494+ }.forEach { pkg ->
495+ val text = pkg.readText()
496+ val updated = text.replace(
497+ Regex (""" "version":\s*"\d+\.\d+\.\d+(-[a-zA-Z]\w*(\.\w+)*)?""" + " \" " ),
498+ " \" version\" : \" $newVersion \" "
499+ )
500+ if (updated != text) {
501+ pkg.writeText(updated)
502+ println (" [package.json] ${relativePath(pkg)} " )
503+ }
504+ }
505+
506+ // 2. docs 中的版本号 —— 仅替换项目自身 Maven/Gradle 依赖版本
507+ fileTree(" $projectDir /docs/src" ) {
508+ include(" **/*.md" )
509+ exclude(" **/release-notes/**" , " **/node_modules/**" )
510+ }.forEach { doc ->
511+ val text = doc.readText()
512+ var changed = false
513+
514+ // Maven: <version>X.Y.Z</version> 仅当前面有项目 groupId 时替换
515+ val afterMaven = text.replace(
516+ Regex (
517+ """ (io\.github\.hylexus\.xtream[\w-]*[\s\S]{0,300}?<version>)$semverRegex (</version>)""" ,
518+ setOf (RegexOption .DOT_MATCHES_ALL )
519+ )
520+ ) { " ${it.groupValues[1 ]}$newVersion${it.groupValues[4 ]} " }
521+ if (afterMaven != text) changed = true
522+
523+ // Gradle: io.github.hylexus.xtream:artifactId:X.Y.Z
524+ val afterGradle = afterMaven.replace(
525+ Regex (" (io\\ .github\\ .hylexus\\ .xtream:[\\ w-]+:)$semverRegex " )
526+ ) { " ${it.groupValues[1 ]}$newVersion " }
527+ if (afterGradle != afterMaven) changed = true
528+
529+ if (changed) {
530+ doc.writeText(afterGradle)
531+ println (" [docs ] ${relativePath(doc)} " )
532+ }
533+ }
534+
535+ println (" === updateVersion done ===" )
536+ }
537+ }
538+ // endregion updateVersion
539+
473540fun isJavaProject (project : Project ): Boolean {
474541 return project != rootProject
475542 && (
0 commit comments