chore: 版本规范落地——本次发布定版 v1.2.0(基线为线上 v1.1.5),上传脚本版本号以 manifest 为唯一事实来源,新增 docs/版本规则.md
This commit is contained in:
+3
-1
@@ -1,6 +1,8 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## v1.3.0(2026-09-12)星图点亮体系重构
|
## v1.2.0(2026-09-13)星图点亮体系重构
|
||||||
|
|
||||||
|
- **登录修复**:微信一键登录恢复(Docker 迁移环境变量补齐 + 容器网络修复);趋势页筛选按钮单行紧凑化、产品图标修复
|
||||||
|
|
||||||
- **详情页修复**:正文按段落渲染,71 条知识不再"暂无内容"
|
- **详情页修复**:正文按段落渲染,71 条知识不再"暂无内容"
|
||||||
- **读后检测**:AI 批量生成 36 道检测题,服务端判题,答对点亮星球(点亮进度/streak 入档案)
|
- **读后检测**:AI 批量生成 36 道检测题,服务端判题,答对点亮星球(点亮进度/streak 入档案)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "宇之然AI维度",
|
"name": "宇之然AI维度",
|
||||||
"appid": "wxdad62baf4ccd09e3",
|
"appid": "wxdad62baf4ccd09e3",
|
||||||
"versionName": "1.3.0",
|
"versionName": "1.2.0",
|
||||||
"versionCode": "100",
|
"versionCode": "100",
|
||||||
"description": "AI 知识探索社区 — 从5个维度系统理解人工智能",
|
"description": "AI 知识探索社区 — 从5个维度系统理解人工智能",
|
||||||
"uni-app": {
|
"uni-app": {
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ import { knowledgeApi, aiChatApi } from '@/utils/api'
|
|||||||
import { DIMENSIONS } from '@/utils/dimensions'
|
import { DIMENSIONS } from '@/utils/dimensions'
|
||||||
import AppIcon from '@/components/AppIcon.vue'
|
import AppIcon from '@/components/AppIcon.vue'
|
||||||
|
|
||||||
const VERSION = '1.3.0'
|
const VERSION = '1.2.0'
|
||||||
const SUB_GUEST = '游客 · 点亮进度保存在本机,登录后同步'
|
const SUB_GUEST = '游客 · 点亮进度保存在本机,登录后同步'
|
||||||
const SUB_USER = '已点亮 {n} 颗星球 · 连续 {d} 天'
|
const SUB_USER = '已点亮 {n} 颗星球 · 连续 {d} 天'
|
||||||
const PLAN_FREE = '✦ 免费版'
|
const PLAN_FREE = '✦ 免费版'
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
# 版本号规则(宇之然AI维度 小程序/H5)
|
||||||
|
|
||||||
|
> 格式:`主版本.次版本.修订号`(如 `1.2.0`),线上已发布版本为递增基线,**不跳号**。
|
||||||
|
|
||||||
|
## 递增规则
|
||||||
|
|
||||||
|
| 位 | 何时 +1 | 例子 |
|
||||||
|
|---|---|---|
|
||||||
|
| **主版本** X | 产品形态重构、世界观/信息架构大改、含不兼容数据迁移 | 点亮体系之后若做"维度2.0"社区重构 → `2.0.0` |
|
||||||
|
| **次版本** Y | 新功能模块、新页面、成组的体验升级 | 星图点亮体系(v1.1.5 → `1.2.0`);后续新增周挑战 → `1.3.0` |
|
||||||
|
| **修订号** Z | bug 修复、文案/样式微调、配置变更、性能优化 | 登录修复+筛选按钮 → `1.2.1` |
|
||||||
|
|
||||||
|
**判断口诀**:改 bug 不加功能 → 只动尾号;加功能不改架构 → 动次版本;连架构带数据一起变 → 动主版本。
|
||||||
|
|
||||||
|
## 执行约束(防漂移)
|
||||||
|
|
||||||
|
1. **唯一事实来源**:`client/src/manifest.json` 的 `versionName`。发版前先改它。
|
||||||
|
2. 页面内展示的版本号(如"我的"页)与 `CHANGELOG.md` 条目同步更新为同一版本。
|
||||||
|
3. 上传脚本 `scripts/upload-wx.js` **自动读取 manifest 版本号**;`--version` 显式传参必须与 manifest 完全一致,否则拒绝上传。
|
||||||
|
4. 一次提审对应一个版本号;提审被拒后修改重传**仍用同一版本号**(微信平台以最后一次上传为准),通过并发布后才递增。
|
||||||
|
5. 版本号只从"线上已发布版"递增,与中间上传但未发布的版本无关。
|
||||||
|
|
||||||
|
## 历史版本对照
|
||||||
|
|
||||||
|
| 版本 | 状态 | 内容 |
|
||||||
|
|---|---|---|
|
||||||
|
| 1.1.5 | 已发布(线上) | 分享优化+下拉刷新+触感反馈+SEO 路由 |
|
||||||
|
| 1.2.0 | 待提审 | 星图点亮体系重构(详情页修复/读后检测/游客问答/维度精灵/深色模式/登录与筛选修复) |
|
||||||
+45
-4
@@ -1,10 +1,51 @@
|
|||||||
|
/**
|
||||||
|
* 微信小程序上传脚本
|
||||||
|
*
|
||||||
|
* 用法:
|
||||||
|
* node scripts/upload-wx.js # 版本号自动取 client/src/manifest.json 的 versionName
|
||||||
|
* node scripts/upload-wx.js --desc "修复描述"
|
||||||
|
* node scripts/upload-wx.js --version 1.2.1 # 必须与 manifest 一致,否则拒绝上传
|
||||||
|
*
|
||||||
|
* 版本规则见 docs/版本规则.md:
|
||||||
|
* 主版本=产品形态重构;次版本=新功能模块;修订号=修复与微调
|
||||||
|
*/
|
||||||
const ci = require('miniprogram-ci');
|
const ci = require('miniprogram-ci');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|
||||||
|
function parseArgs(argv) {
|
||||||
|
const out = {};
|
||||||
|
for (let i = 0; i < argv.length; i++) {
|
||||||
|
const a = argv[i];
|
||||||
|
if (a.startsWith('--')) {
|
||||||
|
const key = a.slice(2);
|
||||||
|
const next = argv[i + 1];
|
||||||
|
if (next && !next.startsWith('--')) { out[key] = next; i++; }
|
||||||
|
else out[key] = true;
|
||||||
|
} else {
|
||||||
|
// 兼容位置参数:第一个是版本,第二个是描述
|
||||||
|
if (out.version === undefined) out.version = a;
|
||||||
|
else if (out.desc === undefined) out.desc = a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
const version = process.argv[2] || '1.0.0';
|
const args = parseArgs(process.argv.slice(2));
|
||||||
const desc = process.argv[3] || 'default';
|
const manifest = JSON.parse(
|
||||||
|
fs.readFileSync(path.resolve(__dirname, '../client/src/manifest.json'), 'utf-8')
|
||||||
|
);
|
||||||
|
const manifestVersion = manifest.versionName;
|
||||||
|
|
||||||
|
// 版本号唯一事实来源是 manifest.json;显式传参必须一致(防止包与元数据漂移)
|
||||||
|
if (args.version && args.version !== manifestVersion) {
|
||||||
|
console.log(`ERROR: --version ${args.version} 与 manifest.json versionName ${manifestVersion} 不一致。版本号请改 manifest.json(唯一事实来源)。`);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const version = manifestVersion;
|
||||||
|
const desc = args.desc || 'release';
|
||||||
const projectPath = path.resolve(__dirname, '../client/dist/build/mp-weixin');
|
const projectPath = path.resolve(__dirname, '../client/dist/build/mp-weixin');
|
||||||
|
|
||||||
const project = new ci.Project({
|
const project = new ci.Project({
|
||||||
@@ -16,7 +57,7 @@ const fs = require('fs');
|
|||||||
});
|
});
|
||||||
|
|
||||||
console.log('START_UPLOAD');
|
console.log('START_UPLOAD');
|
||||||
console.log('version=' + version + ' desc=' + desc);
|
console.log(`version=${version} desc=${desc}`);
|
||||||
|
|
||||||
const uploadResult = await ci.upload({
|
const uploadResult = await ci.upload({
|
||||||
project,
|
project,
|
||||||
@@ -31,4 +72,4 @@ const fs = require('fs');
|
|||||||
})().catch(err => {
|
})().catch(err => {
|
||||||
console.log('ERROR:' + err.message);
|
console.log('ERROR:' + err.message);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user