Ver código fonte

wip: 自动设置tag开发中

vera_min 1 ano atrás
pai
commit
7ee07e902e
5 arquivos alterados com 142 adições e 110 exclusões
  1. 0 109
      package.json
  2. 4 0
      public/version.json
  3. 117 0
      src/updateVersion.mjs
  4. 16 1
      src/views/login/index.vue
  5. 5 0
      yarn.lock

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 109
package.json


+ 4 - 0
public/version.json

@@ -0,0 +1,4 @@
+{
+  "version": "v1.6.1",
+  "updateTime": "2024-05-15 10:44:54"
+}

+ 117 - 0
src/updateVersion.mjs

@@ -0,0 +1,117 @@
+import dayjs from 'dayjs';
+import { exec } from 'child_process';
+import semver from 'semver';
+
+import { readFileSync, writeFileSync } from 'fs';
+
+// 初始化数据
+const packageFile = './package.json';
+const versionFile = './public/version.json';
+
+
+/**
+ * 自动打标签
+ */
+autoTagVersion();
+/**
+ * 撤销标签
+ */
+// revertTag('v1.6.1')
+
+/**
+ * 获取最近的标签
+ */
+// getLatestVersion()
+
+
+/**
+ * 写入json文件
+ * @param {*} version 
+ * @param {*} fileDirName 
+ */
+function writeJson(version, fileDirName) {
+	try {
+		writeFileSync(fileDirName, JSON.stringify(version), { flag: 'w+', encoding: 'utf-8' });
+		console.log(`-> 写入 version.json 成功`);
+
+	} catch (err) {
+		console.log(`-> 写入 version.json 失败: `, err);
+		throw err;
+	}
+}
+
+/**
+ * 获取最新的版本号
+ * @returns 
+ */
+function getLatestVersion() {
+	return new Promise((resolve, reject) => {
+		return exec('git describe --tags `git rev-list --tags --max-count=1`', (err, stdout, stderr) => {
+			if (err) {
+				console.error("获取版本号失败:", err);
+				reject()
+			}
+			console.log("最新版本号:", stdout)
+			resolve(stdout.trim())
+		});
+	});
+}
+
+/**
+ * 根据最新版本号来推荐下一个版本号
+ * @param {*} latestVersion 
+ * @returns 
+ */
+function suggestNextVersion(latestVersion) {
+	const cleanVersion = semver.clean(latestVersion);
+	if (cleanVersion) {
+		return semver.inc(cleanVersion, 'patch'); // 或者 'minor' 或者 'major' 根据需要
+	}
+	return '1.0.0';
+}
+
+/**
+ * 打上新的版本号 tag
+ * @param {*} version 
+ */
+function createNewTag(version) {
+	exec(`git tag -a ${version} -m "Release version ${version}"`, (err) => {
+		if (err) {
+			console.error(err);
+		} else {
+			getLatestVersion()
+			console.log(`Tag ${version} created successfully.`);
+		}
+	});
+}
+
+/**
+ * 撤销某一个版本号的打版本号操作
+ * @param {*} version 
+ */
+function revertTag(version) {
+	exec(`git tag -d ${version}`, (err) => {
+		if (err) {
+			console.error(err);
+		} else {
+			console.log(`Tag ${version} reverted successfully.`);
+		}
+	});
+}
+
+// 主函数
+function autoTagVersion() {
+	getLatestVersion().then((latestVersion) => {
+		const nextVersion = 'v'+suggestNextVersion(latestVersion);
+		createNewTag(nextVersion);
+		const content = readFileSync(packageFile, 'utf-8');
+		const packageInfo = JSON.parse(content);
+		packageInfo['version'] = nextVersion
+		packageInfo['updateTime'] = dayjs().format('YYYY-MM-DD HH:mm:ss')
+		writeJson(packageInfo, packageFile);
+		writeJson({
+			version: nextVersion,
+			updateTime: dayjs().format('YYYY-MM-DD HH:mm:ss')
+		}, versionFile);
+	});
+}

+ 16 - 1
src/views/login/index.vue

@@ -9,7 +9,12 @@
 			<el-image class="img" :src="sysinfo.systemLoginPIC" />
 			<span class="text" v-if="sysinfo.buildTime">{{ sysinfo.buildVersion }} </span>
 			<span class="text" v-if="sysinfo.buildTime">{{ dayjs(sysinfo.buildTime).format('YYYY-MM-DD HH:mm:ss') }}</span>
+			<br />
+			<span class="text" v-if="packageInfo">前端版本:</span>
+			<span class="text" v-if="packageInfo">{{ packageInfo.version }} </span>
+			<span class="text" v-if="packageInfo">{{ packageInfo.updateTime }}</span>
 		</div>
+		{{getFrontendVersion}}
 		<div class="part">
 			<div class="title">登录</div>
 			<Account />
@@ -26,7 +31,7 @@ import { Sunny, Moon } from '@element-plus/icons-vue';
 import dayjs from 'dayjs';
 import CloseFull from '/@/layout/navBars/breadcrumb/closeFull.vue';
 import api from '/@/api/system';
-
+import PackageJson from '../../../public/version.json';
 // 定义接口来定义对象的类型
 interface LoginState {
 	tabsActiveName: string;
@@ -58,6 +63,7 @@ export default defineComponent({
 		api.sysinfo().then((res: any) => {
 			this.sysinfo = res
 		}).finally(() => this.showImg = true)
+		
 	},
 	setup() {
 		const store = useStore();
@@ -81,11 +87,20 @@ export default defineComponent({
 				document.querySelector('html')!.className = ''
 			}
 		};
+		
+		/**
+		 * 获取版本信息
+		 */
+		const packageInfo = computed(() => {
+			return PackageJson;
+		});
+
 
 		return {
 			onAddDarkChange,
 			logoMini,
 			getThemeConfig,
+			packageInfo,
 			...toRefs(state),
 		};
 	},

+ 5 - 0
yarn.lock

@@ -2607,6 +2607,11 @@ semver@^7.3.5, semver@^7.3.7:
   dependencies:
     lru-cache "^6.0.0"
 
+semver@^7.6.2:
+  version "7.6.2"
+  resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13"
+  integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==
+
 shebang-command@^2.0.0:
   version "2.0.0"
   resolved "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz"

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff